Digi XBee(R) ANSI C Host Library
file_system.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Digi International Inc.,
3  * All rights not expressly granted are reserved.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
7  * You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * Digi International Inc., 9350 Excelsior Blvd., Suite 700, Hopkins, MN 55343
10  * ===========================================================================
11  */
12 
25 #ifndef XBEE_FILE_SYSTEM_H
26 #define XBEE_FILE_SYSTEM_H
27 
28 #include "xbee/platform.h"
29 #include "xbee/device.h"
30 #include "wpan/types.h"
31 
33 
35 #define XBEE_FRAME_FILE_SYSTEM_REQ 0x3B
36 
38 typedef XBEE_PACKED(xbee_header_file_system_req_t, {
40  uint8_t frame_type;
41 
42  uint8_t frame_id;
44 
46 #define XBEE_FRAME_REMOTE_FS_REQ 0x3C
47 
49 typedef XBEE_PACKED(xbee_header_remote_fs_req_t, {
51  uint8_t frame_type;
52 
53  uint8_t frame_id;
54 
55  addr64 remote_addr_be;
56 
57  uint8_t options;
59 
60 
61 #define XBEE_FS_CMD_ID_FILE_OPEN 0x01
62 #define XBEE_FS_CMD_ID_FILE_CLOSE 0x02
63 #define XBEE_FS_CMD_ID_FILE_READ 0x03
64 #define XBEE_FS_CMD_ID_FILE_WRITE 0x04
65 #define XBEE_FS_CMD_ID_FILE_HASH 0x08
66 
67 #define XBEE_FS_CMD_ID_DIR_CREATE 0x10
68 #define XBEE_FS_CMD_ID_DIR_OPEN 0x11
69 #define XBEE_FS_CMD_ID_DIR_CLOSE 0x12
70 #define XBEE_FS_CMD_ID_DIR_READ 0x13
71 #define XBEE_FS_CMD_ID_GET_PATH_ID 0x1C
72 
73 #define XBEE_FS_CMD_ID_RENAME 0x21
74 #define XBEE_FS_CMD_ID_DELETE 0x2F
75 
76 #define XBEE_FS_CMD_ID_VOL_STAT 0x40
77 #define XBEE_FS_CMD_ID_VOL_FORMAT 0x4F
78 
79 #define XBEE_FS_OPT_CREATE (1<<0) // create if file/dir doesn't exist
80 #define XBEE_FS_OPT_EXCLUSIVE (1<<1) // error out if file/dir exists
81 #define XBEE_FS_OPT_READ (1<<2) // open file for reading
82 #define XBEE_FS_OPT_WRITE (1<<3) // open file for writing
83 #define XBEE_FS_OPT_TRUNCATE (1<<4) // truncate file to 0 bytes
84 #define XBEE_FS_OPT_APPEND (1<<5) // append to end of file
85 #define XBEE_FS_OPT_SECURE (1<<7) // create a secure file
86 
87 
95 typedef XBEE_PACKED(xbee_fs_req_path_and_name_t, {
96  uint8_t fs_cmd_id;
97 
98  uint16_t path_id_be;
99 
100  // followed by variable-length file/directory name
102 
103 
105 typedef XBEE_PACKED(xbee_fs_req_file_open_t, {
106  uint8_t fs_cmd_id;
107 
108  uint16_t path_id_be;
109 
110  uint8_t options;
111 
112  // followed by variable-length file/directory name
114 
115 
118 #define XBEE_FS_OFFSET_CURRENT 0xFFFFFFFF
119 
121 #define XBEE_FS_BYTE_COUNT_MAX 0xFFFF
122 
124 typedef XBEE_PACKED(xbee_fs_req_file_read_t, {
125  uint8_t fs_cmd_id;
126 
127  uint16_t file_id_be;
128 
129  uint32_t offset_be;
130 
131  uint16_t byte_count_be;
133 
134 
136 typedef XBEE_PACKED(xbee_fs_req_file_write_t, {
137  uint8_t fs_cmd_id;
138 
139  uint16_t file_id_be;
140 
141  uint32_t offset_be;
142 
143  // followed by variable-length data to write
145 
146 
148 typedef XBEE_PACKED(xbee_fs_req_file_close_t, {
149  uint8_t fs_cmd_id;
150 
151  uint16_t file_id_be;
153 
154 
156 typedef XBEE_PACKED(xbee_fs_req_dir_read_t, {
157  uint8_t fs_cmd_id;
158 
160  uint16_t dir_handle_be;
162 
163 
165 #define XBEE_FRAME_FILE_SYSTEM_RESP 0xBB
166 
168 typedef XBEE_PACKED(xbee_header_file_system_resp_t, {
170  uint8_t frame_type;
171 
172  uint8_t frame_id;
173 
174  uint8_t fs_cmd_id;
175 
176  uint8_t status;
177 
178  // payload following header depends on value of <fs_cmd_id>
180 
182 #define XBEE_FRAME_REMOTE_FS_RESP 0xBC
183 
185 typedef XBEE_PACKED(xbee_header_remote_fs_resp_t, {
187  uint8_t frame_type;
188 
189  uint8_t frame_id;
190 
191  addr64 remote_addr_be;
192 
193  uint8_t options;
194 
195  uint8_t fs_cmd_id;
196 
197  uint8_t status;
198 
199  // payload following header depends on value of <fs_cmd_id>
201 
202 
203 // values for status of xbee_header_file_system_resp_t
204 #define XBEE_FS_STATUS_SUCCESS 0x00
205 #define XBEE_FS_STATUS_UNKNOWN_ERROR 0x01
206 #define XBEE_FS_STATUS_INVALID_COMMAND 0x02
207 #define XBEE_FS_STATUS_INVALID_PARAM 0x03
208 #define XBEE_FS_STATUS_ACCESS_DENIED 0x50
209 #define XBEE_FS_STATUS_ALREADY_EXISTS 0x51
210 #define XBEE_FS_STATUS_DOES_NOT_EXIST 0x52
211 #define XBEE_FS_STATUS_INVALID_NAME 0x53
212 #define XBEE_FS_STATUS_IS_DIRECTORY 0x54
213 #define XBEE_FS_STATUS_DIR_NOT_EMPTY 0x55
214 #define XBEE_FS_STATUS_EOF 0x56
215 #define XBEE_FS_STATUS_HW_FAILURE 0x57
216 #define XBEE_FS_STATUS_NO_DEVICE 0x58
217 #define XBEE_FS_STATUS_VOLUME_FULL 0x59
218 #define XBEE_FS_STATUS_TIMED_OUT 0x5A
219 #define XBEE_FS_STATUS_BUSY 0x5B
220 #define XBEE_FS_STATUS_RESOURCE_FAILURE 0x5C
221 
222 
224 typedef XBEE_PACKED(xbee_fs_dir_entry_t, {
226  uint32_t size_and_flags_be;
227 
229  char name[1];
230 }) xbee_payload_fs_dir_entry_t;
231 
232 #define XBEE_FS_DIR_ENTRY_IS_DIR (UINT32_C(1)<<31)
233 #define XBEE_FS_DIR_ENTRY_IS_SECURE (UINT32_C(1)<<30)
234 #define XBEE_FS_DIR_ENTRY_IS_LAST (UINT32_C(1)<<24)
235 #define XBEE_FS_DIR_ENTRY_FLAG_MASK UINT32_C(0xFF000000)
236 
238 typedef XBEE_PACKED(xbee_payload_fs_file_open_resp_t, {
240  uint16_t file_handle_be;
241 
242  uint32_t file_size_be;
244 
245 
247 typedef XBEE_PACKED(xbee_payload_fs_file_rw_resp_t, {
248  uint16_t file_handle_be;
249 
250  uint32_t offset_be;
251 
252  // variable-length file contents follow for FILE_READ
253  uint8_t data[1];
255 
256 
258 typedef XBEE_PACKED(xbee_payload_fs_volume_resp_t, {
259  uint32_t bytes_used_be;
260 
261  uint32_t bytes_free_be;
262 
263  uint32_t bytes_bad_be;
265 
266 
267 // Maximum size of a file/directory name (excluding null terminator).
268 #define XBEE_FS_MAX_PATH_ELEMENT_LEN 64
269 
270 // XBee file system directory entry extracted from DIR_READ response.
271 typedef struct {
272  uint32_t filesize;
273  uint8_t name_len;
274  uint8_t is_dir:1;
275  uint8_t is_secure:1;
276  uint8_t is_last_entry:1;
277  char name[XBEE_FS_MAX_PATH_ELEMENT_LEN + 1];
279 
280 // <payload> points to file_size field of response
281 // Returns number of bytes extracted (<= <length>) or an error (-Exxx)
282 // if packet is malformed.
284  const uint8_t FAR *payload,
285  int length);
286 
287 #define xbee_fs_req_send(xbee, header_data, header_len, target) \
288  xbee_fs_req_send_data(xbee, NULL, 0, header_data, header_len, target)
289 
290 #define xbee_fs_req_send_str(xbee, header_data, header_len, var_str, target) \
291  xbee_fs_req_send_data(xbee, header_data, header_len, \
292  var_str, strlen(var_str), target)
293 
295  const void *header_data, uint16_t header_len,
296  const void *payload, uint16_t payload_len,
297  const addr64 FAR *target_ieee);
299 
300 #endif // XBEE_FILE_SYSTEM_H
301 
unsigned long uint32_t
32-bit unsigned integer
Definition: platform_config.h:43
int xbee_fs_req_send_data(xbee_dev_t *xbee, const void *header_data, uint16_t header_len, const void *payload, uint16_t payload_len, const addr64 FAR *target_ieee)
Send a File System Request to the local or a remote XBee module.
Definition: xbee_file_system.c:36
WPAN datatypes and support functions, valid for ZigBee and DigiMesh.
#define FAR
On platforms with "far" pointers, define to the proper keyword; empty definition if not required...
Definition: platform.h:396
Format for the payload of "File Write" File System Request.
Definition: file_system.h:144
#define XBEE_BEGIN_DECLS
Macro defined to.
Definition: platform.h:41
Common header for Hardware Abstraction Layer.
Format for the payload of "File Open" File System Request.
Definition: file_system.h:113
Format for the payload of File System Request with path_id and name:
Definition: file_system.h:101
Format for a directory entry in a Directory Read Response.
Definition: file_system.h:230
Frame format for the header of Remote File System Response frame.
Definition: file_system.h:200
unsigned short uint16_t
16-bit unsigned integer
Definition: platform_config.h:41
Format for the payload of "File Close" File System Request.
Definition: file_system.h:152
unsigned char uint8_t
8-bit unsigned integer
Definition: platform_config.h:39
Frame format for the header of Remote File System Request frame.
Definition: file_system.h:58
Format for the payload of File System Response: File Open.
Definition: file_system.h:243
Frame format for the header of File System Request frame.
Definition: file_system.h:43
int xbee_fs_extract_dir_entry(xbee_fs_dir_entry_t *entry, const uint8_t FAR *payload, int length)
Send a File System Request to the local or a remote XBee module.
Definition: xbee_file_system.c:84
Typedef used to hold a 64-bit IEEE address, represented as 8 bytes, 4 16-bit values or 2 32-bit value...
Definition: types.h:34
Definition: device.h:361
#define XBEE_END_DECLS
Macro defined to.
Definition: platform.h:42
Format for the payload of "Directory Read/Close" File System Requests.
Definition: file_system.h:161
Frame format for the header of File System Response frame.
Definition: file_system.h:179
Format for the payload of "File Read" File System Request.
Definition: file_system.h:132
Format for the payload of File System Response: File Read/File Write.
Definition: file_system.h:254
Format for the payload of File System Response: Volume Stat/Format.
Definition: file_system.h:264