Subversion Repositories Code-Repo

Rev

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

Rev Author Line No. Line
155 Kevin 1
#ifndef XBEE_H
2
#define XBEE_H
3
 
4
#define XBEE_BUFFER_SIZE        227
5
 
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
 
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
19
#define XBEE_STATE_READ_FRAME_DATA          13
20
#define XBEE_STATE_READ_CHECKSUM            14
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;
157 Kevin 45
        char char_value[4]; // Little Endian!!
155 Kevin 46
    } UPPER_32;
47
    union {
48
        unsigned long long_value;
157 Kevin 49
        char char_value[4]; // Little Endian!!
155 Kevin 50
    } LOWER_32;
51
} XBEE_ADDRESS_64;
52
 
53
typedef struct {
54
    union {
55
        unsigned int int_value;
157 Kevin 56
        char char_value[2]; // Little Endian!!
155 Kevin 57
    } INT_16;
58
} XBEE_ADDRESS_16;
59
 
60
// Unique Frame Components
61
typedef struct {
157 Kevin 62
    char frame_type;
63
    char frame_id;
64
    char command[2];
65
    char data[XBEE_BUFFER_SIZE];
155 Kevin 66
} XBEE_TX_AT_COMMAND_FRAME;
67
#define XBEE_TX_AT_COMMAND_FRAME_SIZE 4
68
 
69
typedef struct {
157 Kevin 70
    char frame_type;
71
    char frame_id;
72
    char command[2];
73
    char data[XBEE_BUFFER_SIZE];
155 Kevin 74
} XBEE_TX_AT_COMMAND_QUEUE_FRAME;
75
#define XBEE_TX_AT_COMMAND_QUEUE_FRAME_SIZE 4
76
 
77
typedef struct {
157 Kevin 78
    char frame_type;
79
    char frame_id;
80
    char command[2];
81
    char command_status;
82
    char data[XBEE_BUFFER_SIZE];
155 Kevin 83
} XBEE_RX_AT_COMMAND_RESPONSE_FRAME;
84
#define XBEE_RX_AT_COMMAND_RESPONSE_FRAME_SIZE 5
85
 
86
typedef struct {
157 Kevin 87
    char frame_type;
88
    char frame_id;
155 Kevin 89
    XBEE_ADDRESS_64 destination_64;
90
    XBEE_ADDRESS_16 destination_16;
157 Kevin 91
    char broadcast_radius;
92
    char options;
93
    char data[XBEE_BUFFER_SIZE];
155 Kevin 94
} XBEE_TX_DATA_PACKET_FRAME;
95
#define XBEE_TX_DATA_PACKET_FRAME_SIZE 14
96
 
97
typedef struct {
157 Kevin 98
    char frame_type;
155 Kevin 99
    XBEE_ADDRESS_64 source_64;
100
    XBEE_ADDRESS_16 source_16;
157 Kevin 101
    char recieve_options;
102
    char data[XBEE_BUFFER_SIZE];
155 Kevin 103
} XBEE_RX_DATA_PACKET_FRAME;
104
#define XBEE_RX_DATA_PACKET_FRAME_SIZE 12
105
 
106
typedef struct {
157 Kevin 107
    char frame_type;
108
    char frame_id;
155 Kevin 109
    XBEE_ADDRESS_16 destination_16;
157 Kevin 110
    char transmit_retry_count;
111
    char delivery_status;
112
    char discovery_status;
155 Kevin 113
} XBEE_RX_DATA_TX_STATUS_FRAME;
114
#define XBEE_RX_DATA_TX_STATUS_FRAME_SIZE 7
115
 
116
typedef struct {
157 Kevin 117
    char frame_type;
155 Kevin 118
    XBEE_ADDRESS_64 source_64;
119
    XBEE_ADDRESS_16 source_16;
157 Kevin 120
    char recieve_options;
121
    char number_of_samples;
122
    char digital_ch_mask[2];
123
    char analog_ch_mask;
124
    char digital_samples[2];
125
    char analog_samples[8];
155 Kevin 126
} XBEE_RX_IO_DATA_SAMPLE_FRAME;
127
#define XBEE_RX_IO_DATA_SAMPLE_FRAME_SIZE 26
128
 
129
typedef struct {
157 Kevin 130
    char frame_type;
131
    char frame_id;
155 Kevin 132
    XBEE_ADDRESS_64 destination_64;
133
    XBEE_ADDRESS_16 destination_16;
157 Kevin 134
    char source_endpoint;
135
    char destination_endpoint;
136
    char cluster_id[2];
137
    char profile_id[2];
138
    char broadcast_radius;
139
    char transmit_options;
140
    char data[XBEE_BUFFER_SIZE];
155 Kevin 141
} XBEE_TX_EXPLICIT_COMMAND_FRAME;
142
#define XBEE_TX_EXPLICIT_COMMAND_FRAME_SIZE 20
143
 
