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

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

parent 19568cd5
......@@ -82,6 +82,7 @@ bool g_bErrorUpdateFlag = false;
extern TimerHandle_t xSensorTimer;
extern TimerHandle_t xSensorDataFreshTimer;
SemaphoreHandle_t xSemaphoreWaitResp = NULL;
SemaphoreHandle_t xSemaphoreDataResp = NULL;
/* Private macros ------------------------------------------------------------*/
// Task info
......@@ -625,7 +626,7 @@ bool WIT_SendIOTData(void);
bool WIT_SendIOTError(void);
bool WIT_SendGatewayFeature(void);
bool IOTConfigFunction();
void iot_Sensor_Print(void);
// 0: don't send feature
// 1: need send feature
......@@ -680,11 +681,11 @@ void WIT_Init()
// Init mode and value
// 从内部flash读取配置并进行配置
WIT_ModeAndValueInit();
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);
}
//iot_Sensor_Print();
// 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("threshold = %ld\n", g_xWITConfig.my_IOTThreshold);
printf("period = %ld\n", g_xWITConfig.ulPeriod);
......@@ -3635,7 +3636,6 @@ static void WIT_GatewayConfigureHandler(MessageData *pxData)
char cDev[16] = {0};
uint8_t dev_num = 0;
bool bStatus = true;
static bool s_bUseThrFromPlatform = false;
bool bNeedUpdateFTimer = false;
bool bNeedUpdateCfg = false;
......@@ -3783,7 +3783,7 @@ static void WIT_GatewayConfigureHandler(MessageData *pxData)
if (bNeedUpdateFTimer == true)
{
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);
}
......@@ -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()
{
// 遍历每个传感器
xSemaphoreDataResp = xSemaphoreCreateBinary();
for (int i = 0; i < IOTDEV_MAX_NUM; i++)
{
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);
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));
}
......@@ -9178,54 +9202,24 @@ void vSensorDataFreshTimerCallback()
bool IOTConfigFunction()
{
bool status = true;
unsigned int ts_0, ts_1, diff_ts;
// 创建二值信号量
xSemaphoreWaitResp = xSemaphoreCreateBinary();
// 遍历每个传感器
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;
Set_Threshold(g_xWITConfig.my_IOTDev[i].id, g_xWITConfig.my_IOTDev[i].sn, g_xWITConfig.my_IOTThreshold);
#if 0
ts_0 = xTaskGetTickCount();
while(1)
{
ts_1 = xTaskGetTickCount();
diff_ts = ts_1 - ts_0;
printf("diff_ts %d\n",diff_ts);
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));
if (xSemaphoreWaitResp != NULL && xSemaphoreTake(xSemaphoreWaitResp, pdMS_TO_TICKS(500)) == pdTRUE) {
//printf("config success\n");
g_xWITConfig.my_IOTDev[i].beingWaiting = false;
}
else{
status = false;
printf("config threshold fail\n");
g_xWITConfig.my_IOTDev[i].beingWaiting = false;
}
#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));
......@@ -9317,11 +9311,11 @@ void Message_Deal_Function(void)
_ts = xTaskGetTickCount();
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);
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_xWITConfig.my_IOTDev[i].bIsPlugIn = true; // 第一次检测到设备上电,意味着设备已经接入网关
g_xWITConfig.my_IOTDev[i].bIsTimeout = false;
......@@ -9338,13 +9332,16 @@ void Message_Deal_Function(void)
{
g_ts[i] = _ts; // update time
printf("SLAVE_ACK: %d\n", *g_data_frame.data);
// if(*g_data_frame.data)
if(g_xWITConfig.my_IOTDev[i].beingWaiting)
if(g_xWITConfig.my_IOTDev[i].beingWaiting && *g_data_frame.data == 1)
{
if(xSemaphoreWaitResp != NULL)
{
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)
//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)
{
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_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
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