661 lines
18 KiB
C
661 lines
18 KiB
C
|
|
|
|||
|
|
#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)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰû<C7B0><C3BB>ѡ<EFBFBD><D1A1><EFBFBD>ļ<EFBFBD>,<2C><><EFBFBD>ļ<EFBFBD>ʧЧ
|
|||
|
|
InvalidDatFile(0);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>λͼ<CEBB><CDBC>Ч,<2C><><EFBFBD>ļ<EFBFBD>ʧЧ
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>: pPkt <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>:
|
|||
|
|
// = 0, <20>ɹ<EFBFBD>
|
|||
|
|
// = 1, ʧ<><CAA7>
|
|||
|
|
|
|||
|
|
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);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD><CDB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>淽ʽ<E6B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
#if (TRANS_DATA_FILE != 0)
|
|||
|
|
if (pPkt->startTrans.fileType == FILE_TYPE_DAT) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
#if (FILE_NETWORK == 0)
|
|||
|
|
DataFileHead * pHead;
|
|||
|
|
pHead = (DataFileHead *)(pPkt->packet.vldp.exData);
|
|||
|
|
|
|||
|
|
InitNorSectorManage(); // <20><>ʼ<EFBFBD><CABC>norflash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sram<61><6D>norflash<73><68>
|
|||
|
|
if (pHead->fileHead.dataSize <= DATA_FILE_SIZE)
|
|||
|
|
{
|
|||
|
|
save = STORAGE_EXSRAM;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
save = STORAGE_SRAMANDNOR; // <20><><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|||
|
|
//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) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
#if (APP_SAVE_TO == APP_SAVE_NORFLASH)
|
|||
|
|
save = STORAGE_NORFLASH;
|
|||
|
|
#elif (APP_SAVE_TO == APP_SAVE_EXRAM) // 20230523 <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ⲿRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
save = STORAGE_EXSRAM;
|
|||
|
|
#elif (APP_SAVE_TO == APP_SAVE_INFLASH)
|
|||
|
|
save = STORAGE_INFLASH;
|
|||
|
|
#endif
|
|||
|
|
InitSaveApp(); // APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
}
|
|||
|
|
else if (pPkt->startTrans.fileType == FILE_TYPE_BOARD) // <20><>Χ<EFBFBD><CEA7><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
save = STORAGE_TRANS; // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,<2C><><EFBFBD><EFBFBD><EFBFBD>д洢
|
|||
|
|
}
|
|||
|
|
else if (pPkt->startTrans.fileType == FILE_TYPE_FRAME) // <20>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.transflag = TRANS_READY;
|
|||
|
|
g_fileTransCtrl.transActive = TRANS_ACTIVE;
|
|||
|
|
InvalidDatFile(0);
|
|||
|
|
SetNewDatFlag(0, FALSE);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
#endif
|
|||
|
|
// 20230523 <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>ⲿRAM<41><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (pPkt->startTrans.fileType == FILE_TYPE_PGM) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pAppFile->fileHead.dataSize+1024-1)/1024); // ֻ֧<D6BB><D6A7>1024<32>ֽڵİ<DAB5>
|
|||
|
|
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
|
|||
|
|
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
|
|||
|
|
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) // <20>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
|
|||
|
|
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) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
|
|||
|
|
printf("rsv packet num=%d, bitmap len=%d\r\n", g_fileTransCtrl.packetNum, g_fileTransCtrl.lenBmp);
|
|||
|
|
|
|||
|
|
if (1) // δʹ<CEB4><CAB9>λд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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.transflag = TRANS_READY;
|
|||
|
|
g_fileTransCtrl.transActive = TRANS_ACTIVE;
|
|||
|
|
|
|||
|
|
InvalidDatFile(0);
|
|||
|
|
SetNewDatFlag(0, FALSE);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
#endif
|
|||
|
|
if (pPkt->startTrans.fileType == FILE_TYPE_PGM) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pAppFile->fileHead.dataSize+1024-1)/1024); // ֻ֧<D6BB><D6A7>1024<32>ֽڵİ<DAB5>
|
|||
|
|
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
|
|||
|
|
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
|
|||
|
|
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) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ<CEBB><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
|
|||
|
|
|
|||
|
|
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); // <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_fileTransCtrl.transflag = TRANS_REQUEST;
|
|||
|
|
g_fileTransCtrl.transActive = TRANS_ACTIVE;
|
|||
|
|
|
|||
|
|
AvalidDatFile(0); // <20>ļ<EFBFBD><C4BC><EFBFBD>Ч
|
|||
|
|
SetNewDatFlag(0, TRUE); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>־
|
|||
|
|
printf("get a new file, saved at network\r\n");
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
else if (save == STORAGE_TRANS) // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,<2C><><EFBFBD><EFBFBD><EFBFBD>洢
|
|||
|
|
{
|
|||
|
|
if (pPkt->startTrans.fileType == FILE_TYPE_BOARD) // <20><>Χ<EFBFBD><CEA7><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_fileTransCtrl.transActive = TRANS_NONE;
|
|||
|
|
g_fileTransCtrl.transflag = TRANS_NOT_BEG;
|
|||
|
|
g_fileTransCtrl.fileType = pPkt->startTrans.fileType; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>,<2C><>Χ<EFBFBD><CEA7><EFBFBD>ļ<EFBFBD>
|
|||
|
|
g_fileTransCtrl.fileIdx = pPkt->startTrans.fileIdx; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_fileTransCtrl.fileId = pPkt->startTrans.fileId; // <20>ļ<EFBFBD>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); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ṹ
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.packetNum = ((g_fileTransCtrl.pBoardFile->fileHead.dataSize+1024-1)/1024); // ֻ֧<D6BB><D6A7>1024<32>ֽڵİ<DAB5>
|
|||
|
|
g_fileTransCtrl.lenBmp = (g_fileTransCtrl.packetNum+7)/8;
|
|||
|
|
memset(g_fileTransCtrl.rsvBitmap, 0, g_fileTransCtrl.lenBmp); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>ȱ<EFBFBD>־λͼ
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.transflag = TRANS_READY;
|
|||
|
|
g_fileTransCtrl.transActive = TRANS_ACTIVE;
|
|||
|
|
|
|||
|
|
printf("start exboard update\r\n");
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
FileHeadFromOperToCan(FILE_TYPE_PGM, g_fileTransCtrl.pBoardFile);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
|
|||
|
|
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) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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) // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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) // <20>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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) // <20><>Χ<EFBFBD><CEA7><EFBFBD>ļ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,<2C><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ
|
|||
|
|
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
|
|||
|
|
{
|
|||
|
|
// <20>鿴<EFBFBD><E9BFB4><EFBFBD><EFBFBD>λͼ<CEBB><CDBC><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (IsResvFinish(&g_fileTransCtrl) == TRUE)
|
|||
|
|
{
|
|||
|
|
#if (TRANS_DATA_FILE != 0)
|
|||
|
|
if (g_fileTransCtrl.fileType == FILE_TYPE_DAT)
|
|||
|
|
{
|
|||
|
|
OutFileInfo();
|
|||
|
|
AvalidDatFile(0);
|
|||
|
|
#if (0) // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>XY<58><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сֵ
|
|||
|
|
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<41><4E><EFBFBD>߾߱<DFBE>ACKӦ<4B><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
else if (g_fileTransCtrl.fileType == FILE_TYPE_FRAME)
|
|||
|
|
{
|
|||
|
|
OutFileInfo();
|
|||
|
|
AvalidDatFile(0);
|
|||
|
|
SetNewDatFlag(0, TRUE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_fileTransCtrl.transflag = TRANS_DONE; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
printf("Receive file finish\r\n");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* -1,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* -2,<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* -3,<EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|||
|
|
// <20><>CAN<41><4E><EFBFBD><EFBFBD>֡<EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
void ExboardDataTrans(u32 exid)
|
|||
|
|
{
|
|||
|
|
SendPacketWithCanData(exid, g_fileTransCtrl.pBoardFile);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|