新建项目
This commit is contained in:
1 parent
5e2e890cfc
commit
633d9b872b
1351 files changed
+730564
No files matched your search
+589
@@ -0,0 +1,589 @@
|
||||
#include "net-app.h"
|
||||
//#include "eth-board.h"
|
||||
//#include "ec200-board.h"
|
||||
//#include "uart-board.h"
|
||||
//#include "stm32l0xx_hal.h"
|
||||
//#include "save-board.h"
|
||||
//#include "sysinfo-app.h"
|
||||
#include "proto-sl651.h"
|
||||
//#include "sluice-control.h"
|
||||
//#include "base64.h"
|
||||
//#include "log.h"
|
||||
//#include "ff-collected.h"
|
||||
#include "fifo-board.h"
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "NET"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
// 这里处理网络通信的数据,不管是以太网还是4g都在这里处理
|
||||
|
||||
#define UTH uEth
|
||||
|
||||
typedef enum
|
||||
{
|
||||
YmodmApplication,
|
||||
YmodemToDo,
|
||||
YmodmSendFileName,
|
||||
YmodmAck,
|
||||
YmodmC,
|
||||
YmodmHead,
|
||||
Ymodm1024,
|
||||
YmodmERROR,
|
||||
YmodmEOT,
|
||||
YModmIdle
|
||||
} YmodemState_t; // = YmodmApplication;
|
||||
|
||||
|
||||
NetPacket_t g_fifo_netpacket[10];
|
||||
|
||||
static int IsInitialized = 0;
|
||||
static struct
|
||||
{
|
||||
uint32_t unifTimer; // 时段报时间
|
||||
uint32_t linkTimer; // 心跳报时间
|
||||
uint32_t flowTimer; // 流量计时间
|
||||
int retryCount;
|
||||
YmodemState_t State;
|
||||
int Error;
|
||||
int IsFirstConnection; // 第一次链接成功
|
||||
int UpdateLock; // 升级锁
|
||||
} g_netinfo;
|
||||
|
||||
static struct
|
||||
{
|
||||
char updatePacket[64]; // 升级请求 包
|
||||
int delayTimer; // 收到升级命令后延迟5s 进入升级
|
||||
int PacketSize; // 数据报大小
|
||||
uint32_t ssNumber;
|
||||
uint32_t cTimer;
|
||||
} g_ymodeinfo;
|
||||
|
||||
|
||||
#pragma pack(1) /*1字节对齐*/
|
||||
static struct rx_data_t
|
||||
{
|
||||
uint8_t header[2];
|
||||
uint8_t devid[5];
|
||||
uint8_t centerid;
|
||||
uint8_t password[2];
|
||||
uint8_t type;
|
||||
uint8_t flag;
|
||||
uint8_t payloadsize;
|
||||
uint8_t payStart;
|
||||
struct
|
||||
{
|
||||
uint16_t synNum;
|
||||
uint8_t payLoad[512];
|
||||
} Payload;
|
||||
uint8_t payStop;
|
||||
uint16_t crc;
|
||||
} g_rx_data;
|
||||
#pragma pack()/*还原默认对齐*/
|
||||
|
||||
static Fifo_t g_NetFifo;
|
||||
|
||||
static NetFunc_t NetFunc;
|
||||
|
||||
static uint16_t ymodemCRC16 (uint8_t *Pushdata, uint16_t length);
|
||||
//static int NETModifyPara(char *data, int length);
|
||||
//static int NETReadPara(char *data, int max);
|
||||
//static int netDownloadHandle (uint8_t type, char *data, int length);
|
||||
static int netUploadHandle (char *data);
|
||||
static void netSendPacket (void);
|
||||
static void netInit (void);
|
||||
|
||||
// 上报基础参数
|
||||
static void netWritebaseParams (void);
|
||||
static void netWriteInterfaceParams (void);
|
||||
static void netWriteSluiceParams (void);
|
||||
static void netWriteWaterParams (void);
|
||||
|
||||
void NetSystemTick (void)
|
||||
{
|
||||
if (g_netinfo.unifTimer > 1)
|
||||
{
|
||||
g_netinfo.unifTimer--;
|
||||
}
|
||||
if (g_netinfo.flowTimer > 1)
|
||||
{
|
||||
g_netinfo.flowTimer--;
|
||||
}
|
||||
if (g_netinfo.linkTimer > 1)
|
||||
{
|
||||
g_netinfo.linkTimer--;
|
||||
}
|
||||
if (g_ymodeinfo.delayTimer > 1)
|
||||
{
|
||||
g_ymodeinfo.delayTimer--;
|
||||
}
|
||||
if (g_ymodeinfo.cTimer > 1)
|
||||
{
|
||||
g_ymodeinfo.cTimer--;
|
||||
}
|
||||
}
|
||||
|
||||
// 如下为网络队列调用函数,wirebuffer 不等于多个writebyte
|
||||
void NET_FifoWritebuffer (char *buffer, int size)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
packet.data_size = size;
|
||||
memcpy (packet.data, buffer, size);
|
||||
FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet)); // 数据写入队列中去
|
||||
}
|
||||
|
||||
void NET_FifoWriteByte (char byte)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
packet.data_size = 1;
|
||||
packet.data[0] = byte;
|
||||
FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet)); // 数据写入队列中去
|
||||
}
|
||||
|
||||
// N 1024 filename <<<<<<<<<<<<<<<<<<<< 文件名,切包大小
|
||||
// 06 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
// C C <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
// SOH[128] 00 >>>>>>>>>>>>>>>>>>>>>>>>> CRC //第一报
|
||||
// ACK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
// STX[256/1024] 01 >>>>>>>>>>>>>>>>>>>> CRC //第一报
|
||||
// ACK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
// STX[256/1024] 01 >>>>>>>>>>>>>>>>>>>> CRC //第一报
|
||||
// ACK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
// EOT >>>>>>>>>>>>>>>>>>>> CRC //第一报
|
||||
// NAK <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
// 17 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||
|
||||
/**
|
||||
* @brief Receive a file using the ymodem protocol
|
||||
* @param buf: Address of the first byte
|
||||
* @retval -1: error 1 first packet received 2: 1024 packet received 5:EOT packet received
|
||||
*/
|
||||
int32_t Ymodem_Receive (uint8_t *buf, int length)
|
||||
{
|
||||
// 获取序号
|
||||
g_ymodeinfo.ssNumber = buf[1];
|
||||
// g_ssNumber = buf[1];
|
||||
uint16_t rCrc, cCrc;
|
||||
int ret = 0;
|
||||
// 计算CRC校验
|
||||
cCrc = ymodemCRC16 (buf, length - 2);
|
||||
rCrc = ( (uint16_t) buf[length - 2] << 8) + (uint16_t) buf[length - 1];
|
||||
log_d ("CCRC:%04X rCrc:%04X\r\n", cCrc, rCrc);
|
||||
if (cCrc != rCrc)
|
||||
{
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
log_d ("%02X ", buf[i]);
|
||||
}
|
||||
return -1; // 升级失败
|
||||
}
|
||||
log_d ("\r\n");
|
||||
log_d ("....................%d\r\n", buf[1]);
|
||||
if (buf[0] == SOH)
|
||||
{
|
||||
log_d ("FileName:%s\r\n", &buf[3]);
|
||||
//SaveWriteFirmware (g_ymodeinfo.ssNumber, &buf[3], 128);
|
||||
ret = 1;
|
||||
}
|
||||
else if (buf[0] == STX)
|
||||
{
|
||||
if (g_ymodeinfo.PacketSize == 1024)
|
||||
{
|
||||
//SaveWriteFirmware (g_ymodeinfo.ssNumber, &buf[3], 1024);
|
||||
}
|
||||
else if (g_ymodeinfo.PacketSize == 256)
|
||||
{
|
||||
//SaveWriteFirmware256 (g_ymodeinfo.ssNumber, &buf[3], 256);
|
||||
}
|
||||
ret = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = -1;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint16_t ymodemCRC16 (uint8_t *Pushdata, uint16_t length)
|
||||
{
|
||||
uint16_t crc = 0;
|
||||
while (length--)
|
||||
{
|
||||
crc ^= (uint16_t) (* (Pushdata++)) << 8;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
if (crc & 0x8000)
|
||||
{
|
||||
crc = (crc << 1) ^ 0x1021;
|
||||
}
|
||||
else
|
||||
{
|
||||
crc = crc << 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern int netDownloadHandle (uint8_t type, char *data, int length);
|
||||
void NetTask (void)
|
||||
{
|
||||
char rxdata[1200];
|
||||
//char rxdata_decode[256];
|
||||
int rsize, tx_size;//rdsize = 0, ;
|
||||
char tx_data[256];
|
||||
int ret = 0;
|
||||
uint16_t paysize;
|
||||
// int payloadsize = 0;
|
||||
//char * p;
|
||||
// 初始化网络驱动
|
||||
if (IsInitialized == 0)
|
||||
{
|
||||
netInit();
|
||||
g_netinfo.State = YmodmApplication;
|
||||
IsInitialized = 1;
|
||||
log_d ("Initializing network...");
|
||||
}
|
||||
// 验证网络驱动是否初始化成功
|
||||
if (NetFunc.Init == NULL)
|
||||
{
|
||||
log_d ("NetFunc.Init failed\n");
|
||||
return;
|
||||
}
|
||||
if (NetFunc.IsIdle() == 1) // 网络空闲 发送网络数据
|
||||
{
|
||||
// dbg_printf("NetFunc.IsIdle\n");
|
||||
|
||||
netSendPacket();
|
||||
}
|
||||
switch (g_netinfo.State)
|
||||
{
|
||||
case YmodmApplication: // 走业务数据
|
||||
if (NetFunc.IsReady() == 1)
|
||||
{
|
||||
/* 处理接受到的数据--------------------------------------------*/
|
||||
memset (rxdata, 0, 1200);
|
||||
rsize = NetFunc.ReadData (rxdata, 1200);
|
||||
// 解析数据
|
||||
//hexstr_to_hexbyte (rxdata, (char *) &g_rx_data, rsize);
|
||||
//dbg_printf("%s\r\n",rxdata);
|
||||
//dbg_printf("%04X\r\n",g_rx_data.payloadsize);
|
||||
paysize = ( (uint16_t) (g_rx_data.flag & 0x0F) << 8) + (uint16_t) g_rx_data.payloadsize ;
|
||||
//g_rx_data.payloadsize = (g_rx_data.payloadsize & 0x0FFF) ;
|
||||
g_rx_data.payStop = g_rx_data.Payload.payLoad[paysize - 2];
|
||||
g_rx_data.crc = ( (uint16_t) g_rx_data.Payload.payLoad[paysize - 1] << 8) + (uint16_t) g_rx_data.Payload.payLoad[paysize];
|
||||
//g_rx_data.Payload.payLoad[paysize] = 0;
|
||||
log_d ("<<<<<<<<<<<<rx_size:%d\r\n", paysize);
|
||||
log_d ("Header: %X%X\r\n", g_rx_data.header[0], g_rx_data.header[1]);
|
||||
log_d ("devid: %02X%02X%02X%02X%02X\r\n",
|
||||
g_rx_data.devid[0],
|
||||
g_rx_data.devid[1],
|
||||
g_rx_data.devid[2],
|
||||
g_rx_data.devid[3],
|
||||
g_rx_data.devid[4]);
|
||||
log_d ("center: %d,pass:%02X%02X,type:%02X,flag:%04X\r\n", g_rx_data.centerid, g_rx_data.password[0], g_rx_data.password[1], g_rx_data.type, g_rx_data.flag);
|
||||
log_d ("payloadsize:%d\r\n", paysize);
|
||||
log_d ("start:%d,seq:%d\r\n", g_rx_data.payStart, g_rx_data.Payload.synNum);
|
||||
for (int i = 0; i < paysize - 2; i++)
|
||||
{
|
||||
log_d ("%02X ", g_rx_data.Payload.payLoad[i]);
|
||||
}
|
||||
log_d ("\r\n");
|
||||
|
||||
log_d ("payStop:%d,crc:%04x\r\n", g_rx_data.payStop, g_rx_data.crc);
|
||||
//log3_printf("center: %d,pass:%02X%02X,type:%02X,flag:%02X\r\n", g_rx_data.centerid, g_rx_data.password[0],g_rx_data.password[1],g_rx_data.type,g_rx_data.flag);
|
||||
// 校验CRC
|
||||
// 数据长度
|
||||
// payloadsize = rxdata_decode[12]-2; // 取payloadsize 去掉两位序列号
|
||||
// log3_printf("Header:%X%X\r\n",rxdata_decode[0],rxdata_decode[1]);
|
||||
// log3_printf("DevAddr%02X%02X%02X%02X%02X\r\n",rxdata_decode[2],rxdata_decode[3],rxdata_decode[4],rxdata_decode[5],rxdata_decode[6]);
|
||||
// log3_printf("Payload size:%X\r\n",payloadsize);
|
||||
// // 接受到远程升级命令
|
||||
|
||||
if (netDownloadHandle (g_rx_data.type, (char *) g_rx_data.Payload.payLoad, paysize - 2) == 0xE0)
|
||||
{
|
||||
g_netinfo.State = YmodemToDo;
|
||||
g_ymodeinfo.delayTimer = 5000;
|
||||
}
|
||||
}
|
||||
// tx_size = netUploadHandle (tx_data);
|
||||
// if (tx_size > 0)
|
||||
// {
|
||||
// FifoWritebuffer (tx_data, tx_size);
|
||||
// }
|
||||
|
||||
break;
|
||||
case YmodemToDo: // 已经接受到升级命令,等待5S业务数据发送完成,进入升级
|
||||
{
|
||||
if (g_ymodeinfo.delayTimer == 1) // 升级时间到
|
||||
{
|
||||
g_ymodeinfo.delayTimer = 0;
|
||||
|
||||
NetFunc.ReSubTopic ("update"); // 链接到升级服务器
|
||||
g_netinfo.State = YmodmSendFileName;
|
||||
g_netinfo.retryCount = 5;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case YmodmSendFileName:
|
||||
if (NetFunc.IsIdle() == 1)
|
||||
{
|
||||
g_netinfo.retryCount--;
|
||||
|
||||
// packet.data_size = PP_AddHeader (0x2F, state, 4, packet.data) ;
|
||||
// FifoWrite (&g_NetFifo, (char *) &packet, sizeof(packet)); // 数据写入队列中去
|
||||
NET_FifoWritebuffer (g_ymodeinfo.updatePacket, strlen (g_ymodeinfo.updatePacket));
|
||||
|
||||
g_netinfo.State = YmodmAck; /// g_isStart = 2;
|
||||
g_ymodeinfo.delayTimer = 3000; // 等待 3s
|
||||
}
|
||||
if (g_netinfo.retryCount == 0) // 如果超过5次尝试没有链接升级服务器,就认为升级失败
|
||||
{
|
||||
NET_FifoWriteByte (YMFILD);
|
||||
// packet.data_size = 1;
|
||||
// packet.data[0] = lFAIL;
|
||||
// FifoWrite(&g_NetFifo, (char *)&packet, sizeof(packet)); // 数据写入队列中去
|
||||
g_ymodeinfo.delayTimer = 1000;
|
||||
g_netinfo.State = YmodmERROR;
|
||||
}
|
||||
break;
|
||||
case YmodmAck:
|
||||
if (NetFunc.IsReady() == 1)
|
||||
{
|
||||
rsize = NetFunc.ReadData (rxdata, 1200);
|
||||
if (rxdata[0] == 0x06 && rsize == 1)
|
||||
{
|
||||
g_netinfo.State = YmodmC;
|
||||
log_d ("YmodemState = YmodmC\r\n");
|
||||
g_ymodeinfo.cTimer = 1000;
|
||||
}
|
||||
}
|
||||
// 如果超过1s 没有收到服务器的应答,重复发送文件名,尝试再次升级
|
||||
if (g_ymodeinfo.delayTimer == 1)
|
||||
{
|
||||
g_ymodeinfo.delayTimer = 0;
|
||||
g_netinfo.State = YmodmSendFileName;
|
||||
}
|
||||
break;
|
||||
case YmodmC: // 收到服务器的应答后,进入升级
|
||||
if (g_ymodeinfo.cTimer == 1)
|
||||
{
|
||||
g_ymodeinfo.cTimer = 2000;
|
||||
NET_FifoWriteByte ('C');
|
||||
}
|
||||
if (NetFunc.IsReady() == 1) //接受到C的应答
|
||||
{
|
||||
g_netinfo.State = YmodmHead;
|
||||
log_d ("YmodemState = YmodmHead\r\n");
|
||||
}
|
||||
break;
|
||||
case YmodmHead:
|
||||
rsize = NetFunc.ReadData (rxdata, 1200);
|
||||
ret = Ymodem_Receive ( (uint8_t *) rxdata, rsize);
|
||||
if (ret == 1)
|
||||
{
|
||||
g_netinfo.State = Ymodm1024; //
|
||||
NET_FifoWriteByte (ACK);
|
||||
NET_FifoWriteByte ('C');
|
||||
g_ymodeinfo.delayTimer = 3000;
|
||||
log_d ("YmodemState = Ymodm1024\r\n");
|
||||
}
|
||||
else // 数据获取失败,重新发起文件链接请求
|
||||
{
|
||||
g_netinfo.State = YmodmSendFileName;
|
||||
}
|
||||
break;
|
||||
case Ymodm1024:
|
||||
if (NetFunc.IsReady() == 1)
|
||||
{
|
||||
|
||||
g_ymodeinfo.delayTimer = 3000;
|
||||
rsize = NetFunc.ReadData (rxdata, 1200);
|
||||
if (rsize == 1 && rxdata[0] == EOT) // 升级错误
|
||||
{
|
||||
g_netinfo.State = YmodmEOT;
|
||||
log_d ("YmodemState = YmodmEOT1\r\n");
|
||||
break;
|
||||
}
|
||||
// -1: error 1 first packet received 2: 1024 packet received 5:EOT packet received
|
||||
ret = Ymodem_Receive ( (uint8_t *) rxdata, rsize);
|
||||
if (ret == 2)
|
||||
{
|
||||
NET_FifoWriteByte (ACK);
|
||||
break;
|
||||
}
|
||||
else if (ret == -1)
|
||||
{
|
||||
NET_FifoWriteByte (YMFILD);
|
||||
g_ymodeinfo.delayTimer = 1000;
|
||||
g_netinfo.State = YmodmERROR;
|
||||
}
|
||||
}
|
||||
if (g_ymodeinfo.delayTimer == 1)
|
||||
{
|
||||
g_ymodeinfo.delayTimer = 0;
|
||||
log_d ("YmodemState = YmodmERROR\r\n");
|
||||
}
|
||||
break;
|
||||
case YmodmEOT:
|
||||
NET_FifoWriteByte (NAK);
|
||||
NET_FifoWriteByte (YMSUCCE);
|
||||
|
||||
g_netinfo.State = YModmIdle;
|
||||
g_ymodeinfo.delayTimer = 1000; // 等待 1S 数据结束后重启
|
||||
break;
|
||||
case YmodmERROR:
|
||||
{
|
||||
if (g_ymodeinfo.delayTimer == 1)
|
||||
{
|
||||
g_ymodeinfo.delayTimer = 0;
|
||||
//NetFunc.ReSubTopic (SysInfo.baseTopic);
|
||||
g_netinfo.State = YmodmApplication; //();
|
||||
}
|
||||
// 发送错误,上报升级失败,切换到 业务层等待重新升级
|
||||
break;
|
||||
}
|
||||
case YModmIdle:
|
||||
{
|
||||
if (g_ymodeinfo.delayTimer == 1)
|
||||
{
|
||||
//FactorySetFlashUpdate(); // 进入升级
|
||||
//HAL_NVIC_SystemReset(); // 重启
|
||||
g_ymodeinfo.delayTimer = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (NetFunc.IsConnected() == 1)
|
||||
{
|
||||
if (g_netinfo.IsFirstConnection == 0)
|
||||
{
|
||||
g_netinfo.IsFirstConnection = 1;
|
||||
//NETSendRegist();
|
||||
log_d ("First join network\r\n");
|
||||
}
|
||||
}
|
||||
NetFunc.Task(); // NetFunc.Task();
|
||||
}
|
||||
|
||||
static void netSendPacket (void)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
if (FifoRead (&g_NetFifo, (char *) &packet, sizeof (NetPacket_t)) == 0)
|
||||
{
|
||||
NetFunc.WriteData (packet.data, packet.data_size);
|
||||
log_d ("tx:>>>>>>>>>>>>>>>>>>%d\r\n", packet.data_size);
|
||||
}
|
||||
}
|
||||
|
||||
// 上报回调数据
|
||||
static int netUploadHandle (char *data)
|
||||
{
|
||||
char payload[128] = {0};
|
||||
int payload_size = 0;
|
||||
int size = 0;
|
||||
if (g_netinfo.unifTimer == 1)
|
||||
{
|
||||
// payload_size = PP_PacketUnifData (payload); // 打包业务层数据
|
||||
// size = PP_AddHeader (0x31, payload, payload_size, data);
|
||||
// g_netinfo.unifTimer = SL651_TIME_UNIF;
|
||||
}
|
||||
else if (g_netinfo.linkTimer == 1)
|
||||
{
|
||||
// if (FF_ReadEcodeData() == 0XFFFFFFFF)
|
||||
// {
|
||||
// payload[0] = 0;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// payload[0] = 1;
|
||||
// }
|
||||
// if (FF_ReadLeveData() == 0XFFFFFFFF)
|
||||
// {
|
||||
// payload[1] = 0;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// payload[1] = 1;
|
||||
// }
|
||||
size = PP_AddHeader (0x2F, payload, 4, data);
|
||||
g_netinfo.linkTimer = SL651_TIME_HEART;
|
||||
}
|
||||
else if (g_netinfo.flowTimer == 1) // 请求流量计数据
|
||||
{
|
||||
g_netinfo.flowTimer = SL651_TIME_FLOW;
|
||||
}
|
||||
else
|
||||
{
|
||||
size = 0;
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void netInit (void)
|
||||
{
|
||||
// if (SysInfo.baseNetDev == EC200_MQTT) // EC200
|
||||
// {
|
||||
// NetFunc.Init = EC200Init;
|
||||
// NetFunc.IsConnected = EC200IsConnected;
|
||||
// NetFunc.IsReady = EC200RxIsReady;
|
||||
// NetFunc.ReadData = EC200ReadData;
|
||||
// NetFunc.WriteData = EC200WriteData;
|
||||
// NetFunc.IsIdle = EC200IsIdle;
|
||||
// NetFunc.ReSubTopic = EC200ReSubTopic;
|
||||
// NetFunc.Task = EC200Task;
|
||||
// g_ymodeinfo.PacketSize = 1024;
|
||||
// }
|
||||
// else if (SysInfo.baseNetDev == ETH_MQTT) // ETH
|
||||
// {
|
||||
// NetFunc.Init = EthMqttInit;
|
||||
// NetFunc.IsConnected = EthMqttIsConnect;
|
||||
// NetFunc.IsReady = EthMqttIsReady;
|
||||
// NetFunc.ReadData = EthMqttReadData;
|
||||
// NetFunc.WriteData = EthMqttWriteData;
|
||||
// NetFunc.IsIdle = EthMqttIsIdle;
|
||||
// NetFunc.ReSubTopic = EthMqttReSubTopic;
|
||||
// NetFunc.Task = EthMqttTask;
|
||||
// g_ymodeinfo.PacketSize = 1024;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// //
|
||||
// return;
|
||||
// }
|
||||
NetFunc.Init();
|
||||
FifoInit (&g_NetFifo, (char *) g_fifo_netpacket, 3);
|
||||
log_d ("fifo Init\n");
|
||||
// g_netinfo.unifTimer = SL651_TIME_UNIF;
|
||||
// g_netinfo.linkTimer = SL651_TIME_HEART;
|
||||
// g_netinfo.flowTimer = SL651_TIME_FLOW;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//// 将要发送的数据写入队列
|
||||
//void NET_WriteBuffer(NetPacket_t packet)
|
||||
//{
|
||||
// FifoWritebuffer (packet.data, packet.data_size);
|
||||
// //return 0;
|
||||
//}
|
||||
|
||||
|
||||
|
||||
//// 应答E3 回复读取的数据
|
||||
//void NETSendConfig (char *data)
|
||||
//{
|
||||
// NetPacket_t packet;
|
||||
// packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
// FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet));
|
||||
//}
|
||||
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
#ifndef _NET_APP_H
|
||||
#define _NET_APP_H
|
||||
|
||||
|
||||
// 远程升级宏
|
||||
#define ETH_MQTT 1
|
||||
#define EC200_MQTT 0
|
||||
|
||||
|
||||
|
||||
typedef struct netWorkInterface_t
|
||||
{
|
||||
void (*Init) (void);
|
||||
int (*IsConnected) (void);
|
||||
void (*WriteData) (char *, int);
|
||||
int (*ReadData) (char *, int);
|
||||
int (*IsReady) (void);
|
||||
int (*IsIdle) (void);
|
||||
int (*ReSubTopic) (char *);
|
||||
void (*Task) (void);
|
||||
} netWorkInterface_t;
|
||||
|
||||
|
||||
typedef struct NetPacket_t
|
||||
{
|
||||
int data_size;
|
||||
char data[512];
|
||||
} NetPacket_t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define PACKET_SEQNO_INDEX (1)
|
||||
#define PACKET_SEQNO_COMP_INDEX (2)
|
||||
|
||||
#define PACKET_HEADER (3)
|
||||
#define PACKET_TRAILER (2)
|
||||
#define PACKET_OVERHEAD (PACKET_HEADER + PACKET_TRAILER)
|
||||
#define PACKET_SIZE (128)
|
||||
#define PACKET_1K_SIZE (1024)
|
||||
|
||||
#define FILE_NAME_LENGTH (256)
|
||||
#define FILE_SIZE_LENGTH (16)
|
||||
|
||||
#define SOH (0x01) /* start of 128-byte data packet */
|
||||
#define STX (0x02) /* start of 1024-byte data packet */
|
||||
#define EOT (0x04) /* end of transmission */
|
||||
#define ACK (0x06) /* acknowledge */
|
||||
#define NAK (0x15) /* negative acknowledge */
|
||||
#define CA (0x18) /* two of these in succession aborts transfer */
|
||||
#define CC (0x43) /* 'C' == 0x43, request 16-bit CRC */
|
||||
|
||||
#define ABORT1 (0x41) /* 'A' == 0x41, abort by user */
|
||||
#define ABORT2 (0x61) /* 'a' == 0x61, abort by user */
|
||||
|
||||
#define YMFILD 0x19
|
||||
#define YMSUCCE 0x17
|
||||
|
||||
#define NAK_TIMEOUT (0x100000)
|
||||
#define MAX_ERRORS (5)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// SL651 定义宏
|
||||
#define SL651_TIME_HEART 60000 // 1分钟
|
||||
#define SL651_TIME_LOST 90000
|
||||
#define SL651_TIME_UNIF 1000*5*60 // 均匀时段,默认5分钟上报一次
|
||||
#define SL651_TIME_FLOW 60000 // 均匀时段,默认5分钟上报一次
|
||||
|
||||
void NetTask (void);
|
||||
void NetAppInit (void);
|
||||
//void NETSendSluiceUp (void);
|
||||
//void NETSendDataUnif (void);
|
||||
//void NETSendSluiceAck (void);
|
||||
//void NETSendConfigAck (int k);
|
||||
//void NETSendConfig (char *data);
|
||||
//// 应答E0 回复发送的数据
|
||||
//void NETSendUpdateAck (int k);
|
||||
//// 应答E3 回复读取的数据
|
||||
//void NETSendRegist (void);
|
||||
//// 应答E3 打印日志
|
||||
//void NETSendLog (char *data);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 如下为网络队列调用函数,wirebuffer 不等于多个writebyte
|
||||
void NET_FifoWritebuffer (char *buffer, int size);
|
||||
void NET_FifoWriteByte (char byte) ;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
+160
@@ -0,0 +1,160 @@
|
||||
#include "main.h"
|
||||
#include <string.h>
|
||||
|
||||
|
||||
|
||||
// 下行数据回调函数
|
||||
// 应答 type
|
||||
int netDownloadHandle (uint8_t type, char *data, int length)
|
||||
{
|
||||
int IntData;//filenamesize = 0;
|
||||
char filename[32] = {0};
|
||||
char buffer[100];
|
||||
switch (type)
|
||||
{
|
||||
case 0x4E: // 闸门操作
|
||||
{
|
||||
//data += 2; // 去掉流水号和闸门操作方式
|
||||
//IntData = ty_byte2int (data, 4);
|
||||
//sprintf(buffer,"open:%02X%02X%02X%02X\r\n",data[0],data[1],data[2],data[3]);
|
||||
//NETSendLog(buffer);
|
||||
|
||||
// sprintf(buffer,"open:%02X%02X%02X%02Xopen:%u\r\n",data[0],data[1],data[2],data[3],IntData);
|
||||
// NETSendLog(buffer);
|
||||
// MM_SluiceSetOpen (IntData / 100);
|
||||
// MM_SluiceStart();
|
||||
//IntData = IntData;
|
||||
// NETSendSluiceAck();
|
||||
// dbg_printf("remote sluice%d\r\n",IntData);
|
||||
break;
|
||||
}
|
||||
case 0xE0: // 远程升级
|
||||
{
|
||||
// todo : 发起升级请求
|
||||
// memset (g_ymodeinfo.updatePacket, 0, 64);
|
||||
// memset (filename, 0, 32);
|
||||
// memcpy (filename, data, length); // 去掉帧尾和校验=
|
||||
// sprintf (g_ymodeinfo.updatePacket, "N %s,%d", filename, g_ymodeinfo.PacketSize);
|
||||
// dbg_printf ("g_ymodeinfo.fileName:%s\r\n", g_ymodeinfo.updatePacket);
|
||||
// NETSendUpdateAck (1);
|
||||
// dbg_printf ("Jump To Remote Update Firmware\r\n");
|
||||
break;
|
||||
}
|
||||
case 0xE1: // 停止执行
|
||||
{
|
||||
//MM_SluiceStop();
|
||||
// SluiceScram();
|
||||
break;
|
||||
}
|
||||
case 0xE2: // 远程修改参数
|
||||
{
|
||||
// SysInfoConfig_t config ;
|
||||
// data[length] = 0;
|
||||
// // 设置参数
|
||||
// int k = Json651UnpackInfo (data, length, &config);
|
||||
// if (k < 0)
|
||||
// {
|
||||
// fmtprintf ("ERROR +CME:%d\r\n", k);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (config.type == 1) // 基础参数配置
|
||||
// {
|
||||
// SysWriteBaseConfig (config.info.base);
|
||||
// SysInfoWriteParam();
|
||||
// NETSendConfigAck (1);
|
||||
// }
|
||||
// else if (config.type == 2) // 接口参数配置
|
||||
// {
|
||||
// SysWriteInterfaceInfo (config.info.interface);
|
||||
// SysInfoWriteParam();
|
||||
// NETSendConfigAck (1);
|
||||
// }
|
||||
// else if (config.type == 3) // 闸门参数配置
|
||||
// {
|
||||
// SysWriteSluiceInfo (config.info.sluice);
|
||||
// SysInfoWriteParam();
|
||||
// NETSendConfigAck (1);
|
||||
// }
|
||||
// else if (config.type == 4) // 闸门参数配置
|
||||
// {
|
||||
// SysWriteWaterInfo (config.info.water);
|
||||
// SysInfoWriteParam();
|
||||
// NETSendConfigAck (1);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// NETSendConfigAck (2);
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
}
|
||||
case 0xE3: // 远程读取参数
|
||||
{
|
||||
// if (data[0] == 1) // 上报基础参数
|
||||
// {
|
||||
// netWritebaseParams();
|
||||
// }
|
||||
// else if (data[0] == 2) //
|
||||
// {
|
||||
// netWriteInterfaceParams();
|
||||
// }
|
||||
// else if (data[0] == 3) // 保存
|
||||
// {
|
||||
// netWriteSluiceParams();
|
||||
// }
|
||||
// else if (data[0] == 4) // 保存
|
||||
// {
|
||||
// //static void netWriteWaterParams (void)
|
||||
// netWriteWaterParams();
|
||||
// }
|
||||
// break;
|
||||
}
|
||||
case 0xE4: //远程读取流量计数据
|
||||
{
|
||||
// memset(data, 0, 256);
|
||||
// memcpy(data, &rxdata_decode[14], dataLength);
|
||||
// instantSpeed = MyJsonReadNumber(data, "instantSpeed", dataLength);
|
||||
// instantFlow = MyJsonReadNumber(data, "instantFlow", dataLength);
|
||||
// waterLevel = MyJsonReadNumber(data, "waterLevel", dataLength);
|
||||
}
|
||||
case 0XE5:
|
||||
{
|
||||
HAL_NVIC_SystemReset();
|
||||
break;
|
||||
}
|
||||
case 0XE6: // 上升
|
||||
{
|
||||
|
||||
//sluice_run_motor(SysInfo.SlMotorType,RunOpen);
|
||||
//NETSendLog("debug runopen");
|
||||
|
||||
break;
|
||||
}
|
||||
case 0XE7: // 下降
|
||||
{
|
||||
//sluice_run_motor(SysInfo.SlMotorType,RunClose);
|
||||
//NETSendLog("debug runclose");
|
||||
break;
|
||||
}
|
||||
case 0XE8: // 停止
|
||||
{
|
||||
//sluice_run_motor(SysInfo.SlMotorType,RunStop);
|
||||
//NETSendLog("debug runstop");
|
||||
break;
|
||||
}
|
||||
case 0XE9: // 召测开度
|
||||
{
|
||||
//sprintf(buffer,"open:%u,%u,%u,%u\r\n",FF_ReadEcodeData(),FF_ReadCalcEcodeData(),FF_ReadMaxEcodeData(),FF_ReadMinEcodeData());
|
||||
//NETSendLog(buffer);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+215
@@ -0,0 +1,215 @@
|
||||
#include "net-app.h"
|
||||
#include "proto-sl651.h"
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <elog.h>
|
||||
|
||||
|
||||
// 网络上报线程
|
||||
void net_task(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 上升过程中上报数据
|
||||
void netWriteSluiceUp (void)
|
||||
{
|
||||
char data[128];
|
||||
// char tx_data[128];
|
||||
int tx_size = 0;
|
||||
|
||||
// tx_size = PP_AddHeader (0x4E, data, tx_size, tx_data);
|
||||
tx_size = _651PacketDataSluiceUp (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x4E, data, tx_size, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
//FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet));
|
||||
// FifoWrite (&g_NetFifo, (unsigned char *) tx_data, tx_size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 向平台请求流量数据
|
||||
void netWriteFlowReq (void)
|
||||
{
|
||||
// char data[128];
|
||||
// // char tx_data[128];
|
||||
// int tx_size = 0;
|
||||
// tx_size = PP_PacketUnifDatadata);
|
||||
// NetPacket_t packet;
|
||||
// packet.data_size = PP_AddHeader(0x31, data, tx_size, packet.data);
|
||||
// FifoWrite(&g_NetFifo, (char *)&packet, sizeof(packet));
|
||||
// tx_size = PP_AddHeader (0x31, data, tx_size, tx_data);
|
||||
// FifoWrite (&g_NetFifo, (unsigned char *) tx_data, tx_size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// E0 升级应答 E2 配置应答
|
||||
// 应答E0 回复发送的数据
|
||||
void netWriteAck (uint8_t funccode,int k)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
if (k == 1)
|
||||
{
|
||||
packet.data_size = PP_AddHeader (0xE0, "{\"result\":\"ok\"}", strlen ("{\"result\":\"ok\"}"), packet.data);
|
||||
}
|
||||
else
|
||||
{
|
||||
packet.data_size = PP_AddHeader (0xE0, "{\"result\":\"error\"}", strlen ("{\"result\":\"error\"}"), packet.data);
|
||||
}
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
//FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet));
|
||||
}
|
||||
|
||||
|
||||
|
||||
//// 应答E3 回复发送的数据
|
||||
//void NETSendConfigAck (int k)
|
||||
//{
|
||||
// // char tx_data[256];
|
||||
// // int tx_size = 0;
|
||||
// NetPacket_t packet;
|
||||
// if (k == 1)
|
||||
// {
|
||||
// packet.data_size = PP_AddHeader (0xE2, "{\"result\":\"ok\"}", strlen ("{\"result\":\"ok\"}"), packet.data);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// packet.data_size = PP_AddHeader (0xE2, "{\"result\":\"error\"}", strlen ("{\"result\":\"error\"}"), packet.data);
|
||||
// }
|
||||
// // FifoWrite (&g_NetFifo, (unsigned char *) tx_data, tx_size);
|
||||
// NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
//}
|
||||
|
||||
|
||||
void NETSendSluiceAck (void)
|
||||
{
|
||||
char data[128];
|
||||
int tx_size = 0;
|
||||
tx_size = _651PacketDataSluiceAck (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x4E, data, tx_size, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 应答EF 打印日志
|
||||
void NETSendLog (char *data)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0xEF, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 应答E3 回复读取的数据
|
||||
void NETSendRegist (void)
|
||||
{
|
||||
char data[128];
|
||||
memset (data, 0, 128);
|
||||
sprintf (data, "{\"iccid\":\"%s\",\"version\":\"%s\"}", "1234567890", "V1.0.1");
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0xE4, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
}
|
||||
|
||||
void netWriteUnifData (void)
|
||||
{
|
||||
char data[128];
|
||||
int tx_size = 0;
|
||||
tx_size = PP_PacketUnifData (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x31, data, tx_size, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
}
|
||||
|
||||
void netWriteHeartData(void)
|
||||
{
|
||||
|
||||
char data[128];
|
||||
int tx_size = 0;
|
||||
tx_size = PP_PacketUnifData (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x2F, data, 4, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//- 上报参数API
|
||||
// 上报基础参数
|
||||
void netWritebaseParams (void)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
char data[512];
|
||||
memset (data, 0, 512);
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketBaseInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
//packet.data_size = PP_AddHeader(0xE3, data, strlen(data), packet.data);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
|
||||
//- 上报参数API
|
||||
// 上报接口参数
|
||||
void netWriteInterfaceParams (void)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
char data[512];
|
||||
memset (data, 0, 512);
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketInterfaceInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//- 上报参数API
|
||||
// 上报闸门参数
|
||||
void netWriteSluiceParams (void)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
char data[512];
|
||||
memset (data, 0, 512);
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketSluiceInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//- 上报参数API
|
||||
// 上报水位流量关系表
|
||||
void netWriteWaterParams (void)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
char data[512];
|
||||
memset (data, 0, 512);
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketWaterInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include "main.h"
|
||||
#include "cmsis_os.h"
|
||||
#include "os-app.h"
|
||||
#include <stdio.h>
|
||||
#include "modbus-m.h"
|
||||
#include "net-app.h"
|
||||
#
|
||||
|
||||
|
||||
osThreadId_t NetworkThreadHandle; // Óû§×Ô¶¨ÒåÏß³Ì
|
||||
|
||||
const osThreadAttr_t NetworkThread_attributes = {
|
||||
.name = "networkThread",
|
||||
.priority = (osPriority_t) osPriorityLow,
|
||||
.stack_size = 1024 * 4
|
||||
};
|
||||
|
||||
static netWorkInterface_t s_interface;
|
||||
|
||||
|
||||
enum {
|
||||
|
||||
}
|
||||
|
||||
void NetworkTask(void * argument)
|
||||
{
|
||||
if (s_interface.Init != NULL)
|
||||
{
|
||||
s_interface.Init();
|
||||
}
|
||||
while (1)
|
||||
{
|
||||
|
||||
|
||||
osDelay(5000);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+511
@@ -0,0 +1,511 @@
|
||||
|
||||
//#include "sysinfo-app.h"
|
||||
#include "proto-sl651.h"
|
||||
#include "rtc.h"
|
||||
//#include "ff-collected.h"
|
||||
//#include "mjson.h"
|
||||
#include "elog.h"
|
||||
//#include "base64.h"
|
||||
|
||||
// static uint8_t g_651txbuff[255];
|
||||
// static uint16_t g_651txbuff_length;
|
||||
|
||||
static union //如果是切换页面,显示为页面ID
|
||||
{
|
||||
uint32_t Int;
|
||||
uint8_t Byte[4];
|
||||
} Int;
|
||||
|
||||
static int g_syn_number = 0;
|
||||
|
||||
// 打包数据帧
|
||||
int PP_AddHeader (uint8_t func, char *data, int length, char *txbuff)
|
||||
{
|
||||
int tx_size = 0;
|
||||
uint16_t crc = 0;
|
||||
txbuff[tx_size++] = 0x7E;
|
||||
txbuff[tx_size++] = 0x7E;
|
||||
txbuff[tx_size++] = 0x02; // 根据中心站地址区分版本号
|
||||
txbuff[tx_size++] = 0xFF;
|
||||
txbuff[tx_size++] = 0xFF;
|
||||
txbuff[tx_size++] = 0;//SysInfo.baseAddr[0];
|
||||
txbuff[tx_size++] = 0;//SysInfo.baseAddr[1]; //(uint8_t) ( (SysInfo.Addr >> 24) & 0x000000FF);
|
||||
txbuff[tx_size++] = 0;//SysInfo.baseAddr[2]; //(uint8_t) ( (SysInfo.Addr >> 16) & 0x000000FF);
|
||||
txbuff[tx_size++] = 0;//SysInfo.baseAddr[3]; //(uint8_t) ( (SysInfo.Addr >> 8) & 0x000000FF);
|
||||
txbuff[tx_size++] = 0;//SysInfo.baseAddr[4]; //(uint8_t) (SysInfo.Addr & 0x000000FF);
|
||||
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 = 0;//bsp_crc_calc16 ( (uint8_t *) txbuff, tx_size);
|
||||
|
||||
txbuff[tx_size++] = (crc >> 8) & 0x00FF;
|
||||
txbuff[tx_size++] = crc & 0x00FF;
|
||||
return tx_size;
|
||||
//
|
||||
// 计算校验
|
||||
}
|
||||
// 均匀时段报
|
||||
int PP_PacketUnifData (char *tx_data)
|
||||
{
|
||||
uint8_t powerdata[26];
|
||||
//RtcTime rtcTime;
|
||||
//Get_Time (&rtcTime);
|
||||
int tx_size = 0;
|
||||
g_syn_number++;
|
||||
tx_data[tx_size++] = (g_syn_number >> 8) & 0x00FF;
|
||||
tx_data[tx_size++] = g_syn_number & 0xFF;
|
||||
|
||||
tx_data[tx_size++] = 0x00; // 要素1 瞬时流速
|
||||
tx_data[tx_size++] = 0x00; // 要素1 瞬时流速
|
||||
tx_data[tx_size++] = 0x00; // 要素1 瞬时流速
|
||||
tx_data[tx_size++] = 0x00; // 要素1 瞬时流速
|
||||
|
||||
tx_data[tx_size++] = 0x00; // 要素2 瞬时流量
|
||||
tx_data[tx_size++] = 0x00; // 要素2 瞬时流量
|
||||
tx_data[tx_size++] = 0x00; // 要素2 瞬时流量
|
||||
tx_data[tx_size++] = 0x00; // 要素2 瞬时流量
|
||||
|
||||
tx_data[tx_size++] = 0x00; // 要素3 累计流量
|
||||
tx_data[tx_size++] = 0x00; // 要素3 累计流量
|
||||
tx_data[tx_size++] = 0x00; // 要素3 累计流量
|
||||
tx_data[tx_size++] = 0x00; // 要素3 累计流量
|
||||
|
||||
Int.Int = 0;//= (FF_ReadEcodeData() - SysInfo.SlMinEcode) / SysInfo.SlEcodeCoeff * 100 ;
|
||||
tx_data[tx_size++] = Int.Byte[3]; // 要素4 闸门开度
|
||||
tx_data[tx_size++] = Int.Byte[2]; // 要素4 闸门开度
|
||||
tx_data[tx_size++] = Int.Byte[1]; // 要素4 闸门开度
|
||||
tx_data[tx_size++] = Int.Byte[0]; // 要素4 闸门开度
|
||||
Int.Int = 0;// (int) bsp_rng_get_number (1000, 1200) * 100; // MbusReadSensorValue (EcodeType) * 100;
|
||||
tx_data[tx_size++] = 0x00; // 要素5 闸门荷重
|
||||
tx_data[tx_size++] = 0x00; // 要素5 闸门荷重
|
||||
tx_data[tx_size++] = 0x00; // 要素5 闸门荷重
|
||||
tx_data[tx_size++] = 0x00; // 要素5 闸门荷重
|
||||
// 要素6 最大开度
|
||||
Int.Int = 0;// SysInfo.SlMaxOpen * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
|
||||
// 要素7 电池电压
|
||||
Int.Int = 23.5 * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
|
||||
// 要素8 机箱温度
|
||||
Int.Int = 52.6 * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
|
||||
// 要素9 闸前水位
|
||||
Int.Int = 0 * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
// 要素10 充电控制器数据
|
||||
//FF_ReadPowerData (powerdata) ;
|
||||
for (int i = 0; i < 26; i++)
|
||||
{
|
||||
tx_data[tx_size++] = powerdata[i];
|
||||
}
|
||||
return tx_size;
|
||||
}
|
||||
|
||||
// 闸门状态自报
|
||||
int _651PacketDataSluiceUp (char *tx_data)
|
||||
{
|
||||
// RtcTime rtcTime;
|
||||
// Get_Time (&rtcTime);
|
||||
int tx_size = 0;
|
||||
g_syn_number++;
|
||||
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;
|
||||
// 闸门开度
|
||||
// Int.Int = MbusReadSensorValue (EcodeType) * 100;
|
||||
//dbg_printf ("%d\r\n", Int.Int);
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
// 闸门荷重
|
||||
Int.Int = 0;//(int) bsp_rng_get_number (1200, 1400) * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
// 闸前水位
|
||||
Int.Int = 0 * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
// 瞬时流量
|
||||
Int.Int = 0 * 100;
|
||||
tx_data[tx_size++] = Int.Byte[3];
|
||||
tx_data[tx_size++] = Int.Byte[2];
|
||||
tx_data[tx_size++] = Int.Byte[1];
|
||||
tx_data[tx_size++] = Int.Byte[0];
|
||||
return tx_size;
|
||||
}
|
||||
|
||||
int _651PacketDataSluiceAck (char *tx_data)
|
||||
{
|
||||
// RtcTime rtcTime;
|
||||
// Get_Time (&rtcTime);
|
||||
int tx_size = 0;
|
||||
g_syn_number++;
|
||||
tx_data[tx_size++] = (g_syn_number >> 8) & 0x00FF;
|
||||
tx_data[tx_size++] = g_syn_number & 0xFF;
|
||||
tx_data[tx_size++] = 0;//rtcTime.year;
|
||||
tx_data[tx_size++] = 0;//rtcTime.month;
|
||||
tx_data[tx_size++] = 0;//rtcTime.day;
|
||||
tx_data[tx_size++] = 0;//rtcTime.hour;
|
||||
tx_data[tx_size++] = 0;//rtcTime.minute;
|
||||
tx_data[tx_size++] = 0;//rtcTime.second;
|
||||
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[0];
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[1]; //(uint8_t) ( (SysInfo.Addr >> 24) & 0x000000FF);
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[2]; //(uint8_t) ( (SysInfo.Addr >> 16) & 0x000000FF);
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[3]; //(uint8_t) ( (SysInfo.Addr >> 8) & 0x000000FF);
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[4]; //(uint8_t) (SysInfo.Addr & 0x000000FF);
|
||||
return tx_size;
|
||||
}
|
||||
|
||||
// 打包 基础参数
|
||||
int Json651PacketBaseInfo (char *outBuffer, int length)
|
||||
{
|
||||
// char devidstr[11];
|
||||
// int k = 0;
|
||||
// memset (devidstr, 0, sizeof (devidstr));
|
||||
// hexbyte_to_hex_str (SysInfo.baseAddr, devidstr, 5);
|
||||
// // puthex ( (uint8_t *) devidstr, SysInfo.baseAddr, 5);
|
||||
// struct mjson_fixedbuf fb = { (char *) outBuffer, length - 1, 0};
|
||||
// k = mjson_printf (&mjson_print_fixed_buf, &fb, "{%Q:%d,%Q:%Q,%Q:%d,%Q:%Q,%Q:%Q,%Q:%Q,%Q:%Q,%Q:%Q,%Q:%Q,%Q:%d,%Q:%d,%Q:%d,%Q:%u}",
|
||||
// "type", 1,
|
||||
// "baseaddr", devidstr,
|
||||
// "bute", 9600,
|
||||
// "remoteAddr", SysInfo.baseRemoteAddr,
|
||||
// "remoteUser", SysInfo.baseRemoteuser,
|
||||
// "remotePass", SysInfo.baseRemotepass,
|
||||
// "userPass", SysInfo.baseUserPassword,
|
||||
// "sysPass", SysInfo.baseSysPassword,
|
||||
// "topic", SysInfo.baseTopic,
|
||||
// "remotePort", SysInfo.baseRemotePort,
|
||||
// "LogInfo", SysInfo.baseLogInfo,
|
||||
// "NetDev", SysInfo.baseNetDev,
|
||||
// "StandTime", SysInfo.baseStandbyTime);
|
||||
// return k;
|
||||
return 0;
|
||||
}
|
||||
// 接口参数设置
|
||||
int Json651PacketInterfaceInfo (char *outBuffer, int length)
|
||||
{
|
||||
// char u4851funstr[17], u4852funstr[17];
|
||||
// int k = 0;
|
||||
// memset (u4851funstr, 0, sizeof (u4851funstr));
|
||||
// memset (u4852funstr, 0, sizeof (u4852funstr));
|
||||
// hexbyte_to_hex_str ( (char *) SysInfo.u4851Func, u4851funstr, 8);
|
||||
// hexbyte_to_hex_str ( (char *) SysInfo.u4852Func, u4852funstr, 8);
|
||||
// // puthex ( (uint8_t *) devidstr, SysInfo.baseAddr, 5);
|
||||
// struct mjson_fixedbuf fb = { (char *) outBuffer, length - 1, 0};
|
||||
// k = mjson_printf (&mjson_print_fixed_buf, &fb, "{%Q:%d,%Q:%Q,%Q:%d,%Q:%d,%Q:%d,%Q:%Q,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d}",
|
||||
// "type", 2,
|
||||
// "u4851fun", u4851funstr,
|
||||
// "u4851num", SysInfo.u4851FuncNum,
|
||||
// "u4851bute", SysInfo.u4851Bute,
|
||||
// "u4851para", SysInfo.u4851Para,
|
||||
// "u4852fun", u4852funstr,
|
||||
// "u4852num", SysInfo.u4852FuncNum,
|
||||
// "u4852bute", SysInfo.u4852Bute,
|
||||
// "u4852para", SysInfo.u4852Para,
|
||||
// "di1", SysInfo.DIFunc[0],
|
||||
// "di2", SysInfo.DIFunc[1],
|
||||
// "di3", SysInfo.DIFunc[2],
|
||||
// "di4", SysInfo.DIFunc[3],
|
||||
// "pi1", SysInfo.PIFunc[0],
|
||||
// "pi2", SysInfo.PIFunc[1],
|
||||
// "pi3", SysInfo.PIFunc[2],
|
||||
// "pi4", SysInfo.PIFunc[3],
|
||||
// "ai1", SysInfo.AIFunc[0],
|
||||
// "ai2", SysInfo.AIFunc[1],
|
||||
// "k1", SysInfo.KEYFunc[0],
|
||||
// "k2", SysInfo.KEYFunc[1],
|
||||
// "pwm1", SysInfo.PWMFunc[0],
|
||||
// "pwm2", SysInfo.PWMFunc[1],
|
||||
// "pwm3", SysInfo.PWMFunc[2],
|
||||
// "pwm4", SysInfo.PWMFunc[3]);
|
||||
// return k;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Json651PacketSluiceInfo (char *outBuffer, int length)
|
||||
{
|
||||
// char devidstr[11];
|
||||
// int k = 0;
|
||||
// memset (devidstr, 0, sizeof (devidstr));
|
||||
// hexbyte_to_hex_str (SysInfo.baseAddr, devidstr, 5);
|
||||
// // puthex ( (uint8_t *) devidstr, SysInfo.baseAddr, 5);
|
||||
// struct mjson_fixedbuf fb = { (char *) outBuffer, length - 1, 0};
|
||||
// k = mjson_printf (&mjson_print_fixed_buf, &fb, "{%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d,%Q:%d}",
|
||||
// "type", 3,
|
||||
// "maxopen", SysInfo.SlMaxOpen,
|
||||
// "maxcode", SysInfo.SlMaxEcode,
|
||||
// "mincode", SysInfo.SlMinEcode,
|
||||
// "codecoff", SysInfo.SlEcodeCoeff,
|
||||
// "codetype", SysInfo.SlEcodeType,
|
||||
// "loadtype", SysInfo.SlLoadType,
|
||||
// "motortype", SysInfo.SlMotorType,
|
||||
// "flowtype", SysInfo.SlFlowType,
|
||||
// "motorspeed", SysInfo.SlMotorSpeed);
|
||||
// return k;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// uint16_t WTWidth;// = 100; // 宽度 cm
|
||||
// Uint16_t WTSpeed[16];// = 100.0; // 流速 cm/s
|
||||
// Uint16_t WTSenLoc[16]; //
|
||||
// Uint16_t WTFlow[16]; // 流量
|
||||
// uint8_t WTSenCount;// 层数
|
||||
int Json651PacketWaterInfo (char *outBuffer, int length)
|
||||
{
|
||||
// int k = 0;
|
||||
// char flowbuff[64];
|
||||
// char speedbuff[64];
|
||||
// char locbuff[64];
|
||||
// memset (flowbuff, 0, 64);
|
||||
// memset (speedbuff, 0, 64);
|
||||
// memset (locbuff, 0, 64);
|
||||
// B64Encode ( (uint8_t *) SysInfo.WTFlow, 32, flowbuff, 64);
|
||||
// B64Encode ( (uint8_t *) SysInfo.WTSpeed, 32, speedbuff, 64);
|
||||
// B64Encode ( (uint8_t *) SysInfo.WTSenLoc, 32, locbuff, 64);
|
||||
// struct mjson_fixedbuf fb = { (char *) outBuffer, length - 1, 0};
|
||||
// k = mjson_printf (&mjson_print_fixed_buf, &fb, "{%Q:%d,%Q:%d,%Q:%d,%Q:%Q,%Q:%Q,%Q:%Q}",
|
||||
// "type", 4,
|
||||
// "wtwidth", SysInfo.WTWidth,
|
||||
// "wtsencount", SysInfo.WTSenCount,
|
||||
// "wtflow", flowbuff,
|
||||
// "wtspeed", speedbuff,
|
||||
// "wtsenloc", locbuff
|
||||
// );
|
||||
// return k;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//int Json651UnpackInfo (char *input, int length, SysInfoConfig_t *info)
|
||||
//{
|
||||
// double Number;
|
||||
// int responce, resonces[32] = {0};
|
||||
// char acs_data[64];
|
||||
// int k = 0;
|
||||
// //char test[64] = {0};
|
||||
// if (mjson ( (char const *) input, strlen ( (char const *) input), NULL, NULL) != strlen ( (char const *) input))
|
||||
// {
|
||||
// // 乱码或者格式不对
|
||||
// dbg_printf ("&&&&&&&&&&&&&&&&&\r\n");
|
||||
// return -1;
|
||||
// }
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.type", &Number);
|
||||
// info->type = Number;
|
||||
// if (info->type == 1) // base info
|
||||
// {
|
||||
// // 设备编码
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.baseaddr", (char*) acs_data, sizeof (acs_data) - 1) ;
|
||||
// resonces[k++] = responce;
|
||||
// hexstr_to_hexbyte (acs_data, info->info.base.baseAddr, responce);
|
||||
// // 波特率
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.bute", &Number);
|
||||
// info->info.base.baseBute = Number;
|
||||
// // 远程地址
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.remoteAddr", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// memcpy (info->info.base.baseRemoteAddr, acs_data, 32);
|
||||
|
||||
// //mqtt用户
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.remoteUser", (char*) acs_data, sizeof (acs_data) - 1) ;
|
||||
// resonces[k++] = responce;
|
||||
// memcpy (info->info.base.baseRemoteuser, acs_data, 32);
|
||||
|
||||
// //mqtt密码
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.remotePass", (char*) acs_data, sizeof (acs_data) - 1) ;
|
||||
// resonces[k++] = responce;
|
||||
// memcpy (info->info.base.baseRemotepass, acs_data, 32);
|
||||
|
||||
// //屏幕用户登录密码
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.userPass", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// memcpy (info->info.base.baseUserPassword, acs_data, 32);
|
||||
|
||||
// //屏幕管理员登录密码
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.sysPass", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// memcpy (info->info.base.baseSysPassword, acs_data, 32);
|
||||
|
||||
// //订阅topic
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.topic", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// memcpy (info->info.base.baseTopic, acs_data, 32);
|
||||
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.remotePort", &Number);
|
||||
// info->info.base.baseRemotePort = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.LogInfo", &Number);
|
||||
// info->info.base.baseLogInfo = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.NetDev", &Number);
|
||||
// info->info.base.baseNetDev = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.StandTime", &Number);
|
||||
// info->info.base.baseStandbyTime = Number;
|
||||
// }
|
||||
// else if (info->type == 2) //
|
||||
// {
|
||||
// // 4851 func
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.u4851fun", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// hexstr_to_hexbyte (acs_data, (char *) info->info.interface.u4851Func, responce);
|
||||
// // 4852 func
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.u4852fun", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// hexstr_to_hexbyte (acs_data, (char *) info->info.interface.u4852Func, responce);
|
||||
// //memcpy(info->info.interface.u4851Func,acs_data,32);
|
||||
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.u4851num", &Number);
|
||||
// info->info.interface.u4851FuncNum = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.u4852num", &Number);
|
||||
// info->info.interface.u4852FuncNum = Number;
|
||||
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.u4851para", &Number);
|
||||
// info->info.interface.u4851Para = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.u4852para", &Number);
|
||||
// info->info.interface.u4852Para = Number;
|
||||
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.u4851bute", &Number);
|
||||
// info->info.interface.u4851Bute = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.u4852bute", &Number);
|
||||
// info->info.interface.u4852Bute = Number;
|
||||
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.di1", &Number);
|
||||
// info->info.interface.DI1Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.di2", &Number);
|
||||
// info->info.interface.DI2Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.di3", &Number);
|
||||
// info->info.interface.DI3Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.di4", &Number);
|
||||
// info->info.interface.DI4Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pi1", &Number);
|
||||
// info->info.interface.PI1Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pi2", &Number);
|
||||
// info->info.interface.PI2Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pi3", &Number);
|
||||
// info->info.interface.PI3Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pi4", &Number);
|
||||
// info->info.interface.PI4Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.ai1", &Number);
|
||||
// info->info.interface.AI1Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.ai2", &Number);
|
||||
// info->info.interface.AI2Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.k1", &Number);
|
||||
// info->info.interface.KEY1Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.k2", &Number);
|
||||
// info->info.interface.KEY2Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pwm1", &Number);
|
||||
// info->info.interface.PWM1Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pwm2", &Number);
|
||||
// info->info.interface.PWM2Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pwm3", &Number);
|
||||
// info->info.interface.PWM3Func = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.pwm4", &Number);
|
||||
// info->info.interface.PWM4Func = Number;
|
||||
// }
|
||||
// else if (info->type == 3) //
|
||||
// {
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.maxopen", &Number);
|
||||
// info->info.sluice.SlMaxOpen = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.mincode", &Number);
|
||||
// info->info.sluice.SlMinEcode = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.maxcode", &Number);
|
||||
// info->info.sluice.SlMaxEcode = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.codecoff", &Number);
|
||||
// info->info.sluice.SlEcodeCoeff = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.codetype", &Number);
|
||||
// info->info.sluice.SlEcodeType = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.loadtype", &Number);
|
||||
// info->info.sluice.SlLoadType = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.flowtype", &Number);
|
||||
// info->info.sluice.SlFlowType = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.motorspeed", &Number);
|
||||
// info->info.sluice.SlMotorSpeed = Number;
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.motortype", &Number);
|
||||
// info->info.sluice.SlMotorType = Number;
|
||||
//// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.motortype", &Number);
|
||||
//// info->info.sluice.SlMotorType = Number;
|
||||
// }
|
||||
// else if (info->type == 4) //
|
||||
// {
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.wtwidth", &Number);
|
||||
// info->info.water.WTWidth = Number;
|
||||
|
||||
// resonces[k++] = mjson_get_number ( (char const *) input, strlen ( (char const *) input), "$.wtsencount", &Number);
|
||||
// info->info.water.WTSenCount = Number;
|
||||
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.wtflow", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// B64Decode (acs_data, responce, (uint8_t *) info->info.water.WTFlow);
|
||||
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.wtspeed", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// B64Decode (acs_data, responce, (uint8_t *) info->info.water.WTSpeed);
|
||||
|
||||
// memset (acs_data, 0, 64);
|
||||
// responce = mjson_get_string ( (char const*) input, strlen ( (char const*) input), "$.wtsenloc", (char*) acs_data, sizeof (acs_data) - 1);
|
||||
// resonces[k++] = responce;
|
||||
// dbg_printf ("%s\r\n", acs_data);
|
||||
// B64Decode (acs_data, responce, (uint8_t *) info->info.water.WTSenLoc);
|
||||
// //memcpy((uint8_t *)info->info.water.WTSenLoc,test,32);
|
||||
|
||||
//// for(int i =0;i <32;i++)
|
||||
//// {
|
||||
//// dbg_printf("%02X ",test[i]);
|
||||
//// }
|
||||
//// dbg_printf("\r\n");
|
||||
// //dbg_printf("%u,%u,%u,%u\r\n",info->info.water.WTSenLoc[0],info->info.water.WTSenLoc[1],info->info.water.WTSenLoc[2],info->info.water.WTSenLoc[3]) ;
|
||||
// //hexstr_to_hexbyte (acs_data, (char *) info->info.interface.u4852Func, responce);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// return -1;
|
||||
// }
|
||||
|
||||
// for (int t = 0; t < k; t++)
|
||||
// {
|
||||
// if (resonces[t] < 0)
|
||||
// return -2;
|
||||
// }
|
||||
// return 0;
|
||||
//return 0;
|
||||
//}
|
||||
@@ -0,0 +1,68 @@
|
||||
#ifndef _PROTO_SL651_H
|
||||
#define _PROTO_SL651_H
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
// 上行统一使用M1模式,无确认
|
||||
// 下行统一使用M2模式一次确认
|
||||
|
||||
#define _651_STX 2
|
||||
#define _651_ETX 3
|
||||
#define _651_ETB 23
|
||||
|
||||
|
||||
#define STATION_TYPE 0x5A // 遥测站分类码
|
||||
|
||||
|
||||
#define U_LINKCHECK_MSG 0x2F // 链路维持报
|
||||
#define U_USER_TEST_MSG 0x30 // 测试报
|
||||
#define U_UNIF_TIME_MSG 0x31 // 均匀时段报
|
||||
#define U_TIMINGTT_MSG 0x32 // 定时报
|
||||
#define U_MANUAL_MSG 0x33 // 加报报,由时间和事件触发的上报
|
||||
#define U_TIME_HOUR_MSG 0X34 // 小时报
|
||||
|
||||
#define D_MD_BASEPARA_MSG 0X40
|
||||
#define D_MD_BASEPARA_MSG 0X40
|
||||
|
||||
|
||||
#pragma pack (1)
|
||||
typedef struct _651_U_Header_t
|
||||
{
|
||||
uint16_t Head;
|
||||
uint8_t CentAddr;
|
||||
uint8_t DeviAddr[5];
|
||||
uint16_t Pass;
|
||||
uint8_t FuncCode;
|
||||
uint16_t TypeLength;
|
||||
uint8_t Stx;
|
||||
} _651_U_Header_t;
|
||||
|
||||
typedef struct _651_D_Header_t
|
||||
{
|
||||
uint16_t Head;
|
||||
uint8_t DeviAddr[5];
|
||||
uint8_t CentAddr;
|
||||
uint16_t Pass;
|
||||
uint8_t FuncCode;
|
||||
uint16_t Type: 4;
|
||||
uint16_t Length: 12;
|
||||
uint8_t Stx;
|
||||
} _651_D_Header_t;
|
||||
#pragma pack ()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int PP_AddHeader (uint8_t func, char * data, int length, char * txbuff);
|
||||
int PP_PacketUnifData (char * tx_data);
|
||||
// 闸门状态自报
|
||||
int _651PacketDataSluiceUp (char * tx_data);
|
||||
int _651PacketDataSluiceAck (char * tx_data);
|
||||
int Json651PacketBaseInfo (char * outBuffer, int length);
|
||||
int Json651PacketInterfaceInfo (char * outBuffer, int length);
|
||||
int Json651PacketSluiceInfo (char * outBuffer, int length);
|
||||
|
||||
//int Json651UnpackInfo (char *input, int length, SysInfoConfig_t *info);
|
||||
int Json651PacketWaterInfo (char *outBuffer, int length);
|
||||
#endif
|
||||
Reference in new issue
Block a user