Subversion Repositories Code-Repo

Rev

Rev 113 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
113 Kevin 1
#ifndef __xbee_h
2
#define __xbee_h
3
 
4
#include "msg_queues.h"
5
 
6
#define XBEE_BUFFER_SIZE MSGLEN-20
7
#define XBEE_START_DELIMITER 0x7E
8
 
9
// Expected 'next' state
10
#define XBEE_STATE_READ_START               10
11
#define XBEE_STATE_READ_LENGTH_HIGH         11
12
#define XBEE_STATE_READ_LENGTH_LOW          12
13
#define XBEE_STATE_READ_FRAME_DATA          14
14
#define XBEE_STATE_READ_CHECKSUM            15
15
 
16
// Command Frame Type
17
#define XBEE_TX_AT_COMMAND                  0x08
18
#define XBEE_TX_AT_COMMAND_QUEUE            0x09
19
#define XBEE_RX_AT_COMMAND_RESPONSE         0x88
20
 
21
#define XBEE_TX_DATA_PACKET                 0x10
22
#define XBEE_RX_DATA_PACKET                 0x90
23
#define XBEE_RX_DATA_TX_STATUS              0x8B
24
#define XBEE_RX_IO_DATA_SAMPLE              0x92
25
#define XBEE_TX_EXPLICIT_COMMAND            0x11
26
#define XBEE_RX_EXPLICIT_COMMAND            0x91
27
 
28
#define XBEE_TX_REMOTE_AT_COMMAND           0x17
29
#define XBEE_RX_REMOTE_AT_COMMAND_RESPONSE  0x97
30
 
31
#define XBEE_TX_CREATE_SOURCE_ROUTE         0x21
32
#define XBEE_RX_ROUTE_RECORD                0xA1
33
#define XBEE_RX_NODE_IDENTIFICATION         0x95
34
#define XBEE_RX_FRAME_MODEM_STATUS          0x8A
35
 
36
typedef struct {
37
    union {
38
        unsigned long long_value;
39
        unsigned char char_value[4]; // Little Endian!!
40
    } UPPER_32;
41
    union {
42
        unsigned long long_value;
43
        unsigned char char_value[4]; // Little Endian!!
44
    } LOWER_32;
45
} XBEE_ADDRESS_64;
46
 
47
typedef struct {
48
    union {
49
        unsigned int int_value;
50
        unsigned char char_value[2]; // Little Endian!!
51
    } INT_16;
52
} XBEE_ADDRESS_16;
53
 
54
// Unique Frame Components
55
typedef struct {
56
    unsigned char frame_type;
57
    unsigned char frame_id;
58
    unsigned char command[2];
59
    unsigned char data[XBEE_BUFFER_SIZE];
60
} XBEE_TX_AT_COMMAND_FRAME;
61
#define XBEE_TX_AT_COMMAND_FRAME_SIZE 4
62
 
63
typedef struct {
64
    unsigned char frame_type;
65
    unsigned char frame_id;
66
    unsigned char command[2];
67
    unsigned char data[XBEE_BUFFER_SIZE];
68
} XBEE_TX_AT_COMMAND_QUEUE_FRAME;
69
#define XBEE_TX_AT_COMMAND_QUEUE_FRAME_SIZE 4
70
 
71
typedef struct {
72
    unsigned char frame_type;
73
    unsigned char frame_id;
74
    unsigned char command[2];
75
    unsigned char command_status;
76
    unsigned char data[XBEE_BUFFER_SIZE];
77
} XBEE_RX_AT_COMMAND_RESPONSE_FRAME;
78
#define XBEE_RX_AT_COMMAND_RESPONSE_FRAME_SIZE 5
79
 
80
typedef struct {
81
    unsigned char frame_type;
82
    unsigned char frame_id;
83
    XBEE_ADDRESS_64 destination_64;
84
    XBEE_ADDRESS_16 destination_16;
85
    unsigned char broadcast_radius;
86
    unsigned char options;
87
    unsigned char data[XBEE_BUFFER_SIZE];
88
} XBEE_TX_DATA_PACKET_FRAME;
89
#define XBEE_TX_DATA_PACKET_FRAME_SIZE 14
90
 
91
typedef struct {
92
    unsigned char frame_type;
93
    XBEE_ADDRESS_64 source_64;
94
    XBEE_ADDRESS_16 source_16;
95
    unsigned char recieve_options;
96
    unsigned char data[XBEE_BUFFER_SIZE];
97
} XBEE_RX_DATA_PACKET_FRAME;
98
#define XBEE_RX_DATA_PACKET_FRAME_SIZE 12
99
 
