#include "proto.h" #include "util.h" #include "main.h" #include "data.h" #include "crc.h" #include #include #include "data.h" static int g_syn_number = 0; // 打包数据帧 int PacketHeader (uint8_t func, char * data, int length, char * txbuff) { char * p; char id [5]; p = ef_get_env ("device_id"); hexstr_to_hexbyte (p, id, 10); int tx_size = 0; uint16_t crc = 0; txbuff[tx_size++] = 0x7E; txbuff[tx_size++] = 0x7E; txbuff[tx_size++] = 0x01; txbuff[tx_size++] = 0xFF; txbuff[tx_size++] = 0xFF; for (int i = 0; i < 5; i++) { txbuff[tx_size++] = id[i]; } txbuff[tx_size++] = func; txbuff[tx_size++] = 0x00; txbuff[tx_size++] = length;// 长度 txbuff[tx_size++] = _651_STX; //dbg_printf ("sizeof (_651_U_Header_t):%d\r\n", tx_size); for (int i = 0; i < length; i++) { txbuff[tx_size++] = data[i]; } txbuff[tx_size++] = 0x03; crc = MX_CRC_CALC ( (uint8_t *) txbuff, tx_size); //MX_; txbuff[tx_size++] = (crc >> 8) & 0x00FF; txbuff[tx_size++] = crc & 0x00FF; return tx_size; // // 计算校验 } // 均匀时段报 int PakcetTimerUp (int k, char * tx_data) { char * p; char id [5]; p = ef_get_env ("device_id"); hexstr_to_hexbyte (p, id, 10); int tx_size = 0; g_syn_number ++; Int intk; tx_data[tx_size++] = (g_syn_number >> 8) & 0x00FF; tx_data[tx_size++] = g_syn_number & 0xFF; for (int i = 0; i < 6; i++) { tx_data[tx_size++] = 0; } for (int i = 0; i < 5; i++) { tx_data[tx_size++] = id[i]; } tx_data[tx_size++] = 0x5A; //闸坝 for (int i = 0; i < 6; i++) { tx_data[tx_size++] = 0; } tx_data[tx_size++] = 0x30; // 编码要素 tx_data[tx_size++] = 0xFF; // 要素1 瞬时流速 tx_data[tx_size++] = 0x31; // 要素1 瞬时流速 tx_data[tx_size++] = 0xFF; // 要素1 瞬时流量 tx_data[tx_size++] = 0x32; // 要素1 瞬时流量 tx_data[tx_size++] = 0xFF; // 要素1 累计流量 tx_data[tx_size++] = 0x33; // 要素1 累计流量 tx_data[tx_size++] = 0xFF; // 要素1 闸门开度 tx_data[tx_size++] = 0x34; // 要素1 闸门开度 tx_data[tx_size++] = 0xFF; // 要素1 闸门荷重 tx_data[tx_size++] = 0x35; // 要素1 闸门荷重 tx_data[tx_size++] = 0xFF; // 要素1 累计流量 tx_data[tx_size++] = 0x36; // 要素1 累计流量 tx_data[tx_size++] = 0xFF; // 要素1 闸门开度 tx_data[tx_size++] = 0x37; // 要素1 闸门开度 tx_data[tx_size++] = 0xFF; // 要素1 闸门荷重 tx_data[tx_size++] = 0x38; // 要素1 闸门荷重 tx_data[tx_size++] = 0xFF; // 要素1 闸前水位 tx_data[tx_size++] = 0x39; // 要素1 闸前水位 intk.data = WaterData[0].thisSpeed * 100; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; intk.data = WaterData[0].thisFlow * 100; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; intk.data = WaterData[0].ttWater * 100; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; intk.data = SluiceData[k].gopen * 10; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; intk.data = (SluiceData[k].lload + SluiceData[k].rload) * 10; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; // 要素6 最大开度 intk.data = ef_get_integer ("max_open") * 10; // 单位mm *10 tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; // 要素7 电池电压 intk.data = 0 * 100; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; // 要素8 机箱温度 intk.data = 0 * 100; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; // 要素9 闸前水位 intk.data = WaterData[0].thisLevel; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; return tx_size; } // 闸门状态自报 闸门开度发生变化时上报 int PacketSluiceUp (int k, char * tx_data) { int tx_size = 0; g_syn_number ++; Int intk; tx_data[tx_size++] = (g_syn_number >> 8) & 0x00FF; tx_data[tx_size++] = g_syn_number & 0xFF; tx_data[tx_size++] = 0x01; tx_data[tx_size++] = 0x01; // // 闸门开度 intk.data = SluiceData[k].gopen * 10; rt_kprintf("gopen:%d\r\n"); tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; intk.data = (SluiceData[k].lload + SluiceData[k].rload) * 10; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; // 闸前水位 intk.data = WaterData[0].thisLevel; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; // 瞬时流量 intk.data = 0 * 100; tx_data[tx_size++] = intk.byte[3]; tx_data[tx_size++] = intk.byte[2]; tx_data[tx_size++] = intk.byte[1]; tx_data[tx_size++] = intk.byte[0]; return tx_size; } // 接受到提闸数据时,应答的ACK int PacketSluiceAck (char* tx_data) { int tx_size = 0; g_syn_number ++; tx_data[tx_size++] = (g_syn_number >> 8) & 0x00FF; tx_data[tx_size++] = g_syn_number & 0xFF; for (int i = 0; i < 6; i++) { tx_data[tx_size++] = 0; } for (int i = 0; i < 5; i++) { tx_data[tx_size++] = 0xEE; } return tx_size; } int PacketAnsAck (char * tx_data) { int size = 0; size = rt_sprintf (tx_data, "{\"result\":\"ok\"}"); return size; } int PacketUpRegist (char * tx_data) { int tx_size = rt_sprintf (tx_data, "{\"iccid\":\"%s\",\"version\":\"%s\"}", SysData.iccid, VERSION); return tx_size ; }