|
|
@ -9,21 +9,31 @@ |
|
|
|
|
|
|
|
S_TASK_SCREEN _s_task_screen; |
|
|
|
|
|
|
|
// SCRSetValPkg scrSetValPkg =
|
|
|
|
// {
|
|
|
|
// 0xA5, 0x5A, //帧头
|
|
|
|
// 0x1C, //长度
|
|
|
|
// 0x82, //指令
|
|
|
|
// 0x02, 0xA1, //起始地址
|
|
|
|
// 0x00, 0x00, //体重
|
|
|
|
// 0x00, 0x00, //电量
|
|
|
|
// 0x00, 0x00, //网络状态
|
|
|
|
// 0x00, 0x00, //单位标志
|
|
|
|
// 0x00, 0x00, //语言标志
|
|
|
|
// 0x00, 0x00, //蜂鸣器状态
|
|
|
|
// 0x00, 0x00, //
|
|
|
|
// 0x00, 0x00, //离床报警标志
|
|
|
|
// 0x00, 0x00, //
|
|
|
|
// 0x1C, 0x78, //CRC
|
|
|
|
// };
|
|
|
|
|
|
|
|
SCRSetValPkg scrSetValPkg = |
|
|
|
{ |
|
|
|
0xA5, 0x5A, //帧头
|
|
|
|
0x1C, //长度
|
|
|
|
0x07, //长度
|
|
|
|
0x82, //指令
|
|
|
|
0x01, 0x1E, //起始地址
|
|
|
|
0x02, 0xA1, //起始地址
|
|
|
|
0x00, 0x00, //体重
|
|
|
|
0x00, 0x00, //电量
|
|
|
|
0x00, 0x00, //网络状态
|
|
|
|
0x00, 0x00, //单位标志
|
|
|
|
0x00, 0x00, //语言标志
|
|
|
|
0x00, 0x00, //蜂鸣器状态
|
|
|
|
0x00, 0x00, //
|
|
|
|
0x00, 0x00, //离床报警标志
|
|
|
|
0x00, 0x00, //
|
|
|
|
0x1C, 0x78, //CRC
|
|
|
|
}; |
|
|
|
|
|
|
@ -69,23 +79,33 @@ void L3_task_screen_handler(S_TASK_SCREEN *s) |
|
|
|
// L0_uart1_str("_s_task_screen.task.sh: ");
|
|
|
|
// L0_uart1_uchex(_s_task_screen.task.sh);
|
|
|
|
// L0_uart1_0d0a();
|
|
|
|
TTSS_Task_init(): |
|
|
|
TTSS_Task_init(): |
|
|
|
L2_task_go(D_task_RS485_SEND_BEFORE); |
|
|
|
//发送前
|
|
|
|
TTSS_Task_step(D_task_RS485_SEND_BEFORE): |
|
|
|
//检测功耗模式
|
|
|
|
ScreenPingOff_judge(); |
|
|
|
if(R.ScrTouch_flag == 0)// if (s->power_mode == POWER_LOW)
|
|
|
|
{ |
|
|
|
//发送熄屏指令
|
|
|
|
L1_uart1_Array((U8 *)&scrPingOffPkg, sizeof(scrPingOffPkg)); |
|
|
|
} |
|
|
|
else if(R.ScrTouch_flag == 1) |
|
|
|
// L0_uart1_str("R.power_mode: ");
|
|
|
|
// L0_uart1_uchex(R.power_mode);
|
|
|
|
// L0_uart1_0d0a();
|
|
|
|
// L0_uart1_str("s->power_mode : ");
|
|
|
|
// L0_uart1_uchex(s->power_mode );
|
|
|
|
// L0_uart1_0d0a();
|
|
|
|
|
|
|
|
if(s->power_mode != R.power_mode) |
|
|
|
{ |
|
|
|
//发送亮屏指令
|
|
|
|
L1_uart1_Array((U8 *)&scrPingOnPkg, sizeof(scrPingOnPkg)); |
|
|
|
s->power_mode = R.power_mode; |
|
|
|
if(R.ScrTouch_flag == 0) // if (s->power_mode == POWER_LOW)
|
|
|
|
{ |
|
|
|
//发送熄屏指令
|
|
|
|
L1_uart1_Array((U8 *)&scrPingOffPkg, sizeof(scrPingOffPkg)); |
|
|
|
} |
|
|
|
else if(R.ScrTouch_flag == 1) |
|
|
|
{ |
|
|
|
//发送亮屏指令
|
|
|
|
L1_uart1_Array((U8 *)&scrPingOnPkg, sizeof(scrPingOnPkg)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
L2_task_go_Tdelay(D_task_RS485_SEND, D_Tdelay_400ms); |
|
|
|
//发送
|
|
|
|
TTSS_Task_step(D_task_RS485_SEND): |
|
|
@ -113,47 +133,51 @@ void constructor_scr_pkg() |
|
|
|
// L0_uart1_0d0a();
|
|
|
|
if(R.danwei == KG) |
|
|
|
{ |
|
|
|
scrSetValPkg.buf.weight_kgx100[0] = (R.weight.kgx10_out * 10) >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.weight_kgx100[1] = (R.weight.kgx10_out * 10) >> 0 & 0xFF; |
|
|
|
scrSetValPkg.weight_kgx100[0] = (R.weight.kgx10_out * 10) >> 8 & 0xFF; |
|
|
|
scrSetValPkg.weight_kgx100[1] = (R.weight.kgx10_out * 10) >> 0 & 0xFF; |
|
|
|
} |
|
|
|
else if(R.danwei == lb) //1kg = 2.20462262磅
|
|
|
|
{ |
|
|
|
scrSetValPkg.buf.weight_kgx100[0] = (R.weight.kgx10_out * 22) >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.weight_kgx100[1] = (R.weight.kgx10_out * 22) >> 0 & 0xFF; |
|
|
|
scrSetValPkg.weight_kgx100[0] = (R.weight.kgx10_out * 22) >> 8 & 0xFF; |
|
|
|
scrSetValPkg.weight_kgx100[1] = (R.weight.kgx10_out * 22) >> 0 & 0xFF; |
|
|
|
} |
|
|
|
// L0_uart1_str("scrSetValPkg.buf.dl: ");
|
|
|
|
// L0_uart1_us(R.dl);
|
|
|
|
// L0_uart1_0d0a();
|
|
|
|
scrSetValPkg.buf.dl[0] = R.dl >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.dl[1] = R.dl >> 0 & 0xFF; |
|
|
|
// scrSetValPkg.buf.dl[0] = R.dl >> 8 & 0xFF;
|
|
|
|
// scrSetValPkg.buf.dl[1] = R.dl >> 0 & 0xFF;
|
|
|
|
|
|
|
|
scrSetValPkg.buf.net_status[0] = R.net_status >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.net_status[1] = R.net_status >> 0 & 0xFF; |
|
|
|
|
|
|
|
scrSetValPkg.buf.danwei[0] = R.danwei >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.danwei[1] = R.danwei >> 0 & 0xFF; |
|
|
|
// scrSetValPkg.buf.net_status[0] = R.net_status >> 8 & 0xFF;
|
|
|
|
// scrSetValPkg.buf.net_status[1] = R.net_status >> 0 & 0xFF;
|
|
|
|
//
|
|
|
|
// scrSetValPkg.buf.danwei[0] = R.danwei >> 8 & 0xFF;
|
|
|
|
// scrSetValPkg.buf.danwei[1] = R.danwei >> 0 & 0xFF;
|
|
|
|
|
|
|
|
scrSetValPkg.buf.beep[0] = R.beep >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.beep[1] = R.beep >> 0 & 0xFF; |
|
|
|
// scrSetValPkg.buf.beep[0] = R.beep >> 8 & 0xFF;
|
|
|
|
// scrSetValPkg.buf.beep[1] = R.beep >> 0 & 0xFF;
|
|
|
|
|
|
|
|
scrSetValPkg.buf.LeaveForbid_flag[0] = R.LeaveForbid_flag >> 8 & 0xFF; |
|
|
|
scrSetValPkg.buf.LeaveForbid_flag[1] = R.LeaveForbid_flag >> 0 & 0xFF; |
|
|
|
// scrSetValPkg.buf.LeaveForbid_flag[0] = R.LeaveForbid_flag >> 8 & 0xFF;
|
|
|
|
// scrSetValPkg.buf.LeaveForbid_flag[1] = R.LeaveForbid_flag >> 0 & 0xFF;
|
|
|
|
|
|
|
|
CRC = CRC_16(((U8 *)&scrSetValPkg) + 3, 21); |
|
|
|
CRC = CRC_16(((U8 *)&scrSetValPkg) + 3, 5); |
|
|
|
scrSetValPkg.crc[1] = CRC; |
|
|
|
scrSetValPkg.crc[0] = CRC >> 8; |
|
|
|
} |
|
|
|
|
|
|
|
// 屏幕回传协议解析
|
|
|
|
// 屏幕回传协议解析 A5 5A 07 83 00 01 02 22 00 00
|
|
|
|
void parse_screen_pkg() |
|
|
|
{ |
|
|
|
SCReturnPkg *p = (SCReturnPkg *) ts_Urec[D_UART1].reg; |
|
|
|
SCReturnPkg *p = (SCReturnPkg *) ts_Urec[D_UART1].sp; |
|
|
|
// p->ocr = p->buf[p->num[0] << 8 | p->num[1]];
|
|
|
|
if(p->head[0] == 0xA5 && p->head[1] == 0x5A/*count_ocr() */) |
|
|
|
L1_uart1_Array((U8 *)&p, sizeof(p)); |
|
|
|
if(p->head[0] == 0xA5 && p->head[1] == 0x5A/*count_ocr()*/) |
|
|
|
{ |
|
|
|
if(p->cmd == 0x83) |
|
|
|
{ |
|
|
|
//L0_uart1_str("Enter1->:");
|
|
|
|
// L0_uart1_0d0a();
|
|
|
|
R.ScrTouch_flag = 1; |
|
|
|
R.power_mode = POWER_NORMAL; |
|
|
|
R.ScrTouch_time = D_sys_now; //2024.9.13 15:04:59
|
|
|
|
// 按钮
|
|
|
|
if(p->start_addr[0] == 0x06) |
|
|
@ -169,27 +193,33 @@ void parse_screen_pkg() |
|
|
|
break; |
|
|
|
case 0xD3://离床报警
|
|
|
|
R.LeaveForbid_flag = LeaveForbid_OPEN;//按键按下时,就置标志位R.LeaveForbid_flag == LeaveForbid_OPEN和获取参考点位的重量。
|
|
|
|
R.Weight_Ref = tst_weight.kgx10; // 参考重量 weight_ref = 当前重量
|
|
|
|
R.Weight_Ref = tst_weight.kgx10; // 参考重量 weight_ref = 当前重量
|
|
|
|
L0_uart1_str("LeaveForbid_OPEN!!!"); |
|
|
|
L0_uart1_0d0a(); |
|
|
|
break; |
|
|
|
case 0xD4://保存
|
|
|
|
screen_save_push(tst_weight.kgx10);// register1 = tst_weight.kgx10;
|
|
|
|
break; |
|
|
|
case 0xD5://校准菜单按钮
|
|
|
|
scrSetValPkg.buf.ui[1] = p->Data[1]; |
|
|
|
// scrSetValPkg.buf.ui[1] = p->Data[1];
|
|
|
|
break; |
|
|
|
case 0xD6://语言切换
|
|
|
|
scrSetValPkg.buf.language[1] = p->Data[1]; |
|
|
|
// scrSetValPkg.buf.language[1] = p->Data[1];
|
|
|
|
break; |
|
|
|
case 0xD7://重量单位切换
|
|
|
|
R.danwei = p->Data[1]; |
|
|
|
break; |
|
|
|
case 0xD8://查看历史数据
|
|
|
|
L0_Iap_Read_array(EEPROM_WEIGHT_ADDR, screen_save_arr,sizeof(screen_save_arr));//1先从eeprom中读出数组
|
|
|
|
// 判断头尾
|
|
|
|
|
|
|
|
// 2推送到屏幕
|
|
|
|
|
|
|
|
break; |
|
|
|
case 0xD9://校准确认
|
|
|
|
ts_weight_SPara.ts_WPoint[pd485->buf[0]].kg = D_2uc_u16(pd485->buf[1],pd485->buf[2]); |
|
|
|
ts_weight_SPara.ts_WPoint[pd485->buf[0]].adc = tst_weight.adc32;////使用当前采样值
|
|
|
|
case 0xD9://校准确认 buf[index] 放入寄存器,写入eeprom
|
|
|
|
// ts_weight_SPara.ts_WPoint[pd485->buf[0]].kg = D_2uc_u16(pd485->buf[1],pd485->buf[2]);
|
|
|
|
ts_weight_SPara.ts_WPoint[pd485->buf[R.calib_index]].kg = R.calib_kg; |
|
|
|
ts_weight_SPara.ts_WPoint[pd485->buf[R.calib_index]].adc = tst_weight.adc32;//使用当前采样值
|
|
|
|
L4_WPoint_out(); |
|
|
|
//写入IAP
|
|
|
|
L3_R_2_S(); |
|
|
@ -205,10 +235,10 @@ void parse_screen_pkg() |
|
|
|
switch (p->start_addr[1]) |
|
|
|
{ |
|
|
|
case 0xA1://校准点
|
|
|
|
// register2 = p->data[1];
|
|
|
|
R.calib_index = p->Data[1]; |
|
|
|
break; |
|
|
|
case 0xA2://校准体重
|
|
|
|
// register3 = p->data[1];
|
|
|
|
R.calib_kg = p->Data[0] << 8 & p->Data[1]; |
|
|
|
break; |
|
|
|
default: |
|
|
|
break; |
|
|
@ -238,8 +268,8 @@ U16 CRC_16(U8 *pMsg, U16 Len) |
|
|
|
// 180s无操作 判定函数
|
|
|
|
void ScreenPingOff_judge(void) |
|
|
|
{ |
|
|
|
U32 Ntime = D_sys_now; |
|
|
|
if( Ntime - R.ScrTouch_time > D_COUNT_JIFFIES(180000)) |
|
|
|
U32 Nowtime = D_sys_now; |
|
|
|
if( Nowtime - R.ScrTouch_time > D_COUNT_JIFFIES(5000)) //180000 180秒
|
|
|
|
{ |
|
|
|
R.ScrTouch_flag = 0; |
|
|
|
R.power_mode = POWER_LOW; |
|
|
|