100
typedef struct {
101
    unsigned char frame_type;
102
    unsigned char frame_id;
103
    XBEE_ADDRESS_16 destination_16;
104
    unsigned char transmit_retry_count;
105
    unsigned char delivery_status;
106
    unsigned char discovery_status;
107
} XBEE_RX_DATA_TX_STATUS_FRAME;
108
#define XBEE_RX_DATA_TX_STATUS_FRAME_SIZE 7
109
 
110
typedef struct {
111
    unsigned char frame_type;
112
    XBEE_ADDRESS_64 source_64;
113
    XBEE_ADDRESS_16 source_16;
114
    unsigned char recieve_options;
115
    unsigned char number_of_samples;
116
    unsigned char digital_ch_mask[2];
117
    unsigned char analog_ch_mask;
118
    unsigned char digital_samples[2];
119
    unsigned char analog_samples[8];
120
} XBEE_RX_IO_DATA_SAMPLE_FRAME;
121
#define XBEE_RX_IO_DATA_SAMPLE_FRAME_SIZE 26
122
 
123
typedef struct {
124
    unsigned char frame_type;
125
    unsigned char frame_id;
126
    XBEE_ADDRESS_64 destination_64;
127
    XBEE_ADDRESS_16 destination_16;
128
    unsigned char source_endpoint;
129
    unsigned char destination_endpoint;
130
    unsigned char cluster_id[2];
131
    unsigned char profile_id[2];
132
    unsigned char broadcast_radius;
133
    unsigned char transmit_options;
134
    unsigned char data[XBEE_BUFFER_SIZE];
135
} XBEE_TX_EXPLICIT_COMMAND_FRAME;
136
#define XBEE_TX_EXPLICIT_COMMAND_FRAME_SIZE 20
137
 
138
typedef struct {
139
    unsigned char frame_type;
140
    XBEE_ADDRESS_64 source_64;
141
    XBEE_ADDRESS_16 source_16;
142
    unsigned char source_endpoint;
143
    unsigned char destination_endpoint;
144
    unsigned char cluster_id[2];
145
    unsigned char profile_id[2];
146
    unsigned char recieve_options;
147
    unsigned char data[XBEE_BUFFER_SIZE];
148
} XBEE_RX_EXPLICIT_COMMAND_FRAME;
149
#define XBEE_RX_EXPLICIT_COMMAND_FRAME_SIZE 18
150
 
151
typedef struct {
152
    unsigned char frame_type;
153
    unsigned char frame_id;
154
    XBEE_ADDRESS_64 destination_64;
155
    XBEE_ADDRESS_16 destination_16;
156
    unsigned char remote_options;
157
    unsigned char command[2];
158
    unsigned char data[XBEE_BUFFER_SIZE];
159
} XBEE_TX_REMOTE_AT_COMMAND_FRAME;
160
#define XBEE_TX_REMOTE_AT_COMMAND_FRAME_SIZE 15
161
 
162
typedef struct {
163
    unsigned char frame_type;
164
    unsigned char frame_id;
165
    XBEE_ADDRESS_64 source_64;
166
    XBEE_ADDRESS_16 source_16;
167
    unsigned char command[2];
168
    unsigned char command_status;
169
    unsigned char command_data[4];
170
} XBEE_RX_REMOTE_AT_COMMAND_FRAME;
171
#define XBEE_RX_REMOTE_AT_COMMAND_FRAME_SIZE 19
172
 
173
typedef struct {
174
    unsigned char frame_type;
175
    unsigned char frame_id;
176
    XBEE_ADDRESS_64 destination_64;
177
    XBEE_ADDRESS_16 destination_16;
178
    unsigned char route_options;
179
    unsigned char num_of_addresses;
180
    unsigned char addresses[XBEE_BUFFER_SIZE];
181
} XBEE_TX_CREATE_SOURCE_ROUTE_FRAME;
182
#define XBEE_TX_CREATE_SOURCE_ROUTE_FRAME_SIZE 14
183
 
184
typedef struct {
185
    unsigned char frame_type;
186
    XBEE_ADDRESS_64 source_64;
187
    XBEE_ADDRESS_16 source_16;
188
    unsigned char recieve_options;
189
    unsigned char num_of_addresses;
190
    unsigned char addresses[XBEE_BUFFER_SIZE];
191
} XBEE_RX_ROUTE_RECORD_FRAME;
192
#define XBEE_RX_ROUTE_RECORD_FRAME_SIZE 13
193
 
