feat(sensor): 新增Lora信号质量查询指令(0x09)及多项Bug修复
新增 COMM_UNIT_CMD_GET_SIGNAL(0x09): 传感器可查询与网关的Lora信号质量,无需注册,回应SNR/RSSI各1字节,回应后打印日志并刷新CommErrCnt/在线状态。CommUnitCmdSend对GET_SIGNAL豁免注册检查。culs命令新增传感器在线状态显示。Bug修复: CatSendErrCnt清零、Mac索引修正、时间同步指针修正、HIS_DATA break补全、Ch2校准标志修正、RS485离线通知格式修正、LoraSetFreqCent参数修正
This commit is contained in:
@@ -515,7 +515,9 @@ void DebugCmdLsCommUnit(int argc, char *argv[])
|
|||||||
for(int j = 0; j < GateWay->ConfigPara.CommUnitArray[i].SensorN; j++) {
|
for(int j = 0; j < GateWay->ConfigPara.CommUnitArray[i].SensorN; j++) {
|
||||||
DBG_LOG("%04X ", GateWay->ConfigPara.CommUnitArray[i].SensorType[j]);
|
DBG_LOG("%04X ", GateWay->ConfigPara.CommUnitArray[i].SensorType[j]);
|
||||||
}
|
}
|
||||||
DBG_LOG("\r\n\r\n");
|
DBG_LOG("\r\n");
|
||||||
|
DBG_LOG("Online: %s\r\n", GateWay->ConfigPara.CommUnitArray[i].CommStatus ? "Yes" : "No");
|
||||||
|
DBG_LOG("\r\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(CUCnt ==0) {
|
if(CUCnt ==0) {
|
||||||
|
|||||||
@@ -825,6 +825,7 @@ void SX1276LoRaWriteRx(void);
|
|||||||
void SX1276LoRaWriteSleep(bool Sleep);
|
void SX1276LoRaWriteSleep(bool Sleep);
|
||||||
Sx1276StateType_t SX1276LoRaReadStatus(void);
|
Sx1276StateType_t SX1276LoRaReadStatus(void);
|
||||||
void SX1276LoCalcRssiSnr(int16_t *pswRssi, int8_t *psbSnr);
|
void SX1276LoCalcRssiSnr(int16_t *pswRssi, int8_t *psbSnr);
|
||||||
|
void SX1276Read(uint8_t ucAddr, uint8_t *pucData);
|
||||||
void Sx1276LoRaSleep(void);
|
void Sx1276LoRaSleep(void);
|
||||||
void Sx1276LoRaWakeup(void);
|
void Sx1276LoRaWakeup(void);
|
||||||
int GetSx1276RxRetValue(void);
|
int GetSx1276RxRetValue(void);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ typedef enum {
|
|||||||
COMM_UNIT_CMD_SET_SENSOR_COLL_TIME = 5,
|
COMM_UNIT_CMD_SET_SENSOR_COLL_TIME = 5,
|
||||||
COMM_UNIT_CMD_TIME_SYNC,
|
COMM_UNIT_CMD_TIME_SYNC,
|
||||||
COMM_UNIT_CMD_CONT_LASER = 8,//激光独有指令
|
COMM_UNIT_CMD_CONT_LASER = 8,//激光独有指令
|
||||||
|
COMM_UNIT_CMD_GET_SIGNAL, //0x09 查询Lora信号质量
|
||||||
COMM_UNIT_CMD_END,
|
COMM_UNIT_CMD_END,
|
||||||
}CommUnitCmd_m;
|
}CommUnitCmd_m;
|
||||||
|
|
||||||
|
|||||||
@@ -508,6 +508,7 @@ void CatOneLoopHandler(void)
|
|||||||
case CAT_ONE_WAIT_SEND:
|
case CAT_ONE_WAIT_SEND:
|
||||||
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 1000);
|
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 1000);
|
||||||
if(result == RT_EOK) {
|
if(result == RT_EOK) {
|
||||||
|
CatSendErrCnt = 0;
|
||||||
CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
|
CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
|
||||||
CatOne.Cat1Status = CAT_ONE_SEND_DATA;
|
CatOne.Cat1Status = CAT_ONE_SEND_DATA;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -142,15 +142,15 @@ void Lora_Thread_Entry(void *parameter)
|
|||||||
if(UnitCommSendFlag == false && UnitCommReadDelayCnt >= GateWay->ConfigPara.CommUnitReadInterval) {
|
if(UnitCommSendFlag == false && UnitCommReadDelayCnt >= GateWay->ConfigPara.CommUnitReadInterval) {
|
||||||
if(SendUnitCommIdx < COMMUNIT_NUM_MAX) {
|
if(SendUnitCommIdx < COMMUNIT_NUM_MAX) {
|
||||||
if(GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].RegFlag &&
|
if(GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].RegFlag &&
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[2] == 0x01) {
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][2] == 0x01) {
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].RevNewDataFlag = false;
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].RevNewDataFlag = false;
|
||||||
Debug_Printf("Lora Read CommUnit: %02X:%02X:%02X:%02X:%02X:%02X\r\n",
|
Debug_Printf("Lora Read CommUnit: %02X:%02X:%02X:%02X:%02X:%02X\r\n",
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0],
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][0],
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[1],
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][1],
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[2],
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][2],
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[3],
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][3],
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[4],
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][4],
|
||||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[5]);
|
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][5]);
|
||||||
CommUnitCmdSend(GateWay, GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0], COMM_UNIT_CMD_READ, NULL, 0, Sx1276LoRaSendBuffer);
|
CommUnitCmdSend(GateWay, GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0], COMM_UNIT_CMD_READ, NULL, 0, Sx1276LoRaSendBuffer);
|
||||||
UnitCommSendFlag = true;
|
UnitCommSendFlag = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "spiflash.h"
|
#include "spiflash.h"
|
||||||
#include "CatOneTask.h"
|
#include "CatOneTask.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "sx127x.h"
|
||||||
|
|
||||||
//传感器对应的数据长度
|
//传感器对应的数据长度
|
||||||
const uint8_t SensorTypeDataLen[] = {
|
const uint8_t SensorTypeDataLen[] = {
|
||||||
@@ -256,7 +257,7 @@ void CommUnitCmdSend(GateWayPara GateWay, uint8_t *CommUnitMac, CommUnitCmd_m Cm
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int ret = CheckCommUnitReg(GateWay, CommUnitMac);
|
int ret = CheckCommUnitReg(GateWay, CommUnitMac);
|
||||||
if(ret < 0)
|
if(ret < 0 && Cmd != COMM_UNIT_CMD_GET_SIGNAL)
|
||||||
return;
|
return;
|
||||||
memcpy(CUHeader->DevMac, CommUnitMac, 6);
|
memcpy(CUHeader->DevMac, CommUnitMac, 6);
|
||||||
//CUHeader->DevType = GateWay->ConfigPara.CommUnitArray[ret].CUType;
|
//CUHeader->DevType = GateWay->ConfigPara.CommUnitArray[ret].CUType;
|
||||||
@@ -496,12 +497,12 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
if(check != crc16)
|
if(check != crc16)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if((CUHeader->Cmd != COMM_UNIT_CMD_REG) && (memcmp(GateWay->ConfigPara.GwMac, CUHeader->GWMac, 6) != 0))
|
if((CUHeader->Cmd != COMM_UNIT_CMD_REG && CUHeader->Cmd != COMM_UNIT_CMD_GET_SIGNAL) && (memcmp(GateWay->ConfigPara.GwMac, CUHeader->GWMac, 6) != 0))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
CommUnitIdx = CheckCommUnitReg(GateWay, CUHeader->DevMac);//判断是否是已注册的设备
|
CommUnitIdx = CheckCommUnitReg(GateWay, CUHeader->DevMac);//判断是否是已注册的设备
|
||||||
if(CommUnitIdx < 0) {
|
if(CommUnitIdx < 0) {
|
||||||
if(CUHeader->Cmd != COMM_UNIT_CMD_REG){//判断是否是注册请求
|
if(CUHeader->Cmd != COMM_UNIT_CMD_REG && CUHeader->Cmd != COMM_UNIT_CMD_GET_SIGNAL){//判断是否是注册请求
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
ExclCommUnit = CheckCommUnitExcl(GateWay, CUHeader->DevMac);//判断是否是被排除的设备
|
ExclCommUnit = CheckCommUnitExcl(GateWay, CUHeader->DevMac);//判断是否是被排除的设备
|
||||||
@@ -842,6 +843,19 @@ int CommUnitAnalyze(GateWayPara GateWay, uint8_t *rData, uint16_t rLen, SendData
|
|||||||
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
WritePara((uint8_t *)&GateWay->ConfigPara, sizeof(GWConfigPara_t));
|
||||||
break;}
|
break;}
|
||||||
|
|
||||||
|
case COMM_UNIT_CMD_GET_SIGNAL:{
|
||||||
|
int16_t Rssi;
|
||||||
|
int8_t Snr;
|
||||||
|
uint8_t SignalPayload[2];
|
||||||
|
SX1276LoCalcRssiSnr(&Rssi, &Snr);
|
||||||
|
SignalPayload[0] = (uint8_t)Snr;
|
||||||
|
SignalPayload[1] = (uint8_t)(Rssi & 0xFF);
|
||||||
|
CommUnitCmdSend(GateWay, CUHeader->DevMac, COMM_UNIT_CMD_GET_SIGNAL, SignalPayload, 2, Response);
|
||||||
|
MAIN_DBG_LOG("\r\nCUMac:%02X-%02X-%02X-%02X-%02X-%02X, RX(Dev->GW): SNR:%d, RSSI:%d\r\n",
|
||||||
|
CUHeader->DevMac[0], CUHeader->DevMac[1], CUHeader->DevMac[2], CUHeader->DevMac[3], CUHeader->DevMac[4], CUHeader->DevMac[5],
|
||||||
|
Snr, Rssi);
|
||||||
|
break;}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -897,13 +911,13 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
|
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
if(GateWay->ConfigPara.Rs485Ch1.Enable == true) { //内部通讯单元处理
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, &rData[14], 4, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, (uint8_t *)&NCHeader->Timestamp, 4, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
||||||
else
|
else
|
||||||
RS485CmdSend(GateWay, 1, &SCPara);
|
RS485CmdSend(GateWay, 1, &SCPara);
|
||||||
}
|
}
|
||||||
if(GateWay->ConfigPara.Rs485Ch2.Enable == true) {
|
if(GateWay->ConfigPara.Rs485Ch2.Enable == true) {
|
||||||
if(GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true)
|
if(GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true)
|
||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, &rData[14], 4, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_TIME_SYNC, (uint8_t *)&NCHeader->Timestamp, 4, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
||||||
else
|
else
|
||||||
RS485CmdSend(GateWay, 2, &SCPara);
|
RS485CmdSend(GateWay, 2, &SCPara);
|
||||||
}
|
}
|
||||||
@@ -958,7 +972,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, GateWay->ConfigPara.Rs485Ch1.RS485Send);
|
||||||
}
|
}
|
||||||
if(GateWay->ConfigPara.Rs485Ch2.Enable == true) {
|
if(GateWay->ConfigPara.Rs485Ch2.Enable == true) {
|
||||||
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
if(GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true)
|
||||||
RS485CmdSend(GateWay, 2, &SCPara);
|
RS485CmdSend(GateWay, 2, &SCPara);
|
||||||
else
|
else
|
||||||
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
CommUnitCmdSend(GateWay, CommUintMac, COMM_UNIT_CMD_CAIL, NULL, 0, GateWay->ConfigPara.Rs485Ch2.RS485Send);
|
||||||
@@ -1100,6 +1114,7 @@ int Cat1EthRevCallBack(GateWayPara GateWay, uint8_t *rData, uint16_t rLen)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
case NET_COMM_CMD_ADD_UNIT:{
|
case NET_COMM_CMD_ADD_UNIT:{
|
||||||
if(*Data == 1) { //录入成功
|
if(*Data == 1) { //录入成功
|
||||||
MAIN_DBG_LOG("Adding CommUnit succeeded...\r\n");
|
MAIN_DBG_LOG("Adding CommUnit succeeded...\r\n");
|
||||||
|
|||||||
@@ -422,10 +422,11 @@ void RS485LoopHandler(GateWayPara GateWay, RS485Para RS485Ch, SensorCommPara SCP
|
|||||||
if(GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus) {
|
if(GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus) {
|
||||||
GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus = 0;
|
GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus = 0;
|
||||||
MegData[0] = 7;
|
MegData[0] = 7;
|
||||||
MegData[1] = COMM_UNIT_CMD_READ;
|
MegData[1] = 0;
|
||||||
memcpy(&MegData[2], GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].Mac[0], 6);
|
MegData[2] = COMM_UNIT_CMD_READ;
|
||||||
MegData[8] = GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus;
|
memcpy(&MegData[3], GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].Mac[0], 6);
|
||||||
CatOneEthSendQueue(MegData, 9); //发送离线消息
|
MegData[9] = GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus;
|
||||||
|
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SCPara->SendUnitCommIdx++;
|
SCPara->SendUnitCommIdx++;
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ void GateWayInit(void)
|
|||||||
if(LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent) == false)
|
if(LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent) == false)
|
||||||
{
|
{
|
||||||
GateWay.ConfigPara.Lora.FreqCent = 433100000;
|
GateWay.ConfigPara.Lora.FreqCent = 433100000;
|
||||||
LoraSetFreqCent(GateWay.ConfigPara.Lora.ucChannel);
|
LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent);
|
||||||
}
|
}
|
||||||
if(LoraSetPower(GateWay.ConfigPara.Lora.ucPower) == false) {
|
if(LoraSetPower(GateWay.ConfigPara.Lora.ucPower) == false) {
|
||||||
GateWay.ConfigPara.Lora.ucPower = 20;
|
GateWay.ConfigPara.Lora.ucPower = 20;
|
||||||
|
|||||||
Reference in New Issue
Block a user