Subversion Repositories Code-Repo

Rev

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

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