g0b1vetx-board/Board/network/proto.c
2584532475@qq.com 4a963bd78c 2024-05-31
2024-05-31 16:57:54 +08:00

240 lines
5.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 ;
}