文件传输通用定义
IO定义
typedef enum { TK_PROTOCOL_AVAPIs = 0, TK_PROTOCOL_RDTAPIs } TKProtocol; typedef enum { TYPE_ALL = 0, TYPE_VIDEO, TYPE_AUDIO, TYPE_IMAGE } FILE_TYPE; typedef enum { IOCTRL_FILEMANAGER_FILE_LIST_REQ = 0x9021, IOCTRL_FILEMANAGER_FILE_LIST_RESP = 0x9022, IOCTRL_FILEMANAGER_FILE_DOWNLOAD_REQ = 0x9023, IOCTRL_FILEMANAGER_FILE_DOWNLOAD_RESP = 0x9024, IOCTRL_FILEMANAGER_FILE_DELETE_REQ = 0x9025, IOCTRL_FILEMANAGER_FILE_DELETE_RESP = 0x9026, IOCTRL_FILEMANAGER_FILE_UPLOAD_REQ = 0x9027, IOCTRL_FILEMANAGER_FILE_UPLOAD_RESP = 0x9028, } IOCTRL_TYPE; typedef struct { unsigned short year; unsigned char month; unsigned char day; unsigned char wday; unsigned char hour; unsigned char minute; unsigned char second; } stDateTime; typedef struct { unsigned int channel; stDateTime begin;//UTC时间 stDateTime end;//UTC时间 int fileType;//参考FILE_TYPE unsigned char reserved[4]; } stFileListReq; typedef struct { char fileName[64]; } stFileInfo; typedef struct { unsigned int iotcChannelId; unsigned int fileIndex; char fileName[64]; unsigned int fileSize; //Byte } stFileInfoEx; typedef struct { uint iotcChanelId; } stChannelInfo; typedef struct { int total;//本次查询总共有多少个文件,如果数量较多,可以分多包发送 int index;//这是第几包 int count;//本包中包含多少文件名 int endflag;//0为非最后一包,1为最后一包 stFileInfo files[0]; } stFileListResp; typedef struct { int count; stFileInfo files[0]; } stFileDownloadReq, stFileDeleteReq, stFileUploadReq; typedef struct{ int protocol;int count; // -1表示fail,否则为本次下载使用的通道数。 stChannelInfo channels[0]; } stFileDownloadResp, stFileUploadResp; typedef struct { int result; } stFileDeleteResp;
AVAPIs帧定义
因为在AVAPIs里面,数据和包头是分开来送的,所以直接填充对应的buffer和framInfo即可,上传下载用的数据包头定义如下:
typedef struct { char fileName[64]; //文件名。 unsigned int fileSize;//文件大小,单位为字节。 unsigned int frmSize;//当前帧大小,单位为字节。 char endFlag; //结束标志位,1为最后一包,其余为0。 char reserved[3]; } FRAMEINFO_FOR_UPLOAD_DOWNLOAD_t;
如果这个通道里面有多个文件需要传输,则最后一个文件的最后一包的endFlag为1,其余为0。
RDTAPIs帧定义
目前RDT的帧定义,分为3部分,分别是数据头,数据,数据尾,具体定义如下:
其中各部分的定义如下:
frmBegin: 4个字节的起始位,必须为"IOTC"。
fileName: 64个字节,填写文件名,需要包含文件的扩展名,比如 "20230101153025_motion.mp4"。
fileSize:4个字节,填写文件大小,单位为字节。
dataLength:4个字节,填写本数据包里面二进制数据的实际大小,单位为字节。
endFlag:1个字节,用以表示本数据包是否此通道内的最后一个文件的最后一包。如果本通道里面有多个文件,则最后一个文件的最后一包置为1,其余为0。
binary data:二进制数据,长度为dataLength。
frmEnd:2个字节,必须为"GC"。