Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
ieee802154-radio-eval
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
cm-projects
ieee802154-radio-eval
Commits
d93fcde0
Commit
d93fcde0
authored
7 years ago
by
Robert Hartung
Browse files
Options
Downloads
Patches
Plain Diff
latest software and coordinator version
parent
ba3ae084
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
software/coordinator2.py
+86
-35
86 additions, 35 deletions
software/coordinator2.py
software/main.c
+1
-1
1 addition, 1 deletion
software/main.c
with
87 additions
and
36 deletions
software/coordinator2.py
+
86
−
35
View file @
d93fcde0
from
time
import
sleep
from
time
import
sleep
,
time
import
re
import
re
from
clients.client
import
Client
from
clients.client
import
Client
from
common.logging
import
Logger
from
common.logging
import
Logger
from
sqlalchemy
import
Column
,
Integer
,
String
,
Float
from
sqlalchemy
import
Column
,
Integer
,
String
,
Float
,
ForeignKey
from
sqlalchemy.ext.declarative
import
declarative_base
from
sqlalchemy.ext.declarative
import
declarative_base
from
sqlalchemy.orm
import
sessionmaker
from
sqlalchemy.orm
import
sessionmaker
from
sqlalchemy
import
create_engine
from
sqlalchemy
import
create_engine
from
threading
import
Lock
DATABASE
=
'
sqlite.db
'
db_lock
=
Lock
()
NODES
=
[
'
serial-AE00EI9M
'
,
'
serial-ATML2127031800008867
'
,
'
serial-A502C3ZD
'
]
# Middle: serial-A502C1P4
#NODES = ['serial-A502C1OZ', 'serial-A502C1PH', 'serial-A502C1PV', 'serial-A502C1PE', 'serial-A502C1Q1', 'serial-A502C1QH', 'serial-A502C1P5', 'serial-A502C1PI', 'serial-A502C1P4']
# node ids: 7, ..., 16
NODES
=
[
'
serial-A502C1PO
'
,
'
serial-A502C1PV
'
,
'
serial-A502C1P4
'
,
'
serial-A502C1QH
'
,
'
serial-A502C1OZ
'
,
'
serial-A502C1PE
'
,
'
serial-A502C1PI
'
,
'
serial-A502C1P5
'
,
'
serial-A502C1PH
'
,
'
serial-A502C1Q1
'
]
CHANNELS
=
[
11
,
15
,
26
]
CHANNELS
=
[
11
,
15
,
26
]
ANGELS
=
[
0
,
25
,
50
,
75
,
100
,
125
,
150
,
175
]
POWERS
=
[
-
17
,
-
7
,
3
]
PAYLOADS
=
[
'
short
'
,
'
loooooooooooooooooooooooooooooooooooooooong
'
]
if
False
:
CHANNELS
=
[
11
]
POWERS
=
[
-
17
]
PAYLOADS
=
[
'
short
'
]
logger
=
Logger
(
__file__
)
logger
=
Logger
(
__file__
)
Base
=
declarative_base
()
Base
=
declarative_base
()
class
Round
(
Base
):
__tablename__
=
'
round
'
id
=
Column
(
Integer
,
nullable
=
False
,
primary_key
=
True
,
autoincrement
=
True
)
channel
=
Column
(
Integer
,
nullable
=
False
)
power
=
Column
(
Integer
,
nullable
=
False
)
angle
=
Column
(
Integer
,
nullable
=
False
)
payload
=
Column
(
String
(
250
),
nullable
=
False
)
ts
=
Column
(
Float
,
nullable
=
False
)
class
TX
(
Base
):
class
TX
(
Base
):
__tablename__
=
'
tx
'
__tablename__
=
'
tx
'
serial_id
=
Column
(
String
(
250
),
nullable
=
False
,
primary_key
=
True
)
serial_id
=
Column
(
String
(
250
),
nullable
=
False
,
primary_key
=
True
)
ts
=
Column
(
Float
,
nullable
=
False
,
primary_key
=
True
)
ts
=
Column
(
Float
,
nullable
=
False
,
primary_key
=
True
)
seq_nr
=
Column
(
Integer
,
nullable
=
False
)
seq_nr
=
Column
(
Integer
,
nullable
=
False
)
round_id
=
Column
(
Integer
)
class
RX
(
Base
):
class
RX
(
Base
):
__tablename__
=
'
rx
'
__tablename__
=
'
rx
'
...
@@ -28,6 +51,7 @@ class RX(Base):
...
@@ -28,6 +51,7 @@ class RX(Base):
lqi
=
Column
(
Integer
,
nullable
=
False
)
lqi
=
Column
(
Integer
,
nullable
=
False
)
node_id
=
Column
(
Integer
,
nullable
=
False
)
node_id
=
Column
(
Integer
,
nullable
=
False
)
seq_nr
=
Column
(
Integer
,
nullable
=
False
)
seq_nr
=
Column
(
Integer
,
nullable
=
False
)
round_id
=
Column
(
Integer
)
class
Corrupt
(
Base
):
class
Corrupt
(
Base
):
__tablename__
=
'
corrupt
'
__tablename__
=
'
corrupt
'
...
@@ -36,9 +60,9 @@ class Corrupt(Base):
...
@@ -36,9 +60,9 @@ class Corrupt(Base):
rssi
=
Column
(
Integer
,
nullable
=
False
)
rssi
=
Column
(
Integer
,
nullable
=
False
)
lqi
=
Column
(
Integer
,
nullable
=
False
)
lqi
=
Column
(
Integer
,
nullable
=
False
)
payload
=
Column
(
String
(
255
),
nullable
=
False
)
payload
=
Column
(
String
(
255
),
nullable
=
False
)
round_id
=
Column
(
Integer
)
engine
=
create_engine
(
'
sqlite:///test.db
'
)
engine
=
create_engine
(
'
sqlite:////data/row_2.db
'
)
Session
=
sessionmaker
(
bind
=
engine
)
Session
=
sessionmaker
(
bind
=
engine
)
Base
.
metadata
.
create_all
(
engine
)
Base
.
metadata
.
create_all
(
engine
)
...
@@ -49,6 +73,7 @@ re_rx_corrupt = re.compile("^<(?P<rssi>-?[0-9]+)\|(?P<lqi>[0-9]+)\|(?P<length>[0
...
@@ -49,6 +73,7 @@ re_rx_corrupt = re.compile("^<(?P<rssi>-?[0-9]+)\|(?P<lqi>[0-9]+)\|(?P<length>[0
re_ifconfig
=
re
.
compile
(
"
^success: set (.*?) o(n|f) interface [0-9]+ to (.*?)$
"
)
re_ifconfig
=
re
.
compile
(
"
^success: set (.*?) o(n|f) interface [0-9]+ to (.*?)$
"
)
eval_round
=
None
def
calculate_checksum
(
*
args
):
def
calculate_checksum
(
*
args
):
s
=
0
s
=
0
...
@@ -62,9 +87,12 @@ def handle_match_tx( src_id, ts, match_tx ):
...
@@ -62,9 +87,12 @@ def handle_match_tx( src_id, ts, match_tx ):
expected_checksum
=
calculate_checksum
(
seq_nr
)
expected_checksum
=
calculate_checksum
(
seq_nr
)
if
expected_checksum
==
checksum
:
if
expected_checksum
==
checksum
:
db_lock
.
acquire
()
session
=
Session
()
session
=
Session
()
session
.
add
(
TX
(
serial_id
=
src_id
,
ts
=
ts
,
seq_nr
=
seq_nr
))
session
.
add
(
TX
(
round_id
=
eval_round
,
serial_id
=
src_id
,
ts
=
ts
,
seq_nr
=
seq_nr
))
session
.
commit
()
session
.
commit
()
session
.
close
()
db_lock
.
release
()
#logger.log("[{}] TX: #{}".format( src_id, seq_nr ))
#logger.log("[{}] TX: #{}".format( src_id, seq_nr ))
return
True
return
True
else
:
else
:
...
@@ -80,10 +108,14 @@ def handle_match_rx( src_id, ts, match_rx ):
...
@@ -80,10 +108,14 @@ def handle_match_rx( src_id, ts, match_rx ):
expected_checksum
=
calculate_checksum
(
node_id
,
'
|
'
,
seq_nr
,
'
|
'
,
rssi
,
'
|
'
,
lqi
)
expected_checksum
=
calculate_checksum
(
node_id
,
'
|
'
,
seq_nr
,
'
|
'
,
rssi
,
'
|
'
,
lqi
)
if
expected_checksum
==
checksum
:
if
expected_checksum
==
checksum
:
db_lock
.
acquire
()
session
=
Session
()
session
=
Session
()
session
.
add
(
RX
(
serial_id
=
src_id
,
ts
=
ts
,
seq_nr
=
seq_nr
,
node_id
=
node_id
,
rssi
=
rssi
,
lqi
=
lqi
))
session
.
add
(
RX
(
round_id
=
eval_round
,
serial_id
=
src_id
,
ts
=
ts
,
seq_nr
=
seq_nr
,
node_id
=
node_id
,
rssi
=
rssi
,
lqi
=
lqi
))
# TODO(rh): Add sqlite3.OperationalError
session
.
commit
()
session
.
commit
()
session
.
close
()
db_lock
.
release
()
# TODO(rh): Add sqlite3.OperationalError
# TODO(rh): Add sqlalchemy.exc.OperationalError / sqlite3.OperationalError
#logger.log("[{}] RX: #{} from {}".format( src_id, node_id, seq_nr ))
#logger.log("[{}] RX: #{} from {}".format( src_id, node_id, seq_nr ))
return
True
return
True
else
:
else
:
...
@@ -95,16 +127,23 @@ def handle_match_rx_corrupt( src_id, ts, match_rx_corrupt ):
...
@@ -95,16 +127,23 @@ def handle_match_rx_corrupt( src_id, ts, match_rx_corrupt ):
lqi
=
match_rx_corrupt
.
group
(
'
lqi
'
)
lqi
=
match_rx_corrupt
.
group
(
'
lqi
'
)
payload
=
match_rx_corrupt
.
group
(
'
payload
'
).
strip
()
payload
=
match_rx_corrupt
.
group
(
'
payload
'
).
strip
()
logger
.
debug
(
"
Corrupt: {}dBm, {}, {}
"
.
format
(
rssi
,
lqi
,
payload
)
)
logger
.
debug
(
"
Corrupt: {}dBm, {}, {}
"
.
format
(
rssi
,
lqi
,
payload
)
)
db_lock
.
acquire
()
session
=
Session
()
session
=
Session
()
session
.
add
(
Corrupt
(
serial_id
=
src_id
,
ts
=
ts
,
rssi
=
rssi
,
lqi
=
lqi
,
payload
=
payload
))
session
.
add
(
Corrupt
(
round_id
=
eval_round
,
serial_id
=
src_id
,
ts
=
ts
,
rssi
=
rssi
,
lqi
=
lqi
,
payload
=
payload
))
session
.
commit
()
session
.
commit
()
session
.
close
()
db_lock
.
release
()
return
True
return
True
def
handle_serial_rx
(
d
):
def
handle_serial_rx
(
d
):
global
eval_round
src_id
=
d
[
'
src
'
][
'
id
'
][
0
]
src_id
=
d
[
'
src
'
][
'
id
'
][
0
]
ts
=
d
[
'
ts
'
]
ts
=
d
[
'
ts
'
]
line
=
d
[
'
line
'
].
strip
()
line
=
d
[
'
line
'
].
strip
()
if
eval_round
is
None
:
return
False
match_ifconfig
=
re_ifconfig
.
match
(
line
)
match_ifconfig
=
re_ifconfig
.
match
(
line
)
if
match_ifconfig
is
not
None
:
if
match_ifconfig
is
not
None
:
return
True
return
True
...
@@ -122,32 +161,38 @@ def handle_serial_rx(d):
...
@@ -122,32 +161,38 @@ def handle_serial_rx(d):
class
PRREvalClient
(
Client
):
class
PRREvalClient
(
Client
):
def
__init__
(
self
,
args
=
None
):
def
__init__
(
self
,
args
=
None
):
super
(
PRREvalClient
,
self
).
__init__
(
args
,
logging
=
True
)
super
(
PRREvalClient
,
self
).
__init__
(
args
,
logging
=
True
)
self
.
session
=
Session
()
def
eval
(
self
):
def
eval
(
self
):
for
channel
in
[
11
,
15
,
26
]:
global
eval_round
# for angle in [0,25,50,75,100,125,150,175]:
# self.set_angle(angle)
# sleep(0.5)
for
channel
in
CHANNELS
:
logger
.
log
(
"
CHANNEL={}
"
.
format
(
channel
)
)
logger
.
log
(
"
CHANNEL={}
"
.
format
(
channel
)
)
self
.
set_channel
(
channel
)
self
.
set_channel
(
channel
)
sleep
(
0.25
)
sleep
(
0.5
)
for
angle
in
[
0
,
25
,
50
,
75
,
100
,
125
,
150
,
175
]
for
power
in
POWERS
:
self
.
set_angle
(
angle
)
logger
.
log
(
"
POWER={}
"
.
format
(
power
)
)
sleep
(
2
)
self
.
set_txpower
(
power
)
for
power
in
[
-
17
,
-
7
,
0
,
3
]:
sleep
(
0.5
)
logger
.
log
(
"
POWER={}
"
.
format
(
power
)
)
for
payload
in
PAYLOADS
:
self
.
set_txpower
(
power
)
logger
.
log
(
"
PAYLOAD={}
"
.
format
(
payload
)
)
sleep
(
0.5
)
self
.
send_all
(
"
payload {}
\n
"
.
format
(
payload
)
)
for
payload
in
[
'
short
'
,
'
miiiiiiiiiiiiiiiiidle
'
,
'
loooooooooooooooooooooooooooooooooooooooong
'
]:
sleep
(
0.5
)
logger
.
log
(
"
PAYLOAD={}
"
.
format
(
payload
)
)
db_lock
.
acquire
()
self
.
send_all
(
"
payload {}
\n
"
.
format
(
payload
)
)
r
=
Round
(
angle
=-
1
,
channel
=
channel
,
power
=
power
,
payload
=
payload
,
ts
=
time
()
)
sleep
(
0.5
)
self
.
session
.
add
(
r
)
# TODO(rh) START ROUND:
self
.
session
.
commit
()
# round = Round( channel=channel, power=power, payload=payload )
eval_round
=
r
.
id
# session.add( round )
db_lock
.
release
()
# session.commit()
for
sender
in
NODES
:
for
sender
in
NODES
:
self
.
send
({
'
dst
'
:
{
'
id
'
:
sender
},
'
type
'
:
'
serial_tx
'
,
'
line
'
:
'
tx 5 200000
\n
'
})
self
.
send
({
'
dst
'
:
{
'
id
'
:
sender
},
'
type
'
:
'
serial_tx
'
,
'
line
'
:
'
tx 5 200000
\n
'
})
# 5 packets, 200ms -> 1 second
# 5 packets, 200ms -> 1 second
sleep
(
2
)
sleep
(
1.5
)
self
.
send
({
'
dst
'
:
{
'
id
'
:
sender
},
'
type
'
:
'
serial_tx
'
,
'
line
'
:
'
ifconfig 3 set state idle
\n
'
})
self
.
send
({
'
dst
'
:
{
'
id
'
:
sender
},
'
type
'
:
'
serial_tx
'
,
'
line
'
:
'
ifconfig 3 set state idle
\n
'
})
# Delay after all sends
time
.
sleep
(
5.0
)
def
run
(
self
):
def
run
(
self
):
while
True
:
while
True
:
...
@@ -158,8 +203,10 @@ class PRREvalClient(Client):
...
@@ -158,8 +203,10 @@ class PRREvalClient(Client):
break
break
def
set_angle
(
self
,
angle
):
def
set_angle
(
self
,
angle
):
self
.
send
({
'
dst
'
:
{
'
id
'
:
'
lctc-01-serialsteppermotormodule
'
},
'
type
'
:
'
serial_position
'
,
'
position
'
:
angle
})
logger
.
log
(
"
ANGLE={}
"
.
format
(
angle
))
# {'module': ['SerialStepperMotorModule']}
self
.
send
({
'
dst
'
:
{
'
id
'
:
[
'
lctc-01-serialsteppermotormodule
'
]},
'
type
'
:
'
set_position
'
,
'
position
'
:
angle
})
def
set_channel
(
self
,
channel
):
def
set_channel
(
self
,
channel
):
#self.send_all("ifconfig 3 set state idle\n")
#self.send_all("ifconfig 3 set state idle\n")
self
.
send_all
(
"
ifconfig 3 set channel {}
\n
"
.
format
(
channel
))
self
.
send_all
(
"
ifconfig 3 set channel {}
\n
"
.
format
(
channel
))
...
@@ -175,8 +222,12 @@ class PRREvalClient(Client):
...
@@ -175,8 +222,12 @@ class PRREvalClient(Client):
if
data_dict
[
'
type
'
]
==
'
serial_rx
'
:
if
data_dict
[
'
type
'
]
==
'
serial_rx
'
:
if
handle_serial_rx
(
data_dict
):
if
handle_serial_rx
(
data_dict
):
return
True
return
True
else
:
logger
.
debug
(
"
[{}] {}
"
.
format
(
data_dict
[
'
src
'
][
'
id
'
][
0
],
data_dict
[
'
line
'
]
)
)
return
True
logger
.
debug
(
data_dict
)
logger
.
debug
(
data_dict
)
if
__name__
==
'
__main__
'
:
if
__name__
==
'
__main__
'
:
client
=
PRREvalClient
()
client
=
PRREvalClient
()
client
.
run
()
client
.
run
()
\ No newline at end of file
This diff is collapsed.
Click to expand it.
software/main.c
+
1
−
1
View file @
d93fcde0
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
#include
"net/gnrc/netif/ieee802154.h"
#include
"net/gnrc/netif/ieee802154.h"
#define SEND_INTERVAL (1)
#define SEND_INTERVAL (1)
#define RCV_QUEUE_SIZE (
4
)
#define RCV_QUEUE_SIZE (
16
)
#define MAX_PAYLOAD_LENGTH (64)
#define MAX_PAYLOAD_LENGTH (64)
#define MAGIC_STRING "IBREVAL\0"
#define MAGIC_STRING "IBREVAL\0"
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment