461 lines
8.8 KiB
C
461 lines
8.8 KiB
C
|
|
|
|||
|
|
#define _IN_MTCOMM_C
|
|||
|
|
#include "mtcomm.h"
|
|||
|
|
#include "crc8.h"
|
|||
|
|
#include "trigger.h"
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
MtCommExFuncs commExFuncs; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
MtCommPacket sendPacket; // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
MtCommPacket resvPacket; // <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD>
|
|||
|
|
int transEnable; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2<><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int transId; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ID
|
|||
|
|
|
|||
|
|
int sendStatus; // <20><><EFBFBD><EFBFBD>״̬, 0, <20><><EFBFBD><EFBFBD>; 1, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 2<><32><EFBFBD><EFBFBD><EFBFBD>ջذ<D5BB><D8B0><EFBFBD>; 3, <20><><EFBFBD>ɡ<EFBFBD>
|
|||
|
|
int sendResult; // <20><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>, 0<><30> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD>ͳɹ<CDB3><C9B9><EFBFBD> 2<><32> <20><><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD> 3<><33><EFBFBD>ȴ<EFBFBD><C8B4>ذ<EFBFBD><D8B0>ɹ<EFBFBD><C9B9><EFBFBD>4<EFBFBD><34> <20>ȴ<EFBFBD><C8B4>ذ<EFBFBD><D8B0><EFBFBD>ʱ
|
|||
|
|
int sendSteps; // <20><><EFBFBD>Ϳ<EFBFBD><CDBF>Ʋ<EFBFBD><C6B2><EFBFBD>
|
|||
|
|
|
|||
|
|
int hasBack; // <20>Ƿ<EFBFBD><C7B7>лذ<D0BB><D8B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ȴ<EFBFBD><C8B4>ذ<EFBFBD><D8B0><EFBFBD>
|
|||
|
|
|
|||
|
|
int resvStatus; // <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC> 0<><30> <20><><EFBFBD><EFBFBD>; 1, <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 2, <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>; 3. <20><><EFBFBD><EFBFBD>ֹͣ
|
|||
|
|
|
|||
|
|
u32 ustimer;
|
|||
|
|
|
|||
|
|
}MtCommCtrl;
|
|||
|
|
|
|||
|
|
|
|||
|
|
MtCommCtrl g_mtCommCtrl;
|
|||
|
|
|
|||
|
|
//------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC>
|
|||
|
|
// ע<><D7A2><EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
|
|||
|
|
void InitMtComm(MtCommExFuncs * pExFuncs)
|
|||
|
|
{
|
|||
|
|
memset(&g_mtCommCtrl, 0, sizeof(MtCommCtrl));
|
|||
|
|
|
|||
|
|
if (pExFuncs != NULL)
|
|||
|
|
{
|
|||
|
|
memcpy(&(g_mtCommCtrl.commExFuncs), pExFuncs, sizeof(MtCommExFuncs));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>첽<EFBFBD>շ<EFBFBD><D5B7><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>շ<EFBFBD><D5B7><EFBFBD><EFBFBD>̡<EFBFBD>
|
|||
|
|
// <20><>Ҫ<EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
|
|||
|
|
void MtCommAsyncTask(void)
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.transEnable == 1) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
switch (g_mtCommCtrl.sendSteps)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
g_mtCommCtrl.sendStatus = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_mtCommCtrl.sendResult = 0;
|
|||
|
|
g_mtCommCtrl.sendSteps++;
|
|||
|
|
break;
|
|||
|
|
case 1: // <20><EFBFBD><F2BFAAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.Set485TxEnOn != NULL)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.commExFuncs.Set485TxEnOn(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
g_mtCommCtrl.ustimer = GetUsSoftTimer();
|
|||
|
|
g_mtCommCtrl.sendSteps++;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 2: // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч, <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
u32 thisus;
|
|||
|
|
thisus = GetUsSoftTimer();
|
|||
|
|
if (thisus - g_mtCommCtrl.ustimer > 200)
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.SendMtCommData != NULL)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.commExFuncs.SendMtCommData((u8*)&g_mtCommCtrl.sendPacket, LEN_MTCOMM_PKT); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.sendSteps++;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 3: // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
int freelen = 0;
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.GetTrsFreeLen != NULL)
|
|||
|
|
{
|
|||
|
|
freelen = g_mtCommCtrl.commExFuncs.GetTrsFreeLen();
|
|||
|
|
}
|
|||
|
|
if (freelen <= 0)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.ustimer = GetUsSoftTimer();
|
|||
|
|
g_mtCommCtrl.sendSteps++;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 4: // <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
u32 thisus;
|
|||
|
|
thisus = GetUsSoftTimer();
|
|||
|
|
if (thisus - g_mtCommCtrl.ustimer > 200)
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.Set485TxEnOff != NULL)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.commExFuncs.Set485TxEnOff(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
|
|||
|
|
}
|
|||
|
|
g_mtCommCtrl.sendSteps++;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
case 5:
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.hasBack != 0) // <20><><EFBFBD><EFBFBD><EFBFBD>лذ<D0BB>
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.sendStatus = 2; // <20>ȴ<EFBFBD><C8B4>ذ<EFBFBD>״̬
|
|||
|
|
g_mtCommCtrl.ustimer = GetUsSoftTimer(); // <20><>¼ʱ<C2BC><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.resvStatus = 0;
|
|||
|
|
g_mtCommCtrl.transEnable = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.sendStatus = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_mtCommCtrl.sendResult = 1; // <20><><EFBFBD>ͳɹ<CDB3>
|
|||
|
|
g_mtCommCtrl.transEnable = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.sendStatus = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_mtCommCtrl.sendResult = 2; // <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
g_mtCommCtrl.transEnable = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (g_mtCommCtrl.transEnable == 2) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
int rsvlen = 0;
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.resvStatus = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.Set485TxEnOff != NULL) // <20>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.commExFuncs.Set485TxEnOff(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.GetMtRsvLen != NULL)
|
|||
|
|
{
|
|||
|
|
rsvlen = g_mtCommCtrl.commExFuncs.GetMtRsvLen(); // <20>õ<EFBFBD><C3B5>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
}
|
|||
|
|
if (rsvlen >= LEN_MTCOMM_PKT) // <20><><EFBFBD>ݳ<EFBFBD><DDB3>ȹ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.GetMtCommData != NULL)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.commExFuncs.GetMtCommData((u8*)&g_mtCommCtrl.resvPacket, LEN_MTCOMM_PKT); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_mtCommCtrl.hasBack != 0) // <20><><EFBFBD><EFBFBD><EFBFBD>лذ<D0BB>
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.hasBack = 0;
|
|||
|
|
g_mtCommCtrl.sendStatus = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_mtCommCtrl.sendResult = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
|
}
|
|||
|
|
g_mtCommCtrl.resvStatus = 2; // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
g_mtCommCtrl.ustimer = GetUsSoftTimer(); // <20><>¼ʱ<C2BC><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
g_mtCommCtrl.transEnable = 0; // <20>رմ<D8B1><D5B4><EFBFBD>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.hasBack != 0) // <20><><EFBFBD><EFBFBD><EFBFBD>лذ<D0BB>
|
|||
|
|
{
|
|||
|
|
u32 thisus;
|
|||
|
|
thisus = GetUsSoftTimer();
|
|||
|
|
if (thisus - g_mtCommCtrl.ustimer > 10000) // 10ms <20><>ʱ
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.resvStatus = 3; // <20><><EFBFBD><EFBFBD>ֹͣ
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.hasBack = 0;
|
|||
|
|
g_mtCommCtrl.sendStatus = 3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_mtCommCtrl.sendResult = 4; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
|
g_mtCommCtrl.transEnable = 0; // <20>رմ<D8B1><D5B4><EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ʲôҲ<C3B4><D2B2><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD>CRC
|
|||
|
|
int PacketAMtComm(MtCommPacket * pPacket)
|
|||
|
|
{
|
|||
|
|
if (pPacket == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memcpy(pPacket->sync, MTCOMM_SYNC, MT_SYNC_LEN);
|
|||
|
|
pPacket->crc8 = CalcCrc8((u8*)pPacket, MT_CHECK_LEN);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// У<><D0A3>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
// <20><>֤ͬ<D6A4><CDAC><EFBFBD>ֺ<EFBFBD>CRC
|
|||
|
|
// <20><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int CheckAMtPacket(MtCommPacket * pPacket)
|
|||
|
|
{
|
|||
|
|
int rslt;
|
|||
|
|
if (pPacket == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
rslt = memcmp(pPacket->sync, MTCOMM_SYNC, MT_SYNC_LEN);
|
|||
|
|
if (rslt == 0)
|
|||
|
|
{
|
|||
|
|
u8 crc;
|
|||
|
|
crc = CalcCrc8((u8*)pPacket, MT_CHECK_LEN);
|
|||
|
|
if (pPacket->crc8 != crc)
|
|||
|
|
{
|
|||
|
|
rslt = -2;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return rslt;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>buff
|
|||
|
|
void ReadMtCommBuffEmpty(void)
|
|||
|
|
{
|
|||
|
|
int rslt, len;
|
|||
|
|
u8 temp;
|
|||
|
|
|
|||
|
|
len = 0;
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.GetMtRsvLen != NULL)
|
|||
|
|
{
|
|||
|
|
len = g_mtCommCtrl.commExFuncs.GetMtRsvLen();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
while (len > 0)
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.commExFuncs.GetMtCommData != NULL)
|
|||
|
|
{
|
|||
|
|
rslt = g_mtCommCtrl.commExFuncs.GetMtCommData(&temp, 1);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (rslt != 1)
|
|||
|
|
{
|
|||
|
|
rslt = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
len--;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>ID
|
|||
|
|
int SendAMtPacket(MtCommPacket * pPacket, int hasback)
|
|||
|
|
{
|
|||
|
|
if (pPacket == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
if (g_mtCommCtrl.sendStatus != 0 || g_mtCommCtrl.sendStatus != 3)
|
|||
|
|
{
|
|||
|
|
return -2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.transEnable = 0;
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.sendStatus = 0;
|
|||
|
|
g_mtCommCtrl.sendResult = 0;
|
|||
|
|
g_mtCommCtrl.sendSteps = 0;
|
|||
|
|
|
|||
|
|
// <20>Ƿ<EFBFBD><C7B7>ȴ<EFBFBD><C8B4>ذ<EFBFBD>
|
|||
|
|
g_mtCommCtrl.hasBack = hasback;
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.transId++; // <20><><EFBFBD><EFBFBD> ID <20><><EFBFBD><EFBFBD>
|
|||
|
|
if (g_mtCommCtrl.transId < 10 || g_mtCommCtrl.transId > 10000000)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.transId = 10;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memcpy(&g_mtCommCtrl.sendPacket, pPacket, LEN_MTCOMM_PKT);
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.transEnable = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return g_mtCommCtrl.transId; // <20><><EFBFBD>ص<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʹ<D1AF><CAB9>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>״̬
|
|||
|
|
int GetSendStatus(int id)
|
|||
|
|
{
|
|||
|
|
int sta;
|
|||
|
|
if (g_mtCommCtrl.transId != id)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sta = g_mtCommCtrl.sendStatus;
|
|||
|
|
if (sta == 3)
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.sendStatus = 0; // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
return sta;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|||
|
|
int GetSendResult(int id)
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.transId != id)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return g_mtCommCtrl.sendResult;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD> <20>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>pPacket<65><74>
|
|||
|
|
int GetAMtPacket(MtCommPacket * pPacket)
|
|||
|
|
{
|
|||
|
|
if (g_mtCommCtrl.transEnable != 2) // <20>ǽ<EFBFBD><C7BD><EFBFBD>״̬
|
|||
|
|
{
|
|||
|
|
g_mtCommCtrl.transEnable = 0;
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.resvStatus = 0;
|
|||
|
|
|
|||
|
|
ReadMtCommBuffEmpty();
|
|||
|
|
|
|||
|
|
g_mtCommCtrl.transEnable = 2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define MAX_MTCOMM_SCAN 128 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if (1)
|
|||
|
|
{
|
|||
|
|
int rslt, len;
|
|||
|
|
int i;
|
|||
|
|
int phase;
|
|||
|
|
|
|||
|
|
u8 temp;
|
|||
|
|
u8 rdBuf[LEN_MTCOMM_PKT];
|
|||
|
|
MtCommPacket * pDat;
|
|||
|
|
|
|||
|
|
if (pPacket == NULL ||
|
|||
|
|
g_mtCommCtrl.commExFuncs.GetMtRsvLen == NULL ||
|
|||
|
|
g_mtCommCtrl.commExFuncs.GetMtCommData == NULL ||
|
|||
|
|
0 )
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
i = 0; // ɨ<><C9A8><EFBFBD>ֽڼ<D6BD><DABC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
pDat = (MtCommPacket *)rdBuf;
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
len = g_mtCommCtrl.commExFuncs.GetMtRsvLen();
|
|||
|
|
|
|||
|
|
if (len < LEN_MTCOMM_PKT)
|
|||
|
|
{
|
|||
|
|
rslt = -3;
|
|||
|
|
break; // û<><C3BB><EFBFBD>㹻<EFBFBD><E3B9BB><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
phase = 0;
|
|||
|
|
rslt = 0;
|
|||
|
|
|
|||
|
|
// <20>ӽ<EFBFBD><D3BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
while(((len + phase) >= LEN_MTCOMM_PKT) && (phase < LEN_MTCOMM_PKT))
|
|||
|
|
{
|
|||
|
|
if (phase == 0 && i > MAX_MTCOMM_SCAN)
|
|||
|
|
{
|
|||
|
|
rslt = -4;
|
|||
|
|
break; // <20><><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
rslt = g_mtCommCtrl.commExFuncs.GetMtCommData(&temp, 1); // <20><>ȡһ<C8A1><D2BB><EFBFBD>ֽ<EFBFBD>
|
|||
|
|
if (rslt != 1)
|
|||
|
|
{
|
|||
|
|
printf("error at GetMtCommData rslt\r\n");
|
|||
|
|
rslt = -8;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
rslt = 0;
|
|||
|
|
i++; // ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
len--; // ʣ<><EFBFBD>ȼ<EFBFBD>С
|
|||
|
|
|
|||
|
|
if (phase < MT_SYNC_LEN) // ʶ<><CAB6>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (temp != MTCOMM_SYNC[phase])
|
|||
|
|
{
|
|||
|
|
phase = 0;
|
|||
|
|
rslt = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
rdBuf[phase] = temp; // <20><><EFBFBD><EFBFBD>
|
|||
|
|
phase++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (rslt != 0)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (phase >= LEN_MTCOMM_PKT) // <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
u8 crc8;
|
|||
|
|
crc8 = CalcCrc8(rdBuf, MT_CHECK_LEN);
|
|||
|
|
if (crc8 == pDat->crc8)
|
|||
|
|
{
|
|||
|
|
// <20>õ<EFBFBD><C3B5><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
memcpy(pPacket, pDat, LEN_MTCOMM_PKT);
|
|||
|
|
// printf("GetAMtCommPacket ok\r\n");
|
|||
|
|
rslt = LEN_MTCOMM_PKT;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// CRC <20><><EFBFBD><EFBFBD>ȷ
|
|||
|
|
printf("1. crc error in GetAMtCommPacket\r\n");
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>жϵ<D0B6><CFB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// continue;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// û<><C3BB><EFBFBD>ҵ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// continue;
|
|||
|
|
}
|
|||
|
|
}while(1);
|
|||
|
|
|
|||
|
|
return rslt;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|