Subversion Repositories Code-Repo

Rev

Rev 155 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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