Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
W
wirerope
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
IOT
wirerope
Commits
28d624b9
Commit
28d624b9
authored
Jan 10, 2024
by
aohui.li
😋
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
数据检测增加(二值信号)响应机制
parent
19568cd5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
58 additions
and
57 deletions
+58
-57
wit.c
components/Application/wit.c
+58
-57
No files found.
components/Application/wit.c
View file @
28d624b9
...
...
@@ -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
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment