|
|
|
@ -66,7 +66,7 @@ volatile uint8_t STS_LoRa_WAN_Joined = 0;
|
|
|
|
|
volatile uint8_t mems_int1_detected = 0;
|
|
|
|
|
volatile uint8_t upload_message_timer=0;
|
|
|
|
|
volatile uint8_t heart_beat_timer =0;
|
|
|
|
|
char outbuf[128]="";
|
|
|
|
|
uint8_t outbuf[128]={0x0};
|
|
|
|
|
volatile sts_cfg_nvm_t sts_cfg_nvm = {
|
|
|
|
|
sts_mtmcode1,
|
|
|
|
|
sts_mtmcode2,
|
|
|
|
@ -597,8 +597,9 @@ void LoRaWAN_Init(void)
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), UTIL_SEQ_RFU, STS_YunhornSTSEventRFAC_Process);
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), UTIL_SEQ_RFU, STS_YunhornSTSEventP1_Process);
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP2), UTIL_SEQ_RFU, STS_YunhornSTSEventP2_Process);
|
|
|
|
|
#if 1
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), UTIL_SEQ_RFU, STS_YunhornSTSEventP3_Process);
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP4), UTIL_SEQ_RFU, STS_YunhornSTSEventP4_Process);
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), UTIL_SEQ_RFU, STS_YunhornSTSEventP5_Process);
|
|
|
|
|
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP6), UTIL_SEQ_RFU, STS_YunhornSTSEventP6_Process);
|
|
|
|
@ -705,8 +706,9 @@ static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
|
|
|
|
|
|
|
|
|
|
if (params != NULL)
|
|
|
|
|
{
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); /* LED_BLUE */
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
UTIL_TIMER_Start(&RxLedTimer);
|
|
|
|
|
|
|
|
|
|
if (params->IsMcpsIndication)
|
|
|
|
@ -751,7 +753,7 @@ static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_mtmcode2;
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_version;
|
|
|
|
|
outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C'
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case LORAWAN_USER_APP_PORT:
|
|
|
|
@ -761,12 +763,16 @@ static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
|
|
|
|
|
if (AppLedStateOn == RESET)
|
|
|
|
|
{
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "LED OFF\r\n");
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "LED ON\r\n");
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@ -801,19 +807,17 @@ static void SendTxData(void)
|
|
|
|
|
/* USER CODE BEGIN SendTxData_1 */
|
|
|
|
|
LmHandlerErrorStatus_t status = LORAMAC_HANDLER_ERROR;
|
|
|
|
|
uint8_t batteryLevel = GetBatteryLevel();
|
|
|
|
|
//uint16_t batteryLevelmV = SYS_GetBatteryLevel();
|
|
|
|
|
//sensor_t sensor_data;
|
|
|
|
|
|
|
|
|
|
STS_OO_SensorStatusDataTypeDef sensorData;
|
|
|
|
|
UTIL_TIMER_Time_t nextTxIn = 0;
|
|
|
|
|
uint8_t i = 0;
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n\n SendTxData Enter \r\n\n");
|
|
|
|
|
|
|
|
|
|
//if (LmHandlerIsBusy() == false)
|
|
|
|
|
if (LmHandlerIsBusy() == false)
|
|
|
|
|
{
|
|
|
|
|
uint32_t i = 0;
|
|
|
|
|
|
|
|
|
|
STS_PRESENCE_SENSOR_Prepare_Send_Data(&sensorData);
|
|
|
|
|
|
|
|
|
|
AppData.Port = LORAWAN_USER_APP_PORT;
|
|
|
|
|
//AppData.Buffer[i++] = AppLedStateOn; //#01
|
|
|
|
|
STS_PRESENCE_SENSOR_Prepare_Send_Data();
|
|
|
|
|
|
|
|
|
|
if ((heart_beat_timer != 0L)) // sensor data OVERWRITE heart-beat message, 2024-05-12
|
|
|
|
|
{
|
|
|
|
@ -823,66 +827,72 @@ static void SendTxData(void)
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(99*batteryLevel/254)&0xff; //#05
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n\n SendTxData Enter Heart-Beat \r\n\n");
|
|
|
|
|
|
|
|
|
|
} else if ((upload_message_timer != 0U)||(sensor_data_ready!= 0U)) //sensor_data_ready for manual push button-1 trigger)
|
|
|
|
|
} else if ((sensor_data_ready!= 0U)) //sensor_data_ready for manual push button-1 trigger)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n\n SendTxData Enter Sensor Data Ready \r\n\n");
|
|
|
|
|
sensor_data_ready =0;
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = AppLedStateOn|0x80; // ************ MUST KEEP IT HERE, NON-ZERO ******
|
|
|
|
|
|
|
|
|
|
//AppData.Buffer[i++] = AppLedStateOn;
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.lamp_bar_color)&0xff; //01
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.workmode)&0xff; //02 WORK MODE
|
|
|
|
|
|
|
|
|
|
//STS_PRESENCE_SENSOR_Prepare_Send_Data();
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.lamp_bar_color)&0xff; //01
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.workmode)&0xff; //02 WORK MODE
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.state_sensor1_on_off)&0xff; //03 Sensor head #1 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.state_sensor2_on_off)&0xff; //04 Sensor head #2 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.state_sensor3_on_off)&0xff; //05 Sensor head #3 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.state_sensor4_on_off)&0xff; //06 Sensor head #4 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor1_on_off)&0xff; //03 Sensor head #1 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor2_on_off)&0xff; //04 Sensor head #2 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor3_on_off)&0xff; //05 Sensor head #3 status
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.state_sensor4_on_off)&0xff; //06 Sensor head #4 status
|
|
|
|
|
#if 1
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.rss_presence_distance>>8)&0xff; //07 MSB distance
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.rss_presence_distance)&0xff; //08 LSB distance
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.rss_presence_score>>8)&0xff; //09 MSB score
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.rss_presence_score)&0xff; //10 LSB score
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_distance>>8)&0xff; //07 MSB distance
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_distance)&0xff; //08 LSB distance
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_score>>8)&0xff; //09 MSB score
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.rss_presence_score)&0xff; //10 LSB score
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.unconcious_state)&0xff; //11 unconcious state detected or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.fall_state)&0xff; //12 fall detected or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.overtime)&0xff; //13 occupancy over time or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.over_stay_duration>>8)&0xff; //13 occupancy over time or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sts_o7_sensorData.over_stay_duration)&0xff; //13 occupancy over time or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.unconcious_state)&0xff; //11 unconcious state detected or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.fall_state)&0xff; //12 fall detected or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.overtime)&0xff; //13 occupancy over time or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration>>8)&0xff; //14 occupancy over time or not
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(sensorData.over_stay_duration)&0xff; //15 occupancy over time or not
|
|
|
|
|
#endif
|
|
|
|
|
#if 1
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L,
|
|
|
|
|
"\r\n######| Color | Mode |\r\n######| %4s | %5s |\r\n",(char *)sts_lamp_color_code[(uint8_t)(AppData.Buffer[0])], (char*)sts_work_mode_code[AppData.Buffer[1]]);
|
|
|
|
|
"\r\n######| Color | Mode |\r\n######| %4s | %5s |\r\n",(char *)sts_lamp_color_code[sensorData.lamp_bar_color], (char*)sts_work_mode_code[sensorData.workmode]);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L,
|
|
|
|
|
"\r\n######| S1-DoorOpen | S2-Motion | S3-No_Emergency | S4 |Distance(mm) | MotionScore| Unconcious | Over_Stay| Fall Detected|"
|
|
|
|
|
"\r\n######| %1d | %1d | %1d | %1d | %04d | %04d | %1d | %1d | %1d |\r\n",
|
|
|
|
|
AppData.Buffer[2], AppData.Buffer[3],AppData.Buffer[4], AppData.Buffer[5],
|
|
|
|
|
(uint16_t)sts_o7_sensorData.rss_presence_distance,(uint16_t)sts_o7_sensorData.rss_presence_score,
|
|
|
|
|
sts_o7_sensorData.unconcious_state, sts_o7_sensorData.unconcious_duration, sts_o7_sensorData.fall_state );
|
|
|
|
|
sensorData.state_sensor1_on_off, sensorData.state_sensor2_on_off,sensorData.state_sensor3_on_off, sensorData.state_sensor4_on_off,
|
|
|
|
|
(uint16_t)sensorData.rss_presence_distance,(uint16_t)sensorData.rss_presence_score,
|
|
|
|
|
sensorData.unconcious_state, sensorData.unconcious_duration, sensorData.fall_state );
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ((LmHandlerParams.ActiveRegion == LORAMAC_REGION_US915) || (LmHandlerParams.ActiveRegion == LORAMAC_REGION_AU915)
|
|
|
|
|
|| (LmHandlerParams.ActiveRegion == LORAMAC_REGION_AS923))
|
|
|
|
|
{
|
|
|
|
|
// ORIGIN CODE OF 4 ZERO APPENDED
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AppData.BufferSize = (sts_service_mask > STS_SERVICE_MASK_L1? 0:i);
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L, "\r\n\n\n** ** AppData.PORT =%3d ** ** AppData.BufferSize=%3d ** Count Size=%3d\r\n", AppData.Port, AppData.BufferSize, i);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L, "\r\n\n\n**AppData.PORT =%3d **AppData.BufferSize=%3d \r\n**Count Size=%3d\r\n", AppData.Port, AppData.BufferSize, i);
|
|
|
|
|
//AppData.BufferSize = (sts_service_mask > STS_SERVICE_MASK_L1? 0:i);
|
|
|
|
|
|
|
|
|
|
if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET))
|
|
|
|
|
{
|
|
|
|
|
UTIL_TIMER_Stop(&JoinLedTimer);
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
LED1_ON;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false);
|
|
|
|
|
if (LORAMAC_HANDLER_SUCCESS == status)
|
|
|
|
|
{
|
|
|
|
|
LED1_ON;
|
|
|
|
|
APP_LOG(TS_ON, VLEVEL_L, "SEND REQUEST\r\n");
|
|
|
|
|
LED1_OFF;
|
|
|
|
|
}
|
|
|
|
|
else if (LORAMAC_HANDLER_DUTYCYCLE_RESTRICTED == status)
|
|
|
|
|
{
|
|
|
|
@ -935,17 +945,23 @@ static void OnTxTimerEvent(void *context)
|
|
|
|
|
/* USER CODE BEGIN PrFD_LedEvents */
|
|
|
|
|
static void OnTxTimerLedEvent(void *context)
|
|
|
|
|
{
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); /* LED_GREEN */
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void OnRxTimerLedEvent(void *context)
|
|
|
|
|
{
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); /* LED_BLUE */
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void OnJoinTimerLedEvent(void *context)
|
|
|
|
|
{
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_TogglePin(LED3_GPIO_Port, LED3_Pin); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
if ((sts_work_mode != STS_WIRED_MODE))
|
|
|
|
|
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP3), CFG_SEQ_Prio_0);
|
|
|
|
|
}
|
|
|
|
@ -962,21 +978,23 @@ static void OnTxData(LmHandlerTxParams_t *params)
|
|
|
|
|
/* Process Tx event only if its a mcps response to prevent some internal events (mlme) */
|
|
|
|
|
if (params->IsMcpsConfirm != 0)
|
|
|
|
|
{
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); /* LED_GREEN */
|
|
|
|
|
#endif
|
|
|
|
|
UTIL_TIMER_Start(&TxLedTimer);
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n###### ========== MCPS-Confirm =============\r\n");
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "###### U/L FRAME:%04d | PORT:%d | DR:%d | PWR:%d", params->UplinkCounter,
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "###### U/L FRAME:%04d | PORT:%d | DR:%d | PWR:%d", params->UplinkCounter,
|
|
|
|
|
params->AppData.Port, params->Datarate, params->TxPower);
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, " | MSG TYPE:");
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, " | MSG TYPE:");
|
|
|
|
|
if (params->MsgType == LORAMAC_HANDLER_CONFIRMED_MSG)
|
|
|
|
|
{
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "CONFIRMED [%s]\r\n", (params->AckReceived != 0) ? "ACK" : "NACK");
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "CONFIRMED [%s]\r\n", (params->AckReceived != 0) ? "ACK" : "NACK");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "UNCONFIRMED\r\n");
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "UNCONFIRMED\r\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -991,8 +1009,9 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
|
|
|
|
|
if (joinParams->Status == LORAMAC_HANDLER_SUCCESS)
|
|
|
|
|
{
|
|
|
|
|
UTIL_TIMER_Stop(&JoinLedTimer);
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n###### = JOINED = ");
|
|
|
|
|
if (joinParams->Mode == ACTIVATION_TYPE_ABP)
|
|
|
|
|
{
|
|
|
|
@ -1016,6 +1035,7 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "###### U/L FRAME:JOIN | DR:%d | PWR:%d\r\n", joinParams->Datarate, joinParams->TxPower);
|
|
|
|
|
}
|
|
|
|
|
heart_beat_timer = 1;
|
|
|
|
|
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
|
|
|
|
|
/* USER CODE END OnJoinRequest_1 */
|
|
|
|
|
}
|
|
|
|
@ -1144,9 +1164,11 @@ static void OnSystemReset(void)
|
|
|
|
|
static void StopJoin(void)
|
|
|
|
|
{
|
|
|
|
|
/* USER CODE BEGIN StopJoin_1 */
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); /* LED_BLUE */
|
|
|
|
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_SET); /* LED_GREEN */
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_SET); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
/* USER CODE END StopJoin_1 */
|
|
|
|
|
|
|
|
|
|
UTIL_TIMER_Stop(&TxTimer);
|
|
|
|
@ -1188,9 +1210,11 @@ static void OnStopJoinTimerEvent(void *context)
|
|
|
|
|
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaStopJoinEvent), CFG_SEQ_Prio_0);
|
|
|
|
|
}
|
|
|
|
|
/* USER CODE BEGIN OnStopJoinTimerEvent_Last */
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); /* LED_BLUE */
|
|
|
|
|
HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, GPIO_PIN_RESET); /* LED_GREEN */
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
/* USER CODE END OnStopJoinTimerEvent_Last */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1474,7 +1498,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
if ((char)tlv_buf[CFG_CMD3] == 'H') { //BOARD SOFT RESET, REVIVE "YZH"
|
|
|
|
|
//BOARD REVIVE
|
|
|
|
|
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, 20, "!YunHorn STS Revive!");
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, 20, (uint8_t*)"!YunHorn STS Revive!");
|
|
|
|
|
HAL_Delay(5000);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "\r\n Yunhorn STS Node Revive ... \r\n");
|
|
|
|
|
HAL_Delay(3000);
|
|
|
|
@ -1486,7 +1510,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
//outbuf[i++] = (uint8_t) 'Y';
|
|
|
|
|
//outbuf[i++] = (uint8_t) 'Z';
|
|
|
|
|
//outbuf[i++] = (uint8_t) 'S';
|
|
|
|
|
//STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
//STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
i=0;
|
|
|
|
|
|
|
|
|
@ -1494,7 +1518,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
|
|
|
|
|
HAL_Delay(5000);
|
|
|
|
|
i=21;
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
} else if ((char)tlv_buf[CFG_CMD3] == 'C') { // Lora-WAN Class "YZC" LORAWAN CLASS A/B/C
|
|
|
|
|
|
|
|
|
@ -1506,13 +1530,13 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_mtmcode2;
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_version;
|
|
|
|
|
outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C'
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
} else if ((char)tlv_buf[CFG_CMD3] == 'D') { // Distance Measure "YZD"
|
|
|
|
|
i=0;
|
|
|
|
|
outbuf[i++] = (uint8_t) 'Y';
|
|
|
|
|
outbuf[i++] = (uint8_t) 'Z';
|
|
|
|
|
outbuf[i++] = (uint8_t) 'D';
|
|
|
|
|
//STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
//STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
STS_SENSOR_Distance_Test_Process();
|
|
|
|
|
|
|
|
|
@ -1549,7 +1573,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -1564,7 +1588,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) 'Y';
|
|
|
|
|
outbuf[i++] = (uint8_t) 'M';
|
|
|
|
|
outbuf[i++] = (uint8_t) (sts_service_mask+0x30);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L, ">>>>>>>>>>>>>>>>>>>>> Mask = [ %02x ] \r\n", sts_service_mask);
|
|
|
|
|
OnStoreSTSCFGContextRequest();
|
|
|
|
|
if (sts_service_mask != STS_SERVICE_MASK_L0) STS_Lamp_Bar_Set_Dark();
|
|
|
|
@ -1584,8 +1608,8 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) MajorVer;
|
|
|
|
|
outbuf[i++] = (uint8_t) MinorVer;
|
|
|
|
|
outbuf[i++] = (uint8_t) SubMinorVer;
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "###### YUNHORN Report Version [ %10x ] \r\n", outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "###### YUNHORN Report Version [ %10x ] \r\n", (char *)outbuf);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if ((char)tlv_buf[CFG_CMD3] == 'C') { // "YVC" REPORT NVM STORED CONFIG PARAMETERS "YVC"
|
|
|
|
@ -1612,7 +1636,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
for (uint8_t j=0; j < cfg_in_nvm[NVM_LEN]; j++) {
|
|
|
|
|
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_CFG_START+j]);
|
|
|
|
|
}
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
@ -1626,7 +1650,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3];
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
} else {
|
|
|
|
|
STS_SENSOR_Upload_Config_Invalid_Message();
|
|
|
|
|
}
|
|
|
|
@ -1640,7 +1664,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3];
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
} else {
|
|
|
|
|
STS_SENSOR_Upload_Config_Invalid_Message();
|
|
|
|
|
}
|
|
|
|
@ -1653,7 +1677,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD1];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD2];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD3];
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
} else {
|
|
|
|
|
STS_SENSOR_Upload_Config_Invalid_Message();
|
|
|
|
|
}
|
|
|
|
@ -1682,7 +1706,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5];
|
|
|
|
|
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
// Save config to NVM
|
|
|
|
|
sts_cfg_nvm.mtmcode1 = (uint8_t)sts_mtmcode1;
|
|
|
|
|
sts_cfg_nvm.mtmcode2 = (uint8_t)sts_mtmcode2;
|
|
|
|
@ -1728,7 +1752,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD4];
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[CFG_CMD5];
|
|
|
|
|
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
// Save config to NVM
|
|
|
|
|
sts_cfg_nvm.mtmcode1 = (uint8_t)sts_mtmcode1;
|
|
|
|
|
sts_cfg_nvm.mtmcode2 = (uint8_t)sts_mtmcode2;
|
|
|
|
@ -1964,7 +1988,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
// Step 3: Upload status update message
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -2020,7 +2044,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
for (uint8_t j=0; j <(tlv_buf_size) ; j++) {
|
|
|
|
|
outbuf[i++] = (uint8_t) tlv_buf[j];
|
|
|
|
|
}
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (char*)outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t *)outbuf);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -2029,7 +2053,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
void STS_SENSOR_Upload_Config_Invalid_Message(void)
|
|
|
|
|
{
|
|
|
|
|
if (sts_service_mask == STS_SERVICE_MASK_L0)
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, 5, "PVXXX");
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, 5, (uint8_t*)"PVXXX");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void STS_YUNHORN_RFAC_HANDLE_PROCESS(void)
|
|
|
|
@ -2039,7 +2063,7 @@ static void STS_YUNHORN_RFAC_HANDLE_PROCESS(void)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, char *appDataBuffer)
|
|
|
|
|
void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, uint8_t *appDataBuffer)
|
|
|
|
|
{
|
|
|
|
|
LmHandlerErrorStatus_t status = LORAMAC_HANDLER_ERROR;
|
|
|
|
|
UTIL_TIMER_Time_t nextTxIn = 0;
|
|
|
|
@ -2047,10 +2071,10 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, char
|
|
|
|
|
if (LmHandlerIsBusy() == false)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//for (uint8_t i=0;i<appBufferSize; i++) {
|
|
|
|
|
// AppData.Buffer[i] = appDataBuffer[i];
|
|
|
|
|
// }
|
|
|
|
|
UTIL_MEM_cpy_8(AppData.Buffer, appDataBuffer, appBufferSize);
|
|
|
|
|
for (uint8_t i=0; i<appBufferSize; i++) {
|
|
|
|
|
AppData.Buffer[i] = appDataBuffer[i];
|
|
|
|
|
}
|
|
|
|
|
//UTIL_MEM_cpy_8(AppData.Buffer, appDataBuffer, appBufferSize);
|
|
|
|
|
|
|
|
|
|
AppData.Port = appDataPort;
|
|
|
|
|
AppData.BufferSize = (sts_service_mask >1 ?0:appBufferSize);
|
|
|
|
@ -2060,7 +2084,9 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, char
|
|
|
|
|
if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET))
|
|
|
|
|
{
|
|
|
|
|
UTIL_TIMER_Stop(&JoinLedTimer);
|
|
|
|
|
#ifndef STM32WLE5xx
|
|
|
|
|
HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, GPIO_PIN_RESET); /* LED_RED */
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false);
|
|
|
|
@ -2360,7 +2386,7 @@ void STS_SENSOR_Function_Test_Process(void)
|
|
|
|
|
|
|
|
|
|
memset((void*)outbuf,0x0, sizeof(outbuf));
|
|
|
|
|
memcpy((void*)outbuf, tstbuf, i);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (char*)outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (uint8_t*)outbuf);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|