src
xbee
ieee.py
Go to the documentation of this file.
1
"""
2
ieee.py
3
4
By Paul Malmsten, 2010
5
Inspired by code written by Amit Synderman and Marco Sangalli
6
pmalmsten@gmail.com
7
8
This module provides an XBee (IEEE 802.15.4) API library.
9
"""
10
import
struct
11
from
xbee.base
import
XBeeBase
12
13
class
XBee
(
XBeeBase
):
14
"""
15
Provides an implementation of the XBee API for IEEE 802.15.4 modules
16
with recent firmware.
17
18
Commands may be sent to a device by instansiating this class with
19
a serial port object (see PySerial) and then calling the send
20
method with the proper information specified by the API. Data may
21
be read from a device syncronously by calling wait_read_frame. For
22
asynchronous reads, see the definition of XBeeBase.
23
"""
24
# Packets which can be sent to an XBee
25
26
# Format:
27
# {name of command:
28
# [{name:field name, len:field length, default: default value sent}
29
# ...
30
# ]
31
# ...
32
# }
33
api_commands = {
"at"
:
34
[{
'name'
:
'id'
,
'len'
:1,
'default'
:
'\x08'
},
35
{
'name'
:
'frame_id'
,
'len'
:1,
'default'
:
'\x00'
},
36
{
'name'
:
'command'
,
'len'
:2,
'default'
:
None
},
37
{
'name'
:
'parameter'
,
'len'
:
None
,
'default'
:
None
}],
38
"queued_at"
:
39
[{
'name'
:
'id'
,
'len'
:1,
'default'
:
'\x09'
},
40
{
'name'
:
'frame_id'
,
'len'
:1,
'default'
:
'\x00'
},
41
{
'name'
:
'command'
,
'len'
:2,
'default'
:
None
},
42
{
'name'
:
'parameter'
,
'len'
:
None
,
'default'
:
None
}],
43
"remote_at"
:
44
[{
'name'
:
'id'
,
'len'
:1,
'default'
:
'\x17'
},
45
{
'name'
:
'frame_id'
,
'len'
:1,
'default'
:
'\x00'
},
46
# dest_addr_long is 8 bytes (64 bits), so use an unsigned long long
47
{
'name'
:
'dest_addr_long'
,
'len'
:8,
'default'
:struct.pack(
'>Q'
, 0)},
48
{
'name'
:
'dest_addr'
,
'len'
:2,
'default'
:
'\xFF\xFE'
},
49
{
'name'
:
'options'
,
'len'
:1,
'default'
:
'\x02'
},
50
{
'name'
:
'command'
,
'len'
:2,
'default'
:
None
},
51
{
'name'
:
'parameter'
,
'len'
:
None
,
'default'
:
None
}],
52
"tx_long_addr"
:
53
[{
'name'
:
'id'
,
'len'
:1,
'default'
:
'\x00'
},
54
{
'name'
:
'frame_id'
,
'len'
:1,
'default'
:
'\x00'
},
55
{
'name'
:
'dest_addr'
,
'len'
:8,
'default'
:
None
},
56
{
'name'
:
'options'
,
'len'
:1,
'default'
:
'\x00'
},
57
{
'name'
:
'data'
,
'len'
:
None
,
'default'
:
None
}],
58
"tx"
:
59
[{
'name'
:
'id'
,
'len'
:1,
'default'
:
'\x01'
},
60
{
'name'
:
'frame_id'
,
'len'
:1,
'default'
:
'\x00'
},
61
{
'name'
:
'dest_addr'
,
'len'
:2,
'default'
:
None
},
62
{
'name'
:
'options'
,
'len'
:1,
'default'
:
'\x00'
},
63
{
'name'
:
'data'
,
'len'
:
None
,
'default'
:
None
}]
64
}
65
66
# Packets which can be received from an XBee
67
68
# Format:
69
# {id byte received from XBee:
70
# {name: name of response
71
# structure:
72
# [ {'name': name of field, 'len':length of field}
73
# ...
74
# ]
75
# parse_as_io_samples:name of field to parse as io
76
# }
77
# ...
78
# }
79
#
80
api_responses = {
"\x80"
:
81
{
'name'
:
'rx_long_addr'
,
82
'structure'
:
83
[{
'name'
:
'source_addr'
,
'len'
:8},
84
{
'name'
:
'rssi'
,
'len'
:1},
85
{
'name'
:
'options'
,
'len'
:1},
86
{
'name'
:
'rf_data'
,
'len'
:
None
}]},
87
"\x81"
:
88
{
'name'
:
'rx'
,
89
'structure'
:
90
[{
'name'
:
'source_addr'
,
'len'
:2},
91
{
'name'
:
'rssi'
,
'len'
:1},
92
{
'name'
:
'options'
,
'len'
:1},
93
{
'name'
:
'rf_data'
,
'len'
:
None
}]},
94
"\x82"
:
95
{
'name'
:
'rx_io_data_long_addr'
,
96
'structure'
:
97
[{
'name'
:
'source_addr_long'
,
'len'
:8},
98
{
'name'
:
'rssi'
,
'len'
:1},
99
{
'name'
:
'options'
,
'len'
:1},
100
{
'name'
:
'samples'
,
'len'
:
None
}],
101
'parse_as_io_samples'
:
'samples'
},
102
"\x83"
:
103
{
'name'
:
'rx_io_data'
,
104
'structure'
:
105
[{
'name'
:
'source_addr'
,
'len'
:2},
106
{
'name'
:
'rssi'
,
'len'
:1},
107
{
'name'
:
'options'
,
'len'
:1},
108
{
'name'
:
'samples'
,
'len'
:
None
}],
109
'parse_as_io_samples'
:
'samples'
},
110
"\x89"
:
111
{
'name'
:
'tx_status'
,
112
'structure'
:
113
[{
'name'
:
'frame_id'
,
'len'
:1},
114
{
'name'
:
'status'
,
'len'
:1}]},
115
"\x8a"
:
116
{
'name'
:
'status'
,
117
'structure'
:
118
[{
'name'
:
'status'
,
'len'
:1}]},
119
"\x88"
:
120
{
'name'
:
'at_response'
,
121
'structure'
:
122
[{
'name'
:
'frame_id'
,
'len'
:1},
123
{
'name'
:
'command'
,
'len'
:2},
124
{
'name'
:
'status'
,
'len'
:1},
125
{
'name'
:
'parameter'
,
'len'
:
None
}]},
126
"\x97"
:
127
{
'name'
:
'remote_at_response'
,
128
'structure'
:
129
[{
'name'
:
'frame_id'
,
'len'
:1},
130
{
'name'
:
'source_addr_long'
,
'len'
:8},
131
{
'name'
:
'source_addr'
,
'len'
:2},
132
{
'name'
:
'command'
,
'len'
:2},
133
{
'name'
:
'status'
,
'len'
:1},
134
{
'name'
:
'parameter'
,
'len'
:
None
}]},
135
}
136
137
def
__init__
(self, *args, **kwargs):
138
# Call the super class constructor to save the serial port
139
super(XBee, self).
__init__
(*args, **kwargs)
xbee.base
Definition:
base.py:1
xbee.ieee.XBee.__init__
def __init__(self, *args, **kwargs)
Definition:
ieee.py:137
xbee.base.XBeeBase
Definition:
base.py:25
xbee.ieee.XBee
Definition:
ieee.py:13
rosserial_xbee
Author(s): Adam Stambler
autogenerated on Wed Mar 2 2022 00:58:25