Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of d7a_1x by
src/d7a.cpp@50:30440c9aeb7c, 2016-09-05 (annotated)
- Committer:
- Jeej
- Date:
- Mon Sep 05 13:21:50 2016 +0000
- Revision:
- 50:30440c9aeb7c
- Parent:
- 49:81d5bddb02f0
- Child:
- 51:644de6fe1ee7
Disabled dbg prints
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Jeej | 43:28202405094d | 1 | #include "mbed.h" |
| Jeej | 43:28202405094d | 2 | #include "rtos.h" |
| Jeej | 43:28202405094d | 3 | #include "dbg.h" |
| Jeej | 43:28202405094d | 4 | #include "d7a.h" |
| Jeej | 43:28202405094d | 5 | #include "d7a_com.h" |
| Jeej | 43:28202405094d | 6 | #include "d7a_common.h" |
| Jeej | 43:28202405094d | 7 | #include "d7a_fs.h" |
| Jeej | 43:28202405094d | 8 | #include "d7a_modem.h" |
| Jeej | 43:28202405094d | 9 | #include "d7a_sys.h" |
| Jeej | 43:28202405094d | 10 | #include "d7a_alp.h" |
| Jeej | 43:28202405094d | 11 | |
| Jeej | 49:81d5bddb02f0 | 12 | bool g_open = false; |
| Jeej | 49:81d5bddb02f0 | 13 | bool g_local_fs = false; |
| Jeej | 43:28202405094d | 14 | |
| Jeej | 43:28202405094d | 15 | //====================================================================== |
| Jeej | 43:28202405094d | 16 | // d7a_open |
| Jeej | 43:28202405094d | 17 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 18 | /// @brief Open D7A driver and start the modem |
| Jeej | 43:28202405094d | 19 | /// @param d7a_com_config_t* Com port configuration structure |
| Jeej | 43:28202405094d | 20 | /// @param PinName Reset pin |
| Jeej | 43:28202405094d | 21 | /// @param d7a_fs_callbacks_t* File system callbacks (You declare files if this is not specified) |
| Jeej | 45:b85384e7d825 | 22 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 23 | //====================================================================== |
| Jeej | 49:81d5bddb02f0 | 24 | d7a_errors_t d7a_open(const d7a_com_config_t* com_config, PinName reset_pin, const d7a_callbacks_t* callbacks) |
| Jeej | 43:28202405094d | 25 | { |
| Jeej | 45:b85384e7d825 | 26 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 27 | |
| Jeej | 49:81d5bddb02f0 | 28 | d7a_errors_t err; |
| Jeej | 49:81d5bddb02f0 | 29 | |
| Jeej | 49:81d5bddb02f0 | 30 | if (g_open) |
| Jeej | 49:81d5bddb02f0 | 31 | { |
| Jeej | 49:81d5bddb02f0 | 32 | IPRINT("D7A Already open\r\n"); |
| Jeej | 49:81d5bddb02f0 | 33 | return D7A_ERR_NONE; |
| Jeej | 49:81d5bddb02f0 | 34 | } |
| Jeej | 49:81d5bddb02f0 | 35 | |
| Jeej | 49:81d5bddb02f0 | 36 | err = d7a_com_open(com_config); |
| Jeej | 49:81d5bddb02f0 | 37 | if (err < 0) return err; |
| Jeej | 49:81d5bddb02f0 | 38 | |
| Jeej | 49:81d5bddb02f0 | 39 | err = d7a_sys_open(); |
| Jeej | 49:81d5bddb02f0 | 40 | if (err < 0) return err; |
| Jeej | 45:b85384e7d825 | 41 | |
| Jeej | 49:81d5bddb02f0 | 42 | err = d7a_fs_open(callbacks->write_file, callbacks->read_file); |
| Jeej | 49:81d5bddb02f0 | 43 | if (err < 0) return err; |
| Jeej | 49:81d5bddb02f0 | 44 | |
| Jeej | 49:81d5bddb02f0 | 45 | err = d7a_alp_open(); |
| Jeej | 49:81d5bddb02f0 | 46 | if (err < 0) return err; |
| Jeej | 49:81d5bddb02f0 | 47 | |
| Jeej | 49:81d5bddb02f0 | 48 | err = d7a_modem_open(reset_pin, callbacks->notif_done); |
| Jeej | 49:81d5bddb02f0 | 49 | if (err < 0) return err; |
| Jeej | 49:81d5bddb02f0 | 50 | |
| Jeej | 49:81d5bddb02f0 | 51 | if (callbacks->write_file != NULL && callbacks->read_file != NULL) |
| Jeej | 49:81d5bddb02f0 | 52 | { |
| Jeej | 49:81d5bddb02f0 | 53 | g_local_fs = true; |
| Jeej | 49:81d5bddb02f0 | 54 | } |
| Jeej | 49:81d5bddb02f0 | 55 | |
| Jeej | 49:81d5bddb02f0 | 56 | g_open = true; |
| Jeej | 49:81d5bddb02f0 | 57 | |
| Jeej | 49:81d5bddb02f0 | 58 | return err; |
| Jeej | 43:28202405094d | 59 | } |
| Jeej | 43:28202405094d | 60 | |
| Jeej | 43:28202405094d | 61 | //====================================================================== |
| Jeej | 43:28202405094d | 62 | // d7a_close |
| Jeej | 43:28202405094d | 63 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 64 | /// @brief Close D7A driver and stop the modem |
| Jeej | 45:b85384e7d825 | 65 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 66 | //====================================================================== |
| Jeej | 45:b85384e7d825 | 67 | d7a_errors_t d7a_close(void) |
| Jeej | 43:28202405094d | 68 | { |
| Jeej | 45:b85384e7d825 | 69 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 70 | |
| Jeej | 49:81d5bddb02f0 | 71 | d7a_errors_t err; |
| Jeej | 49:81d5bddb02f0 | 72 | |
| Jeej | 43:28202405094d | 73 | // TODO |
| Jeej | 43:28202405094d | 74 | //d7a_modem_close(); |
| Jeej | 43:28202405094d | 75 | //d7a_fs_close(); |
| Jeej | 43:28202405094d | 76 | //d7a_sys_close(); |
| Jeej | 50:30440c9aeb7c | 77 | err = d7a_com_close(); |
| Jeej | 45:b85384e7d825 | 78 | |
| Jeej | 50:30440c9aeb7c | 79 | return err; |
| Jeej | 43:28202405094d | 80 | } |
| Jeej | 43:28202405094d | 81 | |
| Jeej | 43:28202405094d | 82 | |
| Jeej | 43:28202405094d | 83 | //====================================================================== |
| Jeej | 43:28202405094d | 84 | // d7a_start |
| Jeej | 43:28202405094d | 85 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 86 | /// @brief Start the modem |
| Jeej | 45:b85384e7d825 | 87 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 88 | //====================================================================== |
| Jeej | 45:b85384e7d825 | 89 | d7a_errors_t d7a_start(void) |
| Jeej | 43:28202405094d | 90 | { |
| Jeej | 45:b85384e7d825 | 91 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 92 | |
| Jeej | 49:81d5bddb02f0 | 93 | d7a_errors_t err; |
| Jeej | 49:81d5bddb02f0 | 94 | |
| Jeej | 50:30440c9aeb7c | 95 | err = d7a_modem_start(); |
| Jeej | 45:b85384e7d825 | 96 | |
| Jeej | 50:30440c9aeb7c | 97 | return err; |
| Jeej | 43:28202405094d | 98 | } |
| Jeej | 43:28202405094d | 99 | |
| Jeej | 43:28202405094d | 100 | //====================================================================== |
| Jeej | 43:28202405094d | 101 | // d7a_stop |
| Jeej | 43:28202405094d | 102 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 103 | /// @brief Stop the modem (goes to low power) |
| Jeej | 45:b85384e7d825 | 104 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 105 | //====================================================================== |
| Jeej | 45:b85384e7d825 | 106 | d7a_errors_t d7a_stop(void) |
| Jeej | 43:28202405094d | 107 | { |
| Jeej | 45:b85384e7d825 | 108 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 109 | |
| Jeej | 49:81d5bddb02f0 | 110 | d7a_errors_t err; |
| Jeej | 49:81d5bddb02f0 | 111 | |
| Jeej | 50:30440c9aeb7c | 112 | err = d7a_modem_stop(); |
| Jeej | 45:b85384e7d825 | 113 | |
| Jeej | 50:30440c9aeb7c | 114 | return err; |
| Jeej | 43:28202405094d | 115 | } |
| Jeej | 43:28202405094d | 116 | |
| Jeej | 43:28202405094d | 117 | //====================================================================== |
| Jeej | 43:28202405094d | 118 | // d7a_create |
| Jeej | 43:28202405094d | 119 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 120 | /// @brief Creates a file on the modem |
| Jeej | 43:28202405094d | 121 | /// @param d7a_fs_storage_t Type of file |
| Jeej | 43:28202405094d | 122 | /// @param d7a_fs_perm_t Access permissions |
| Jeej | 43:28202405094d | 123 | /// @param uint32_t Length of the created file |
| Jeej | 43:28202405094d | 124 | /// @param uint32_t Maximum size of the file |
| Jeej | 43:28202405094d | 125 | /// @param uint8_t File ID to an eventual Action file |
| Jeej | 43:28202405094d | 126 | /// @param uint8_t File ID to an eventual Interface file |
| Jeej | 45:b85384e7d825 | 127 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 128 | //====================================================================== |
| Jeej | 45:b85384e7d825 | 129 | d7a_errors_t d7a_create(const uint8_t file_id, d7a_fs_storage_t prop, d7a_fs_perm_t perm, uint32_t size, uint32_t alloc, uint8_t action_file, uint8_t interface) |
| Jeej | 43:28202405094d | 130 | { |
| Jeej | 45:b85384e7d825 | 131 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 132 | |
| Jeej | 45:b85384e7d825 | 133 | d7a_errors_t err; |
| Jeej | 45:b85384e7d825 | 134 | |
| Jeej | 45:b85384e7d825 | 135 | DPRINT("Create %d.\r\n", file_id); |
| Jeej | 45:b85384e7d825 | 136 | |
| Jeej | 43:28202405094d | 137 | register_file_param_t file_infos = { |
| Jeej | 43:28202405094d | 138 | .fid = file_id, |
| Jeej | 45:b85384e7d825 | 139 | .type = RAM, |
| Jeej | 43:28202405094d | 140 | .afid = action_file, |
| Jeej | 43:28202405094d | 141 | .ifid = interface, |
| Jeej | 45:b85384e7d825 | 142 | .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0), |
| Jeej | 43:28202405094d | 143 | .perm = (uint8_t)perm, |
| Jeej | 43:28202405094d | 144 | .size = size, |
| Jeej | 43:28202405094d | 145 | .alloc = alloc, |
| Jeej | 43:28202405094d | 146 | }; |
| Jeej | 43:28202405094d | 147 | |
| Jeej | 45:b85384e7d825 | 148 | err = d7a_modem_register(&file_infos); |
| Jeej | 45:b85384e7d825 | 149 | |
| Jeej | 45:b85384e7d825 | 150 | DPRINT("Create %d Done. err %d\r\n", file_id, err); |
| Jeej | 45:b85384e7d825 | 151 | |
| Jeej | 45:b85384e7d825 | 152 | return err; |
| Jeej | 43:28202405094d | 153 | } |
| Jeej | 43:28202405094d | 154 | |
| Jeej | 43:28202405094d | 155 | //====================================================================== |
| Jeej | 43:28202405094d | 156 | // d7a_declare |
| Jeej | 43:28202405094d | 157 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 158 | /// @brief Declare a file stocked on the host to the modem (need to have implemented the fs_callbacks) |
| Jeej | 43:28202405094d | 159 | /// @param uint8_t File ID of file to declare |
| Jeej | 43:28202405094d | 160 | /// @param d7a_fs_storage_t Type of file |
| Jeej | 43:28202405094d | 161 | /// @param d7a_fs_perm_t Access permissions |
| Jeej | 43:28202405094d | 162 | /// @param uint32_t Length of the created file |
| Jeej | 43:28202405094d | 163 | /// @param uint32_t Maximum size of the file |
| Jeej | 43:28202405094d | 164 | /// @param uint8_t File ID to an eventual Action file |
| Jeej | 43:28202405094d | 165 | /// @param uint8_t File ID to an eventual Interface file |
| Jeej | 45:b85384e7d825 | 166 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 167 | //====================================================================== |
| Jeej | 45:b85384e7d825 | 168 | d7a_errors_t d7a_declare(const uint8_t file_id, d7a_fs_storage_t prop, d7a_fs_perm_t perm, uint32_t length, uint32_t alloc, uint8_t action_file, uint8_t interface) |
| Jeej | 43:28202405094d | 169 | { |
| Jeej | 45:b85384e7d825 | 170 | FPRINT("\r\n"); |
| Jeej | 49:81d5bddb02f0 | 171 | |
| Jeej | 46:665391110051 | 172 | d7a_errors_t err; |
| Jeej | 46:665391110051 | 173 | |
| Jeej | 45:b85384e7d825 | 174 | DPRINT("Declare %d.\r\n", file_id); |
| Jeej | 45:b85384e7d825 | 175 | |
| Jeej | 49:81d5bddb02f0 | 176 | ASSERT(g_local_fs, "You cannot delare a file is the write_file/read_file callbacks are not specified\r\n"); |
| Jeej | 49:81d5bddb02f0 | 177 | |
| Jeej | 43:28202405094d | 178 | register_file_param_t file_infos = { |
| Jeej | 43:28202405094d | 179 | .fid = file_id, |
| Jeej | 45:b85384e7d825 | 180 | .type = HOST+RAM, |
| Jeej | 43:28202405094d | 181 | .afid = action_file, |
| Jeej | 43:28202405094d | 182 | .ifid = interface, |
| Jeej | 45:b85384e7d825 | 183 | .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0), |
| Jeej | 43:28202405094d | 184 | .perm = (uint8_t)perm, |
| Jeej | 43:28202405094d | 185 | .size = length, |
| Jeej | 43:28202405094d | 186 | .alloc = alloc, |
| Jeej | 43:28202405094d | 187 | }; |
| Jeej | 43:28202405094d | 188 | |
| Jeej | 46:665391110051 | 189 | err = d7a_modem_register(&file_infos); |
| Jeej | 45:b85384e7d825 | 190 | |
| Jeej | 45:b85384e7d825 | 191 | DPRINT("Declare %d Done\r\n", file_id); |
| Jeej | 45:b85384e7d825 | 192 | |
| Jeej | 46:665391110051 | 193 | return err; |
| Jeej | 43:28202405094d | 194 | } |
| Jeej | 43:28202405094d | 195 | |
| Jeej | 43:28202405094d | 196 | //====================================================================== |
| Jeej | 43:28202405094d | 197 | // d7a_read |
| Jeej | 43:28202405094d | 198 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 199 | /// @brief Read data from a file |
| Jeej | 43:28202405094d | 200 | /// @param uint8_t File ID of file to read |
| Jeej | 43:28202405094d | 201 | /// @param uint32_t Offset from which to start reading |
| Jeej | 43:28202405094d | 202 | /// @param uint32_t Size of data to read |
| Jeej | 43:28202405094d | 203 | /// @param uint8_t* Buffer to retrieve data |
| Jeej | 46:665391110051 | 204 | /// @param d7a_addressee_t* Addressee to an eventual distant device |
| Jeej | 46:665391110051 | 205 | /// @param alp_rpol_t Index to the retry policy to use |
| Jeej | 45:b85384e7d825 | 206 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 207 | //====================================================================== |
| Jeej | 46:665391110051 | 208 | d7a_errors_t d7a_read(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* buf, d7a_addressee_t* addressee, alp_rpol_t retry) |
| Jeej | 43:28202405094d | 209 | { |
| Jeej | 45:b85384e7d825 | 210 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 211 | |
| Jeej | 46:665391110051 | 212 | d7a_errors_t err; |
| Jeej | 46:665391110051 | 213 | |
| Jeej | 46:665391110051 | 214 | PRINT("Read %d.\r\n", file_id); |
| Jeej | 46:665391110051 | 215 | |
| Jeej | 46:665391110051 | 216 | err = d7a_alp_read_file(file_id, offset, size, buf, addressee, retry); |
| Jeej | 46:665391110051 | 217 | |
| Jeej | 46:665391110051 | 218 | PRINT("Read %d Done. err %d\r\n", file_id, err); |
| Jeej | 45:b85384e7d825 | 219 | |
| Jeej | 46:665391110051 | 220 | return err; |
| Jeej | 46:665391110051 | 221 | } |
| Jeej | 46:665391110051 | 222 | |
| Jeej | 46:665391110051 | 223 | //====================================================================== |
| Jeej | 46:665391110051 | 224 | // d7a_write |
| Jeej | 46:665391110051 | 225 | //---------------------------------------------------------------------- |
| Jeej | 46:665391110051 | 226 | /// @brief Write data to a file |
| Jeej | 46:665391110051 | 227 | /// @param uint8_t File ID of file to write |
| Jeej | 46:665391110051 | 228 | /// @param uint32_t Offset from which to start writing |
| Jeej | 46:665391110051 | 229 | /// @param uint32_t Size of data to write |
| Jeej | 46:665391110051 | 230 | /// @param uint8_t* Buffer of the data to write |
| Jeej | 46:665391110051 | 231 | /// @param d7a_addressee_t* Addressee to an eventual distant device |
| Jeej | 46:665391110051 | 232 | /// @param alp_rpol_t Index to the retry policy to use |
| Jeej | 46:665391110051 | 233 | /// @return d7a_errors_t Error code |
| Jeej | 46:665391110051 | 234 | //====================================================================== |
| Jeej | 46:665391110051 | 235 | d7a_errors_t d7a_write(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* const buf, d7a_addressee_t* addressee, alp_rpol_t retry, bool resp) |
| Jeej | 46:665391110051 | 236 | { |
| Jeej | 46:665391110051 | 237 | FPRINT("\r\n"); |
| Jeej | 46:665391110051 | 238 | |
| Jeej | 46:665391110051 | 239 | d7a_errors_t err; |
| Jeej | 46:665391110051 | 240 | |
| Jeej | 46:665391110051 | 241 | DPRINT("Write %d.\r\n", file_id); |
| Jeej | 46:665391110051 | 242 | |
| Jeej | 46:665391110051 | 243 | err = d7a_alp_write_file(file_id, offset, size, buf, addressee, retry, resp); |
| Jeej | 46:665391110051 | 244 | |
| Jeej | 46:665391110051 | 245 | DPRINT("Write %d Done. err %d\r\n", file_id, err); |
| Jeej | 46:665391110051 | 246 | |
| Jeej | 46:665391110051 | 247 | return err; |
| Jeej | 43:28202405094d | 248 | } |
| Jeej | 43:28202405094d | 249 | |
| Jeej | 43:28202405094d | 250 | //====================================================================== |
| Jeej | 43:28202405094d | 251 | // d7a_write |
| Jeej | 43:28202405094d | 252 | //---------------------------------------------------------------------- |
| Jeej | 43:28202405094d | 253 | /// @brief Write data to a file |
| Jeej | 43:28202405094d | 254 | /// @param uint8_t File ID of file to write |
| Jeej | 43:28202405094d | 255 | /// @param uint32_t Offset from which to start writing |
| Jeej | 43:28202405094d | 256 | /// @param uint32_t Size of data to write |
| Jeej | 43:28202405094d | 257 | /// @param uint8_t* Buffer of the data to write |
| Jeej | 45:b85384e7d825 | 258 | /// @return d7a_errors_t Error code |
| Jeej | 43:28202405094d | 259 | //====================================================================== |
| Jeej | 46:665391110051 | 260 | d7a_errors_t d7a_notify(const uint8_t file_id, const uint32_t offset, const uint32_t size) |
| Jeej | 43:28202405094d | 261 | { |
| Jeej | 45:b85384e7d825 | 262 | FPRINT("\r\n"); |
| Jeej | 45:b85384e7d825 | 263 | |
| Jeej | 46:665391110051 | 264 | d7a_errors_t err; |
| Jeej | 46:665391110051 | 265 | |
| Jeej | 46:665391110051 | 266 | DPRINT("Notify %d.\r\n", file_id); |
| Jeej | 45:b85384e7d825 | 267 | |
| Jeej | 46:665391110051 | 268 | notify_file_param_t notif = { |
| Jeej | 46:665391110051 | 269 | .bf.fid = file_id, |
| Jeej | 46:665391110051 | 270 | .bf.offset = offset, |
| Jeej | 46:665391110051 | 271 | .bf.size = size |
| Jeej | 46:665391110051 | 272 | }; |
| Jeej | 46:665391110051 | 273 | |
| Jeej | 46:665391110051 | 274 | err = d7a_modem_notify(¬if); |
| Jeej | 46:665391110051 | 275 | |
| Jeej | 46:665391110051 | 276 | DPRINT("Notify %d Done. err %d\r\n", file_id, err); |
| Jeej | 46:665391110051 | 277 | |
| Jeej | 46:665391110051 | 278 | return err; |
| Jeej | 50:30440c9aeb7c | 279 | } |
| Jeej | 50:30440c9aeb7c | 280 | |
| Jeej | 50:30440c9aeb7c | 281 | |
| Jeej | 50:30440c9aeb7c | 282 | //====================================================================== |
| Jeej | 50:30440c9aeb7c | 283 | // d7a_modem_print_infos |
| Jeej | 50:30440c9aeb7c | 284 | //---------------------------------------------------------------------- |
| Jeej | 50:30440c9aeb7c | 285 | /// @brief Prints the modem infos |
| Jeej | 50:30440c9aeb7c | 286 | //====================================================================== |
| Jeej | 50:30440c9aeb7c | 287 | void d7a_modem_print_infos(void) |
| Jeej | 50:30440c9aeb7c | 288 | { |
| Jeej | 50:30440c9aeb7c | 289 | uint8_t uid[8]; |
| Jeej | 50:30440c9aeb7c | 290 | d7a_revision_t rev; |
| Jeej | 50:30440c9aeb7c | 291 | |
| Jeej | 50:30440c9aeb7c | 292 | ASSERT(d7a_read(0, 0, 8, uid) >= D7A_ERR_NONE, "Failed to read UID file\r\n"); |
| Jeej | 50:30440c9aeb7c | 293 | ASSERT(d7a_read(2, 0, sizeof(d7a_revision_t), (uint8_t*)&rev) >= D7A_ERR_NONE, "Failed to read REV file\r\n"); |
| Jeej | 50:30440c9aeb7c | 294 | |
| Jeej | 50:30440c9aeb7c | 295 | PRINT("------------ D7A Modem infos ------------\r\n"); |
| Jeej | 50:30440c9aeb7c | 296 | PRINT_DATA("| UID: ", "%02X", uid, 8, " |\r\n"); |
| Jeej | 50:30440c9aeb7c | 297 | PRINT("| Manufacturer ID: %08X |\r\n", rev.manufacturer_id); |
| Jeej | 50:30440c9aeb7c | 298 | PRINT("| Device ID: %08X |\r\n", rev.device_id); |
| Jeej | 50:30440c9aeb7c | 299 | PRINT("| Hardware version: %08X |\r\n", rev.hw_version); |
| Jeej | 50:30440c9aeb7c | 300 | PRINT("| Firmware version: %d-%d.%d.%d-%08x \t|\r\n", rev.fw_version.id, rev.fw_version.major, rev.fw_version.minor, rev.fw_version.patch, rev.fw_version.hash); |
| Jeej | 50:30440c9aeb7c | 301 | PRINT("| File system CRC: 0x%08x |\r\n", rev.fs_crc); |
| Jeej | 50:30440c9aeb7c | 302 | PRINT("-----------------------------------------\r\n"); |
| Jeej | 50:30440c9aeb7c | 303 | |
| Jeej | 43:28202405094d | 304 | } |
