|
|
|
@ -45,7 +45,7 @@
|
|
|
|
|
/* USER CODE BEGIN EV */
|
|
|
|
|
volatile uint8_t mems_int1_detected = 0;
|
|
|
|
|
volatile uint8_t periodicity_level=0;
|
|
|
|
|
volatile sts_cfg_nvm_t sts_cfg_nvm={sts_mtmcode1,sts_mtmcode2, sts_version,0x01,0x05,'S',0x03,0x08,0x04,0x02};
|
|
|
|
|
volatile sts_cfg_nvm_t sts_cfg_nvm={sts_mtmcode1,sts_mtmcode2, sts_version, sts_hardware_ver, 0x01,0x05,'S',0x03,0x08,0x04,0x02};
|
|
|
|
|
#ifdef YUNHORN_STS_M7_ENABLED
|
|
|
|
|
extern volatile uint8_t sensor_data_ready;
|
|
|
|
|
extern volatile STS_M7_SensorDataTypeDef sts_m7_sensorData;
|
|
|
|
@ -354,8 +354,8 @@ void LoRaWAN_Init(void)
|
|
|
|
|
/* USER CODE END LoRaWAN_Init_LV */
|
|
|
|
|
|
|
|
|
|
/* USER CODE BEGIN LoRaWAN_Init_1 */
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n\n##### YUNHORN_STS_FW:%d HW:%d.%d.%d SW:%d.%d.%d####\r\n\n\n",
|
|
|
|
|
FirmwareVersion, sts_mtmcode1,sts_mtmcode2,sts_version, MajorVer, MinorVer, SubMinorVer);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "\r\n\n\n##### YUNHORN_STS_FW:%d SWV%d HWV:%d MTM:%d.%d R:%d.%d.%d####\r\n\n\n",
|
|
|
|
|
FirmwareVersion, sts_version, sts_hardware_ver, sts_mtmcode1,sts_mtmcode2, MajorVer, MinorVer, SubMinorVer);
|
|
|
|
|
/* Get LoRaWAN APP version*/
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_M, "APPLICATION_VERSION: V%X.%X.%X\r\n",
|
|
|
|
|
(uint8_t)(APP_VERSION_MAIN),
|
|
|
|
@ -604,7 +604,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
case 'Z': //"YZ"
|
|
|
|
|
if ((char)tlv_buf[CFG_CMD3] == 'H') { //BOARD SOFT RESET, REVIVE "YZH"
|
|
|
|
|
//BOARD REVIVE
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_PORT, 20, "!YunHorn STS Revive!");
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, 20, "!YunHorn STS Revive!");
|
|
|
|
|
HAL_Delay(5000);
|
|
|
|
|
|
|
|
|
|
OnSystemReset();
|
|
|
|
@ -622,7 +622,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_version;
|
|
|
|
|
outbuf[i++] = (uint8_t) (0x41+ deviceClass); //translate to 'A','B','C'
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
@ -637,7 +637,7 @@ 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_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L, "###### YUNHORN Report Version [ %10x ] \r\n", outbuf);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -658,7 +658,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
for (uint8_t j=1; j <= cfg_in_nvm[NVM_LEN]; j++) {
|
|
|
|
|
outbuf[i++] = (uint8_t) (cfg_in_nvm[NVM_LEN+j]);
|
|
|
|
|
}
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_L, "###### YUNHORN Report Config in NVM [ %10x ] \r\n", outbuf);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -672,7 +672,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_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
} else {
|
|
|
|
|
STS_SENSOR_Upload_Config_Invalid_Message();
|
|
|
|
|
}
|
|
|
|
@ -685,7 +685,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_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
} else {
|
|
|
|
|
STS_SENSOR_Upload_Config_Invalid_Message();
|
|
|
|
|
}
|
|
|
|
@ -698,7 +698,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_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
} else {
|
|
|
|
|
STS_SENSOR_Upload_Config_Invalid_Message();
|
|
|
|
|
}
|
|
|
|
@ -728,11 +728,12 @@ 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_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
// Save config to NVM
|
|
|
|
|
sts_cfg_nvm.mtmcode1 = sts_mtmcode1;
|
|
|
|
|
sts_cfg_nvm.mtmcode2 = sts_mtmcode2;
|
|
|
|
|
sts_cfg_nvm.version = sts_version;
|
|
|
|
|
sts_cfg_nvm.hardware_ver = sts_hardware_ver;
|
|
|
|
|
sts_cfg_nvm.periodicity_h = tlv_buf[CFG_CMD3];
|
|
|
|
|
sts_cfg_nvm.periodicity_l = tlv_buf[CFG_CMD4];
|
|
|
|
|
sts_cfg_nvm.unit = periodicity_unit;
|
|
|
|
@ -782,6 +783,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
outbuf[i++] = sts_mtmcode1;
|
|
|
|
|
outbuf[i++] = sts_mtmcode2;
|
|
|
|
|
outbuf[i++] = sts_version;
|
|
|
|
|
outbuf[i++] = sts_hardware_ver;
|
|
|
|
|
outbuf[i++] = (uint8_t) act_threshold;
|
|
|
|
|
outbuf[i++] = (uint8_t) inact_threshold;
|
|
|
|
|
outbuf[i++] = (uint8_t) inact_duration;
|
|
|
|
@ -790,6 +792,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
sts_cfg_nvm.mtmcode1 = sts_mtmcode1;
|
|
|
|
|
sts_cfg_nvm.mtmcode2 = sts_mtmcode2;
|
|
|
|
|
sts_cfg_nvm.version = sts_version;
|
|
|
|
|
sts_cfg_nvm.hardware_ver = sts_hardware_ver;
|
|
|
|
|
sts_cfg_nvm.length = NVM_CFG_PARAMETER_SIZE;
|
|
|
|
|
|
|
|
|
|
sts_cfg_nvm.p[0] = (uint8_t) act_threshold;
|
|
|
|
@ -806,7 +809,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
// Step 3: Upload status update message
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
|
|
|
|
|
#if defined(YUNHORN_STS_R1_ENABLED) || defined(YUNHORN_STS_R2_ENABLED)|| defined(YUNHORN_STS_R3_ENABLED) || defined(YUNHORN_STS_R5_ENABLED)
|
|
|
|
|
#endif
|
|
|
|
@ -836,7 +839,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
|
|
|
|
|
|
|
|
|
|
void STS_SENSOR_Upload_Config_Invalid_Message(void)
|
|
|
|
|
{
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_PORT, 5, "PVXXX");
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, 5, "PVXXX");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, char *appDataBuffer)
|
|
|
|
@ -847,7 +850,7 @@ void STS_SENSOR_Upload_Message(uint8_t appDataPort, uint8_t appBufferSize, char
|
|
|
|
|
for (uint8_t i=0;i<appBufferSize; i++) {
|
|
|
|
|
AppData.Buffer[i] = appDataBuffer[i];
|
|
|
|
|
}
|
|
|
|
|
AppData.Port = LORAWAN_USER_APP_PORT;
|
|
|
|
|
AppData.Port = appDataPort;
|
|
|
|
|
AppData.BufferSize = appBufferSize;
|
|
|
|
|
|
|
|
|
|
status = LmHandlerSend(&AppData, LmHandlerParams.IsTxConfirmed, false);
|
|
|
|
@ -936,37 +939,40 @@ static void SendTxData(void)
|
|
|
|
|
STS_MOTION_SENSOR_Read(&m7_data);
|
|
|
|
|
|
|
|
|
|
AppData.Port = LORAWAN_USER_APP_PORT;
|
|
|
|
|
AppData.Buffer[i++] = AppLedStateOn;
|
|
|
|
|
AppData.Buffer[i++] = AppLedStateOn; //#01
|
|
|
|
|
|
|
|
|
|
if (sensor_data_ready == 0L) return ;
|
|
|
|
|
|
|
|
|
|
if (sensor_data_ready != 0L)
|
|
|
|
|
{
|
|
|
|
|
sensor_data_ready =0;
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & sts_mtmcode1); //AppLedStateOn;
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & sts_mtmcode2); //AppLedStateOn;
|
|
|
|
|
sensor_data_ready =0;
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & sts_mtmcode1); //mtmcode1; //#02
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & sts_mtmcode2); //mtmcode2; //#03
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & sts_hardware_ver); //hardware_Ver; //#04
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(99*batteryLevel/254); //#05 /* 99% (very low) to 254 (fully charged) */
|
|
|
|
|
AppData.Buffer[i++] = 0x00; //temp //#06
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vibration_duration); //03
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vibration_duration); //07
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_freq >> 8); //04 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_freq); //05 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_freq >> 8); //08 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_freq); //09 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_freq >> 8); //06 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_freq); //07 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_freq >> 8); //10 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_freq); //11 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_freq >> 8); //08 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_freq); //09 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_freq >> 8); //12 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_freq); //13 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_rms >> 8 ); //10 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_rms); //11
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_rms >> 8 ); //14 Freq Max 256 Hz Given sample rate & FFT Length 512
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_x_rms); //15
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_rms >> 8); //12
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_rms); //13
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_rms >> 8); //16
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_y_rms); //17
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_rms >>8 ); //14
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_rms); //15
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_rms >>8 ); //18
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(0xFF & m7_data.vb_z_rms); //19
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[i++] = (uint8_t)(99*batteryLevel/254); //16 /* 99% (very low) to 254 (fully charged) */
|
|
|
|
|
|
|
|
|
|
APP_LOG(TS_OFF, VLEVEL_H, "###### Duration:%02d seconds | FREQ_X:%d Hz | FREQ_Y:%d Hz | FREQ_Z:%d Hz |\r\n###### | RMS_X:%d | RMS_Y:%d | RMS_Z:%d | BATTERY_B:%02d%% |\r\n",
|
|
|
|
|
AppData.Buffer[3],
|
|
|
|
@ -986,7 +992,7 @@ static void SendTxData(void)
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AppData.Buffer[5] = (uint8_t)(i-6); //size of appData
|
|
|
|
|
AppData.BufferSize = i;
|
|
|
|
|
|
|
|
|
|
if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET))
|
|
|
|
@ -1353,6 +1359,7 @@ void OnStoreSTSCFGContextRequest(void)
|
|
|
|
|
nvm_store_value[i++] = sts_mtmcode1;
|
|
|
|
|
nvm_store_value[i++] = sts_mtmcode2;
|
|
|
|
|
nvm_store_value[i++] = sts_cfg_nvm.version;
|
|
|
|
|
nvm_store_value[i++] = sts_hardware_ver;
|
|
|
|
|
nvm_store_value[i++] = sts_cfg_nvm.periodicity_h;
|
|
|
|
|
nvm_store_value[i++] = sts_cfg_nvm.periodicity_l;
|
|
|
|
|
nvm_store_value[i++] = sts_cfg_nvm.unit;
|
|
|
|
@ -1433,6 +1440,7 @@ void STS_REBOOT_CONFIG_Init(void)
|
|
|
|
|
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_h = (uint8_t)(nvm_stored_value[NVM_PERIODICITY_H]);
|
|
|
|
|
sts_cfg_nvm.periodicity_l = (uint8_t)(nvm_stored_value[NVM_PERIODICITY_L]);
|
|
|
|
|
sts_cfg_nvm.unit = (uint8_t)(nvm_stored_value[NVM_UNIT]);
|
|
|
|
@ -1488,7 +1496,7 @@ void OnRestoreSTSCFGContextProcess(void)
|
|
|
|
|
void STS_SENSOR_Function_Test_Process(void)
|
|
|
|
|
{
|
|
|
|
|
char outbuf[32] =""; uint8_t i=0, count=10;
|
|
|
|
|
int16_t self_test_result[9]={0,0,0, 0,0,0, 0,0,0};
|
|
|
|
|
int16_t self_test_result[9]={0,0,0,0, 0,0,0, 0,0};
|
|
|
|
|
|
|
|
|
|
#ifdef YUNHORN_STS_M7_ENABLED
|
|
|
|
|
STS_MOTION_SENSOR_Function_Test_Process(&self_test_result[0], count);
|
|
|
|
@ -1497,6 +1505,9 @@ void STS_SENSOR_Function_Test_Process(void)
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_mtmcode1;
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_mtmcode2;
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_version;
|
|
|
|
|
outbuf[i++] = (uint8_t) sts_hardware_ver;
|
|
|
|
|
outbuf[i++] = (uint8_t) (99*((GetBatteryLevel()/254)&0xff));
|
|
|
|
|
|
|
|
|
|
outbuf[i++] = (uint8_t) (self_test_result[0]>>8)&0xff;
|
|
|
|
|
outbuf[i++] = (uint8_t) (self_test_result[0])&0xff;
|
|
|
|
|
|
|
|
|
@ -1525,7 +1536,7 @@ void STS_SENSOR_Function_Test_Process(void)
|
|
|
|
|
outbuf[i++] = (uint8_t) (self_test_result[8])&0xff;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_PORT, i, outbuf);
|
|
|
|
|
STS_SENSOR_Upload_Message(LORAWAN_USER_APP_CTRL_REPLY_PORT, i, outbuf);
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|