468 lines
8.9 KiB
C
468 lines
8.9 KiB
C
|
|
|
|||
|
|
#include "one2onecomm.h"
|
|||
|
|
#include "delay.h"
|
|||
|
|
#include "crc16.h"
|
|||
|
|
#include "trigger.h"
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u16 modBusWait; // ͨѶ<CDA8><D1B6>ʱ, <20><>λus
|
|||
|
|
|
|||
|
|
// ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
UsartSendData One2OneCommSend; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
UsartGetData One2OneCommReceive; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
IsUsartSendOver IsOne2OneCommSendOver; // <20>жϷ<D0B6><CFB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA>
|
|||
|
|
|
|||
|
|
}One2OneCommCtrl;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ƽṹ
|
|||
|
|
One2OneCommCtrl g_one2onecommCtrl;
|
|||
|
|
|
|||
|
|
#define MAX_ONE2ONE_CMD 10 // <20><><EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
One2OneCmd cmdbuf[MAX_ONE2ONE_CMD];
|
|||
|
|
|
|||
|
|
u8 sending; // =1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
u8 bufCmdNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> != 0, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u8 bufHead;
|
|||
|
|
u8 bufTail;
|
|||
|
|
|
|||
|
|
u8 steps;
|
|||
|
|
|
|||
|
|
ResvOne2OneExProc resvexproc; // <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
u16 rsvTimout; // <20><>ȡ<EFBFBD><C8A1>ʱʱ<CAB1><CAB1>, <20><>λΪ 100us
|
|||
|
|
|
|||
|
|
}One2OneCtrl;
|
|||
|
|
|
|||
|
|
One2OneCtrl g_one2oneCtrl;
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD>ʼ<EFBFBD><CABC>һ<EFBFBD><D2BB>һͨѶ
|
|||
|
|
void InitOne2OneComm(int usart, BAUD_TypeDef baud, char dat, char parity, char stop);
|
|||
|
|
int One2OneCommTx(u16 addr, u16 * pData, u8 len, int steps); // <20><><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>
|
|||
|
|
int One2OneCommRx(u8 rDat); // <20><><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// ע<><D7A2>ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD>
|
|||
|
|
void RegisterOne2OneCommFunc(One2OneCommCtrl* pCtrl, UsartSendData send, UsartGetData get, IsUsartSendOver sdover)
|
|||
|
|
{
|
|||
|
|
pCtrl->One2OneCommSend = send;
|
|||
|
|
pCtrl->One2OneCommReceive = get;
|
|||
|
|
pCtrl->IsOne2OneCommSendOver = sdover;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/*-----------------------------------------------------------------
|
|||
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
usart; <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>
|
|||
|
|
baud : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
dat: <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
parity: У<EFBFBD><EFBFBD>λ
|
|||
|
|
stop: ֹͣλ
|
|||
|
|
*/
|
|||
|
|
void InitOne2OneComm(int usart, BAUD_TypeDef baud, char dat, char parity, char stop)
|
|||
|
|
{
|
|||
|
|
memset(&g_one2onecommCtrl, 0, sizeof(One2OneCommCtrl));
|
|||
|
|
|
|||
|
|
// <20><>ʱ
|
|||
|
|
switch(baud)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ͨѶ<CDA8><D1B6>ʱ, <20><>λus = 10000000 / baud
|
|||
|
|
case B4800:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 2200;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B9600:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 1100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B14400:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 750;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B19200:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 600;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B38400:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 300;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B57600:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 200;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B115200:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B230400:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 50;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B460800:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 25;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case B921600:
|
|||
|
|
{
|
|||
|
|
g_one2onecommCtrl.modBusWait = 13;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
switch(usart)
|
|||
|
|
{
|
|||
|
|
#ifdef COMM_USART1
|
|||
|
|
case COMM_USART1:
|
|||
|
|
{
|
|||
|
|
InitUsart1(baud, dat, parity, stop); // <20><><EFBFBD><EFBFBD>1
|
|||
|
|
RegisterOne2OneCommFunc(&g_one2onecommCtrl, Usart1SendData, Usart1GetData, IsUsart1SendOver);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#ifdef COMM_USART2
|
|||
|
|
case COMM_USART2:
|
|||
|
|
{
|
|||
|
|
InitUsart2(baud, dat, parity, stop); // <20><><EFBFBD><EFBFBD>2
|
|||
|
|
RegisterOne2OneCommFunc(&g_one2onecommCtrl, Usart2SendData, Usart2GetData, IsUsart2SendOver);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#ifdef COMM_USART3
|
|||
|
|
case COMM_USART3:
|
|||
|
|
{
|
|||
|
|
InitUsart3(baud, dat, parity, stop); // <20><><EFBFBD><EFBFBD>3
|
|||
|
|
RegisterOne2OneCommFunc(&g_one2onecommCtrl, Usart3SendData, Usart3GetData, IsUsart3SendOver);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#ifdef COMM_USART4
|
|||
|
|
case COMM_USART4:
|
|||
|
|
{
|
|||
|
|
InitUsart4(baud, dat, parity, stop); // <20><><EFBFBD><EFBFBD>4
|
|||
|
|
RegisterOne2OneCommFunc(&g_one2onecommCtrl, Usart4SendData, Usart4GetData, IsUsart4SendOver);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
#ifdef COMM_USART5
|
|||
|
|
case COMM_USART5:
|
|||
|
|
{
|
|||
|
|
InitUsart5(baud, dat, parity, stop); // <20><><EFBFBD><EFBFBD>5
|
|||
|
|
RegisterOne2OneCommFunc(&g_one2onecommCtrl, Usart5SendData, Usart5GetData, IsUsart5SendOver);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
default:
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>:
|
|||
|
|
// addr: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ: 0000H~FFFFH
|
|||
|
|
// data: <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <09><>λ:<3A><>
|
|||
|
|
// len: <09><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
// steps:-1,ͬ<><CDAC>ִ<EFBFBD><D6B4>
|
|||
|
|
// 1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// 2,<2C>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ֵ:
|
|||
|
|
// >0:<3A><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// 0:<3A><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// -1: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// -2: <20><><EFBFBD>ͳ<EFBFBD>ʱ
|
|||
|
|
int One2OneCommTx(u16 addr, u16 * pData, u8 len, int steps)
|
|||
|
|
{
|
|||
|
|
int i, timeout, result;
|
|||
|
|
u16 checkcrc; // CRC У<><D0A3>
|
|||
|
|
u16 data;
|
|||
|
|
u8 pSDat[5+2*MAX_REG_WR]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
i = 0;
|
|||
|
|
|
|||
|
|
if (pData == NULL || len > MAX_REG_WR)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (steps == 1 || steps == -1)
|
|||
|
|
{
|
|||
|
|
i = 0;
|
|||
|
|
result = 0;
|
|||
|
|
|
|||
|
|
pSDat[i++] = HIBYTE(addr); // ADDR_H
|
|||
|
|
pSDat[i++] = LOBYTE(addr); // ADDR_L
|
|||
|
|
|
|||
|
|
pSDat[i++] = len;
|
|||
|
|
|
|||
|
|
for (int j = 0; j < len; j++)
|
|||
|
|
{
|
|||
|
|
data = pData[j];
|
|||
|
|
|
|||
|
|
pSDat[i++] = HIBYTE(data); // DATA_H
|
|||
|
|
pSDat[i++] = LOBYTE(data); // DATA_L
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
checkcrc = CalcCrc16(&pSDat[0], i);
|
|||
|
|
|
|||
|
|
pSDat[i++] = HIBYTE(checkcrc); // CRC_H
|
|||
|
|
pSDat[i++] = LOBYTE(checkcrc); // CRC_L
|
|||
|
|
|
|||
|
|
g_one2onecommCtrl.One2OneCommSend(pSDat, i);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (steps == 2)
|
|||
|
|
{
|
|||
|
|
if (g_one2onecommCtrl.IsOne2OneCommSendOver() != TRUE)
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (steps == -1)
|
|||
|
|
{
|
|||
|
|
timeout = (u8)(i*2) + 4; // <20><>ʱʱ<CAB1><CAB1>(ÿ<><C3BF><EFBFBD>ֽڷ<D6BD><DAB7><EFBFBD>ʱ<EFBFBD><CAB1>*2*<2A>ֽ<EFBFBD><D6BD><EFBFBD> + ÿ<><C3BF><EFBFBD>ֽڷ<D6BD><DAB7><EFBFBD>ʱ<EFBFBD><CAB1>*4 )
|
|||
|
|
|
|||
|
|
do //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_one2onecommCtrl.IsOne2OneCommSendOver() == TRUE)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (timeout-- <= 0)
|
|||
|
|
{
|
|||
|
|
result = -2;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
DelayUs(g_one2onecommCtrl.modBusWait);
|
|||
|
|
|
|||
|
|
}while(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (steps != -1)
|
|||
|
|
{
|
|||
|
|
return steps;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
|
|||
|
|
int One2OneCommRx(u8 rDat)
|
|||
|
|
{
|
|||
|
|
int rst = -1;
|
|||
|
|
u32 time;
|
|||
|
|
static u32 timeBuf = 0;
|
|||
|
|
static u8 rxDat[15+2*MAX_REG_WR]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static u8 idx = 0; // <20><>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
|||
|
|
static u8 num = 0; // <20><><EFBFBD>յ<EFBFBD><D5B5>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
|
|||
|
|
u16 checkcrc = 0; // crcУ<63><D0A3>
|
|||
|
|
|
|||
|
|
One2OneCmd newCmd;
|
|||
|
|
|
|||
|
|
memset(&newCmd, 0, sizeof(One2OneCmd));
|
|||
|
|
|
|||
|
|
time = Get100UsSoftTimer(); // 100us
|
|||
|
|
|
|||
|
|
if (0 ||
|
|||
|
|
((time - timeBuf) > g_one2oneCtrl.rsvTimout) || // <20><>ȡ<EFBFBD><C8A1>ʱʱ<CAB1><CAB1>, <20><>λΪ 100us
|
|||
|
|
(idx >= 15+2*MAX_REG_WR) || // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
|||
|
|
0)
|
|||
|
|
{// <20><><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
if (num > 1)
|
|||
|
|
{
|
|||
|
|
printf("data begin, num=%d\r\n", num);
|
|||
|
|
}
|
|||
|
|
idx = 0;
|
|||
|
|
num = 1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
num++;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
timeBuf = time;
|
|||
|
|
|
|||
|
|
if (num < 7) // <20><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
rxDat[idx] = rDat;
|
|||
|
|
//printf("num=%d, rxDat[%d] is 0x%x \r\n", num, idx, rxDat[idx]);
|
|||
|
|
idx++;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
rxDat[idx] = rDat;
|
|||
|
|
|
|||
|
|
if (num == rxDat[2]*2 + 5) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
//У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
|
|||
|
|
checkcrc = CalcCrc16(&rxDat[0], num-2);
|
|||
|
|
|
|||
|
|
if (rxDat[num-2] == HIBYTE(checkcrc) && rxDat[num-1] == LOBYTE(checkcrc))
|
|||
|
|
{//crcУ<63><D0A3><EFBFBD><EFBFBD>ȷ
|
|||
|
|
newCmd.addr = MAKEWORD(rxDat[1],rxDat[0]); // <20><><EFBFBD>ݵ<EFBFBD>ַ
|
|||
|
|
newCmd.rdlen = rxDat[2];
|
|||
|
|
for (int i = 0; i < newCmd.rdlen; i++)
|
|||
|
|
{
|
|||
|
|
newCmd.rddat[i] = MAKEWORD(rxDat[i*2+4],rxDat[i*2+3]); //<2F><><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
// ִ<><D6B4><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD>
|
|||
|
|
if (g_one2oneCtrl.resvexproc != NULL)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.resvexproc(&newCmd);
|
|||
|
|
}
|
|||
|
|
rst = 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
printf("check crc error, calc crc:0x%x 0x%x, receive crc:0x%x 0x%x\r\n",
|
|||
|
|
HIBYTE(checkcrc), LOBYTE(checkcrc), rxDat[num-2], rxDat[num-1]);
|
|||
|
|
}
|
|||
|
|
idx = 0;
|
|||
|
|
num = 0; // <20><><EFBFBD>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
idx++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return rst;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
|
|||
|
|
void InitOne2OneCtrl(int usart, BAUD_TypeDef baud, char dat, char parity, char stop, int rsvtimout)
|
|||
|
|
{
|
|||
|
|
InitOne2OneComm(usart, baud, dat, parity, stop);
|
|||
|
|
|
|||
|
|
memset(&g_one2oneCtrl, 0, sizeof(One2OneCtrl));
|
|||
|
|
|
|||
|
|
g_one2oneCtrl.rsvTimout = rsvtimout;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void RegOne2OneCmdProc(ResvOne2OneExProc proc)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.resvexproc = proc;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int AddOne2OneCmd(One2OneCmd * pCmd)
|
|||
|
|
{
|
|||
|
|
if (pCmd != NULL)
|
|||
|
|
{
|
|||
|
|
if (g_one2oneCtrl.bufCmdNum < MAX_ONE2ONE_CMD && g_one2oneCtrl.bufHead < MAX_ONE2ONE_CMD)
|
|||
|
|
{
|
|||
|
|
memcpy(&(g_one2oneCtrl.cmdbuf[g_one2oneCtrl.bufHead]), pCmd, sizeof(One2OneCmd));
|
|||
|
|
g_one2oneCtrl.bufHead++;
|
|||
|
|
if (g_one2oneCtrl.bufHead >= MAX_ONE2ONE_CMD)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.bufHead = 0;
|
|||
|
|
}
|
|||
|
|
g_one2oneCtrl.bufCmdNum++;
|
|||
|
|
return g_one2oneCtrl.bufCmdNum;
|
|||
|
|
}
|
|||
|
|
printf("bufcmd full\r\n");
|
|||
|
|
return -2;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
printf("para error\r\n");
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void One2OneTask(void)
|
|||
|
|
{
|
|||
|
|
int rslt;
|
|||
|
|
|
|||
|
|
// <20>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (g_one2oneCtrl.sending == 0 &&
|
|||
|
|
g_one2oneCtrl.bufCmdNum > 0 &&
|
|||
|
|
g_one2oneCtrl.steps == 0)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.sending = 1;
|
|||
|
|
g_one2oneCtrl.steps = 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_one2oneCtrl.sending != 0)
|
|||
|
|
{
|
|||
|
|
One2OneCmd *pCmd;
|
|||
|
|
pCmd = &(g_one2oneCtrl.cmdbuf[g_one2oneCtrl.bufTail]);
|
|||
|
|
|
|||
|
|
if (g_one2oneCtrl.steps > 0 && g_one2oneCtrl.steps < 3)
|
|||
|
|
{
|
|||
|
|
rslt = One2OneCommTx(pCmd->addr, &pCmd->wrdat[0], pCmd->wrlen, g_one2oneCtrl.steps);
|
|||
|
|
|
|||
|
|
if (rslt == g_one2oneCtrl.steps)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.steps++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (g_one2oneCtrl.steps == 3)
|
|||
|
|
{
|
|||
|
|
if (g_one2oneCtrl.bufCmdNum > 0)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.bufCmdNum--;
|
|||
|
|
}
|
|||
|
|
g_one2oneCtrl.steps = 0;
|
|||
|
|
g_one2oneCtrl.sending = 0;
|
|||
|
|
g_one2oneCtrl.bufTail++;
|
|||
|
|
if (g_one2oneCtrl.bufTail >= MAX_ONE2ONE_CMD)
|
|||
|
|
{
|
|||
|
|
g_one2oneCtrl.bufTail = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>մ<EFBFBD><D5B4>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
u8 rDat;
|
|||
|
|
int len;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
len = g_one2onecommCtrl.One2OneCommReceive(&rDat, 1); // <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
if (len == 1)
|
|||
|
|
{// <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
rslt = One2OneCommRx(rDat);
|
|||
|
|
if (rslt == 0)
|
|||
|
|
{// <20><><EFBFBD>յ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}while(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-----------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|