文件传输通用定义
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"。
