forked from ccsens_hardware/stc_touch_pen
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.2 KiB
108 lines
3.2 KiB
3 years ago
|
#include "app_task_485.h"
|
||
|
#include "../msp/uart0.h"
|
||
|
#include "../msp/uart2.h"
|
||
|
#include "../app/app_common.h"
|
||
|
|
||
|
#define MODBUS_SLAVER_RETRY_MAX_TIME 3
|
||
|
|
||
|
TS_485 ts_485;
|
||
|
|
||
|
void L3_task_485_init(void)
|
||
|
{
|
||
|
L1_task_init(&ts_485.task);
|
||
|
L3_task_s_go(ts_485,D_task_init);
|
||
|
ts_485.slaverIndex = 0;
|
||
|
ts_485.pkglen = 0;
|
||
|
ts_485.retryTimes = 0;
|
||
|
}
|
||
|
|
||
|
#define D_task_485_constructor_modbus_pkg 0x51
|
||
|
#define D_task_485_send_modbus_pkg 0x52
|
||
|
#define D_task_485_wait_modbus_ack 0x53
|
||
|
#define D_task_485_switch_next_slaver 0x54
|
||
|
|
||
|
void L3_task_485_handle(TS_485 *s)
|
||
|
{
|
||
|
TTSS_Task_init();
|
||
|
L2_task_go(D_task_485_constructor_modbus_pkg);
|
||
|
|
||
|
TTSS_Task_step(D_task_485_constructor_modbus_pkg)
|
||
|
if(G.md_slaver_info[s->slaverIndex].mask > 0)
|
||
|
{
|
||
|
s->pkglen = L3_pack_modbus(&s->loopPkg,G.md_slaver_info + s->slaverIndex);
|
||
|
s->retryTimes = 0;
|
||
|
L2_task_go(D_task_485_send_modbus_pkg);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
L2_task_go(D_task_485_switch_next_slaver);
|
||
|
}
|
||
|
|
||
|
TTSS_Task_step(D_task_485_send_modbus_pkg)
|
||
|
L0_uart2_sendArray((U8*)&s->loopPkg,s->pkglen);
|
||
|
s->sendStamp = s_nos_tick.jiffies;
|
||
|
s->slaver = G.md_slaver_info[s->slaverIndex].slaver;
|
||
|
L2_task_go(D_task_485_wait_modbus_ack);
|
||
|
|
||
|
TTSS_Task_step(D_task_485_wait_modbus_ack)
|
||
|
if(s_uart2_rec.ok == 1) //接收到ack
|
||
|
{
|
||
|
s_uart2_rec.ok = 0;
|
||
|
s->pAckPkg = (TS_PH4_modbus*)(s_uart2_rec.buf);
|
||
|
if(s->pAckPkg->salver == s->slaver)
|
||
|
{
|
||
|
if(G.md_slaver_info[s->slaverIndex].mask == 1)
|
||
|
{
|
||
|
G.md_slaver_info[s->slaverIndex].mask = 0;
|
||
|
}
|
||
|
if(s->slaver == SLAVER_ASGA03_01 || s->slaver == SLAVER_ASGA03_02) //0和1是 倾角
|
||
|
{
|
||
|
s->pAngle = (TS_Angle*)(s->pAckPkg->buf + 1);
|
||
|
G.currentSensorVal[s->slaver - U485_BASE] = (U16)s->pAngle->xaxis[0] << 8 | s->pAngle->xaxis[1];
|
||
|
G.papers[s->slaver - U485_BASE].version = APP_VERSION_HEX;
|
||
|
G.papers[s->slaver - U485_BASE].LowPower = 0x00; //1bit
|
||
|
G.papers[s->slaver - U485_BASE].cameraNotWorking = 0x00; //1bit
|
||
|
G.papers[s->slaver - U485_BASE].cameraIndex = s->slaver - U485_BASE; //4bit
|
||
|
G.papers[s->slaver - U485_BASE].paperNum =
|
||
|
L2_paper_count(s->slaver - U485_BASE, (U16)s->pAngle->xaxis[0] << 8 | s->pAngle->xaxis[1]); //10bit
|
||
|
//L0_uart0_uc(s->pAngle->xaxis[0]);
|
||
|
//L0_uart0_uc(s->pAngle->xaxis[1]);
|
||
|
}
|
||
|
L2_task_go(D_task_485_switch_next_slaver);
|
||
|
}
|
||
|
//else继续等待
|
||
|
}
|
||
|
else if(s_nos_tick.jiffies - s->sendStamp >= 20) //超时
|
||
|
{
|
||
|
if(++s->retryTimes >= MODBUS_SLAVER_RETRY_MAX_TIME)
|
||
|
{
|
||
|
if(s->slaver == SLAVER_ASGA03_01 || s->slaver == SLAVER_ASGA03_02) //0和1是 倾角
|
||
|
{
|
||
|
G.papers[s->slaver - U485_BASE].version = APP_VERSION_HEX;
|
||
|
G.papers[s->slaver - U485_BASE].LowPower = 0x00; //1bit
|
||
|
G.papers[s->slaver - U485_BASE].cameraNotWorking = 0x01; //1bit
|
||
|
G.papers[s->slaver - U485_BASE].cameraIndex = s->slaver - U485_BASE; //4bit
|
||
|
G.papers[s->slaver - U485_BASE].paperNum = 0x00; //10bit
|
||
|
}
|
||
|
L2_task_go(D_task_485_switch_next_slaver);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
L2_task_go(D_task_485_send_modbus_pkg);
|
||
|
}
|
||
|
}
|
||
|
//else继续等待 //未接受到数据,但未超时
|
||
|
|
||
|
TTSS_Task_step(D_task_485_switch_next_slaver)
|
||
|
if(++ s->slaverIndex >= MD_SLAVER_INFO_MAX)
|
||
|
{
|
||
|
s->slaverIndex = 0;
|
||
|
}
|
||
|
L2_task_go_Tdelay(D_task_485_constructor_modbus_pkg,D_Tdelay_400ms);
|
||
|
|
||
|
TTSS_Task_end();
|
||
|
}
|
||
|
|
||
|
|
||
|
|