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++) {
|
||||
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) {
|
||||
|
||||
@@ -825,6 +825,7 @@ void SX1276LoRaWriteRx(void);
|
||||
void SX1276LoRaWriteSleep(bool Sleep);
|
||||
Sx1276StateType_t SX1276LoRaReadStatus(void);
|
||||
void SX1276LoCalcRssiSnr(int16_t *pswRssi, int8_t *psbSnr);
|
||||
void SX1276Read(uint8_t ucAddr, uint8_t *pucData);
|
||||
void Sx1276LoRaSleep(void);
|
||||
void Sx1276LoRaWakeup(void);
|
||||
int GetSx1276RxRetValue(void);
|
||||
|
||||
@@ -56,6 +56,7 @@ typedef enum {
|
||||
COMM_UNIT_CMD_SET_SENSOR_COLL_TIME = 5,
|
||||
COMM_UNIT_CMD_TIME_SYNC,
|
||||
COMM_UNIT_CMD_CONT_LASER = 8,//激光独有指令
|
||||
COMM_UNIT_CMD_GET_SIGNAL, //0x09 查询Lora信号质量
|
||||
COMM_UNIT_CMD_END,
|
||||
}CommUnitCmd_m;
|
||||
|
||||
|
||||
@@ -508,6 +508,7 @@ void CatOneLoopHandler(void)
|
||||
case CAT_ONE_WAIT_SEND:
|
||||
result = rt_mq_recv(CatOne.GateWay->NetSendData_MQ, Payload, CAT_ONE_REV_LEN_MAX, 1000);
|
||||
if(result == RT_EOK) {
|
||||
CatSendErrCnt = 0;
|
||||
CatOneEthTxLen = NetCommOrgData(CatOne.GateWay, Payload, CatOneEthTxBuff);
|
||||
CatOne.Cat1Status = CAT_ONE_SEND_DATA;
|
||||
}
|
||||
|
||||
@@ -142,15 +142,15 @@ void Lora_Thread_Entry(void *parameter)
|
||||
if(UnitCommSendFlag == false && UnitCommReadDelayCnt >= GateWay->ConfigPara.CommUnitReadInterval) {
|
||||
if(SendUnitCommIdx < COMMUNIT_NUM_MAX) {
|
||||
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;
|
||||
Debug_Printf("Lora Read CommUnit: %02X:%02X:%02X:%02X:%02X:%02X\r\n",
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[1],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[2],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[3],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[4],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[5]);
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][0],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][1],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][2],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][3],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][4],
|
||||
GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0][5]);
|
||||
CommUnitCmdSend(GateWay, GateWay->ConfigPara.CommUnitArray[SendUnitCommIdx].Mac[0], COMM_UNIT_CMD_READ, NULL, 0, Sx1276LoRaSendBuffer);
|
||||
UnitCommSendFlag = true;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "spiflash.h"
|
||||
#include "CatOneTask.h"
|
||||
#include <stdlib.h>
|
||||
#include "sx127x.h"
|
||||
|
||||
//传感器对应的数据长度
|
||||
const uint8_t SensorTypeDataLen[] = {
|
||||
@@ -256,7 +257,7 @@ void CommUnitCmdSend(GateWayPara GateWay, uint8_t *CommUnitMac, CommUnitCmd_m Cm
|
||||
}
|
||||
else {
|
||||
int ret = CheckCommUnitReg(GateWay, CommUnitMac);
|
||||
if(ret < 0)
|
||||
if(ret < 0 && Cmd != COMM_UNIT_CMD_GET_SIGNAL)
|
||||
return;
|
||||
memcpy(CUHeader->DevMac, CommUnitMac, 6);
|
||||
//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)
|
||||
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;
|
||||
|
||||
CommUnitIdx = CheckCommUnitReg(GateWay, CUHeader->DevMac);//判断是否是已注册的设备
|
||||
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;
|
||||
}
|
||||
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));
|
||||
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:
|
||||
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.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
|
||||
RS485CmdSend(GateWay, 1, &SCPara);
|
||||
}
|
||||
if(GateWay->ConfigPara.Rs485Ch2.Enable == 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
|
||||
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);
|
||||
}
|
||||
if(GateWay->ConfigPara.Rs485Ch2.Enable == true) {
|
||||
if(GateWay->ConfigPara.Rs485Ch1.CommUnitEnable == true)
|
||||
if(GateWay->ConfigPara.Rs485Ch2.CommUnitEnable == true)
|
||||
RS485CmdSend(GateWay, 2, &SCPara);
|
||||
else
|
||||
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:{
|
||||
if(*Data == 1) { //录入成功
|
||||
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) {
|
||||
GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus = 0;
|
||||
MegData[0] = 7;
|
||||
MegData[1] = COMM_UNIT_CMD_READ;
|
||||
memcpy(&MegData[2], GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].Mac[0], 6);
|
||||
MegData[8] = GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus;
|
||||
CatOneEthSendQueue(MegData, 9); //发送离线消息
|
||||
MegData[1] = 0;
|
||||
MegData[2] = COMM_UNIT_CMD_READ;
|
||||
memcpy(&MegData[3], GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].Mac[0], 6);
|
||||
MegData[9] = GateWay->ConfigPara.CommUnitArray[SCPara->SendUnitCommIdx].CommStatus;
|
||||
CatOneEthSendQueue(MegData, 10); //发送离线消息
|
||||
}
|
||||
}
|
||||
SCPara->SendUnitCommIdx++;
|
||||
|
||||
@@ -263,7 +263,7 @@ void GateWayInit(void)
|
||||
if(LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent) == false)
|
||||
{
|
||||
GateWay.ConfigPara.Lora.FreqCent = 433100000;
|
||||
LoraSetFreqCent(GateWay.ConfigPara.Lora.ucChannel);
|
||||
LoraSetFreqCent(GateWay.ConfigPara.Lora.FreqCent);
|
||||
}
|
||||
if(LoraSetPower(GateWay.ConfigPara.Lora.ucPower) == false) {
|
||||
GateWay.ConfigPara.Lora.ucPower = 20;
|
||||
|
||||
Reference in New Issue
Block a user