144
typedef struct {
157 Kevin 145
    char frame_type;
155 Kevin 146
    XBEE_ADDRESS_64 source_64;
147
    XBEE_ADDRESS_16 source_16;
157 Kevin 148
    char source_endpoint;
149
    char destination_endpoint;
150
    char cluster_id[2];
151
    char profile_id[2];
152
    char recieve_options;
153
    char data[XBEE_BUFFER_SIZE];
155 Kevin 154
} XBEE_RX_EXPLICIT_COMMAND_FRAME;
155
#define XBEE_RX_EXPLICIT_COMMAND_FRAME_SIZE 18
156
 
157
typedef struct {
157 Kevin 158
    char frame_type;
159
    char frame_id;
155 Kevin 160
    XBEE_ADDRESS_64 destination_64;
161
    XBEE_ADDRESS_16 destination_16;
157 Kevin 162
    char remote_options;
163
    char command[2];
164
    char data[XBEE_BUFFER_SIZE];
155 Kevin 165
} XBEE_TX_REMOTE_AT_COMMAND_FRAME;
166
#define XBEE_TX_REMOTE_AT_COMMAND_FRAME_SIZE 15
167
 
168
typedef struct {
157 Kevin 169
    char frame_type;
170
    char frame_id;
155 Kevin 171
    XBEE_ADDRESS_64 source_64;
172
    XBEE_ADDRESS_16 source_16;
157 Kevin 173
    char command[2];
174
    char command_status;
175
    char command_data[4];
155 Kevin 176
} XBEE_RX_REMOTE_AT_COMMAND_FRAME;
177
#define XBEE_RX_REMOTE_AT_COMMAND_FRAME_SIZE 19
178
 
179
typedef struct {
157 Kevin 180
    char frame_type;
181
    char frame_id;
155 Kevin 182
    XBEE_ADDRESS_64 destination_64;
183
    XBEE_ADDRESS_16 destination_16;
157 Kevin 184
    char route_options;
185
    char num_of_addresses;
186
    char addresses[XBEE_BUFFER_SIZE];
155 Kevin 187
} XBEE_TX_CREATE_SOURCE_ROUTE_FRAME;
188
#define XBEE_TX_CREATE_SOURCE_ROUTE_FRAME_SIZE 14
189
 
190
typedef struct {
157 Kevin 191
    char frame_type;
155 Kevin 192
    XBEE_ADDRESS_64 source_64;
193
    XBEE_ADDRESS_16 source_16;
157 Kevin 194
    char recieve_options;
195
    char num_of_addresses;
196
    char addresses[XBEE_BUFFER_SIZE];
155 Kevin 197
} XBEE_RX_ROUTE_RECORD_FRAME;
198
#define XBEE_RX_ROUTE_RECORD_FRAME_SIZE 13
199
 
200
typedef struct {
157 Kevin 201
    char frame_type;
155 Kevin 202
    XBEE_ADDRESS_64 source_64;
203
    XBEE_ADDRESS_16 source_16;
157 Kevin 204
    char recieve_options;
155 Kevin 205
    XBEE_ADDRESS_16 remote_16;
206
    XBEE_ADDRESS_64 remote_64;
157 Kevin 207
    char NI_string[2];
155 Kevin 208
    XBEE_ADDRESS_16 parent_16;
157 Kevin 209
    char device_type;
210
    char source_event;
211
    char profile_id[2];
212
    char manufacturer_id[2];
155 Kevin 213
} XBEE_RX_NODE_IDENTIFICATION_INDICATOR_FRAME;
214
#define XBEE_RX_NODE_IDENTIFICATION_INDICATOR_FRAME_SIZE 32
215
 
216
typedef struct {
157 Kevin 217
    char frame_type;
218
    char status;
155 Kevin 219
} XBEE_RX_MODEM_STATUS_FRAME;
220
#define XBEE_RX_MODEM_STATUS_FRAME_SIZE 2
221
 
222
// Common Frame Components
157 Kevin 223
typedef struct {
224
    char start_delimiter;
155 Kevin 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
157 Kevin 246
typedef struct {
155 Kevin 247
    XBEE_FRAME rcv_frame;
248
    unsigned int dataind;
157 Kevin 249
    char checksum_sum;
250
    char read_state;
251
    char frame_rdy;
252
    char escape_flag;
155 Kevin 253
} XBEE_DATA;
254
 
255
 
157 Kevin 256
void XBee_Init(XBEE_DATA *data);
257
void XBee_Serial_In(char);
155 Kevin 258
void XBee_Process_Received_Frame(void);
157 Kevin 259
void XBee_Process_Transmit_Frame(char *data, char length);
155 Kevin 260
 
157 Kevin 261
unsigned int XBee_Get_Received_Frame(char *frame);
155 Kevin 262
 
157 Kevin 263
void XBee_Set_RTS(char);
264
char XBee_Read_CTS(void);
155 Kevin 265
 
266
void XBee_Convert_Endian_64(XBEE_ADDRESS_64 *src);
267
void XBee_Convert_Endian_16(XBEE_ADDRESS_16 *src);
268
 
269
#endif