revised for lorawan config saving
This commit is contained in:
parent
361e4216e9
commit
cf22bc3499
|
@ -628,6 +628,8 @@ void OnStoreSTSCFGContextRequest(void);
|
||||||
*/
|
*/
|
||||||
void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm);
|
void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm);
|
||||||
|
|
||||||
|
void STS_REBOOT_GET_NVM_CONFIG(void);
|
||||||
|
|
||||||
void STS_REBOOT_CONFIG_Init(void);
|
void STS_REBOOT_CONFIG_Init(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "stm32_seq.h"
|
#include "stm32_seq.h"
|
||||||
|
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "yunhorn_sts_sensors.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* External variables ---------------------------------------------------------*/
|
/* External variables ---------------------------------------------------------*/
|
||||||
|
@ -70,7 +70,7 @@ void MX_LoRaWAN_Init(void)
|
||||||
/* USER CODE END MX_LoRaWAN_Init_1 */
|
/* USER CODE END MX_LoRaWAN_Init_1 */
|
||||||
SystemApp_Init();
|
SystemApp_Init();
|
||||||
/* USER CODE BEGIN MX_LoRaWAN_Init_2 */
|
/* USER CODE BEGIN MX_LoRaWAN_Init_2 */
|
||||||
|
STS_REBOOT_GET_NVM_CONFIG();
|
||||||
/* USER CODE END MX_LoRaWAN_Init_2 */
|
/* USER CODE END MX_LoRaWAN_Init_2 */
|
||||||
LoRaWAN_Init();
|
LoRaWAN_Init();
|
||||||
/* USER CODE BEGIN MX_LoRaWAN_Init_3 */
|
/* USER CODE BEGIN MX_LoRaWAN_Init_3 */
|
||||||
|
|
|
@ -728,14 +728,26 @@ static void OnRxData(LmHandlerAppData_t *appData, LmHandlerRxParams_t *params)
|
||||||
}
|
}
|
||||||
DeviceClass_t deviceClass = CLASS_A;
|
DeviceClass_t deviceClass = CLASS_A;
|
||||||
LmHandlerGetCurrentClass( &deviceClass );
|
LmHandlerGetCurrentClass( &deviceClass );
|
||||||
|
// Save config to NVM
|
||||||
|
sts_cfg_nvm.mtmcode1 = (uint8_t)sts_mtmcode1;
|
||||||
|
sts_cfg_nvm.mtmcode2 = (uint8_t)sts_mtmcode2;
|
||||||
|
sts_cfg_nvm.version = (uint8_t)sts_version;
|
||||||
|
sts_cfg_nvm.hardware_ver = (uint8_t)sts_hardware_ver;
|
||||||
|
sts_cfg_nvm.work_mode = (uint8_t)sts_work_mode;
|
||||||
|
sts_cfg_nvm.sts_service_mask = (uint8_t)sts_service_mask;
|
||||||
|
sts_cfg_nvm.p[NVM_LORA_CLASS_ABC-12]= deviceClass;
|
||||||
|
|
||||||
|
OnStoreSTSCFGContextRequest();
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_H, "###### YUNHORN LoRa WAN Class Changed to [ %c ] \r\n", "ABC"[deviceClass]);
|
||||||
|
// Save config to NVM
|
||||||
|
|
||||||
uint8_t i=0;
|
uint8_t i=0;
|
||||||
outbuf[i++] = (uint8_t) 'L';
|
outbuf[i++] = (uint8_t) 'L';
|
||||||
outbuf[i++] = (uint8_t) sts_mtmcode1;
|
outbuf[i++] = (uint8_t) sts_mtmcode1;
|
||||||
outbuf[i++] = (uint8_t) sts_mtmcode2;
|
outbuf[i++] = (uint8_t) sts_mtmcode2;
|
||||||
outbuf[i++] = (uint8_t) sts_version;
|
outbuf[i++] = (uint8_t) sts_version;
|
||||||
outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C'
|
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, (char*)outbuf);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case LORAWAN_USER_APP_PORT:
|
case LORAWAN_USER_APP_PORT:
|
||||||
if (appData->BufferSize == 1)
|
if (appData->BufferSize == 1)
|
||||||
|
@ -1549,6 +1561,7 @@ 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_mtmcode2;
|
||||||
outbuf[i++] = (uint8_t) sts_version;
|
outbuf[i++] = (uint8_t) sts_version;
|
||||||
outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C'
|
outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C'
|
||||||
|
|
||||||
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (char*)outbuf);
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, (char*)outbuf);
|
||||||
} else if ((char)tlv_buf[CFG_CMD3] == 'D') { // Distance Measure "YZD"
|
} else if ((char)tlv_buf[CFG_CMD3] == 'D') { // Distance Measure "YZD"
|
||||||
i=0;
|
i=0;
|
||||||
|
@ -2134,51 +2147,54 @@ void OnRestoreSTSCFGContextRequest(uint8_t *cfg_in_nvm)
|
||||||
|
|
||||||
/* USER CODE END OnRestoreSTSCFGContextRequest_Last */
|
/* USER CODE END OnRestoreSTSCFGContextRequest_Last */
|
||||||
}
|
}
|
||||||
|
void STS_REBOOT_GET_NVM_CONFIG(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN OnRestoreContextRequest_1 */
|
||||||
|
uint8_t nvm_stored_value[YUNHORN_STS_MAX_NVM_CFG_SIZE]={0x0};
|
||||||
|
|
||||||
|
/* USER CODE END OnRestoreContextRequest_1 */
|
||||||
|
UTIL_MEM_cpy_8(nvm_stored_value, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE);
|
||||||
|
/* USER CODE BEGIN OnRestoreContextRequest_Last */
|
||||||
|
|
||||||
|
if ((nvm_stored_value[NVM_MTM1] != sts_mtmcode1) || (nvm_stored_value[NVM_MTM2] != sts_mtmcode2) || (nvm_stored_value[NVM_VER] != sts_version))
|
||||||
|
{
|
||||||
|
APP_LOG(TS_OFF, VLEVEL_H, "\r\nInitial Boot with Empty Config, Flash with default config....\r\n");
|
||||||
|
OnStoreSTSCFGContextRequest();
|
||||||
|
UTIL_MEM_set_8((void *)sts_ac_code, 0x00, YUNHORN_STS_AC_CODE_SIZE);
|
||||||
|
HAL_Delay(1000);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
sts_cfg_nvm.mtmcode1 = (uint8_t)nvm_stored_value[NVM_MTM1];
|
||||||
|
sts_cfg_nvm.mtmcode2 = (uint8_t)nvm_stored_value[NVM_MTM2];
|
||||||
|
sts_cfg_nvm.version = (uint8_t)nvm_stored_value[NVM_VER];
|
||||||
|
sts_cfg_nvm.hardware_ver = (uint8_t)nvm_stored_value[NVM_HWV];
|
||||||
|
sts_cfg_nvm.periodicity = (uint8_t)(nvm_stored_value[NVM_PERIODICITY]); //TxPeriodicity interval
|
||||||
|
sts_cfg_nvm.unit = (uint8_t)(nvm_stored_value[NVM_UNIT]);
|
||||||
|
sts_cfg_nvm.sampling = (uint8_t)(nvm_stored_value[NVM_SAMPLING]); //Heart-beat or sampling interval
|
||||||
|
sts_cfg_nvm.s_unit = (uint8_t)(nvm_stored_value[NVM_S_UNIT]);
|
||||||
|
sts_cfg_nvm.work_mode = (uint8_t)(nvm_stored_value[NVM_WORK_MODE]);
|
||||||
|
sts_cfg_nvm.sts_service_mask = (uint8_t)(nvm_stored_value[NVM_SERVICE_MASK]);
|
||||||
|
sts_cfg_nvm.reseve01 = (uint8_t)(nvm_stored_value[NVM_RESERVE01]);
|
||||||
|
sts_cfg_nvm.length = (uint8_t)(nvm_stored_value[NVM_LEN]&0x3F); //MAX 32 bytes
|
||||||
|
|
||||||
|
for (uint8_t j=0; j< sts_cfg_nvm.length; j++) {
|
||||||
|
sts_cfg_nvm.p[j] = (uint8_t)nvm_stored_value[NVM_CFG_START+j];
|
||||||
|
}
|
||||||
|
|
||||||
|
sts_cfg_nvm.fall_detection_acc_threshold = (uint8_t)nvm_stored_value[NVM_FALL_DETECTION_ACC_THRESHOLD];
|
||||||
|
sts_cfg_nvm.fall_detection_depth_threshold = (uint8_t)nvm_stored_value[NVM_FALL_DETECTION_DEPTH_THRESHOLD];
|
||||||
|
sts_cfg_nvm.fall_detection_reserve = (uint8_t)nvm_stored_value[NVM_FALL_DETECTION_RESERVE];
|
||||||
|
sts_cfg_nvm.occupancy_overtime_threshold = (uint8_t)nvm_stored_value[NVM_OCCUPANCY_OVERTIME_THRESHOLD];
|
||||||
|
|
||||||
|
for (uint8_t j=0; j< YUNHORN_STS_AC_CODE_SIZE; j++) {
|
||||||
|
sts_cfg_nvm.ac[j] = (uint8_t)nvm_stored_value[NVM_AC_CODE_START +j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void STS_REBOOT_CONFIG_Init(void)
|
void STS_REBOOT_CONFIG_Init(void)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN OnRestoreContextRequest_1 */
|
|
||||||
uint8_t nvm_stored_value[YUNHORN_STS_MAX_NVM_CFG_SIZE]={0x0};
|
|
||||||
|
|
||||||
/* USER CODE END OnRestoreContextRequest_1 */
|
|
||||||
UTIL_MEM_cpy_8(nvm_stored_value, (void *)STS_CONFIG_NVM_BASE_ADDRESS, YUNHORN_STS_MAX_NVM_CFG_SIZE);
|
|
||||||
/* USER CODE BEGIN OnRestoreContextRequest_Last */
|
|
||||||
|
|
||||||
if ((nvm_stored_value[NVM_MTM1] != sts_mtmcode1) || (nvm_stored_value[NVM_MTM2] != sts_mtmcode2) || (nvm_stored_value[NVM_VER] != sts_version))
|
|
||||||
{
|
|
||||||
APP_LOG(TS_OFF, VLEVEL_H, "\r\nInitial Boot with Empty Config, Flash with default config....\r\n");
|
|
||||||
OnStoreSTSCFGContextRequest();
|
|
||||||
UTIL_MEM_set_8((void *)sts_ac_code, 0x00, YUNHORN_STS_AC_CODE_SIZE);
|
|
||||||
HAL_Delay(1000);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
sts_cfg_nvm.mtmcode1 = (uint8_t)nvm_stored_value[NVM_MTM1];
|
|
||||||
sts_cfg_nvm.mtmcode2 = (uint8_t)nvm_stored_value[NVM_MTM2];
|
|
||||||
sts_cfg_nvm.version = (uint8_t)nvm_stored_value[NVM_VER];
|
|
||||||
sts_cfg_nvm.hardware_ver = (uint8_t)nvm_stored_value[NVM_HWV];
|
|
||||||
sts_cfg_nvm.periodicity = (uint8_t)(nvm_stored_value[NVM_PERIODICITY]); //TxPeriodicity interval
|
|
||||||
sts_cfg_nvm.unit = (uint8_t)(nvm_stored_value[NVM_UNIT]);
|
|
||||||
sts_cfg_nvm.sampling = (uint8_t)(nvm_stored_value[NVM_SAMPLING]); //Heart-beat or sampling interval
|
|
||||||
sts_cfg_nvm.s_unit = (uint8_t)(nvm_stored_value[NVM_S_UNIT]);
|
|
||||||
sts_cfg_nvm.work_mode = (uint8_t)(nvm_stored_value[NVM_WORK_MODE]);
|
|
||||||
sts_cfg_nvm.sts_service_mask = (uint8_t)(nvm_stored_value[NVM_SERVICE_MASK]);
|
|
||||||
sts_cfg_nvm.reseve01 = (uint8_t)(nvm_stored_value[NVM_RESERVE01]);
|
|
||||||
sts_cfg_nvm.length = (uint8_t)(nvm_stored_value[NVM_LEN]&0x3F); //MAX 32 bytes
|
|
||||||
|
|
||||||
for (uint8_t j=0; j< sts_cfg_nvm.length; j++) {
|
|
||||||
sts_cfg_nvm.p[j] = (uint8_t)nvm_stored_value[NVM_CFG_START+j];
|
|
||||||
}
|
|
||||||
|
|
||||||
sts_cfg_nvm.fall_detection_acc_threshold = (uint8_t)nvm_stored_value[NVM_FALL_DETECTION_ACC_THRESHOLD];
|
|
||||||
sts_cfg_nvm.fall_detection_depth_threshold = (uint8_t)nvm_stored_value[NVM_FALL_DETECTION_DEPTH_THRESHOLD];
|
|
||||||
sts_cfg_nvm.fall_detection_reserve = (uint8_t)nvm_stored_value[NVM_FALL_DETECTION_RESERVE];
|
|
||||||
sts_cfg_nvm.occupancy_overtime_threshold = (uint8_t)nvm_stored_value[NVM_OCCUPANCY_OVERTIME_THRESHOLD];
|
|
||||||
|
|
||||||
for (uint8_t j=0; j< YUNHORN_STS_AC_CODE_SIZE; j++) {
|
|
||||||
sts_cfg_nvm.ac[j] = (uint8_t)nvm_stored_value[NVM_AC_CODE_START +j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OnRestoreSTSCFGContextProcess();
|
OnRestoreSTSCFGContextProcess();
|
||||||
|
|
||||||
|
@ -2250,6 +2266,32 @@ void OnRestoreSTSCFGContextProcess(void)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// NVM_LORA_RECONFIG ====================================================
|
||||||
|
// 1) LoRa Class A/B/C
|
||||||
|
DeviceClass_t deviceClass=sts_cfg_nvm.p[NVM_LORA_CLASS_ABC-12], defaultclass;
|
||||||
|
defaultclass = LORAWAN_DEFAULT_CLASS;
|
||||||
|
if (defaultclass != deviceClass){
|
||||||
|
OnClassChange(deviceClass);
|
||||||
|
APP_LOG(TS_OFF,VLEVEL_L,"\r\nSwitch LoRaWAN Class to %c \r\n", "ABC"[deviceClass]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) LoRa Region and Sub Channel Plan Group
|
||||||
|
|
||||||
|
|
||||||
|
// 3) Uplink and Heart-beat port
|
||||||
|
|
||||||
|
|
||||||
|
// 4) ADR and/or DR
|
||||||
|
|
||||||
|
|
||||||
|
// 5) Activation Type ABP/OTAA
|
||||||
|
|
||||||
|
|
||||||
|
// 6) TX Power
|
||||||
|
|
||||||
|
|
||||||
|
// NVM_LORA_RECONFIG ====================================================
|
||||||
|
|
||||||
#ifdef YUNHORN_STS_O6_ENABLED
|
#ifdef YUNHORN_STS_O6_ENABLED
|
||||||
sts_lamp_bar_color = STS_GREEN;
|
sts_lamp_bar_color = STS_GREEN;
|
||||||
sts_fall_detection_acc_threshold = (uint8_t)sts_cfg_nvm.fall_detection_acc_threshold*10;
|
sts_fall_detection_acc_threshold = (uint8_t)sts_cfg_nvm.fall_detection_acc_threshold*10;
|
||||||
|
|
Loading…
Reference in New Issue