optical/EMBOS/Users/EmbFunc/operator/filetrans.c

661 lines
18 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#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);
}