240 lines
5.9 KiB
C
240 lines
5.9 KiB
C
#include "proto.h"
|
||
#include "util.h"
|
||
#include "main.h"
|
||
#include "data.h"
|
||
#include "crc.h"
|
||
#include <ef_api.h>
|
||
#include <rtthread.h>
|
||
#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 ;
|
||
}
|
||
|
||
|
||
|
||
|