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

323 lines
9.3 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#include "exbfiletrans.h"
#include "delay.h"
#include "crc16.h"
#include "extendboards.h"
#if (CUR_CORE_BOARD == CORE_BOARD_APP)
#include "workctrl.h"
#endif
// <20><><EFBFBD>ݰ<EFBFBD>ת<EFBFBD><D7AA>,<2C>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>CAN<41><4E><EFBFBD>ݰ<EFBFBD>
void FileHeadFromOperToCan(u8 fileType, BoardFileCtrl * pBoardFile)
{
// <20><>ͷ<EFBFBD><CDB7>Э<EFBFBD><D0AD>,<2C><><EFBFBD><EFBFBD>͵<EFBFBD>nodeid<69><64>Ϊ0<CEAA><EFBFBD><E3B2A5><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļ<EFBFBD>ͷ<EFBFBD><CDB7>,<2C><><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<C4BD>ID
if (pBoardFile->fileHead.protocol == BN_PROTOCOL_HEAD)
{
#if (MAX_SUPPORT_HEAD > 0)
HeadControl * head = GetHeadFromList(1); // Ĭ<>Ϲ<CFB9><E3B2A5><EFBFBD><EFBFBD>
HeadControl * temp = NULL; // <20><>ʱ<EFBFBD>
int hdnm = pBoardFile->fileHead.nodeid; // <20><>ͷ<EFBFBD><CDB7>,0Ϊ<30>
if (hdnm != 0)
{// <20>ǹ㲥,<2C>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD>ڵ<EFBFBD>
for(int i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
temp = GetHeadFromList(i+1);
if (temp->nodeTye == pBoardFile->fileHead.nodeType)
{
if (hdnm <= 1)
{
head = temp;
break;
}
else
{
hdnm--;
}
}
}
}
int timeout = 10;
while(timeout > 0)
{
if (head->transFlag == 0)
{
head->transFlag = 1;
memset(&pBoardFile->filepkt, 0, sizeof(BoardFilePacketCtrl));
// <20><><EFBFBD>ݰ<EFBFBD>ͷ
memcpy(pBoardFile->filepkt.pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoardFile->filepkt.pktHead.head.pktId = FILE_HEAD_ID;
pBoardFile->filepkt.pktHead.head.fnum = 6; // <20>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD>6<EFBFBD><36>CAN<41><4E><EFBFBD><EFBFBD>֡
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 8; j++)
{
pBoardFile->filepkt.pktData[i].data[j] = pBoardFile->fileHead.fileName[i*8+j];
}
}
pBoardFile->filepkt.pktData[4].check.datasize = pBoardFile->fileHead.dataSize;
pBoardFile->filepkt.pktData[4].check.dataChecksum = pBoardFile->fileHead.dataChecksum;
pBoardFile->filepkt.pktData[5].info.fileType = fileType;
pBoardFile->filepkt.pktData[5].info.nodeType = pBoardFile->fileHead.nodeType;
pBoardFile->filepkt.pktHead.head.crc = CalcCrc16((u8*)&pBoardFile->filepkt.pktData, pBoardFile->filepkt.pktHead.head.fnum*CAN_DATA_LEN);
break;
}
DelayRef(100);
timeout--;
if (timeout <= 0)
{// CANͨѶ<CDA8><D1B6>ʱ
printf("FileHeadFromOperToCan err\r\n");
}
}
#endif
}
else if (pBoardFile->fileHead.protocol == BN_PROTOCOL_COLOR)
{// <20><>ɫ<EFBFBD><C9AB>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҽڵ<D2BD>IDΪ<44>̶<EFBFBD>ֵ <20><>nodeidΪ<64>ڼ<EFBFBD><DABC><EFBFBD> 0<><30>ȻΪ<C8BB>
#if (MAX_SUPPORT_COLOR > 0)
ColorControl * color = GetColorFromList(pBoardFile->fileHead.nodeid+1);
int timeout = 10;
while(timeout > 0)
{
if (color->transFlag == 0)
{
color->transFlag = 1;
memset(&pBoardFile->filepkt, 0, sizeof(BoardFilePacketCtrl));
// <20><><EFBFBD>ݰ<EFBFBD>ͷ
memcpy(pBoardFile->filepkt.pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoardFile->filepkt.pktHead.head.pktId = FILE_HEAD_ID;
pBoardFile->filepkt.pktHead.head.fnum = 6; // <20>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD>6<EFBFBD><36>CAN<41><4E><EFBFBD><EFBFBD>֡
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 8; j++)
{
pBoardFile->filepkt.pktData[i].data[j] = pBoardFile->fileHead.fileName[i*8+j];
}
}
pBoardFile->filepkt.pktData[4].check.datasize = pBoardFile->fileHead.dataSize;
pBoardFile->filepkt.pktData[4].check.dataChecksum = pBoardFile->fileHead.dataChecksum;
pBoardFile->filepkt.pktData[5].data[0] = fileType;
pBoardFile->filepkt.pktHead.head.crc = CalcCrc16((u8*)&pBoardFile->filepkt.pktData, pBoardFile->filepkt.pktHead.head.fnum*CAN_DATA_LEN);
break;
}
DelayRef(100);
timeout--;
if (timeout <= 0)
{// CANͨѶ<CDA8><D1B6>ʱ
printf("FileHeadFromOperToCan err\r\n");
}
}
#endif
}
else if (pBoardFile->fileHead.protocol == BN_PROTOCOL_EXTIO)
{// IO<49><4F>չ<EFBFBD><D5B9>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҽڵ<D2BD>IDΪ<44>̶<EFBFBD>ֵ <20><>nodeidΪ<64>ڼ<EFBFBD><DABC><EFBFBD> 0<><30>ȻΪ<C8BB>
#if (MAX_SUPPORT_EXTIO > 0)
ExtIOControl * extio = GetExtIOFromList(pBoardFile->fileHead.nodeid+1);
int timeout = 10;
while(timeout > 0)
{
if (extio->transFlag == 0)
{
extio->transFlag = 1;
memset(&pBoardFile->filepkt, 0, sizeof(BoardFilePacketCtrl));
// <20><><EFBFBD>ݰ<EFBFBD>ͷ
memcpy(pBoardFile->filepkt.pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoardFile->filepkt.pktHead.head.pktId = FILE_HEAD_ID;
pBoardFile->filepkt.pktHead.head.fnum = 6; // <20>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD>6<EFBFBD><36>CAN<41><4E><EFBFBD><EFBFBD>֡
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 8; j++)
{
pBoardFile->filepkt.pktData[i].data[j] = pBoardFile->fileHead.fileName[i*8+j];
}
}
pBoardFile->filepkt.pktData[4].check.datasize = pBoardFile->fileHead.dataSize;
pBoardFile->filepkt.pktData[4].check.dataChecksum = pBoardFile->fileHead.dataChecksum;
pBoardFile->filepkt.pktData[5].data[0] = fileType;
pBoardFile->filepkt.pktHead.head.crc = CalcCrc16((u8*)&pBoardFile->filepkt.pktData, pBoardFile->filepkt.pktHead.head.fnum*CAN_DATA_LEN);
break;
}
DelayRef(100);
timeout--;
if (timeout <= 0)
{// CANͨѶ<CDA8><D1B6>ʱ
printf("FileHeadFromOperToCan err\r\n");
}
}
#endif
}
}
// <20><><EFBFBD>ݰ<EFBFBD>ת<EFBFBD><D7AA>,<2C>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>CAN<41><4E><EFBFBD>ݰ<EFBFBD>
void FileDataFromOperToCan(OperPacket * pPkt, BoardFileCtrl * pBoardFile)
{
if (pBoardFile->fileHead.protocol == BN_PROTOCOL_HEAD)
{// <20><>ͷ<EFBFBD><CDB7>Э<EFBFBD><D0AD>,<2C><><EFBFBD><EFBFBD>͵<EFBFBD>nodeid<69><64>Ϊ0<CEAA><EFBFBD><E3B2A5><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļ<EFBFBD>ͷ<EFBFBD><CDB7>,<2C><><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<C4BD>ID
#if (MAX_SUPPORT_HEAD > 0)
HeadControl * head = GetHeadFromList(1); // Ĭ<>Ϲ<CFB9><E3B2A5><EFBFBD><EFBFBD>
HeadControl * temp = NULL; // <20><>ʱ<EFBFBD>
int hdnm = pBoardFile->fileHead.nodeid; // <20><>ͷ<EFBFBD><CDB7>,0Ϊ<30>
if (hdnm != 0)
{
for(int i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
temp = GetHeadFromList(i+1);
if (temp->nodeTye == pBoardFile->fileHead.nodeType)
{
if (hdnm <= 1)
{
head = temp;
break;
}
else
{
hdnm--;
}
}
}
}
int timeout = 10;
while(timeout > 0)
{
if (head->transFlag == 0)
{
head->transFlag = 1;
memset(&pBoardFile->filepkt, 0, sizeof(BoardFilePacketCtrl));
// <20><><EFBFBD>ݰ<EFBFBD>ͷ
memcpy(pBoardFile->filepkt.pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoardFile->filepkt.pktHead.head.pktId = pPkt->transFileData.pktIdx;
pBoardFile->filepkt.pktHead.head.fnum = (pPkt->transFileData.exLen + CAN_DATA_LEN - 1) / CAN_DATA_LEN;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < pBoardFile->filepkt.pktHead.head.fnum; i++)
{
memcpy(&pBoardFile->filepkt.pktData[i].data[0], &pPkt->transFileData.exData[i*CAN_DATA_LEN], CAN_DATA_LEN);
}
pBoardFile->filepkt.pktHead.head.crc = CalcCrc16((u8*)pBoardFile->filepkt.pktData, pBoardFile->filepkt.pktHead.head.fnum*CAN_DATA_LEN);
break;
}
DelayRef(100);
timeout--;
if (timeout <= 0)
{// CANͨѶ<CDA8><D1B6>ʱ
printf("FileDataFromOperToCan err\r\n");
}
}
#endif
}
else if (pBoardFile->fileHead.protocol == BN_PROTOCOL_COLOR)
{// <20><>ɫ<EFBFBD><C9AB>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҽڵ<D2BD>IDΪ<44>̶<EFBFBD>ֵ <20><>nodeidΪ<64>ڼ<EFBFBD><DABC><EFBFBD> 0<><30>ȻΪ<C8BB>
#if (MAX_SUPPORT_COLOR > 0)
ColorControl * color = GetColorFromList(pBoardFile->fileHead.nodeid+1);
int timeout = 10;
while(timeout > 0)
{
if (color->transFlag == 0)
{
color->transFlag = 1;
memset(&pBoardFile->filepkt, 0, sizeof(BoardFilePacketCtrl));
// <20><><EFBFBD>ݰ<EFBFBD>ͷ
memcpy(pBoardFile->filepkt.pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoardFile->filepkt.pktHead.head.pktId = pPkt->transFileData.pktIdx;
pBoardFile->filepkt.pktHead.head.fnum = (pPkt->transFileData.exLen + CAN_DATA_LEN - 1) / CAN_DATA_LEN;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < pBoardFile->filepkt.pktHead.head.fnum; i++)
{
memcpy(&pBoardFile->filepkt.pktData[i].data[0], &pPkt->transFileData.exData[i*CAN_DATA_LEN], CAN_DATA_LEN);
}
pBoardFile->filepkt.pktHead.head.crc = CalcCrc16((u8*)pBoardFile->filepkt.pktData, pBoardFile->filepkt.pktHead.head.fnum*8);
break;
}
DelayRef(100);
timeout--;
if (timeout <= 0)
{// CANͨѶ<CDA8><D1B6>ʱ
printf("FileDataFromOperToCan err\r\n");
}
}
#endif
}
else if (pBoardFile->fileHead.protocol == BN_PROTOCOL_EXTIO)
{// IO<49><4F>չ<EFBFBD><D5B9>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>Э<EFBFBD><EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҽڵ<D2BD>IDΪ<44>̶<EFBFBD>ֵ <20><>nodeidΪ<64>ڼ<EFBFBD><DABC><EFBFBD> 0<><30>ȻΪ<C8BB>
#if (MAX_SUPPORT_EXTIO > 0)
ExtIOControl * extio = GetExtIOFromList(pBoardFile->fileHead.nodeid+1);
int timeout = 10;
while(timeout > 0)
{
if (extio->transFlag == 0)
{
extio->transFlag = 1;
memset(&pBoardFile->filepkt, 0, sizeof(BoardFilePacketCtrl));
// <20><><EFBFBD>ݰ<EFBFBD>ͷ
memcpy(pBoardFile->filepkt.pktHead.head.sync, CDP_SYNC, CDPSYNC_LEN);
pBoardFile->filepkt.pktHead.head.pktId = pPkt->transFileData.pktIdx;
pBoardFile->filepkt.pktHead.head.fnum = (pPkt->transFileData.exLen + CAN_DATA_LEN - 1) / CAN_DATA_LEN;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < pBoardFile->filepkt.pktHead.head.fnum; i++)
{
memcpy(&pBoardFile->filepkt.pktData[i].data[0], &pPkt->transFileData.exData[i*CAN_DATA_LEN], CAN_DATA_LEN);
}
pBoardFile->filepkt.pktHead.head.crc = CalcCrc16((u8*)pBoardFile->filepkt.pktData, pBoardFile->filepkt.pktHead.head.fnum*8);
break;
}
DelayRef(100);
timeout--;
if (timeout <= 0)
{// CANͨѶ<CDA8><D1B6>ʱ
printf("FileDataFromOperToCan err\r\n");
}
}
#endif
}
}
// <20><>CAN<41><4E><EFBFBD><EFBFBD>֡<EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
void SendPacketWithCanData(u32 exid, BoardFileCtrl * pBoardFile)
{
CanTxMsg txMsg;
txMsg.canTxhead.ExtId = exid;
txMsg.canTxhead.RTR = CAN_RTR_DATA; // <20><><EFBFBD><EFBFBD>֡
txMsg.canTxhead.IDE = CAN_ID_EXT; // <20><>չ֡
txMsg.canTxhead.DLC = CAN_DATA_LEN; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
for (int idx = 0; idx < pBoardFile->filepkt.pktHead.head.fnum+1; idx++)
{
memcpy(&txMsg.data, ((u8*)&pBoardFile->filepkt.pktHead)+idx*CAN_DATA_LEN, CAN_DATA_LEN); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>
SendACANDataPacket(&txMsg);
DelayMs(1);
}
}