optical/EMBOS/Users/EmbFunc/operator/filetrans.c
2025-09-04 09:45:08 +08:00

661 lines
18 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#define _IN_TILETRANS_C
#include "filetrans.h"
#include "transdata.h"
#include "exbfiletrans.h"
//------------------------------------------------------
//------------------------------------------------------
//------------------------------------------------------
FileTransCtrl g_fileTransCtrl;
//------------------------------------------------------
//------------------------------------------------------
//------------------------------------------------------
#if (TRANS_DATA_FILE != 0)
int ResetFileList(OperPacket * pPkt)
{
if (pPkt == NULL)
{
return -1;
}
g_datFile.fileIdxMap = pPkt->setFilesList.fileIdxMap;
if (g_datFile.fileIdx == -1)
{
// 如果当前没有选择文件,则文件失效
InvalidDatFile(0);
}
else
{
// 如果当前文件的位图无效,则文件失效
if ((g_datFile.fileIdxMap & (0x01<<g_datFile.fileIdx)) == 0)
{
InvalidDatFile(0);
g_datFile.fileIdx = -1;
}
}
printf("g_datFile.fileIdxMap = 0x%x \r\n",g_datFile.fileIdxMap);
return 0;
}
#endif
//------------------------------------------------------
// 功能: 启动文件传输, 接收上位机传输的数据
// 参数: pPkt 接收到的数据包
// 结果:
// = 0, 成功
// = 1, 失败
int StartReceiveFile(OperPacket * pPkt)
{
int save;
if (pPkt == NULL)
{
return -1;
}
if (1 &&
#if (TRANS_DATA_FILE != 0)
pPkt->packet.vldp.exlen != sizeof(DataFileHead) &&
#endif
pPkt->packet.vldp.exlen != sizeof(AppFileHead) &&
pPkt->packet.vldp.exlen != sizeof(BoardFileHead)&&
1 )
{
return -1;
}
printf("get cmd start receive file\r\n");
InitFileTransCtrl(&g_fileTransCtrl);
// 根据发送的文件类型确定保存方式及保存地址
#if (TRANS_DATA_FILE != 0)
if (pPkt->startTrans.fileType == FILE_TYPE_DAT) // 数据文件
{
#if (FILE_NETWORK == 0)
DataFileHead * pHead;
pHead = (DataFileHead *)(pPkt->packet.vldp.exData);
InitNorSectorManage(); // 初始化norflash扇区管理
// 根据大小存放在sram或norflash中
if (pHead->fileHead.dataSize <= DATA_FILE_SIZE)
{
save = STORAGE_EXSRAM;
}
else
{
save = STORAGE_SRAMANDNOR; // 混合存放
//InitNorSectorManage();
if (pHead->fileHead.dataSize > DATA_FILE_SIZE)
{
NorAllocAndSetUsingFlags(pHead->fileHead.dataSize - DATA_FILE_SIZE);
}
}
#else
save = STORAGE_NETWORK;
#endif
}
else
#endif
if (pPkt->startTrans.fileType == FILE_TYPE_PGM) // 升级文件
{
#if (APP_SAVE_TO == APP_SAVE_NORFLASH)
save = STORAGE_NORFLASH;
#elif (APP_SAVE_TO == APP_SAVE_EXRAM) // 20230523 完善使用外部RAM进行升级
save = STORAGE_EXSRAM;
#elif (APP_SAVE_TO == APP_SAVE_INFLASH)
save = STORAGE_INFLASH;
#endif
InitSaveApp(); // APP升级初始化
}
else if (pPkt->startTrans.fileType == FILE_TYPE_BOARD) // 外围板文件
{
save = STORAGE_TRANS; // 数据转发,不进行存储
}
else if (pPkt->startTrans.fileType == FILE_TYPE_FRAME) // 边框刺绣文件
{
save = STORAGE_SPAREARAM;
}
else
{
printf("not support file\r\n");
return -1;
}
if (save == STORAGE_EXSRAM)
{
#if (TRANS_DATA_FILE != 0)
if (pPkt->startTrans.fileType == FILE_TYPE_DAT) // 数据文件
{
g_datFile.storage = STORAGE_EXSRAM;
g_datFile.fileIdx = g_fileTransCtrl.fileIdx;
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType;
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx;
g_fileTransCtrl.fileId = pPkt->startTrans.fileId;
g_fileTransCtrl.pDatFile = &g_datFile;
g_fileTransCtrl.pAppFile = NULL;
g_datFile.pFileHead = &g_fileHead1;
memcpy((u8*)g_fileTransCtrl.pDatFile->pFileHead, pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pDatFile->pFileHead->fileHead.dataSize+g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk-1)/g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk);
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
// printf("rsv packet num=%d, bitmap len=%d\r\n", g_fileTransCtrl.packetNum, g_fileTransCtrl.lenBmp);
memset(g_fileTransCtrl.rsvBitmap, 0, LEN_RSV_BMP); // 花样接收进度标志位图
g_fileTransCtrl.transflag = TRANS_READY;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
InvalidDatFile(0);
SetNewDatFlag(0, FALSE);
}
else
#endif
// 20230523 完善使用外部RAM进行升级
if (pPkt->startTrans.fileType == FILE_TYPE_PGM) // 升级文件
{
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType;
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx;
g_fileTransCtrl.fileId = pPkt->startTrans.fileId;
g_fileTransCtrl.pDatFile = NULL;
g_fileTransCtrl.pAppFile = &g_appFile;
memcpy(&(g_fileTransCtrl.pAppFile->fileHead), pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pAppFile->fileHead.dataSize+1024-1)/1024); // 只支持1024字节的包
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // 文件接收进度标志位图
g_fileTransCtrl.transflag = TRANS_READY;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
InvalidDatFile(0);
SetNewDatFlag(0, FALSE);
}
}
else if (save == STORAGE_SPAREARAM)
{
if (pPkt->startTrans.fileType == FILE_TYPE_FRAME) // 边框刺绣文件
{
g_datFile.storage = STORAGE_SPAREARAM;
g_datFile.fileIdx = g_fileTransCtrl.fileIdx;
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType;
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx;
g_fileTransCtrl.fileId = pPkt->startTrans.fileId;
g_fileTransCtrl.pDatFile = &g_datFile;
g_fileTransCtrl.pAppFile = NULL;
g_datFile.pFileHead = &g_fileHead2;
memcpy(&(g_fileTransCtrl.pDatFile->pFileHead), pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pDatFile->pFileHead->fileHead.dataSize+g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk-1)/g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk);
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
printf("rsv packet num=%d, bitmap len=%d\r\n", g_fileTransCtrl.packetNum, g_fileTransCtrl.lenBmp);
memset(g_fileTransCtrl.rsvBitmap, 0, LEN_RSV_BMP); // 花样接收进度标志位图
g_fileTransCtrl.transflag = TRANS_READY;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
InvalidDatFile(0);
SetNewDatFlag(0, FALSE);
}
}
else if (save == STORAGE_NORFLASH || save == STORAGE_SRAMANDNOR)
{
#if (TRANS_DATA_FILE != 0)
if (pPkt->startTrans.fileType == FILE_TYPE_DAT) // 数据文件
{
g_datFile.storage = save;
g_datFile.fileIdx = g_fileTransCtrl.fileIdx;
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType;
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx;
g_fileTransCtrl.fileId = pPkt->startTrans.fileId;
g_fileTransCtrl.pDatFile = &g_datFile;
g_fileTransCtrl.pAppFile = NULL;
g_datFile.pFileHead = &g_fileHead1;
memcpy((u8*)g_fileTransCtrl.pDatFile->pFileHead, pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pDatFile->pFileHead->fileHead.dataSize+g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk-1)/g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk);
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // 花样接收进度标志位图
printf("rsv packet num=%d, bitmap len=%d\r\n", g_fileTransCtrl.packetNum, g_fileTransCtrl.lenBmp);
if (1) // 未使用位写1
{
int idx = g_fileTransCtrl.packetNum;
while((idx % 8) != 0)
{
WriteRsvBitmap(idx, 1, &g_fileTransCtrl);
idx++;
}
if (g_fileTransCtrl.lenBmp < LEN_RSV_BMP)
{
memset(&(g_fileTransCtrl.rsvBitmap[g_fileTransCtrl.lenBmp]), 0xff, LEN_RSV_BMP - g_fileTransCtrl.lenBmp); // 花样接收进度标志位图
}
}
g_fileTransCtrl.transflag = TRANS_READY;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
InvalidDatFile(0);
SetNewDatFlag(0, FALSE);
}
else
#endif
if (pPkt->startTrans.fileType == FILE_TYPE_PGM) // 升级文件
{
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType;
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx;
g_fileTransCtrl.fileId = pPkt->startTrans.fileId;
g_fileTransCtrl.pDatFile = NULL;
g_fileTransCtrl.pAppFile = &g_appFile;
memcpy(&(g_fileTransCtrl.pAppFile->fileHead), pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pAppFile->fileHead.dataSize+1024-1)/1024); // 只支持1024字节的包
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // 文件接收进度标志位图
g_fileTransCtrl.transflag = TRANS_READY;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
}
}
else if (save == STORAGE_NETWORK)
{
#if (TRANS_DATA_FILE != 0)
if (pPkt->startTrans.fileType == FILE_TYPE_DAT) // 数据文件
{
g_datFile.storage = STORAGE_NETWORK;
g_datFile.fileIdx = g_fileTransCtrl.fileIdx;
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_REQUEST;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType;
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx;
g_fileTransCtrl.fileId = pPkt->startTrans.fileId;
g_fileTransCtrl.pDatFile = &g_datFile;
g_fileTransCtrl.pAppFile = NULL;
g_datFile.pFileHead = &g_fileHead1;
memcpy((u8*)g_fileTransCtrl.pDatFile->pFileHead, pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pDatFile->pFileHead->fileHead.dataSize+g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk-1)/g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk);
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
memset(g_fileTransCtrl.rsvBitmap, 0xff, LEN_RSV_BMP); // 花样接收进度标志位图,设置为完成状态
printf("rsv packet num=%d, bitmap len=%d\r\n", g_fileTransCtrl.packetNum, g_fileTransCtrl.lenBmp);
memset(&(g_datFile.pDatExCtrl->exbufFlag[0]), 0, sizeof(int)*FILE_EXBUF_NUM); // 数据交换区域清空
g_fileTransCtrl.transflag = TRANS_REQUEST;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
AvalidDatFile(0); // 文件有效
SetNewDatFlag(0, TRUE); // 设置新文件标志
printf("get a new file, saved at network\r\n");
}
#endif
}
else if (save == STORAGE_TRANS) // 数据转发,不做存储
{
if (pPkt->startTrans.fileType == FILE_TYPE_BOARD) // 外围板文件
{
g_fileTransCtrl.transActive = TRANS_NONE;
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
g_fileTransCtrl.fileType = pPkt->startTrans.fileType; // 文件类型,外围板文件
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx; // 文件编号
g_fileTransCtrl.fileId = pPkt->startTrans.fileId; // 文件ID
g_fileTransCtrl.pDatFile = NULL;
g_fileTransCtrl.pAppFile = NULL;
g_fileTransCtrl.pBoardFile = &g_boardFile;
memcpy(&(g_fileTransCtrl.pBoardFile->fileHead), pPkt->packet.vldp.exData, pPkt->packet.vldp.exlen); // 拷贝数据到结构
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pBoardFile->fileHead.dataSize+1024-1)/1024); // 只支持1024字节的包
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // 文件接收进度标志位图
g_fileTransCtrl.transflag = TRANS_READY;
g_fileTransCtrl.transActive = TRANS_ACTIVE;
printf("start exboard update\r\n");
// 升级文件
FileHeadFromOperToCan(FILE_TYPE_PGM, g_fileTransCtrl.pBoardFile);
}
}
return 0;
}
// 请求一个数据块
void RequestADataBlock(int datblockIdx)
{
if (g_fileTransCtrl.pDatFile->storage == STORAGE_NETWORK)
{
if (g_fileTransCtrl.transActive == TRANS_ACTIVE &&
g_fileTransCtrl.transflag == TRANS_REQUEST &&
g_fileTransCtrl.pDatFile->enflag == DATA_VALID &&
1 )
{
if ( (datblockIdx >= 0) &&
((datblockIdx * g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk) < g_fileTransCtrl.pDatFile->pFileHead->fileHead.dataSize) )
{
printf("send request cmd, dbidx=%d\r\n", datblockIdx);
RequestFileData(g_fileTransCtrl.fileType, g_fileTransCtrl.fileIdx, g_fileTransCtrl.fileId, datblockIdx);
}
else
{
printf("datblockIdx=%d, out of range. bytesPerBlk=%d, dataSize=%d\r\n", datblockIdx, g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk, g_fileTransCtrl.pDatFile->pFileHead->fileHead.dataSize);
}
}
else
{
printf("request failed, transActive=0x%x, transflag=%d, enflag=0x%x\r\n", g_fileTransCtrl.transActive, g_fileTransCtrl.transflag, g_fileTransCtrl.pDatFile->enflag);
}
}
}
int CreateFileInfo(OperPacket * pPkt)
{
int rslt;
int idx;
int type;
rslt = 0;
if (pPkt == NULL)
{
return -1;
}
idx = pPkt->getFileInfo.fileIdx;
type = pPkt->getFileInfo.fileType;
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->sendFileInfo.cmdCode = DCMD_SEND_FILE_INFO;
pPkt->sendFileInfo.fileType = type;
pPkt->sendFileInfo.fileIdx = idx;
#if (TRANS_DATA_FILE != 0)
if (type == FILE_TYPE_DAT)
{
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&g_datFile.pFileHead), sizeof(DataFileHead));
}
else
#endif
if (type == FILE_TYPE_PGM)
{
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(g_appFile.fileHead)), sizeof(AppFileHead));
}
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateFileInfo\r\n");
}
return rslt;
}
int CreateTransResult(OperPacket * pPkt)
{
int rslt;
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
if (g_fileTransCtrl.transActive != TRANS_ACTIVE)
{
g_fileTransCtrl.lenBmp = 0;
g_fileTransCtrl.transflag = 0;
}
pPkt->sendTransResult.cmdCode = DCMD_SEND_TRANS_RESULT;
pPkt->sendTransResult.fileId = g_fileTransCtrl.fileId;
pPkt->sendTransResult.active = g_fileTransCtrl.transActive;
pPkt->sendTransResult.result = g_fileTransCtrl.transflag;
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(g_fileTransCtrl.rsvBitmap), g_fileTransCtrl.lenBmp);
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateTransResult\r\n");
}
return rslt;
}
int SavePreProc(void)
{
#if (1)
{
return ReleaseSpace(0);
}
#endif
return -1;
}
int ReceiveFileData(OperPacket * pPkt)
{
if (pPkt == NULL)
{
return -1;
}
if (g_fileTransCtrl.transActive != TRANS_ACTIVE)
{
printf("Trans file not active\r\n");
return -2;
}
if (g_fileTransCtrl.transflag != TRANS_READY &&
g_fileTransCtrl.transflag != TRANS_DOING &&
g_fileTransCtrl.transflag != TRANS_REQUEST &&
1 )
{
printf("Trans file not ready\r\n");
return -2;
}
if (g_fileTransCtrl.transflag == TRANS_READY)
{
g_fileTransCtrl.transflag = TRANS_DOING;
}
if (pPkt->transFileData.fileId != g_fileTransCtrl.fileId)
{
printf("fileID is not equal in ReceiveFileData, thisid=%d, saveid=%d\r\n", pPkt->transFileData.fileId, g_fileTransCtrl.fileId);
return -3;
}
//printf("get trans data, idx=%d\r\n", pPkt->transFileData.pktIdx);
#if (TRANS_DATA_FILE != 0)
if (g_fileTransCtrl.fileType == FILE_TYPE_DAT) // 数据文件
{
// 保存数据
WriteFileData(g_fileTransCtrl.fileIdx, (pPkt->transFileData.pktIdx)*g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk, pPkt->transFileData.exData, pPkt->transFileData.exLen);
WriteRsvBitmap(pPkt->transFileData.pktIdx, 1, &g_fileTransCtrl);
}
else
#endif
if (g_fileTransCtrl.fileType == FILE_TYPE_PGM) // 升级文件
{
// 保存数据
int rst;
rst = SaveAppData(pPkt->transFileData.pktIdx, pPkt->transFileData.exData, pPkt->transFileData.exLen, 0);
if (rst >= 0)
{
WriteRsvBitmap(pPkt->transFileData.pktIdx, 1, &g_fileTransCtrl);
}
else
{
printf("WriteFileApp error rst= %d \r\n", rst);
}
}
else if (g_fileTransCtrl.fileType == FILE_TYPE_FRAME) // 边框刺绣文件
{
// 保存数据
WriteFileData(g_fileTransCtrl.fileIdx, (pPkt->transFileData.pktIdx)*g_fileTransCtrl.pDatFile->pFileHead->fileHead.bytesPerBlk, pPkt->transFileData.exData, pPkt->transFileData.exLen);
WriteRsvBitmap(pPkt->transFileData.pktIdx, 1, &g_fileTransCtrl);
}
else if (g_fileTransCtrl.fileType == FILE_TYPE_BOARD) // 外围板文件
{
// 数据转发,并写入接收位图
FileDataFromOperToCan(pPkt, g_fileTransCtrl.pBoardFile);
WriteRsvBitmap(pPkt->transFileData.pktIdx, 1, &g_fileTransCtrl);
}
if (g_fileTransCtrl.transflag == TRANS_REQUEST)
{
//printf("Receive request block =%d\r\n", pPkt->transFileData.pktIdx);
}
else
{
// 查看接收位图,是否接收完成
if (IsResvFinish(&g_fileTransCtrl) == TRUE)
{
#if (TRANS_DATA_FILE != 0)
if (g_fileTransCtrl.fileType == FILE_TYPE_DAT)
{
OutFileInfo();
AvalidDatFile(0);
#if (0) // 重新计算XY最大最小值
if (g_datFile.storage == STORAGE_EXSRAM)
{
s32 minx, miny, maxx, maxy;
printf("recalc min max\r\n");
GetMinMaxFromFileDat(&minx, &maxx, &miny, &maxy);
g_fileTransCtrl.pDatFile->fileHead.fileHead.minX = minx;
g_fileTransCtrl.pDatFile->fileHead.fileHead.maxX = maxx;
g_fileTransCtrl.pDatFile->fileHead.fileHead.minY = miny;
g_fileTransCtrl.pDatFile->fileHead.fileHead.maxY = maxy;
OutFileInfo();
}
else if (g_datFile.storage == STORAGE_NORFLASH)
{
}
else if (g_datFile.storage == STORAGE_SRAMANDNOR)
{
}
#endif
SetNewDatFlag(0, TRUE);
}
else
#endif
if (g_fileTransCtrl.fileType == FILE_TYPE_PGM)
{
}
else if (g_fileTransCtrl.fileType == FILE_TYPE_BOARD)
{// CAN总线具备ACK应答机制
}
else if (g_fileTransCtrl.fileType == FILE_TYPE_FRAME)
{
OutFileInfo();
AvalidDatFile(0);
SetNewDatFlag(0, TRUE);
}
g_fileTransCtrl.transflag = TRANS_DONE; // 接收完成
printf("Receive file finish\r\n");
}
}
return 0;
}
// 接收文件参数
int ReceiveFileParas(OperPacket * pPkt)
{
int rslt;
if (pPkt == NULL)
{
return -1;
}
if (pPkt->setFileParas.exLen == sizeof(DataFileHead))
{
ReSetFilePara((DataFileHead*)(pPkt->setParas.exData));
rslt = 0;
}
else if (pPkt->setFileParas.exLen == sizeof(DataFilePara))
{
ReSetFileParaOld((DataFilePara*)(pPkt->setParas.exData));
rslt = 0;
}
else
{
printf("receive len not equ, receivelen=%d, DataFilePara = %d", pPkt->setFileParas.exLen, sizeof(DataFileHead));
rslt = -2;
}
return rslt;
}
/*
* return: 0,正常
* -1,参数错误
* -2,数据大小错误
* -3,扩展数据类型错误
*/
int ReceiveFileExData(OperPacket * pPkt)
{
int rslt = 0;
if (pPkt == NULL)
{
return -1;
}
if (pPkt->setFileExData.exLen != 1024)
{
return -2;
}
rslt = SetTempData(pPkt->setFileExData.exDataType, pPkt->setFileExData.exDataIdx, &pPkt->setFileExData.exData[0]);
return rslt;
}
// 外围板数据传输
// 用CAN数据帧的格式发送数据包
void ExboardDataTrans(u32 exid)
{
SendPacketWithCanData(exid, g_fileTransCtrl.pBoardFile);
}