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
Show 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));
}
#else
if
(
xSemaphoreWaitResp
!=
NULL
&&
xSemaphoreTake
(
xSemaphoreWaitResp
,
pdMS_TO_TICKS
(
500
))
==
pdTRUE
)
{
printf
(
"Get Response
\n
"
);
//printf("config success
\n");
g_xWITConfig
.
my_IOTDev
[
i
].
beingWaiting
=
false
;
}
else
{
status
=
false
;
printf
(
"configTimeout
\n
"
);
printf
(
"config threshold fail
\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