Subversion Repositories Code-Repo

Rev

Details | Last modification | View Log | RSS feed

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