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