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

1448 lines
33 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#define _IN_OPERATOR_C
#include "operator.h"
#include "serial.h"
#include "delay.h"
#include "tcpserver.h"
#include "filetrans.h"
#include "trigger.h"
#include "stapp.h"
#include "paras.h"
#include "extendboards.h"
#if (CUR_CORE_BOARD == CORE_BOARD_APP)
#include "workctrl.h"
#include "installment.h"
#include "error.h"
#else
#include "cpuid.h"
#endif
//---------------------------------------------------------------
int ReceiveMcParas(OperPacket * pPkt);
int CreateMcParas(OperPacket * pPkt, int type, int id);
void CleanBuffAfterAction(void);
//---------------------------------------------------------------
#if (OPERATOR_PORT == COMM_ETHERNET)
SocketCtrl * g_pOperatorSocket = NULL;
#define OPERATOR_SIDX TCP_SERVER_SN_BEG // udp socket
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int OperatorSendData(u8 * pDatBuf, int len)
{
return EthernetSendData(g_pOperatorSocket, pDatBuf, len);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int OperatorGetData(u8 * pDat, int expectLen)
{
return EthernetGetData(g_pOperatorSocket, pDat, expectLen);
}
// <20>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
int OperatorGetRsLen(void)
{
return EthernetGetRsLen(g_pOperatorSocket);
}
// <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD>
int OperatorGetSdFreeLen(void)
{
return EthernetGetSdFreeLen(g_pOperatorSocket);
}
#endif
DataExFuns g_operDataExFuns;
//---------------------------------------------------------------
int SendOperCommData(const u8 * pDatBuf, int len)
{
printf("SendOperCommData is Empty\r\n");
return 0;
}
int GetOperCommData(u8 * pDat, int expectLen)
{
printf("GetOperCommData is Empty\r\n");
return 0;
}
int GetOperRsvLen(void)
{
printf("GetOperRsvLen is Empty\r\n");
return 0;
}
int GetOperTrsFreeLen(void)
{
printf("GetOperTrsFreeLen is Empty\r\n");
return 0;
}
void InitOperator(void)
{
#if (OPERATOR_PORT == COMM_ETHERNET)
InitEthernet();
g_pOperatorSocket = GetCtrlFromSocketIdx(OPERATOR_SIDX);
g_operDataExFuns.SendCommData = OperatorSendData;
g_operDataExFuns.GetCommData = OperatorGetData;
g_operDataExFuns.GetRsvLen = OperatorGetRsLen;
g_operDataExFuns.GetTrsFreeLen = OperatorGetSdFreeLen;
g_operDataExFuns.Delay = DelayMs;
AddTriggerToList(1000, NULL, EthernetServiceRun); // 1000ms <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><CCAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#elif (OPERATOR_PORT == COMM_USART1)
InitUsart1(B115200, '8', 'N', '1');
g_operDataExFuns.SendCommData = Usart1SendData;
g_operDataExFuns.GetCommData = Usart1GetData;
g_operDataExFuns.GetRsvLen = Usart1GetRsLen;
g_operDataExFuns.GetTrsFreeLen = Usart1GetSdFreeLen;
g_operDataExFuns.Delay = DelayMs;
#else
g_operDataExFuns.SendCommData = SendOperCommData;
g_operDataExFuns.GetCommData = GetOperCommData;
g_operDataExFuns.GetRsvLen = GetOperRsvLen;
g_operDataExFuns.GetTrsFreeLen = GetOperTrsFreeLen;
g_operDataExFuns.Delay = DelayMs;
#endif
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݰ<EFBFBD>
void RequestFileData(u8 fileType, u8 fileIdx, u16 fileId, int datblockIdx)
{
int rslt;
OperPacket operpkt;
DataPacket* pDatpkt = (DataPacket*)(&operpkt);
memset(pDatpkt, 0, LEN_NORMAL_PACKET);
operpkt.requestDatBlock.cmdCode = DCMD_REQUEST_DAT;
operpkt.requestDatBlock.fileType = fileType;
operpkt.requestDatBlock.fileIdx = fileIdx;
operpkt.requestDatBlock.fileId = fileId;
operpkt.requestDatBlock.datBlockIdx = datblockIdx; // <20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>1024<32>ֽ<EFBFBD>)
rslt = PacketAFLDP(&(operpkt.packet));
if (rslt != 0)
{
// printf("error at call PacketAFLDP in SendMcStatus\r\n");
}
else
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
// printf("error at call SendAPacket in SendMcStatus\r\n");
}
}
}
#if (CUR_CORE_BOARD != CORE_BOARD_BOOT)
void OperatorTask(void)
{
int rslt;
OperPacket operpkt;
DataPacket* pDatpkt = (DataPacket*)(&operpkt);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rslt = GetANormalPacket(&g_operDataExFuns, pDatpkt);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
if (rslt > 0) // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
{
switch(operpkt.packet.fldp.cmd) // <20>Ȱ<EFBFBD><C8B0>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>
{
case UCMD_GET_MC_INFO: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
printf("get mc info cmd, toggle=%d\r\n", operpkt.getMcInfo.toggle);
rslt = CreateMcInfo(&operpkt, operpkt.getMcInfo.toggle);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_MC_INFO \r\n");
}
}
else
{
printf("error at call CreateMcInfo in OperatorTask UCMD_GET_MC_INFO \r\n");
}
break;
}
case UCMD_GET_MC_STATUS: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
{
// printf("get mc status cmd, toggle=%d\r\n", operpkt.getMcStatus.toggle);
rslt = CreateMcStatus(&operpkt, operpkt.getMcStatus.toggle);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_MC_STATUS \r\n");
}
}
else
{
printf("error at call CreateMcStatus in OperatorTask UCMD_GET_MC_STATUS \r\n");
}
break;
}
case UCMD_GET_MC_PARAS: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("get mc paras cmd\r\n");
rslt = CreateMcParas(&operpkt, operpkt.getMcParas.paraType, operpkt.getMcParas.paraId);
if (rslt == 0)
{
// int temp = GetMsSoftTimer();
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 10000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_MC_PARAS \r\n");
}
}
else
{
printf("error at call CreateMcParas in OperatorTask UCMD_GET_MC_PARAS \r\n");
}
break;
}
case UCMD_GET_MEM_DATA: // <20><>ȡ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
break;
case UCMD_GET_SENSORS: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
{
//printf("get mc sensors cmd\r\n");
rslt = CreateSensorsStatus(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_SENSORS \r\n");
}
}
else
{
printf("error at call CreateSensorsStatus in OperatorTask UCMD_GET_SENSORS \r\n");
}
break;
}
case UCMD_GET_SENSORS_BMP: // <20><>ȡ<EFBFBD><C8A1>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λͼ
{
printf("get mc sensors bmp cmd\r\n");
rslt = CreateSensorsBmp(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_SENSORS_BMP \r\n");
}
}
else
{
printf("error at call CreateSensorsBmp in OperatorTask UCMD_GET_SENSORS_BMP \r\n");
}
break;
}
case UCMD_GET_FILE_INFO: // <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
{
rslt = CreateFileInfo(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_FILE_INFO \r\n");
}
}
else
{
printf("error at call CreateFileInfo in OperatorTask UCMD_GET_FILE_INFO \r\n");
}
break;
}
case UCMD_GET_TRANS_RESULT: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("1. get trans result cmd\r\n");
rslt = CreateTransResult(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_TRANS_RESULT \r\n");
}
}
else
{
printf("error at call CreateTransResult in OperatorTask UCMD_GET_TRANS_RESULT \r\n");
}
break;
}
case UCMD_SET_MC_CONFIG: // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
break;
}
case UCMD_SET_MC_STATUS: // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>״̬
{
printf("SetMcStatus when stop\r\n");
SetMcStatus(operpkt.setMcStatus.staCode, operpkt.setMcStatus.para);
break;
}
case UCMD_SET_MC_PARAS: // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("receive set mc para cmd\r\n");
ReceiveMcParas(&operpkt);
break;
}
case UCMD_SET_MEM_DATA: // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
{
break;
}
case UCMD_SET_FILE_PARAS: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
{
ReceiveFileParas(&operpkt);
break;
}
case UCMD_SET_FILE_EXDATA: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
{
ReceiveFileExData(&operpkt);
break;
}
case UCMD_SET_EXEC_PROGRESS: // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
{
SetExecProgress(&operpkt);
break;
}
case UCMD_SET_INSTALLMENT: // <20><><EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
int rslt;
printf("set installment\r\n");
rslt = SetInstallMent((char*)(operpkt.setInstallment.exData));
RefreshWorkTimeEn();
if (rslt >= 0)
{
ReportError(ERR_INSTALLMENT_OK); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>óɹ<C3B3>
}
else
{
ReportError(ERR_INSTALLMENT_FAIL); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
}
break;
}
case UCMD_SET_ELAPSED_TIME: // <20><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
printf("set elapsed, type=%d, time = %d\r\n", operpkt.setElapsedTime.type, operpkt.setElapsedTime.time);
if (g_workCtrl.cansetelapsed == 0)
{
u32 time;
s32 val;
time = operpkt.setElapsedTime.time;
if (time > 5000*3600) // 5000Сʱ
{
time = 5000*3600;
}
time /= 60; // <20><><EFBFBD><EFBFBD>
val = time;
val *= -1;
if (abs(val) < 60)
{
printf("close time=%d min\r\n", val);
}
else if (abs(val) < 1440)
{
s32 hour, min;
hour = val / 60;
min = val % 60;
printf("close time=%d hour %d min\r\n", hour, min);
}
else
{
s32 day, hour, min;
day = val / 1440;
hour = val % 1440;
min = hour % 60;
hour /= 60;
printf("close time=%d day %d hour %d min\r\n", day, hour, min);
}
RefWorkableTimer(val);
RefreshWorkTimeEn();
g_workCtrl.cansetelapsed = 1;
}
else
{
printf("has set elapsed already\r\n");
}
break;
}
//---------------
case UCMD_ACT_BYHAND: // <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ReportError(ERR_NONE);
ControlByHand(&operpkt);
CleanBuffAfterAction();
break;
}
case UCMD_MC_WORK: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ReportError(ERR_NONE);
ControlWork(&operpkt);
CleanBuffAfterAction();
break;
}
case UCMD_MOVE_TO: // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>
{
MoveFrameTo(&operpkt);
break;
}
case UCMD_MOVE_OFST: // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
{
MoveFrameAsOfst(&operpkt);
break;
}
case UCMD_START_TRANS: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
{
StartReceiveFile(&operpkt);
SaveFileIdxFromDatafile();
if (IsNewDatFile(0) == FALSE)
{
SetFileOkFlag(0);
}
break;
}
case UCMD_TRANS_FILE_DATA: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
u32 thistimer, oldtimer;
oldtimer = GetMsSoftTimer();
do
{
int svrslt = SavePreProc();
if (svrslt == 2 || svrslt < 0)
{
break;
}
thistimer = GetMsSoftTimer();
if ((thistimer - oldtimer) > 3000)
{
oldtimer = thistimer;
SendStatus(1); // <20><><EFBFBD><EFBFBD>״̬,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>
}
}while(1);
ReceiveFileData(&operpkt);
if (IsNewDatFile(0) == TRUE)
{
SetFileOkFlag(1); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ձ<EFBFBD>־
}
break;
}
case UCMD_SET_FILE_LIST: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>
{
ResetFileList(&operpkt);
SaveFileIdxFromDatafile();
break;
}
case UCMD_BOARD_UPDATE: // <20><>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
// <20><>ͷ<EFBFBD><CDB7>Э<EFBFBD><D0AD>,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ľڵ<C4BD>ID,ֻ<><D6BB><EFBFBD><EFBFBD>֪<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ͺͻ<CDBA>ͷ<EFBFBD>ż<EFBFBD><C5BC><EFBFBD>
// <20><>ɫ<EFBFBD><C9AB>Э<EFBFBD><D0AD> <20><><EFBFBD><EFBFBD>֪<EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>
printf("update ex board, protocolType=%d, nodetype=%d, nodeId=%d\r\n", operpkt.updateBoard.protocolType, operpkt.updateBoard.nodetype, operpkt.updateBoard.nodeId);
StartBoardUpdate(operpkt.updateBoard.protocolType, operpkt.updateBoard.nodetype, operpkt.updateBoard.nodeId);
DelayRef(1);
break;
}
case UCMD_MC_UPDATE: // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("receive updat mc cmd\r\n");
DelayRef(100);
StartAppUpdate(1); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
case UCMD_GET_FILE_LIST: // <20><>ȡ<EFBFBD><C8A1>λ<EFBFBD><CEBB><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>
{
rslt = CreateFileList(&operpkt, g_datFile.fileIdxMap);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_FILE_LIST \r\n");
}
}
else
{
printf("error at call CreateMcStatus in OperatorTask UCMD_GET_FILE_LIST \r\n");
}
break;
}
case UCMD_SET_DEF_PARA : // <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
{
printf("receive set def para cmd\r\n");
char * info = "set mc and wk def para";
SendDebugInfo(info);
WriteDefMcPara();
WriteDefWkPara();
break;
}
case UCMD_SET_MVANGDEF_PARA: // <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ƕ<EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
{
printf("receive set move angle def para cmd\r\n");
char * info = "set mv angle def para";
SendDebugInfo(info);
WriteDefMvAngPara();
break;
}
case UCMD_SET_HEADDEF_PARA: // <20><><EFBFBD>û<EFBFBD>ͷ<EFBFBD><CDB7>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
{
printf("set head def para, nodetype=%d, id=%d\r\n", operpkt.setDefParas.nodetype, operpkt.setDefParas.id);
char buf[1024];
sprintf(buf, "set head def para, nodetype=%d", operpkt.setDefParas.nodetype);
SendDebugInfo(&buf[0]);
SetBoardNvPara(BN_PROTOCOL_HEAD, operpkt.setDefParas.nodetype, operpkt.setDefParas.id, 255, 0, 0);
break;
}
case UCMD_SET_COLORDEF_PARA: // <20><><EFBFBD>û<EFBFBD>ɫ<EFBFBD><C9AB>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
{
printf("set color def para, boardnum=%d\r\n", operpkt.setDefParas.id);
char buf[1024];
sprintf(buf, "set color def para, id=%d", operpkt.setDefParas.id);
SendDebugInfo(&buf[0]);
SetBoardNvPara(BN_PROTOCOL_COLOR, 0, operpkt.setDefParas.id, 255, 0, 0);
break;
}
case UCMD_TRA_BOARD: // <20><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("traverse cmd, protocolType=%d, nodeId=%d, nodeType=%d, traNum=%d\r\n", operpkt.traverse.protocolType,
operpkt.traverse.nodeId, operpkt.traverse.nodeType, operpkt.traverse.traNum);
TraverseTask(operpkt.traverse.protocolType,
operpkt.traverse.nodeId,
operpkt.traverse.nodeType,
operpkt.traverse.traNum);
break;
}
case UCMD_GET_BOARD_VER: // <20><>ȡ<EFBFBD><C8A1>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
RequestBoardVer();
DelayRef(100);
#if (MAX_SUPPORT_COLOR > 0)
ColorControl * color = NULL;
for (int i = 1; i < MAX_SUPPORT_COLOR+1; i++)
{
color = GetColorFromList(i+1);
if (color->verFlag == 1)
{
color->verFlag = 0;
rslt = CreateBoardVer(&operpkt, BN_PROTOCOL_COLOR, color->nodeId, 0, &color->regVal);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask DCMD_SEND_BOARDVER \r\n");
}
}
else
{
printf("error at call CreateBoardVer in OperatorTask DCMD_SEND_BOARDVER \r\n");
}
}
}
#endif
#if (MAX_SUPPORT_HEAD > 0)
HeadControl * head = NULL;
for (int i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
head = GetHeadFromList(i+1);
if (head->verFlag == 1)
{
head->verFlag = 0;
rslt = CreateBoardVer(&operpkt, BN_PROTOCOL_HEAD, head->nodeId, head->nodeTye, &head->regVal);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask DCMD_SEND_BOARDVER \r\n");
}
}
else
{
printf("error at call CreateBoardVer in OperatorTask DCMD_SEND_BOARDVER \r\n");
}
}
}
#endif
#if (MAX_SUPPORT_EXTIO > 0)
ExtIOControl * extio = NULL;
for (int i = 1; i < MAX_SUPPORT_EXTIO+1; i++)
{
extio = GetExtIOFromList(i+1);
if (extio->verFlag == 1)
{
extio->verFlag = 0;
rslt = CreateBoardVer(&operpkt, BN_PROTOCOL_EXTIO, extio->nodeId, 0, &extio->regVal);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask DCMD_SEND_BOARDVER \r\n");
}
}
else
{
printf("error at call CreateBoardVer in OperatorTask DCMD_SEND_BOARDVER \r\n");
}
}
}
#endif
break;
}
#if (RD_HEAD_PARA_NUM > 0)
case UCMD_GET_HEAD_PARA: // <20><>ȡ<EFBFBD><C8A1>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
/*
* 20220601 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ַ<EFBFBD>ʽ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
* <EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<EFBFBD>ID,ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>ƽ<EFBFBD><EFBFBD>,ë<EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD>Ͷ<EFBFBD>Ӧ<EFBFBD>Ļ<EFBFBD>ͷ<EFBFBD>ż<EFBFBD><EFBFBD><EFBFBD>
*/
int i, hdnm;
hdnm = operpkt.boardPara.nodeId; // <20><>Ӧ<EFBFBD><D3A6>ͷ<EFBFBD><CDB7>
for (i = 1; i < MAX_SUPPORT_HEAD+1; i++)
{
HeadControl * phd = GetHeadFromList(i+1);
if (phd->nodeTye == operpkt.boardPara.nodeType)
{// <20><><EFBFBD>㲥,<2C><><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>͵ĵ<CDB5>һ<EFBFBD><D2BB><EFBFBD>ڵ<EFBFBD>
if (hdnm <= 1)
{
break;
}
else
{
hdnm--;
}
}
}
if (i <= MAX_SUPPORT_HEAD) // <20>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD>Ľڵ<C4BD>
{
printf("read head=%d para\r\n", i);
RequestAHeadNvPara(i); // <20><>ȡij<C8A1><C4B3><EFBFBD>ڵ<EFBFBD><DAB5>IJ<EFBFBD><C4B2><EFBFBD>
DelayRef(100);
HeadControl * head = GetHeadFromList(i+1);
if (head->nvParaFlag == 1)
{
head->nvParaFlag = 0;
int id = 0;;
if (head->nodeTye == FLAT_EMB_HEAD)
{
id = 1;
}
else if (head->nodeTye == CHENILLE_HEAD)
{
id = 2;
}
else if (head->nodeTye == COIL_HEAD)
{
id = 3;
}
rslt = CreateHeadBoardPara(&operpkt, i, operpkt.boardPara.nodeType, GetBoardNvPara(id));
if (rslt == 0)
{
printf("send head para\r\n");
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask DCMD_SEND_HEADPARA \r\n");
}
}
else
{
printf("error at call CreateHeadBoardPara in OperatorTask DCMD_SEND_HEADPARA \r\n");
}
}
else
{
printf("receive err\r\n");
ReportError(ERR_READ_HEAD_PARA);
}
}
else // <20><><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("not find node\r\n");
ReportError(ERR_READ_HEAD_PARA);
}
break;
}
case UCMD_GET_COLOR_PARA: // <20><>ȡ<EFBFBD><C8A1>ɫ<EFBFBD><C9AB><EFBFBD>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD>
{
if (operpkt.boardPara.nodeId != 0) // <20><>֧<EFBFBD>ֹ㲥<D6B9><E3B2A5>ȡ
{
ColorControl * color = GetColorFromList(operpkt.boardPara.nodeId+1);
if (color != NULL)
{
color->refNvPara = 1;
DelayRef(100);
if (color->nvParaFlag == 1)
{
color->nvParaFlag = 0;
int id = 0;;
if (operpkt.boardPara.nodeId == 2)
{// ë<><C3AB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
id = 4;
}
rslt = CreateColorBoardPara(&operpkt, operpkt.boardPara.nodeId, GetBoardNvPara(id));
if (rslt == 0)
{
printf("send color para, nodeid=%d\r\n", operpkt.boardPara.nodeId);
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_COLOR_PARA \r\n");
}
}
else
{
printf("error at call CreateColorBoardPara in OperatorTask UCMD_GET_COLOR_PARA \r\n");
}
}
else
{
printf("receive err\r\n");
ReportError(ERR_READ_COLOR_PARA);
}
}
}
else
{
printf("not support broadcast read color para\r\n");
}
break;
}
#endif
case UCMD_GET_HEAD_NVPARAS: // ѡ<><D1A1><EFBFBD>Զ<EFBFBD>ȡ<EFBFBD><C8A1>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
{// <20>ɶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>λ<EFBFBD><CEBB>
printf("get head type=%d id=%d nvparaid=%d\r\n", operpkt.boardPara.nodeType, operpkt.boardPara.nodeId, operpkt.boardPara.paraid);
u32 buf[32] = {0};
int rslt = RequestHeadNvParas(operpkt.boardPara.nodeType, operpkt.boardPara.nodeId, operpkt.boardPara.paraid, &buf[0]);
if (rslt == 0)
{
rslt = CreateHeadNvParas(&operpkt, operpkt.boardPara.nodeType, operpkt.boardPara.nodeId, operpkt.boardPara.paraid, (u8*)(&buf[0]));
if (rslt == 0)
{
printf("send head nv paras\r\n");
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_HEAD_NVPARAS \r\n");
}
}
else
{
printf("error at call CreateHeadNvParas in OperatorTask UCMD_GET_HEAD_NVPARAS \r\n");
}
}
else
{
printf("read head nv paras error, rslt=%d\r\n", rslt);
ReportError(ERR_READ_HEAD_PARA);
}
break;
}
case UCMD_SET_HEAD_PARA: // <20><><EFBFBD>û<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("set head para, nodetype=%d, nodeId=%d\r\n", operpkt.boardPara.nodeType, operpkt.boardPara.nodeId);
BoardFilePacketCtrl boardpkt;
ParaDataFromOperToCan(BN_PROTOCOL_HEAD, &operpkt, &boardpkt);
break;
}
case UCMD_SET_COLOR_PARA: // <20><><EFBFBD>û<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ư<EFBFBD><C6B0><EFBFBD><EFBFBD><EFBFBD>
{
printf("set color para, boardnum=%d\r\n", operpkt.boardPara.nodeId);
BoardFilePacketCtrl boardpkt;
ParaDataFromOperToCan(BN_PROTOCOL_COLOR, &operpkt, &boardpkt);
break;
}
case UCMD_SET_HEAD_NVPARA: // ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
{
printf("set head type=%d id=%d paraid=%d nvpara\r\n", operpkt.boardPara.nodeType, operpkt.boardPara.nodeId, operpkt.boardPara.paraid);
// SetHeadNvPara(operpkt.boardPara.nodeType, operpkt.boardPara.nodeId, operpkt.boardPara.paraid, (u32*)(&operpkt.boardPara.exData));
break;
}
default:
{
break;
}
}
}
// SavePreProc();
}
void CleanBuffAfterAction(void)
{
int ret;
int temp, timer;
timer = GetMsSoftTimer();
do
{
ret = ReadBuffEmpty(&g_operDataExFuns); // <20><><EFBFBD>ս<EFBFBD><D5BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
if (ret == 0)
{
break;
}
else
{
printf("ReadBuffEmpty rslt=%d\r\n", ret);
}
DelayRef(1);
temp = GetMsSoftTimer();
if (temp - timer > 10)
{
printf("CleanBuffAfterAction timout\r\n");
break;
}
}while(1);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
void SendMcStatus(int force)
{
int rslt;
OperPacket operpkt;
DataPacket* pDatpkt = (DataPacket*)(&operpkt);
if (IsStatusChanged() != 0 || force != 0)
{
rslt = CreateMcStatus(&operpkt, 0);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
// printf("SendMcStatus\r\n");
if (rslt != 0)
{
// printf("error at call SendAPacket in SendMcStatus\r\n");
}
}
else
{
printf("error at call CreateMcStatus in SendMcStatus\r\n");
}
SetLightStaByCode(g_workCtrl.cursta.errorCode);
}
}
// --------------------------------------------
int IsSocketConnected(void)
{
#if (OPERATOR_PORT == COMM_ETHERNET)
if (g_pOperatorSocket->status == STA_CONNECT)
{
return TRUE;
}
#endif
return FALSE;
}
int IsNewOperCmd(void)
{
int rslt;
OperPacket operpkt;
DataPacket* pDatpkt = (DataPacket*)(&operpkt);
rslt = GetANormalPacket(&g_operDataExFuns, pDatpkt);
if (rslt > 0) // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
{
return TRUE;
}
#if (OPERATOR_PORT == COMM_ETHERNET)
if (IsSocketConnected() != TRUE)
{
// return TRUE;
}
#endif
return FALSE;
}
void OperatorTaskWhenRun(int revfile)
{
int rslt;
OperPacket operpkt;
DataPacket* pDatpkt = (DataPacket*)(&operpkt);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rslt = GetANormalPacket(&g_operDataExFuns, pDatpkt);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
if (rslt > 0) // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
{
switch(operpkt.packet.fldp.cmd) // <20>Ȱ<EFBFBD><C8B0>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>
{
case UCMD_GET_MC_STATUS: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
{
printf("get mc status cmd when run\r\n");
rslt = CreateMcStatus(&operpkt, operpkt.getMcStatus.toggle);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 0);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTaskWhenRun UCMD_GET_MC_STATUS \r\n");
}
}
else
{
printf("error at call CreateMcStatus in OperatorTaskWhenRun UCMD_GET_MC_STATUS \r\n");
}
break;
}
case UCMD_GET_MC_PARAS: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("get mc paras cmd\r\n");
rslt = CreateMcParas(&operpkt, operpkt.getMcParas.paraType, operpkt.getMcParas.paraId);
if (rslt == 0)
{
// int temp = GetMsSoftTimer();
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 10000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_MC_PARAS \r\n");
}
}
else
{
printf("error at call CreateMcParas in OperatorTask UCMD_GET_MC_PARAS \r\n");
}
break;
}
case UCMD_SET_MC_STATUS: // <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD>״̬
{
printf("SetMcStatus when run\r\n");
SetMcStatus(operpkt.setMcStatus.staCode, operpkt.setMcStatus.para);
break;
}
case UCMD_MC_WORK: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("get control work cmd when run\r\n");
ControlWorkWhenWorking(&operpkt);
break;
}
case UCMD_GET_FILE_INFO: // <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
{
if (revfile == 1)
{
rslt = CreateFileInfo(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTaskWhenRun UCMD_GET_FILE_INFO \r\n");
}
}
else
{
printf("error at call CreateFileInfo in OperatorTaskWhenRun UCMD_GET_FILE_INFO \r\n");
}
}
break;
}
case UCMD_GET_TRANS_RESULT: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (revfile == 1)
{
printf("3. get trans result cmd\r\n");
rslt = CreateTransResult(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTaskWhenRun UCMD_GET_TRANS_RESULT \r\n");
}
}
else
{
printf("error at call CreateTransResult in OperatorTaskWhenRun UCMD_GET_TRANS_RESULT \r\n");
}
}
break;
}
case UCMD_SET_FILE_PARAS: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
{
if (revfile == 1)
{
ReceiveFileParas(&operpkt);
}
break;
}
case UCMD_START_TRANS: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
{
if (revfile == 1)
{
StartReceiveFile(&operpkt);
SaveFileIdxFromDatafile();
if (IsNewDatFile(0) == FALSE)
{
SetFileOkFlag(0);
}
}
break;
}
case UCMD_TRANS_FILE_DATA: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (revfile == 1)
{
ReceiveFileData(&operpkt);
if (IsNewDatFile(0) == TRUE)
{
SetFileOkFlag(1); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ձ<EFBFBD>־
}
}
break;
}
case UCMD_SET_FILE_LIST: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>б<EFBFBD>
{
ResetFileList(&operpkt);
SaveFileIdxFromDatafile();
break;
}
case UCMD_SET_EXEC_PROGRESS: // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD><EFBFBD>
{
if (revfile == 1)
{
SetExecProgress(&operpkt);
}
break;
}
default:
printf("get cmd = 0x%x when run\r\n", operpkt.packet.fldp.cmd);
break;
}
}
if (revfile == 1)
{
// SavePreProc();
}
}
int ReceiveMcParas(OperPacket * pPkt)
{
int rslt;
rslt = 0;
if (pPkt == NULL)
{
return -1;
}
//-----------
//printf("ReceiveParas type = %d, exlen=%d\r\n", pPkt->setParas.paraType, pPkt->setParas.exLen);
if (pPkt->setParas.paraType == SEW_MCPARA_MACH)
{
if (pPkt->setParas.exLen == sizeof(g_mcPara))
{
memcpy((u8*)(&g_mcPara), pPkt->setParas.exData, sizeof(g_mcPara));
CheckMcParaRange();
SaveMcPara();
RefreshParas(PARA_MC_VALID);
SetNewParasFlag(PARA_MC_VALID);
rslt = 0;
}
else if (pPkt->setParas.exLen == sizeof(u32))
{
SetAMcPara(pPkt->setParas.paraId, *((u32*)(pPkt->setParas.exData)));
SaveMcPara();
RefreshParas(PARA_MC_VALID);
SetNewParasFlag(PARA_MC_VALID);
}
else
{
rslt = -2;
}
}
else if (pPkt->setParas.paraType == SEW_MCPARA_WORK)
{
if (pPkt->setParas.exLen == sizeof(g_wkPara))
{
memcpy((u8*)(&g_wkPara), pPkt->setParas.exData, sizeof(g_wkPara));
CheckWkParaRange();
SaveWkPara();
RefreshParas(PARA_WK_VALID);
SetNewParasFlag(PARA_WK_VALID);
rslt = 0;
}
else if (pPkt->setParas.exLen == sizeof(u32))
{
SetAWkPara(pPkt->setParas.paraId, *((u32*)(pPkt->setParas.exData)));
SaveWkPara();
RefreshParas(PARA_WK_VALID);
SetNewParasFlag(PARA_WK_VALID);
}
else
{
rslt = -2;
}
}
else if (pPkt->setParas.paraType == EMB_MVSTANG_PARA) // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>
{
if (pPkt->setParas.exLen == sizeof(g_angPara))
{
memcpy((u8*)(&g_angPara), pPkt->setParas.exData, sizeof(g_angPara));
SaveAngPara();
rslt = 0;
printf("receive angle para\r\n");
}
else if (pPkt->setParas.exLen == sizeof(u16))
{
SetAAnglePara(pPkt->setParas.paraId, *((u16*)pPkt->setParas.exData));
SaveAngPara();
}
else
{
rslt = -2;
}
}
else if (pPkt->setParas.paraType == EMB_PATCH_DATA_IDX) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>(<28><EFBFBD><E5BBA8>)
{
if (pPkt->setParas.exLen == 1024)
{
memcpy((u8*)(&g_patchData), pPkt->setParas.exData, sizeof(g_patchData));
printf("receive patch data (idx) para\r\n");
rslt = 0;
}
else
{
rslt = -2;
}
}
else
{
printf("other para\r\n");
}
return rslt;
}
int CreateMcParas(OperPacket * pPkt, int type, int id)
{
int rslt;
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->sendMcParas.cmdCode = DCMD_SEND_MC_PARAS;
pPkt->sendMcParas.paraType = type;
pPkt->sendMcParas.paraId = id;
if (id == 0)
{
if (type == SEW_MCPARA_MACH)
{
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&g_mcPara), sizeof(g_mcPara));
}
else if (type == SEW_MCPARA_WORK)
{
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&g_wkPara), sizeof(g_wkPara));
}
else if (type == EMB_MVSTANG_PARA) // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ǶȲ<C7B6><C8B2><EFBFBD>
{
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&g_angPara), sizeof(g_angPara));
}
else
{
rslt = -2;
}
}
else
{
if (type == SEW_MCPARA_MACH)
{
u32 val = GetAMcPara(id);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&val), sizeof(u32));
}
else if (type == SEW_MCPARA_WORK)
{
u32 val = GetAWkPara(id);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&val), sizeof(u32));
}
}
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateMcParas\r\n");
}
return rslt;
}
#else
__WEAK int CreateMemDatList(OperPacket * pPkt, u32 begAddr, u16 rdSize){return 0;};
__WEAK int SetMemDats(u32 setAddr, u8 * buff, u16 len){return 0;};
int CreateMcInfoWhenBoot(OperPacket * pPkt, int toggle)
{
int rslt;
MCInfo info;
CpuId id;
u32 cpuid;
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
memset(&info, 0, sizeof(MCInfo));
pPkt->sendMcInfo.cmdCode = DCMD_SEND_MC_INFO;
pPkt->sendMcInfo.toggle = (u16)toggle;
GetVersionStr(info.softwareVerStr); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>Ϣ
GetBuildStr(info.buildInfoStr); // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
// <20>忨ID<49><44>Ϣ
cpuid = 0;
GetCpuID(&id);
cpuid += id.dword.dword1;
cpuid += id.dword.dword2;
cpuid += id.dword.dword3;
cpuid += id.dword.dword4;
sprintf(info.boardId, "CPUID: %u", cpuid);
printf("create system info as follow:\r\n");
printf("%s\r\n", info.softwareVerStr); // <20><><EFBFBD><EFBFBD><EFBFBD>
printf("%s\r\n", info.buildInfoStr); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
printf("%s\r\n", info.boardId); // <20>忨ID
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(info)), sizeof(MCInfo));
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateMcInfoWhenBoot\r\n");
}
return rslt;
}
void OperatorTaskWhenBoot(void)
{
int rslt;
OperPacket operpkt;
DataPacket* pDatpkt = (DataPacket*)(&operpkt);
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rslt = GetANormalPacket(&g_operDataExFuns, pDatpkt);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
if (rslt > 0) // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
{
switch(operpkt.packet.fldp.cmd) // <20>Ȱ<EFBFBD><C8B0>̶<EFBFBD><CCB6><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>
{
case UCMD_GET_MC_INFO: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
printf("get mc info cmd, toggle=%d\r\n", operpkt.getMcInfo.toggle);
rslt = CreateMcInfoWhenBoot(&operpkt, operpkt.getMcInfo.toggle);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTaskWhenBoot UCMD_GET_MC_INFO \r\n");
}
}
else
{
printf("error at call CreateMcInfo in OperatorTaskWhenBoot UCMD_GET_MC_INFO \r\n");
}
break;
}
case UCMD_GET_MEM_DATA: // <20><>ȡ<EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
{
rslt = CreateMemDatList(&operpkt, operpkt.getMemData.begAddr, operpkt.getMemData.rdSize);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call OperatorTaskWhenBoot in OperatorTask UCMD_GET_MEM_DATA \r\n");
}
}
else
{
printf("error at call OperatorTaskWhenBoot in OperatorTask UCMD_GET_MEM_DATA \r\n");
}
break;
}
case UCMD_SET_MEM_DATA: // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
{
SetMemDats(operpkt.setMemData.begAddr, operpkt.setMemData.exData, operpkt.setMemData.exLen);
break;
}
case UCMD_GET_FILE_INFO: // <20><>ȡ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ
{
rslt = CreateFileInfo(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_FILE_INFO \r\n");
}
}
else
{
printf("error at call CreateFileInfo in OperatorTask UCMD_GET_FILE_INFO \r\n");
}
break;
}
case UCMD_GET_TRANS_RESULT: // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
printf("2. get trans result cmd\r\n");
rslt = CreateTransResult(&operpkt);
if (rslt == 0)
{
rslt = SendAPacket(&g_operDataExFuns, pDatpkt, 1000);
if (rslt != 0)
{
printf("error at call SendAPacket in OperatorTask UCMD_GET_TRANS_RESULT \r\n");
}
}
else
{
printf("error at call CreateTransResult in OperatorTask UCMD_GET_TRANS_RESULT \r\n");
}
break;
}
case UCMD_START_TRANS: // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
StartReceiveFile(&operpkt);
// SaveFileIdxFromDatafile();
break;
case UCMD_TRANS_FILE_DATA: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ReceiveFileData(&operpkt);
break;
case UCMD_MC_UPDATE: // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("get update cmd\r\n");
StartAppUpdate(0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
default:
break;
}
}
}
#endif
//------------------------------------------------------
int SendDebugInfo(char * pStr)
{
int rslt;
OperPacket pkt;
memset(&pkt, 0, LEN_NORMAL_PACKET);
pkt.sendDebugInfo.cmdCode = DCMD_SEND_DEBUG_INFO;
rslt = PacketAVLDP(&(pkt.packet), (u8*)(pStr), strlen(pStr));
if (rslt != 0)
{
printf("error at call PacketAVLDP in SendDebugInfo\r\n");
}
else
{
rslt = SendAPacket(&g_operDataExFuns, (DataPacket *)(&pkt), 0);
}
return rslt;
}
int SendFileParas(int beginX, int beginY)
{
int rslt;
OperPacket pkt;
DataFilePara newPara;
memset(&pkt, 0, LEN_NORMAL_PACKET);
newPara.anchorX = beginX;
newPara.anchorY = beginY;
newPara.beginX = beginX;
newPara.beginY = beginY;
pkt.setFileParas.cmdCode = UCMD_SET_FILE_PARAS;
rslt = PacketAVLDP(&(pkt.packet), (u8*)(&newPara), sizeof(DataFilePara));
if (rslt != 0)
{
printf("error at call PacketAVLDP in SendFileParas\r\n");
}
else
{
rslt = SendAPacket(&g_operDataExFuns, (DataPacket *)(&pkt), 0);
}
return rslt;
}