194
typedef struct {
195
    unsigned char frame_type;
196
    XBEE_ADDRESS_64 source_64;
197
    XBEE_ADDRESS_16 source_16;
198
    unsigned char recieve_options;
199
    XBEE_ADDRESS_16 remote_16;
200
    XBEE_ADDRESS_64 remote_64;
201
    unsigned char NI_string[2];
202
    XBEE_ADDRESS_16 parent_16;
203
    unsigned char device_type;
204
    unsigned char source_event;
205
    unsigned char profile_id[2];
206
    unsigned char manufacturer_id[2];
207
} XBEE_RX_NODE_IDENTIFICATION_INDICATOR_FRAME;
208
#define XBEE_RX_NODE_IDENTIFICATION_INDICATOR_FRAME_SIZE 32
209
 
210
typedef struct {
211
    unsigned char frame_type;
212
    unsigned char status;
213
} XBEE_RX_MODEM_STATUS_FRAME;
214
#define XBEE_RX_MODEM_STATUS_FRAME_SIZE 2
215
 
216
typedef union __XBEE_FRAME {
217
    XBEE_TX_AT_COMMAND_FRAME            TX_AT_COMMAND;
218
    XBEE_TX_AT_COMMAND_QUEUE_FRAME      TX_AT_COMMAND_QUEUE;
219
    XBEE_RX_AT_COMMAND_RESPONSE_FRAME   RX_AT_COMMAND_RESPONSE;
220
    XBEE_TX_DATA_PACKET_FRAME           TX_DATA_PACKET;
221
    XBEE_RX_DATA_PACKET_FRAME           RX_DATA_PACKET;
222
    XBEE_RX_DATA_TX_STATUS_FRAME        RX_DATA_TX_STATUS;
223
    XBEE_RX_IO_DATA_SAMPLE_FRAME        RX_IO_DATA_SAMPLE;
224
    XBEE_TX_EXPLICIT_COMMAND_FRAME      TX_EXPLICIT_COMMAND;
225
    XBEE_RX_EXPLICIT_COMMAND_FRAME      RX_EXPLICIT_COMMAND;
226
    XBEE_TX_REMOTE_AT_COMMAND_FRAME     TX_REMOTE_AT_COMMAND;
227
    XBEE_RX_REMOTE_AT_COMMAND_FRAME     RX_REMOTE_AT_COMMAND;
228
    XBEE_TX_CREATE_SOURCE_ROUTE_FRAME   TX_CREATE_SOURCE_ROUTE;
229
    XBEE_RX_ROUTE_RECORD_FRAME          RX_ROUTE_RECORD;
230
    XBEE_RX_NODE_IDENTIFICATION_INDICATOR_FRAME     RX_NODE_IDENTIFICATION;
231
    XBEE_RX_MODEM_STATUS_FRAME          RX_MODEM_STATUS;
232
} XBEE_FRAME;
233
 
234
// Common Frame Components
235
typedef struct __XBEE_FULL_FRAME {
236
    unsigned char start_delimiter;
237
    XBEE_ADDRESS_16 length;
238
    XBEE_FRAME *FRAME;
239
} XBEE_FULL_FRAME; // 5 bytes overhead
240
 
241
// Overall Data Structure
242
typedef struct __xbee_data {
243
    XBEE_FULL_FRAME rcv_frame;
244
    unsigned char dataind;
245
    unsigned char checksum_sum;
246
    unsigned char read_state;
247
    unsigned char msgtype;
248
} XBEE_DATA; // 9 bytes overhead
249
 
250
 
251
void xbee_init(XBEE_DATA *);
252
void xbee_read_serial(unsigned char);
253
void xbee_process_recieved_frame(void);
254
//void xbee_process_transmit_frame_interrupt(void);
255
void xbee_process_transmit_frame(void *data, unsigned char length);
256
 
257
void xbee_set_RTS(unsigned char);
258
unsigned char xbee_read_CTS(void);
259
void xbee_sleep(void);
260
void xbee_wake(void);
261
 
114 Kevin 262
void ConvertEndian64(XBEE_ADDRESS_64 *src);
263
void ConvertEndian16(XBEE_ADDRESS_16 *src);
264
 
113 Kevin 265
#endif