Commit 28d624b9 authored by aohui.li's avatar aohui.li

数据检测增加(二值信号)响应机制

parent 19568cd5
...@@ -82,6 +82,7 @@ bool g_bErrorUpdateFlag = false; ...@@ -82,6 +82,7 @@ bool g_bErrorUpdateFlag = false;
extern TimerHandle_t xSensorTimer; extern TimerHandle_t xSensorTimer;
extern TimerHandle_t xSensorDataFreshTimer; extern TimerHandle_t xSensorDataFreshTimer;
SemaphoreHandle_t xSemaphoreWaitResp = NULL; SemaphoreHandle_t xSemaphoreWaitResp = NULL;
SemaphoreHandle_t xSemaphoreDataResp = NULL;
/* Private macros ------------------------------------------------------------*/ /* Private macros ------------------------------------------------------------*/
// Task info // Task info
...@@ -625,7 +626,7 @@ bool WIT_SendIOTData(void); ...@@ -625,7 +626,7 @@ bool WIT_SendIOTData(void);
bool WIT_SendIOTError(void); bool WIT_SendIOTError(void);
bool WIT_SendGatewayFeature(void); bool WIT_SendGatewayFeature(void);
bool IOTConfigFunction(); bool IOTConfigFunction();
void iot_Sensor_Print(void);
// 0: don't send feature // 0: don't send feature
// 1: need send feature // 1: need send feature
...@@ -680,11 +681,11 @@ void WIT_Init() ...@@ -680,11 +681,11 @@ void WIT_Init()
// Init mode and value // Init mode and value
// 从内部flash读取配置并进行配置 // 从内部flash读取配置并进行配置
WIT_ModeAndValueInit(); WIT_ModeAndValueInit();
//iot_Sensor_Print();
for (int i = 0; i < IOTDEV_MAX_NUM; i++) // for (int i = 0; i < IOTDEV_MAX_NUM; i++)
{ // {
printf("my_IOTDev[%d] id_sn = %04x,%04x\n",i, g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn); // printf("my_IOTDev[%d] id_sn = %04x,%04x\n",i, g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn);
} // }
printf("threshold = %ld\n", g_xWITConfig.my_IOTThreshold); printf("threshold = %ld\n", g_xWITConfig.my_IOTThreshold);
printf("period = %ld\n", g_xWITConfig.ulPeriod); printf("period = %ld\n", g_xWITConfig.ulPeriod);
...@@ -3635,7 +3636,6 @@ static void WIT_GatewayConfigureHandler(MessageData *pxData) ...@@ -3635,7 +3636,6 @@ static void WIT_GatewayConfigureHandler(MessageData *pxData)
char cDev[16] = {0}; char cDev[16] = {0};
uint8_t dev_num = 0; uint8_t dev_num = 0;
bool bStatus = true; bool bStatus = true;
static bool s_bUseThrFromPlatform = false;
bool bNeedUpdateFTimer = false; bool bNeedUpdateFTimer = false;
bool bNeedUpdateCfg = false; bool bNeedUpdateCfg = false;
...@@ -3783,7 +3783,7 @@ static void WIT_GatewayConfigureHandler(MessageData *pxData) ...@@ -3783,7 +3783,7 @@ static void WIT_GatewayConfigureHandler(MessageData *pxData)
if (bNeedUpdateFTimer == true) if (bNeedUpdateFTimer == true)
{ {
xTimerChangePeriod(g_xDataSendTimer, g_xWITConfig.ulPeriod, 1000); xTimerChangePeriod(g_xDataSendTimer, g_xWITConfig.ulPeriod, 1000);
// xTimerChangePeriod(xSensorDataFreshTimer, g_xWITConfig.ulPeriod, 1000); xTimerChangePeriod(xSensorDataFreshTimer, g_xWITConfig.ulPeriod, 1000);
printf("xTimerChangePeriod g_xDataSendTimer %ld\n", g_xWITConfig.ulPeriod); printf("xTimerChangePeriod g_xDataSendTimer %ld\n", g_xWITConfig.ulPeriod);
} }
...@@ -9159,16 +9159,40 @@ void iot_Sensor_Init(void) ...@@ -9159,16 +9159,40 @@ void iot_Sensor_Init(void)
} }
} }
void iot_Sensor_Print(void)
{
for (int i = 0; i < IOTDEV_MAX_NUM; i++)
{
printf("my_IOTDev[%d].addr = %d\n", i, g_xWITConfig.my_IOTDev[i].addr);
printf("my_IOTDev[%d].id = %d\n", i, g_xWITConfig.my_IOTDev[i].id);
printf("my_IOTDev[%d].sn = %d\n", i, g_xWITConfig.my_IOTDev[i].sn);
printf("my_IOTDev[%d].bIsTimeout = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsTimeout);
printf("my_IOTDev[%d].bIsUsed = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsUsed);
printf("my_IOTDev[%d].bIsPlugIn = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsPlugIn);
printf("my_IOTDev[%d].rope_value = %d\n", i, g_xWITConfig.my_IOTDev[i].rope_value);
printf("my_IOTDev[%d].beingWaiting = %d\n", i, g_xWITConfig.my_IOTDev[i].beingWaiting);
printf("my_IOTDev[%d].status = %d\n", i, g_xWITConfig.my_IOTDev[i].status);
}
}
// 修改:增加二值信号量,回复响应状态
void vSensorDataFreshTimerCallback() void vSensorDataFreshTimerCallback()
{ {
// 遍历每个传感器 xSemaphoreDataResp = xSemaphoreCreateBinary();
for (int i = 0; i < IOTDEV_MAX_NUM; i++) for (int i = 0; i < IOTDEV_MAX_NUM; i++)
{ {
if (g_xWITConfig.my_IOTDev[i].bIsUsed && g_xWITConfig.my_IOTDev[i].bIsPlugIn) if (g_xWITConfig.my_IOTDev[i].bIsUsed && g_xWITConfig.my_IOTDev[i].bIsPlugIn)
{ {
// printf("Get_SensorIOT_Data[%04x%04x]\n", g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn);
// 向从设备发起数据请求
Get_SensorIOT_Data(g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn); Get_SensorIOT_Data(g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn);
if (xSemaphoreDataResp != NULL && xSemaphoreTake(xSemaphoreDataResp, pdMS_TO_TICKS(500)) == pdTRUE)
{
// printf("data resp success\n");
}
else
{
printf("data resp fail, maybe timeout or be below the threshold\n");
}
} }
vTaskDelay(pdMS_TO_TICKS(10)); vTaskDelay(pdMS_TO_TICKS(10));
} }
...@@ -9178,54 +9202,24 @@ void vSensorDataFreshTimerCallback() ...@@ -9178,54 +9202,24 @@ void vSensorDataFreshTimerCallback()
bool IOTConfigFunction() bool IOTConfigFunction()
{ {
bool status = true; bool status = true;
unsigned int ts_0, ts_1, diff_ts;
// 创建二值信号量 // 创建二值信号量
xSemaphoreWaitResp = xSemaphoreCreateBinary(); xSemaphoreWaitResp = xSemaphoreCreateBinary();
// 遍历每个传感器 // 遍历每个传感器
for (int i = 0; i < IOTDEV_MAX_NUM; i++) for (int i = 0; i < IOTDEV_MAX_NUM; i++)
{ {
if (g_xWITConfig.my_IOTDev[i].bIsUsed && g_xWITConfig.my_IOTDev[i].bIsPlugIn) if (g_xWITConfig.my_IOTDev[i].bIsUsed && g_xWITConfig.my_IOTDev[i].bIsPlugIn) //配置阈值条件:传感器是否使用,传感器是否插上
{ {
g_xWITConfig.my_IOTDev[i].beingWaiting = true; g_xWITConfig.my_IOTDev[i].beingWaiting = true;
Set_Threshold(g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn, g_xWITConfig.my_IOTThreshold); Set_Threshold(g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn, g_xWITConfig.my_IOTThreshold);
#if 0 if (xSemaphoreWaitResp != NULL && xSemaphoreTake(xSemaphoreWaitResp, pdMS_TO_TICKS(500)) == pdTRUE) {
ts_0 = xTaskGetTickCount(); //printf("config success\n");
while(1) g_xWITConfig.my_IOTDev[i].beingWaiting = false;
{ }
ts_1 = xTaskGetTickCount(); else{
diff_ts = ts_1 - ts_0; status = false;
printf("diff_ts %d\n",diff_ts); printf("config threshold fail\n");
g_xWITConfig.my_IOTDev[i].beingWaiting = false;
if(diff_ts > 10000)
{
printf("config timeout\n");
g_xWITConfig.my_IOTDev[i].status = 2;
status = false;
break;
}
if(g_xWITConfig.my_IOTDev[i].resp == true)
{
g_xWITConfig.my_IOTDev[i].status = 1;
g_xWITConfig.my_IOTDev[i].resp = false;
printf("config success\n");
break;
}
vTaskDelay(pdMS_TO_TICKS(200));
} }
#else
if (xSemaphoreWaitResp != NULL && xSemaphoreTake(xSemaphoreWaitResp, pdMS_TO_TICKS(500)) == pdTRUE) {
printf("Get Response\n");
g_xWITConfig.my_IOTDev[i].beingWaiting = false;
}
else{
status = false;
printf("configTimeout\n");
g_xWITConfig.my_IOTDev[i].beingWaiting = false;
}
#endif
//定时器等待配置之后得到传感器响应 //定时器等待配置之后得到传感器响应
} }
vTaskDelay(pdMS_TO_TICKS(10)); vTaskDelay(pdMS_TO_TICKS(10));
...@@ -9317,11 +9311,11 @@ void Message_Deal_Function(void) ...@@ -9317,11 +9311,11 @@ void Message_Deal_Function(void)
_ts = xTaskGetTickCount(); _ts = xTaskGetTickCount();
for(int i = 0; i< IOTDEV_MAX_NUM; i++) for(int i = 0; i< IOTDEV_MAX_NUM; i++)
{ {
if(g_xWITConfig.my_IOTDev[i].bIsUsed && g_data_frame.ulDevID == g_xWITConfig.my_IOTDev[i].id && g_data_frame.ulDevSN == g_xWITConfig.my_IOTDev[i].sn) if(g_xWITConfig.my_IOTDev[i].bIsUsed && (g_data_frame.ulDevID == g_xWITConfig.my_IOTDev[i].id) && (g_data_frame.ulDevSN == g_xWITConfig.my_IOTDev[i].sn))
{ {
ACK_0AH(g_data_frame.ulDevID, g_data_frame.ulDevSN); ACK_0AH(g_data_frame.ulDevID, g_data_frame.ulDevSN);
Start_Detect(g_data_frame.ulDevID, g_data_frame.ulDevSN); Start_Detect(g_data_frame.ulDevID, g_data_frame.ulDevSN);
printf("IOT POWER ON\n"); //printf("IOT[%d] POWER ON\n", i);
g_ts[i] = _ts; // update time g_ts[i] = _ts; // update time
g_xWITConfig.my_IOTDev[i].bIsPlugIn = true; // 第一次检测到设备上电,意味着设备已经接入网关 g_xWITConfig.my_IOTDev[i].bIsPlugIn = true; // 第一次检测到设备上电,意味着设备已经接入网关
g_xWITConfig.my_IOTDev[i].bIsTimeout = false; g_xWITConfig.my_IOTDev[i].bIsTimeout = false;
...@@ -9338,13 +9332,16 @@ void Message_Deal_Function(void) ...@@ -9338,13 +9332,16 @@ void Message_Deal_Function(void)
{ {
g_ts[i] = _ts; // update time g_ts[i] = _ts; // update time
printf("SLAVE_ACK: %d\n", *g_data_frame.data); printf("SLAVE_ACK: %d\n", *g_data_frame.data);
// if(*g_data_frame.data) if(g_xWITConfig.my_IOTDev[i].beingWaiting && *g_data_frame.data == 1)
if(g_xWITConfig.my_IOTDev[i].beingWaiting)
{ {
if(xSemaphoreWaitResp != NULL) if(xSemaphoreWaitResp != NULL)
{ {
xSemaphoreGive(xSemaphoreWaitResp); xSemaphoreGive(xSemaphoreWaitResp);
printf("Give Response\n"); Stop_Detect(g_data_frame.ulDevID, g_data_frame.ulDevSN);
vTaskDelay(10);
ACK_0AH(g_data_frame.ulDevID, g_data_frame.ulDevSN);
Start_Detect(g_data_frame.ulDevID, g_data_frame.ulDevSN);
// printf("Give Response\n");
} }
} }
} }
...@@ -9385,10 +9382,14 @@ void Message_Deal_Function(void) ...@@ -9385,10 +9382,14 @@ void Message_Deal_Function(void)
//printf("g_xWITConfig.my_IOTDev[%d].bIsUsed = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsUsed); //printf("g_xWITConfig.my_IOTDev[%d].bIsUsed = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsUsed);
if(g_xWITConfig.my_IOTDev[i].bIsUsed && g_data_frame.ulDevID == g_xWITConfig.my_IOTDev[i].id && g_data_frame.ulDevSN == g_xWITConfig.my_IOTDev[i].sn) if(g_xWITConfig.my_IOTDev[i].bIsUsed && g_data_frame.ulDevID == g_xWITConfig.my_IOTDev[i].id && g_data_frame.ulDevSN == g_xWITConfig.my_IOTDev[i].sn)
{ {
printf("g_xWITConfig.my_IOTDev[%d].bIsUsed = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsUsed); // printf("g_xWITConfig.my_IOTDev[%d].bIsUsed = %d\n", i, g_xWITConfig.my_IOTDev[i].bIsUsed);
g_ts[i] = _ts; // update time g_ts[i] = _ts; // update time
g_xWITConfig.my_IOTDev[i].rope_value = data; g_xWITConfig.my_IOTDev[i].rope_value = data;
printf("g_xWITConfig.my_IOTDev[%d].rope_value = %d\n", i, g_xWITConfig.my_IOTDev[i].rope_value); // printf("g_xWITConfig.my_IOTDev[%d].rope_value = %d\n", i, g_xWITConfig.my_IOTDev[i].rope_value);
if(xSemaphoreDataResp != NULL)
{
xSemaphoreGive(xSemaphoreDataResp);
}
g_DataUpdateFlag = true; // MQTT Upload Data g_DataUpdateFlag = true; // MQTT Upload Data
Stop_Detect(g_data_frame.ulDevID, g_data_frame.ulDevSN); Stop_Detect(g_data_frame.ulDevID, g_data_frame.ulDevSN);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment