海思[Hi3531]onvif协议实现基于gsoap和openssl_代码篇

海思[Hi3531]onvif协议实现基于gsoap和openssl_代码篇

  • 编写代码
  • Makefile文件编写
  • 烧录程序

onvif的openssl和gsoap的环境搭建可以参考上一篇
海思[Hi3531]onvif协议实现基于gsoap和openssl

编写代码

直接附上main函数代码

int result = 0;
struct soap soap;
soap_init(&soap);
enum xsd__boolean ForceStorage;
//******************************************************************
char * ip;
char Mediaddr[256] = "";
char profile[256] = "";
struct _tds__GetCapabilities            	req;
struct _tds__GetCapabilitiesResponse    	rep;

req.Category = (enum tt__CapabilityCategory *)soap_malloc(&soap, sizeof(int));
//申请4个字节内存
req.__sizeCategory = 1;//元素序列的类型
*(req.Category) = (enum tt__CapabilityCategory)0;//0意味着要获取全部类型信息的枚举


char endpoint[255];
memset(endpoint, '\0', 255);
if (argc > 1)
{
	ip = argv[1];
}
else
{
	ip = "192.168.1.18";
}
sprintf(endpoint, "http://%s/onvif/device_service", ip);
//这里输入想要获取信息的模块的地址
soap_call___tds__GetCapabilities(&soap, endpoint, NULL, &req, &rep);
if (soap.error)
{
	printf("[%s][%d]--->>> soap result: %d, %s, %s\n", __func__, __LINE__,
		soap.error, *soap_faultcode(&soap),
		*soap_faultstring(&soap));
}
else
{
	printf("get capability success\n");
	printf("Mediaddr_XAddr====%s\n", rep.Capabilities->Media->XAddr);
	strcpy(Mediaddr, rep.Capabilities->Media->XAddr);
}
printf("\n");
return result;

Makefile文件编写

Makefile.inc文件内容:
SHELL = /bin/bash
 
CC           := arm-hisiv500-linux-gcc 
CPP          := arm-hisiv500-linux-g++
LD           := arm-hisiv500-linux-ld
AR           := arm-hisiv500-linux-ar
STRIP        := strip

 
CFLAGS += -c -g -Wall -DWITH_DOM -DWITH_OPENSSL -DDEBUG
CFLAGS += $(INCLUDE)
 
# openssl目录名
OPENSSL_DIR = /usr/local/ssl
# 源文件
SOURCES_ONVIF += \
           ../onvif/soapC.c                          \
           ../onvif/soapClient.c                     \
           ../onvif/stdsoap2.c                       \
           ../onvif/wsaapi.c                         \
           ../onvif/dom.c                            \
           ../onvif/mecevp.c                         \
           ../onvif/smdevp.c                         \
           ../onvif/threads.c                        \
           ../onvif/wsseapi.c                        \
	../onvif/duration.c	
 
# 目标文件
OBJECTS_ONVIF := $(patsubst %.c,$(TEMPDIR)%.o,$(filter %.c, $(SOURCES_ONVIF)))
 
# 头文件路径
INCLUDE += -I../onvif/                               \
           -I$(OPENSSL_DIR)/include                  \
 
# 静态库链接OpenSSL
LDLIBS += $(OPENSSL_DIR)/lib/libssl.a                \
          $(OPENSSL_DIR)/lib/libcrypto.a             \
          -ldl -lm                                      \
 
# 链接库(其他)
LDLIBS += -lpthread
 
%.o: %.cpp
	@echo "  CPP     " $@;
	@$(CPP) $(CFLAGS) -c -o $@ $<
 
%.o: %.c
	@echo "  CC      " $@;
	@$(CC) $(CFLAGS) -c -o $@ $<
 
.PHONY: all clean
makefile文件内容:
include Makefile.inc
 
PROGRAM = PTZ
 
SOURCES += myptz.c
 
OBJECTS := $(patsubst %.c,$(TEMPDIR)%.o,$(filter %.c, $(SOURCES)))
 
all: $(OBJECTS_ONVIF) $(OBJECTS_COMM) $(OBJECTS)
	$(CC) -o $(PROGRAM) $(OBJECTS_ONVIF) $(OBJECTS_COMM) $(OBJECTS) $(LDLIBS)
 
clean:
	rm -f $(OBJECTS_ONVIF)
	rm -f $(OBJECTS_COMM)
	rm -f $(OBJECTS)
	rm -f $(PROGRAM)

烧录程序

编译完成后会生成如图执行文件
在这里插入图片描述
如果有网口你可以用nfs文件系统或者tftp传输程序,没的话就用SecureCRT串口传输

你可能感兴趣的:(海思[Hi3531]onvif协议实现基于gsoap和openssl_代码篇)