optical/EMBOS/Users/App/workctrl/workctrl.c

1365 lines
28 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#define _IN_WORKCTRL_C
#include "workctrl.h"
#include "movectrl.h"
#include "error.h"
#include "buttons.h"
#include "inout.h"
#include "shell.h"
#include "debug.h"
#include "trigger.h"
#include "delay.h"
#include "canctrl.h"
#include "extendboards.h"
#include "ethernet.h"
#include "filetrans.h"
#include "installment.h"
//-------------------------------------------------------------------------------
void OneMinTimerTask(void);
//-------------------------------------------------------------------------------
#if (AUTO_ELEC_CLIP == 1)
// <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>.
// 0~239 <20><><EFBFBD><EFBFBD>120<32><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
// <20><><EFBFBD><EFBFBD>ż<EFBFBD><C5BC>index<65>д<EFBFBD><D0B4>ŵ<EFBFBD><C5B5><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>.
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>level<65><6C><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>levelʼ<6C><CABC>Ϊ<EFBFBD><CEAA>.
// 240,241 <20><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD><EFBFBD><><C4AC>Ϊ0
// 254,255<35><35><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϵȼ<CFB5><C8BC>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DataClip g_dataClipLvBuf[256];
#endif
//-------------------------------------------------------------------------------
#define EXEC_WORK_FUNC(func) \
do \
{ \
if (func != NULL) \
{ \
func(); \
} \
}while(0)
//-------------------------------------------------------------------------------
void InitWorkCtrl(void)
{
memset(&g_workCtrl, 0, sizeof(WorkCtrl));
g_workCtrl.embMendEndIdx = -1; // 20220303<30><33><EFBFBD>Ӵ˳<D3B4>ʼ<EFBFBD><CABC>
#if (1) // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>......
g_workCtrl.cursta.workStatus |= WORK_STA_ENTIME;
g_workCtrl.cursta.workStatus |= WORK_STA_ENSTATE;
#endif
// װ<>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#if (1)
printf("sizeof(SavedPara)=%d\r\n", sizeof(SavedPara));
ReadNVPara((NVPara*)(&g_workCtrl.savedpara), 1); // װ<>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (g_workCtrl.savedpara.mcType != MC_TYPE)
{
g_workCtrl.savedpara.enFlag = 0;
}
if (g_workCtrl.savedpara.enFlag != NVPARA_EN)
{
memset(&g_workCtrl.savedpara, 0, sizeof(g_workCtrl.savedpara));
g_workCtrl.savedpara.mcType = MC_TYPE;
g_workCtrl.savedpara.enFlag = NVPARA_EN;
SaveWorkNvPara();
printf("2. load save data failed\r\n");
g_workCtrl.posEnFlag = 0; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʧЧ
}
else
{
u32 address;
address = (u32)(&(g_workCtrl.savedpara.motospos[0]));
SetMotosCounter((s32 *)(address)); // <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>λ<EFBFBD><CEBB>
ReadAndFreshMotosPos();
g_workCtrl.posEnFlag = ALL_MOTO_MOD; // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ч
g_workCtrl.cursta.dataIdx = g_workCtrl.savedpara.dataIdx; // װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
printf("load fileID=0x%x, dataIdx=%d\r\n", g_workCtrl.savedpara.fileID, g_workCtrl.cursta.dataIdx);
g_workCtrl.cursta.runSteps = g_workCtrl.savedpara.runSteps; // װ<><D7B0><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD>
g_workCtrl.cursta.outCounter = g_workCtrl.savedpara.outCounter; // װ<>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_workCtrl.cursta.embNeedleNum = g_workCtrl.savedpara.embNeedleNum; // װ<>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_workCtrl.cursta.btrdPics = g_workCtrl.savedpara.btrdPics; // װ<>ص<EFBFBD><D8B5><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_workCtrl.cursta.btrdLength = g_workCtrl.savedpara.btrdLength; // װ<>ص<EFBFBD><D8B5>߳<EFBFBD><DFB3>ȼ<EFBFBD><C8BC><EFBFBD>
g_workCtrl.cursta.fileIdx = g_workCtrl.savedpara.fileIdx; // װ<><D7B0><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
g_datFile.fileIdx = g_workCtrl.cursta.fileIdx; // װ<><D7B0><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
g_datFile.fileIdxMap = g_workCtrl.savedpara.fileIdxMap; // װ<><D7B0><EFBFBD>ļ<EFBFBD>λͼ
printf("2. load save data success\r\n");
}
#endif
InitAppCallback();
InitDebug();
{
int rslt;
rslt = InitInstallment(); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (rslt != 0) // <20>Ѿ<EFBFBD><D1BE><EFBFBD>ȥ<EFBFBD>˹ػ<CBB9>ʱ<EFBFBD><CAB1>
{
g_workCtrl.cansetelapsed = 1; // <20><><EFBFBD>ò<EFBFBD><C3B2>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD>ػ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
RefreshWorkTimeEn();
AddTriggerToList(60000, NULL, OneMinTimerTask); // 1<><31><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>񣬹<EFBFBD><F1A3ACB9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
__WEAK void InitAppCallback(void)
{
}
void WorkCtrlTask(void)
{
EXEC_WORK_FUNC(g_workCtrl.WorkRunTask);
EXEC_WORK_FUNC(g_workCtrl.AsynchronousTask);
}
void TasksWhenDelay(void)
{
EXEC_WORK_FUNC(g_workCtrl.AsynchronousTask);
TriggerTask(); // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
ExtendBoardTask(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
}
void DelayRef(u32 ms)
{
do
{
TasksWhenDelay();
if (ms <= 0)
{
break;
}
DelayMs(1);
ms--;
}while(1);
}
void DelayRefFt(u32 ms)
{
u32 us = 0;
do
{
TasksWhenDelay();
if (ms <= 0)
{
break;
}
DelayUs(100);
us++;
if(us >= 10)
{
us = 0;
ms--;
}
}while(1);
}
// <20><>ʱͬʱִ<CAB1><D6B4><EFBFBD><EFBFBD><ECB2BD><EFBFBD><EFBFBD>
void DelayAndAsyncExe(u32 ms)
{
u32 timb = GetMsSoftTimer();
do
{
TasksWhenDelay();
u32 tim = GetMsSoftTimer();
if (tim - timb >= ms)
{
break;
}
}while(1);
}
//-------------------------------------------------------------------------------
// 1<><31><EFBFBD>Ӷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
void OneMinTimerTask(void)
{
RefWorkableTimer(-1); // ÿ<><C3BF><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
RefreshWorkTimeEn(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
}
void RefreshWorkTimeEn(void)
{
#if (USE_PASSWORD == 1) // ǿ<><C7BF>ʹ<EFBFBD>÷<EFBFBD><C3B7>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (GetWorkableTime() <= 0)
{
g_workCtrl.cursta.workStatus &= ~(WORK_STA_ENTIME); // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><><CAB1>)
}
else
{
g_workCtrl.cursta.workStatus |= WORK_STA_ENTIME; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1>)
}
#elif (USE_PASSWORD == 2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊû<CEAA><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 paswd[24];
int i;
GetLastpswd(paswd);
for (i=0;i<24;i++)
{
if (paswd[i] != 0)
{
break;
}
}
if (i != 24)
{// <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (GetWorkableTime() <= 0)
{
g_workCtrl.cursta.workStatus &= ~(WORK_STA_ENTIME); // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><><CAB1>)
}
else
{
g_workCtrl.cursta.workStatus |= WORK_STA_ENTIME; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1>)
}
}
else
{// û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>
g_workCtrl.cursta.workStatus |= WORK_STA_ENTIME; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1>)
}
#elif (USE_PASSWORD == 0) // <20><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_workCtrl.cursta.workStatus |= WORK_STA_ENTIME; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1>)
}
#endif
}
//-------------------------------------------------------------------------------
void SaveWorkNvPara(void)
{
SaveNVPara((NVPara*)(&g_workCtrl.savedpara), 1);
}
__WEAK void RefreshStatus(void)
{
}
__WEAK void RefreshParas(int flag)
{
}
// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־
void SetNewParasFlag(int flag)
{
g_workCtrl.paraEnFlag |= flag;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־
printf("set para ok flag\r\n");
g_workCtrl.cursta.workStatus |= WORK_STA_PARAOK; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־
}
//-------------------------------------------------------------------------------
void RequestBoardVer(void)
{
#if (MAX_SUPPORT_COLOR > 0)
RequestColorsVersion();
DelayRef(0);
#endif
#if (MAX_SUPPORT_HEAD > 0)
RequestHeadsVersion();
DelayRef(0);
#endif
#if (MAX_SUPPORT_EXTIO > 0)
RequestExtIOsVersion();
DelayRef(0);
#endif
}
int CreateBoardVer(OperPacket * pPkt, u8 protocol, u8 nodeId, u8 nodeType, BoardRegVal * pRegVal)
{
if (pPkt == NULL)
{
return -1;
}
int rslt;
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->sendBoardVer.cmdCode = DCMD_SEND_BOARDVER;
pPkt->sendBoardVer.protocolType = protocol;
pPkt->sendBoardVer.nodeType = nodeType;
if (protocol == BN_PROTOCOL_HEAD)
{
pPkt->sendBoardVer.nodeId = nodeId - HEAD_NODEID_BASE + 1; // <20><>1<EFBFBD><31>ʼ,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID
}
else if (protocol == BN_PROTOCOL_COLOR)
{
pPkt->sendBoardVer.nodeId = nodeId - COLOR_NODEID_BASE + 1; // <20><>1<EFBFBD><31>ʼ,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID
}
memcpy(&pPkt->sendBoardVer.ver, &pRegVal->exbVer, BOARD_VER_LEN*sizeof(u32));
printf("board version: protocol=%d, nodeid=%d, nodeType=%d\r\n", pPkt->sendBoardVer.protocolType, pPkt->sendBoardVer.nodeId, pPkt->sendBoardVer.nodeType);
char ver[EX_VER_LEN+1];
memset(&ver, 0, EX_VER_LEN+1);
memcpy(&ver, &pPkt->sendBoardVer.ver, BOARD_VER_LEN*sizeof(u32));
printf("version=%s\r\n", ver); // <20><><EFBFBD><EFBFBD><EFBFBD>
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(pPkt->sendBoardVer.ver)), BOARD_VER_LEN*sizeof(u32));
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateBoardVer\r\n");
}
return rslt;
}
int CreateHeadBoardPara(OperPacket * pPkt, u8 nodeId, u8 nodeType, u8* pData)
{
if (pPkt == NULL || pData == NULL)
{
return -1;
}
int rslt;
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->boardPara.cmdCode = DCMD_SEND_HEADPARA;
pPkt->boardPara.nodeId = nodeId; // headList<73><74>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pPkt->boardPara.nodeType = nodeType; // <20><>Ӧ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>(ƽ<><C6BD><><C3AB>,<2C><><EFBFBD><EFBFBD>)
memcpy(&pPkt->boardPara.exData, pData, BOARD_PARA_SIZE);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(pPkt->boardPara.exData)), BOARD_PARA_SIZE);
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateHeadBoardPara\r\n");
}
return rslt;
}
int CreateColorBoardPara(OperPacket * pPkt, u8 nodeId, u8* pData)
{
if (pPkt == NULL || pData == NULL)
{
return -1;
}
int rslt;
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->boardPara.cmdCode = DCMD_SEND_COLORPARA;
pPkt->boardPara.nodeId = nodeId; // <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>,<2C><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(&pPkt->boardPara.exData, pData, BOARD_PARA_SIZE);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(pPkt->boardPara.exData)), BOARD_PARA_SIZE);
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateHeadBoardPara\r\n");
}
return rslt;
}
int RequestHeadNvParas(int nodetype, int nodeid, int paraid, u32 * pBuf)
{
#if (CUR_MACHINE == MACH_EMB)
return RequestEmbCoilParasProc(nodeid, pBuf);
#elif (CUR_MACHINE == MACH_WIRE)
return RequestWireHeadAParaProc(nodeid, 1, paraid, pBuf);
#else
return 0;
#endif
}
void SetHeadNvPara(int nodetype, int nodeid, int paraid, u32 * pBuf)
{
#if (CUR_MACHINE == MACH_EMB)
SetEmbCoilParasProc(nodeid, pBuf);
#elif (CUR_MACHINE == MACH_WIRE)
SetWireHeadAPara(nodeid, paraid, pBuf);
#endif
}
int CreateHeadNvParas(OperPacket * pPkt, u8 nodetype, u8 nodeId, u8 paraid, u8* pData)
{
if (pPkt == NULL || pData == NULL)
{
return -1;
}
int rslt;
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->boardPara.cmdCode = DCMD_SEND_HEAD_NVPARAS;
pPkt->boardPara.nodeId = nodeId; // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֪<D2AA><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ID,ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pPkt->boardPara.nodeType = nodetype;
pPkt->boardPara.paraid = paraid;
memcpy(&pPkt->boardPara.exData, pData, 128);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(pPkt->boardPara.exData)), 128);
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateHeadNvParas\r\n");
}
return rslt;
}
int CreateMcInfo(OperPacket * pPkt, int toggle)
{
int rslt;
MCInfo info;
u16 ver;
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;
ver = GetFpgaHardVersion(); // <20><>ȡӲ<C8A1><D3B2><EFBFBD><EFBFBD><E6B1BE>Ϣ
sprintf(info.fpgaHardVerStr, "FPGA Hard: %x.%x", (ver&0xff00)>>8,(ver&0x00ff));
ver = GetFpgaSoftVersion(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>Ϣ
sprintf(info.fpgaSoftVerStr, "FPGA Soft: %x.%x", (ver&0xff00)>>8,(ver&0x00ff));
GetVersionStr(info.softwareVerStr); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>Ϣ
GetBuildStr(info.buildInfoStr); // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϣ
GetBoardIdInfo(info.boardId); // <20>忨ID<49><44>Ϣ
GetLastInstallment(info.installment); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
printf("create system info len=%d, as follow:\r\n", sizeof(MCInfo));
printf("%s\r\n", info.fpgaHardVerStr); // FPGAӲ<41><D3B2><EFBFBD>
printf("%s\r\n", info.fpgaSoftVerStr); // FPGA<47><41><EFBFBD><EFBFBD><EFBFBD>
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
printf("%s\r\n", info.installment); // <20><><EFBFBD><EFBFBD>һ<EFBFBD>εķ<CEB5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(info)), sizeof(MCInfo));
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateMcInfo\r\n");
}
return rslt;
}
// <20><><EFBFBD><EFBFBD>״̬
int CreateMcStatus(OperPacket * pPkt, int toggle)
{
int rslt;
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->sendMcStatus.cmdCode = DCMD_SEND_MC_STATUS;
pPkt->sendMcStatus.toggle = (u16)toggle;
// printf("create mc status len=%d\r\n", sizeof(MCStatus));
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(g_workCtrl.cursta)), sizeof(MCStatus));
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateMcStatus\r\n");
}
return rslt;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>λͼ
int CreateFileList(OperPacket * pPkt, int toggle)
{
int rslt;
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->setFilesList.cmdCode= DCMD_SEND_FILE_LIST;
pPkt->setFilesList.fileIdxMap = (u16)toggle;
// printf("create mc status len=%d\r\n", sizeof(MCStatus));
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(g_workCtrl.cursta)), sizeof(MCStatus));
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateMcStatus\r\n");
}
return rslt;
}
__WEAK void SensorsStatus(int mode, u8 * buf)
{
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
int CreateSensorsStatus(OperPacket * pPkt)
{
int rslt;
u8 insta[MAX_EXDP_LEN];
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
memset(&insta, 0, MAX_EXDP_LEN);
pPkt->sendSensors.cmdCode = DCMD_SEND_SENSORS;
SensorsStatus(0, &insta[0]);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(insta)), MAX_EXDP_LEN);
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateMcStatus\r\n");
}
return rslt;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>λͼ
int CreateSensorsBmp(OperPacket * pPkt)
{
int rslt;
u8 insta[MAX_EXDP_LEN];
if (pPkt == NULL)
{
return -1;
}
memset(pPkt, 0, LEN_NORMAL_PACKET);
pPkt->sendSensors.cmdCode = DCMD_SEND_SENSORS_BMP;
SensorsStatus(1, &insta[0]);
rslt = PacketAVLDP(&(pPkt->packet), (u8*)(&(insta)),MAX_EXDP_LEN);
if (rslt != 0)
{
printf("error at call PacketAVLDP in CreateSensorsBmp\r\n");
}
return rslt;
}
//-------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TraverseTask(u8 protocol, u8 nodeId, u8 nodeType, int traNum)
{
#if (CUR_MACHINE == MACH_EMB) // <20><EFBFBD><E5BBA8>
EmbTraverseTask(nodeId, nodeType, traNum);
#elif (CUR_MACHINE == MACH_WIRE)
WireTraverseTask(nodeId, traNum);
#else
#endif
}
void ResetCHB(u32 hdsel)
{
g_workCtrl.cursta.errorCode = ERR_NONE;
g_workCtrl.almflashGreen = ALM_LIT_FLASH;
g_workCtrl.almflashRed = ALM_LIT_OFF;
g_workCtrl.almflashYello = ALM_LIT_OFF;
g_workCtrl.almflashBee = ALM_LIT_OFF;
g_workCtrl.cursta.btrdLength = g_workCtrl.chBobbinLength;
g_workCtrl.savedpara.btrdLength = g_workCtrl.cursta.btrdLength;
g_workCtrl.cursta.btrdPics = g_workCtrl.chBobbinPics;
g_workCtrl.savedpara.btrdPics = g_workCtrl.cursta.btrdPics;
SaveWorkNvPara();
printf("get cmd MC_CLEAN_BOBBIN\r\n");
ReportError(0);
}
// <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>״̬
void SetMcStatus(u32 sta, u32 para)
{
switch(sta)
{
case MC_STA_CLENA_ERR: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CleanError();
break;
case MC_STA_EN_WORK: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(״̬)
printf("set en work sta\r\n");
g_workCtrl.cursta.workStatus |= WORK_STA_ENSTATE;
break;
case MC_STA_DIS_WORK: // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>(״̬)
printf("set dis work sta\r\n");
g_workCtrl.cursta.workStatus &= ~(WORK_STA_ENSTATE);
break;
case MC_STA_EN_TIME: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><CAB1>)
g_workCtrl.cursta.workStatus |= WORK_STA_ENTIME;
break;
case MC_STA_DIS_TIME: // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><><CAB1>)
g_workCtrl.cursta.workStatus &= ~(WORK_STA_ENTIME);
break;
case MC_CLEAN_COUNT: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if (para == 0)
{
g_workCtrl.cursta.outCounter = 0;
g_workCtrl.cursta.embNeedleNum = 0; // 20211027,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
int decinc = (s16)para;
decinc += g_workCtrl.cursta.outCounter;
if (decinc < 0)
{
decinc = 0;
}
g_workCtrl.cursta.outCounter = decinc;
}
g_workCtrl.savedpara.outCounter = g_workCtrl.cursta.outCounter;
g_workCtrl.savedpara.embNeedleNum = g_workCtrl.cursta.embNeedleNum;
SaveWorkNvPara();
ReportError(0);
break;
}
case MC_STA_MANUAL: // <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus &= ~(WORK_STA_WKAUTO);
break;
case MC_STA_AUTO: // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus |= WORK_STA_WKAUTO;
break;
case MC_FILE_SWITCH: // <20>ļ<EFBFBD><C4BC>л<EFBFBD>
g_workCtrl.cursta.fileIdx = para;
break;
case MC_INVALID_FILE: // <20>ļ<EFBFBD>ʧЧ<CAA7><D0A7><EFBFBD><EFBFBD>
InvalidDatFile(para);
g_workCtrl.cursta.workStatus &= ~(WORK_STA_EN_SCAN); // <20><>ֹɨ<D6B9><C9A8>
printf("get InvalidDatFile cmd, Reset work sta en scan1\r\n");
break;
case MC_CLEAN_PARA_REF: // <20><><EFBFBD><EFBFBD>ˢ<EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>־
g_workCtrl.cursta.workStatus &= ~(WORK_STA_NEW_PARA);
break;
case MC_SET_TO_NORMAL: // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus &= ~(WORK_STA_SIMULATE);
break;
case MC_SET_TO_SIMULATE: // <20><><EFBFBD><EFBFBD>Ϊģ<CEAA><EFBFBD><E2B9A4>״̬
g_workCtrl.cursta.workStatus |= WORK_STA_SIMULATE;
break;
case MC_CLEAN_FIDX:
SetDatIdxToStart();
/*
g_workCtrl.cursta.dataIdx = 0; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
g_workCtrl.savedpara.dataIdx = g_workCtrl.cursta.dataIdx;
SaveWorkNvPara();
GetWorkPosFromIndex();*/
break;
case MC_CLEAN_BOBBIN: // <20><><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>λ
ResetCHB(para);
break;
case MC_SET_ENTER_SCAN_SENSOR: // <20><><EFBFBD><EFBFBD>Ϊ <20><><EFBFBD><EFBFBD> ɨ<><EFBFBD><E8B4AB><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus |= WORK_STA_SENSOR;
printf("get MC_SET_ENTER_SCAN_SENSOR cmd\r\n");
break;
case MC_SET_EXIT_SCAN_SENSOR: // <20><><EFBFBD><EFBFBD>Ϊ <20>˳<EFBFBD> ɨ<><EFBFBD><E8B4AB><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus &= ~(WORK_STA_SENSOR);
CleanButtonTask();
printf("get MC_SET_EXIT_SCAN_SENSOR cmd\r\n");
break;
case MC_SET_ENTER_TEST_OUTPUT: // <20><><EFBFBD><EFBFBD>Ϊ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus |= WORK_STA_OUTPUT;
printf("get MC_SET_ENTER_TEST_OUTPUT cmd\r\n");
break;
case MC_SET_EXIT_TEST_OUTPUT: // <20><><EFBFBD><EFBFBD>Ϊ <20>˳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
g_workCtrl.cursta.workStatus &= ~(WORK_STA_OUTPUT);
CleanButtonTask();
printf("get MC_SET_EXIT_TEST_OUTPUT cmd\r\n");
break;
case MC_STA_EXIT_TRA: // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>״̬
{
g_workCtrl.cursta.workStatus |= WORK_STA_TRAVERSE;
break;
}
case MC_STA_EXIT_THREADBK: // <20>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD>״̬
{
g_workCtrl.cursta.workStatus &= ~(WORK_STA_DETBK);
break;
}
case MC_INVALID_FILEBLOCK: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݿ<EFBFBD>ʧЧ<CAA7><D0A7><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD><E4BBA8><EFBFBD>ļ<EFBFBD>)
{
InvalidDatBlock();
break;
}
default:
break;
}
}
// <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
int ControlByHand(OperPacket * pPkt)
{
int err;
printf("receive ctrl by hand, actcode=0x%x, para1=0x%x, para2=0x%x, para3=0x%x\r\n",
pPkt->actByhand.actCode, pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
err = ERR_NONE;
if (err != ERR_NONE)
{
ReportError(err);
return err;
}
switch (pPkt->actByhand.actCode)
{
case MOTO_TO_ZERO: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MotoToZero(pPkt->actByhand.para1);
break;
case MOVE_BY_HAND: // <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6>ƶ<EFBFBD>
// printf("para1=%d, para2=%d, para3=%d\r\n", pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
MoveMotoByHand(pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
break;
case OUTPUT_CTRL: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
OutputByHand(pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
break;
case MOTO_EN_CTRL: // <20>ŷ<EFBFBD><C5B7>򿪹ر<F2BFAAB9>
MotosServoCtrl(pPkt->actByhand.para1, pPkt->actByhand.para2);
break;
case MANUAL_ACTION: // <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
ManualActionCtrl(pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
break;
case TEST_THREADBK: // <20><><EFBFBD>Զ<EFBFBD><D4B6>߼<EFBFBD><DFBC><EFBFBD>
TestThreadBreak(pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
break;
case SHAKE_FRAME_TEST: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ShakeFrameTest(pPkt->actByhand.para1, pPkt->actByhand.para2, pPkt->actByhand.para3);
break;
default:
break;
}
return 0;
}
__WEAK void MotoToZero(u16 obj)
{
}
__WEAK void MoveMotoByHand(u16 obj, u16 dir, u16 spd)
{
}
__WEAK void OutputByHand(u16 obj, u16 act, u16 para)
{
}
__WEAK void MotosServoCtrl(u16 obj, u16 onoff)
{
}
__WEAK void ManualActionCtrl(u16 obj, u16 para2, u16 para3)
{
}
__WEAK void TestThreadBreak(int type, int needle, int head)
{
}
void ShakeFrameTest(u16 ofstx, u16 ofsty, u16 runspd)
{
#if (CUR_MACHINE == MACH_WIRE)
WireShakeFrameTest(ofstx, ofsty, runspd);
#endif
}
int ControlWork(OperPacket * pPkt)
{
printf("work cmd, code=0x%x\r\n", pPkt->mcWork.workCode);
switch(pPkt->mcWork.workCode)
{
case WORK_START: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
break;
}
case WORK_PAUSE: // <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
{
break;
}
case WORK_FINISH: // <20><><EFBFBD≯<EFBFBD>λ
{
AllToReset();
break;
}
case WORK_FIND_ZERO: // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
{
AllToZero();
break;
}
case WORK_GOTO_START: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
GotoStartPos();
break;
}
case WORK_GOTO_ANCHOR: // <20>ض<EFBFBD>λ<EFBFBD><CEBB>
{
GotoAnchorPos();
break;
}
case WORK_GOTO_OFFSET: // <20><>ƫ<EFBFBD>Ƶ<EFBFBD>
{
GotoOffsetPos();
break;
}
case WORK_SET_OFFSET: // <20><>ƫ<EFBFBD>Ƶ<EFBFBD>
{
SetOffsetPos();
break;
}
case WORK_CHECK_FRAME: // <20>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>
{
CheckFrame();
break;
}
case WORK_SIMULATION_FRAME: // <20><><EFBFBD>߱߿<DFB1>
{
SimulationFrame();
break;
}
case WORK_FAST_JUMP: // <20><><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD>
{
FastJump(pPkt->mcWork.para1);
break;
}
case WORK_GOTO_WKPOS: // <20>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD>
{
GotoWorkPos();
break;
}
case WORK_GOTO_FINISH: // <20>ؽ<EFBFBD><D8BD><EFBFBD><EFBFBD><EFBFBD>
{
GotoFinishPos();
break;
}
case WORK_GOTO_ZERO: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
{
GotoFrameZeroPos();
break;
}
case WORK_RPM_CHG: // <20>ٶȸı<C8B8>
{
ChangeRpm((int)(pPkt->mcWork.para1));
break;
}
case WORK_FILE_IDX_CHG: // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ÿı<C5B8>
{
g_workCtrl.cursta.fileIdx = (pPkt->mcWork.para1);
break;
}
case WORK_GOTO_FEED: // <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>
{
GotoFeedPos();
break;
}
case WORK_SET_FEED: // <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>
{
SetFeedPos();
break;
}
case WORK_ACT_OIL: // <20>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
{
OilingInWorking(pPkt->mcWork.para1);
break;
}
default:
break;
}
return 0;
}
int ControlWorkWhenWorking(OperPacket * pPkt)
{
if (pPkt == NULL)
{
return -1;
}
printf("work cmd when work, code=0x%x\r\n", pPkt->mcWork.workCode);
switch(pPkt->mcWork.workCode)
{
case WORK_PAUSE: // <20><>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
{
g_workCtrl.stopFlag = 1;
break;
}
case WORK_RPM_CHG: // <20>ٶȸı<C8B8>
{
ChangeRpm((int)(pPkt->mcWork.para1));
break;
}
case WORK_ACT_OIL: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
{
OilingInWorking(pPkt->mcWork.para1);
break;
}
default:
break;
}
return 0;
}
__WEAK void ChangeRpm(int rpmchg)
{
}
// <20><><EFBFBD≯<EFBFBD>λ
__WEAK void AllToReset(void)
{
}
__WEAK void AllToZero(void)
{
}
__WEAK int GotoStartPos(void)
{
return 0;
}
__WEAK int GotoAnchorPos(void)
{
return 0;
}
__WEAK int GotoOffsetPos(void)
{
return 0;
}
__WEAK void SetOffsetPos(void)
{
}
__WEAK int GotoWorkPos(void)
{
return 0;
}
__WEAK int GotoFinishPos(void)
{
return 0;
}
__WEAK int GotoFeedPos(void)
{
return 0;
}
__WEAK void SetFeedPos(void)
{
}
__WEAK int GotoFrameZeroPos(void)
{
return 0;
}
__WEAK int CheckFrame(void)
{
return 0;
}
// <20><><EFBFBD>߱߿<DFB1>
void SimulationFrame(void)
{
#if (CUR_MACHINE == MACH_EMB)
EmbSimulationFrame();
#endif
}
__WEAK int FastJump(u32 idx)
{
return 0;
}
__WEAK void OilingInWorking(u32 para1)
{
}
__WEAK int MoveFrameToPos(s32 posx, s32 posy)
{
return 0;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
__WEAK int FixMoveFrame(s32 xmvmnt, s32 yxmvmnt)
{
return 0;
}
void MoveFrameTo(OperPacket * pPkt)
{
s32 posx, posy;
posx = pPkt->moveFrameTo.posx;
posy = pPkt->moveFrameTo.posy;
printf("move to cmd, posx=%d, posy=%d\r\n", posx, posy);
MoveFrameToPos(posx, posy);
}
void MoveFrameAsOfst(OperPacket * pPkt)
{
s32 ofstx, ofsty;
ofstx = pPkt->moveFrameTo.posx;
ofsty = pPkt->moveFrameTo.posy;
printf("move as ofst cmd, ofstx=%d, ofsty=%d\r\n", ofstx, ofsty);
FixMoveFrame(ofstx, ofsty);
}
//-------------------------------------------------------------------------------
int ReportError(int errCode)
{
if (errCode != g_workCtrl.cursta.errorCode)
{
printf("Error: code=0x%x\r\n", errCode);
//printf("cursta work status 0x%x\r\n",g_workCtrl.cursta.workStatus);
}
g_workCtrl.cursta.errorCode = errCode;
SendStatus(1);
return 0;
}
void CleanError(void)
{
ReportError(ERR_NONE);
}
__WEAK void SetLightStaByCode(int errCode)
{
if (errCode == 0 || (errCode >= 0x100 && errCode < 0x200)) // ״̬
{
if (((g_workCtrl.cursta.workStatus & WORK_STA_WORKING) == WORK_STA_WORKING) ||
((g_workCtrl.cursta.workStatus & WORK_STA_SIMULATE) == WORK_STA_SIMULATE) ||
((g_workCtrl.cursta.workStatus & WORK_STA_BUSY) == WORK_STA_BUSY) ||
0 )
{
g_workCtrl.almflashRed = ALM_LIT_OFF; // <20>غ<EFBFBD><D8BA><EFBFBD>
g_workCtrl.almflashGreen = ALM_LIT_FLASH; // <20><><EFBFBD>̵<EFBFBD>
g_workCtrl.almflashYello = ALM_LIT_OFF; // <20>ػƵ<D8BB>
g_workCtrl.almflashBee = ALM_LIT_OFF; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
g_workCtrl.almflashRed = ALM_LIT_OFF; // <20>غ<EFBFBD><D8BA><EFBFBD>
g_workCtrl.almflashGreen = ALM_LIT_OFF; // <20><><EFBFBD>̵<EFBFBD>
g_workCtrl.almflashYello = ALM_LIT_ON; // <20><><EFBFBD>Ƶ<EFBFBD>
g_workCtrl.almflashBee = ALM_LIT_OFF; // <20>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
}
}
else // <20><><EFBFBD><EFBFBD>
{
g_workCtrl.almflashRed = ALM_LIT_FLASH; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_workCtrl.almflashGreen = ALM_LIT_OFF; // <20><><EFBFBD>̵<EFBFBD>
g_workCtrl.almflashYello = ALM_LIT_OFF; // <20>ػƵ<D8BB>
g_workCtrl.almflashBee = ALM_LIT_FLASH; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
// ״̬<D7B4>ı<EFBFBD><C4B1>ж<EFBFBD>
int IsStatusChanged(void)
{
int rslt;
RefreshStatus();
g_workCtrl.cursta.workableTimer = GetWorkableTime(); // <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ֵ
// <20>Ƚϣ<C8BD><CFA3><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rslt = memcmp(&(g_workCtrl.oldsta), &(g_workCtrl.cursta), sizeof(MCStatus));
if (rslt != 0)
{
memcpy(&(g_workCtrl.oldsta), &(g_workCtrl.cursta), sizeof(MCStatus));
}
return rslt;
}
void SendStatus(int force)
{
SendMcStatus(force);
}
__WEAK void CheckSensorAndPos(void)
{
}
//-------------------------------------------------------------------------------
// <20><>ѯ<EFBFBD><D1AF>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><D0BD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void CheckAndRequestData(void)
{
static int olddatblockIdx = -1; // <20><>¼<EFBFBD><C2BC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>ID
static u32 requesttimer = 0; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼
if (IsDatFileAvailable() == TRUE && // 20231017
g_datFile.storage == STORAGE_NETWORK && // 20240204
g_workCtrl.requestFlag == 0 && // 20240606
1)
{
u32 timer = GetMsSoftTimer();
int datblockIdx = GetBlockIdxNeedtoLoad(GetDatIndex());
if (datblockIdx >= 0)
{
if (olddatblockIdx != datblockIdx ||
((timer - requesttimer) > REQUEST_GAP) ||
0)
{
olddatblockIdx = datblockIdx;
requesttimer = timer;
RequestADataBlock(datblockIdx);
}
}
}
}
void SetFileOkFlag(int flag)
{
if (flag == 0)
{
printf("clean file ok flag\r\n");
g_workCtrl.cursta.workStatus &= ~(WORK_STA_FILEOK); // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ձ<EFBFBD>־
}
else
{
printf("set file ok flag\r\n");
g_workCtrl.cursta.workStatus |= WORK_STA_FILEOK; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ձ<EFBFBD>־
}
SendStatus(0);
}
void SaveFileIdxFromDatafile(void)
{
g_workCtrl.cursta.fileIdx = g_datFile.fileIdx;
g_workCtrl.savedpara.fileIdxMap = g_datFile.fileIdxMap;
g_workCtrl.savedpara.fileIdx = g_workCtrl.cursta.fileIdx;
SaveWorkNvPara();
}
int GetDatIndex(void)
{
return g_workCtrl.cursta.dataIdx;
}
int DatIndexInc(void)
{
int rslt;
rslt = g_workCtrl.cursta.dataIdx + 1;
if (IsDatIndexAvailable(rslt) == TRUE)
{
g_workCtrl.cursta.dataIdx = rslt;
g_workCtrl.savedpara.dataIdx = g_workCtrl.cursta.dataIdx;
SaveWorkNvPara();
}
else
{
rslt = -1;
}
return rslt;
}
int DatIndexDec(void)
{
if (g_workCtrl.cursta.dataIdx != 0)
{
g_workCtrl.cursta.dataIdx--;
g_workCtrl.savedpara.dataIdx = g_workCtrl.cursta.dataIdx;
SaveWorkNvPara();
return g_workCtrl.cursta.dataIdx;
}
else
{
return -1;
}
}
__WEAK int GetWorkPosFromIndex(void)
{
return 0;
}
int SetExecProgress(OperPacket * pPkt)
{
int rslt;
FileExecPara execPara;
if (pPkt == NULL)
{
return -1;
}
if (pPkt->setExecProgress.exLen != sizeof(execPara))
{
printf("receive len not equ, receivelen=%d, FileExecPara = %d", pPkt->setExecProgress.exLen, sizeof(execPara));
rslt = -2;
}
else
{
memcpy((u8*)(&execPara), pPkt->setExecProgress.exData, sizeof(execPara));
rslt = 0;
}
if (rslt == 0)
{
#if (CUR_MACHINE == MACH_EMB)
rslt = EmbSetProgress(&execPara);
#elif (CUR_MACHINE == MACH_PES)
rslt = PESSetProgress(&execPara);
#endif
if (rslt == 0) // 20231017
{
g_workCtrl.savedpara.dataIdx = g_workCtrl.cursta.dataIdx;
SaveWorkNvPara();
}
}
return rslt;
}
// <20><><EFBFBD>ݴ<EFBFBD>ͷ<EFBFBD><CDB7>ʼ
void SetDatIdxToStart(void)
{
g_workCtrl.cursta.dataIdx = 0; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_workCtrl.cursta.colorIdx = 0; // 20220708 <20><><EFBFBD>ݴ<EFBFBD>ͷ<EFBFBD><CDB7>ʼ<><C9AB>ҲӦ<D2B2>ô<EFBFBD>ͷ<EFBFBD><CDB7>ʼ
g_workCtrl.savedpara.dataIdx = g_workCtrl.cursta.dataIdx;
SaveWorkNvPara();
// <20><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
g_workCtrl.embMendEndIdx = -1;
g_workCtrl.embMendTrdFlag = 0;
g_workCtrl.mendEndPatternIdx = 0;
GetWorkPosFromIndex();
#if (CUR_MACHINE == MACH_EMB)
EmbSetDatIdxToStart();
#endif
}
//-------------------------------------------------------------------------------
void SaveToNvArea(s32 * posilist)
{
if (posilist != NULL)
{
memcpy((s32 *)(&(g_workCtrl.savedpara.motospos[0])), posilist, sizeof(s32)*AXIS_NUM);
SaveWorkNvPara();
}
}
void ReadAndFreshMotosPos(void)
{
s32 pos[AXIS_NUM];
if (GetMotosCounter(pos) == 0)
{
RefreshMotosPos(pos);
SaveToNvArea(pos); // <20><><EFBFBD><EFBFBD><E6B5BD><EFBFBD><EFBFBD><E7B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
void ReadMotosPos(void)
{// ֻˢ<D6BB><CBA2>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 pos[AXIS_NUM];
if (GetMotosCounter(pos) == 0)
{
RefreshMotosPos(pos);
//SaveToNvArea(pos); // <20><><EFBFBD><EFBFBD><E6B5BD><EFBFBD><EFBFBD><E7B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
void NormalRefPosition(u32 para, s32 * posilist)
{
SaveToNvArea(posilist);
}
//-------------------------------------------------------------------------------