Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
tools-mirror
Micropython
提交
5eda362e
M
Micropython
项目概览
tools-mirror
/
Micropython
12 个月 前同步成功
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
Micropython
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5eda362e
编写于
8月 31, 2020
作者:
J
Jim Mussared
提交者:
Damien George
9月 08, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tests/multi_bluetooth: Make ble_gap_connect robust against event timing.
上级
0f28020a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
38 addition
and
24 deletion
+38
-24
tests/multi_bluetooth/ble_gap_connect.py
tests/multi_bluetooth/ble_gap_connect.py
+37
-24
tests/multi_bluetooth/ble_gap_connect.py.exp
tests/multi_bluetooth/ble_gap_connect.py.exp
+1
-0
未找到文件。
tests/multi_bluetooth/ble_gap_connect.py
浏览文件 @
5eda362e
...
@@ -10,35 +10,36 @@ _IRQ_CENTRAL_DISCONNECT = const(2)
...
@@ -10,35 +10,36 @@ _IRQ_CENTRAL_DISCONNECT = const(2)
_IRQ_PERIPHERAL_CONNECT
=
const
(
7
)
_IRQ_PERIPHERAL_CONNECT
=
const
(
7
)
_IRQ_PERIPHERAL_DISCONNECT
=
const
(
8
)
_IRQ_PERIPHERAL_DISCONNECT
=
const
(
8
)
waiting_event
=
None
central_connected
=
False
waiting_data
=
None
central_disconnected
=
False
peripheral_connected
=
False
peripheral_disconnected
=
False
conn_handle
=
None
def
irq
(
event
,
data
):
def
irq
(
event
,
data
):
global
waiting_event
,
waiting_data
global
central_connected
,
central_disconnected
,
peripheral_connected
,
peripheral_disconnected
,
conn_handle
if
event
==
_IRQ_CENTRAL_CONNECT
:
if
event
==
_IRQ_CENTRAL_CONNECT
:
print
(
"_IRQ_CENTRAL_CONNECT"
)
print
(
"_IRQ_CENTRAL_CONNECT"
)
central_connected
=
True
conn_handle
=
data
[
0
]
elif
event
==
_IRQ_CENTRAL_DISCONNECT
:
elif
event
==
_IRQ_CENTRAL_DISCONNECT
:
print
(
"_IRQ_CENTRAL_DISCONNECT"
)
print
(
"_IRQ_CENTRAL_DISCONNECT"
)
central_disconnected
=
True
elif
event
==
_IRQ_PERIPHERAL_CONNECT
:
elif
event
==
_IRQ_PERIPHERAL_CONNECT
:
print
(
"_IRQ_PERIPHERAL_CONNECT"
)
print
(
"_IRQ_PERIPHERAL_CONNECT"
)
peripheral_connected
=
True
conn_handle
=
data
[
0
]
elif
event
==
_IRQ_PERIPHERAL_DISCONNECT
:
elif
event
==
_IRQ_PERIPHERAL_DISCONNECT
:
print
(
"_IRQ_PERIPHERAL_DISCONNECT"
)
print
(
"_IRQ_PERIPHERAL_DISCONNECT"
)
peripheral_disconnected
=
True
remote_addr
=
data
[
0
]
if
waiting_event
is
not
None
:
if
event
==
waiting_event
:
waiting_event
=
None
waiting_data
=
data
def
wait_for_event
(
event
,
timeout_ms
):
global
waiting_event
,
waiting_data
waiting_event
=
event
waiting_data
=
None
def
wait_for
(
fn
,
timeout_ms
):
t0
=
time
.
ticks_ms
()
t0
=
time
.
ticks_ms
()
while
time
.
ticks_diff
(
time
.
ticks_ms
(),
t0
)
<
timeout_ms
:
while
time
.
ticks_diff
(
time
.
ticks_ms
(),
t0
)
<
timeout_ms
:
if
waiting_data
:
if
fn
()
:
return
True
return
True
machine
.
idle
()
machine
.
idle
()
return
False
return
False
...
@@ -46,25 +47,31 @@ def wait_for_event(event, timeout_ms):
...
@@ -46,25 +47,31 @@ def wait_for_event(event, timeout_ms):
# Acting in peripheral role.
# Acting in peripheral role.
def
instance0
():
def
instance0
():
global
central_connected
,
central_disconnected
multitest
.
globals
(
BDADDR
=
ble
.
config
(
"mac"
))
multitest
.
globals
(
BDADDR
=
ble
.
config
(
"mac"
))
print
(
"gap_advertise"
)
print
(
"gap_advertise"
)
ble
.
gap_advertise
(
20_000
,
b
"
\x02\x01\x06\x04\xff
MPY"
)
ble
.
gap_advertise
(
20_000
,
b
"
\x02\x01\x06\x04\xff
MPY"
)
multitest
.
next
()
multitest
.
next
()
try
:
try
:
# Wait for central to connect, then wait for it to disconnect.
# Wait for central to connect, then wait for it to disconnect.
if
not
wait_for
_event
(
_IRQ_CENTRAL_CONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
central_connected
,
TIMEOUT_MS
):
return
return
if
not
wait_for
_event
(
_IRQ_CENTRAL_DISCONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
central_disconnected
,
TIMEOUT_MS
):
return
return
central_connected
=
False
central_disconnected
=
False
# Start advertising again.
# Start advertising again.
print
(
"gap_advertise"
)
ble
.
gap_advertise
(
20_000
,
b
"
\x02\x01\x06\x04\xff
MPY"
)
ble
.
gap_advertise
(
20_000
,
b
"
\x02\x01\x06\x04\xff
MPY"
)
# Wait for central to connect, then disconnect it.
# Wait for central to connect, then disconnect it.
if
not
wait_for
_event
(
_IRQ_CENTRAL_CONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
central_connected
,
TIMEOUT_MS
):
return
return
print
(
"gap_disconnect:"
,
ble
.
gap_disconnect
(
waiting_data
[
0
]
))
print
(
"gap_disconnect:"
,
ble
.
gap_disconnect
(
conn_handle
))
if
not
wait_for
_event
(
_IRQ_CENTRAL_DISCONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
central_disconnected
,
TIMEOUT_MS
):
return
return
finally
:
finally
:
ble
.
active
(
0
)
ble
.
active
(
0
)
...
@@ -72,26 +79,32 @@ def instance0():
...
@@ -72,26 +79,32 @@ def instance0():
# Acting in central role.
# Acting in central role.
def
instance1
():
def
instance1
():
global
peripheral_connected
,
peripheral_disconnected
multitest
.
next
()
multitest
.
next
()
try
:
try
:
# Connect to peripheral and then disconnect.
# Connect to peripheral and then disconnect.
print
(
"gap_connect"
)
print
(
"gap_connect"
)
ble
.
gap_connect
(
*
BDADDR
)
ble
.
gap_connect
(
*
BDADDR
)
if
not
wait_for
_event
(
_IRQ_PERIPHERAL_CONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
peripheral_connected
,
TIMEOUT_MS
):
return
return
print
(
"gap_disconnect:"
,
ble
.
gap_disconnect
(
waiting_data
[
0
]
))
print
(
"gap_disconnect:"
,
ble
.
gap_disconnect
(
conn_handle
))
if
not
wait_for
_event
(
_IRQ_PERIPHERAL_DISCONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
peripheral_disconnected
,
TIMEOUT_MS
):
return
return
peripheral_connected
=
False
peripheral_disconnected
=
False
# Wait for peripheral to start advertising again.
# Wait for peripheral to start advertising again.
time
.
sleep_ms
(
100
)
time
.
sleep_ms
(
100
)
# Connect to peripheral and then let the peripheral disconnect us.
# Connect to peripheral and then let the peripheral disconnect us.
print
(
"gap_connect"
)
print
(
"gap_connect"
)
ble
.
gap_connect
(
*
BDADDR
)
ble
.
gap_connect
(
*
BDADDR
)
if
not
wait_for_event
(
_IRQ_PERIPHERAL_CONNECT
,
TIMEOUT_MS
):
if
not
wait_for
(
lambda
:
peripheral_connected
,
TIMEOUT_MS
):
return
if
not
wait_for
(
lambda
:
peripheral_disconnected
,
TIMEOUT_MS
):
return
return
wait_for_event
(
_IRQ_PERIPHERAL_DISCONNECT
,
TIMEOUT_MS
)
finally
:
finally
:
ble
.
active
(
0
)
ble
.
active
(
0
)
...
...
tests/multi_bluetooth/ble_gap_connect.py.exp
浏览文件 @
5eda362e
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
gap_advertise
gap_advertise
_IRQ_CENTRAL_CONNECT
_IRQ_CENTRAL_CONNECT
_IRQ_CENTRAL_DISCONNECT
_IRQ_CENTRAL_DISCONNECT
gap_advertise
_IRQ_CENTRAL_CONNECT
_IRQ_CENTRAL_CONNECT
gap_disconnect: True
gap_disconnect: True
_IRQ_CENTRAL_DISCONNECT
_IRQ_CENTRAL_DISCONNECT
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录