海思[Hi3531]onvif协议实现基于gsoap和openssl_代码篇
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串口传输