IO定义
IO Type设计:
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"。