Helper library to use modem_ref driver.

Dependencies:   WizziCom WizziDebug ram_fs modem_ref

Dependents:   D7A_Localisation D7A_1x_demo_send_file_data_and_forget D7A_1x_demo_CodeUpgradeProtocol D7A_1x_demo_LoRaWAN ... more

Committer:
Jeej
Date:
Tue Feb 16 09:30:27 2021 +0000
Revision:
70:753b602bd7bd
Parent:
69:8f2fe2426ef9
Child:
71:b5c584f706ee
Sanity commit. Only warn when unexpected tag.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 69:8f2fe2426ef9 1
Jeej 69:8f2fe2426ef9 2 #include "mbed.h"
Jeej 68:b2dd7309da44 3 #include "modem_d7a.h"
Jeej 68:b2dd7309da44 4
Jeej 68:b2dd7309da44 5 #if 0
Jeej 69:8f2fe2426ef9 6 #define HELPER_PRINT(...) PRINT(__VA_ARGS__)
Jeej 68:b2dd7309da44 7 #else
Jeej 69:8f2fe2426ef9 8 #define HELPER_PRINT(...);
Jeej 68:b2dd7309da44 9 #endif
Jeej 68:b2dd7309da44 10
Jeej 68:b2dd7309da44 11 #define MODEM_VERSION_MAJOR 5
Jeej 68:b2dd7309da44 12 #define MODEM_VERSION_MINOR 6
Jeej 68:b2dd7309da44 13 #define MODEM_VERSION_PATCH 0
Jeej 68:b2dd7309da44 14 #define MODEM_DEVICE_ID 0x00001001
Jeej 68:b2dd7309da44 15
Jeej 69:8f2fe2426ef9 16 Semaphore g_s[MAX_USER_NB];
Jeej 68:b2dd7309da44 17
Jeej 68:b2dd7309da44 18 static WizziCom* g_modem_com;
Jeej 68:b2dd7309da44 19
Jeej 68:b2dd7309da44 20 // Callback for id User
Jeej 68:b2dd7309da44 21 static void modem_cb(uint8_t terminal, int8_t err, uint8_t id)
Jeej 68:b2dd7309da44 22 {
Jeej 68:b2dd7309da44 23 (void)id;
Jeej 68:b2dd7309da44 24
Jeej 70:753b602bd7bd 25 //PRINT("CB EOP:%d ERR:%d ID:%d\n", terminal, err, id);
Jeej 69:8f2fe2426ef9 26
Jeej 68:b2dd7309da44 27 if (terminal)
Jeej 68:b2dd7309da44 28 {
Jeej 69:8f2fe2426ef9 29 g_s[id].release();
Jeej 68:b2dd7309da44 30 }
Jeej 68:b2dd7309da44 31 }
Jeej 68:b2dd7309da44 32
Jeej 68:b2dd7309da44 33 static int g_boot_nb;
Jeej 68:b2dd7309da44 34 static int g_read_nb;
Jeej 68:b2dd7309da44 35 static int g_swr_nb;
Jeej 68:b2dd7309da44 36 static int g_hwr_nb;
Jeej 68:b2dd7309da44 37 static int g_pwc_nb;
Jeej 68:b2dd7309da44 38 static int g_fail_nb;
Jeej 68:b2dd7309da44 39
Jeej 68:b2dd7309da44 40 int modem_wait_resp(Semaphore* s, uint32_t timeout, char* function, uint32_t line)
Jeej 68:b2dd7309da44 41 {
Jeej 68:b2dd7309da44 42 if (!s->try_acquire_for(timeout))
Jeej 68:b2dd7309da44 43 {
Jeej 68:b2dd7309da44 44 PRINT("%s:%d: Modem resp timeout after %d ms\n", function, line, timeout);
Jeej 68:b2dd7309da44 45 return -1;
Jeej 68:b2dd7309da44 46 }
Jeej 69:8f2fe2426ef9 47
Jeej 68:b2dd7309da44 48 return 0;
Jeej 68:b2dd7309da44 49 }
Jeej 68:b2dd7309da44 50
Jeej 68:b2dd7309da44 51 int my_alp_itf_d7a_cfg_size(d7a_sp_cfg_t* cfg)
Jeej 68:b2dd7309da44 52 {
Jeej 68:b2dd7309da44 53 int size = sizeof(d7a_sp_cfg_t) - sizeof(d7a_addressee_t);
Jeej 68:b2dd7309da44 54 size += D7A_ADDR_LEN(cfg->addressee.ctrl);
Jeej 68:b2dd7309da44 55 return size;
Jeej 68:b2dd7309da44 56 }
Jeej 68:b2dd7309da44 57
Jeej 68:b2dd7309da44 58 // ============================================================}}}
Jeej 68:b2dd7309da44 59
Jeej 68:b2dd7309da44 60 // Serial adapters to WizziLab's own architecture
Jeej 68:b2dd7309da44 61 // ============================================================{{{
Jeej 68:b2dd7309da44 62
Jeej 68:b2dd7309da44 63 static void modem_serial_input(WizziCom* com, WizziComPacket_t* pkt)
Jeej 68:b2dd7309da44 64 {
Jeej 68:b2dd7309da44 65 modem_ref_input(wizzicom_type_to_flow(pkt->type), pkt->data, pkt->length);
Jeej 68:b2dd7309da44 66 }
Jeej 68:b2dd7309da44 67
Jeej 69:8f2fe2426ef9 68 static int modem_serial_send(uint8_t type, uint8_t* data, uint8_t size)
Jeej 68:b2dd7309da44 69 {
Jeej 69:8f2fe2426ef9 70 // Retrieve Flow ID from header and send packet
Jeej 69:8f2fe2426ef9 71 g_modem_com->send((WizziComPacketType)type, size, data);
Jeej 68:b2dd7309da44 72
Jeej 69:8f2fe2426ef9 73 return size;
Jeej 68:b2dd7309da44 74 }
Jeej 68:b2dd7309da44 75
Jeej 68:b2dd7309da44 76 Semaphore boot(0);
Jeej 68:b2dd7309da44 77 void my_startup_boot(u8 cause, u16 number)
Jeej 68:b2dd7309da44 78 {
Jeej 68:b2dd7309da44 79 HELPER_PRINT("Modem BOOT[%c] #%d\r\n", cause, number);
Jeej 68:b2dd7309da44 80 boot.release();
Jeej 68:b2dd7309da44 81 }
Jeej 68:b2dd7309da44 82
Jeej 68:b2dd7309da44 83 int modem_open(modem_ref_callbacks_t* callbacks)
Jeej 68:b2dd7309da44 84 {
Jeej 68:b2dd7309da44 85 static union {
Jeej 68:b2dd7309da44 86 uint8_t b[8];
Jeej 68:b2dd7309da44 87 uint32_t w[2];
Jeej 68:b2dd7309da44 88 } uid;
Jeej 68:b2dd7309da44 89 revision_t rev;
Jeej 68:b2dd7309da44 90 int err;
Jeej 68:b2dd7309da44 91
Jeej 69:8f2fe2426ef9 92 //for (int i = 0; i < MAX_USER_NB; i++)
Jeej 69:8f2fe2426ef9 93 //{
Jeej 69:8f2fe2426ef9 94 //g_s[i] = Semaphore(0);
Jeej 69:8f2fe2426ef9 95 //}
Jeej 69:8f2fe2426ef9 96
Jeej 68:b2dd7309da44 97 g_boot_nb++;
Jeej 69:8f2fe2426ef9 98
Jeej 68:b2dd7309da44 99 // Override boot callback to catch the first boot message
Jeej 68:b2dd7309da44 100 modem_ref_callbacks_t boot_callbacks = {
Jeej 68:b2dd7309da44 101 .read = NULL,
Jeej 68:b2dd7309da44 102 .write = NULL,
Jeej 68:b2dd7309da44 103 .read_fprop = NULL,
Jeej 68:b2dd7309da44 104 .flush = NULL,
Jeej 68:b2dd7309da44 105 .remove = NULL,
Jeej 68:b2dd7309da44 106 .udata = NULL,
Jeej 68:b2dd7309da44 107 .lqual = NULL,
Jeej 68:b2dd7309da44 108 .ldown = NULL,
Jeej 68:b2dd7309da44 109 .reset = NULL,
Jeej 68:b2dd7309da44 110 .boot = my_startup_boot,
Jeej 68:b2dd7309da44 111 .busy = NULL,
Jeej 68:b2dd7309da44 112 .itf_busy = NULL,
Jeej 68:b2dd7309da44 113 };
Jeej 69:8f2fe2426ef9 114
Jeej 68:b2dd7309da44 115 // Open modem Com port
Jeej 68:b2dd7309da44 116 g_modem_com = new WizziCom(MODEM_PIN_RX, MODEM_PIN_TX, MODEM_PIN_IRQ_IN, MODEM_PIN_IRQ_OUT);
Jeej 69:8f2fe2426ef9 117
Jeej 68:b2dd7309da44 118 // open with user callbacks
Jeej 68:b2dd7309da44 119 modem_ref_open(modem_serial_send, callbacks);
Jeej 69:8f2fe2426ef9 120
Jeej 68:b2dd7309da44 121 // Redirect All Port traffic to modem_serial_input
Jeej 68:b2dd7309da44 122 g_modem_com->attach(modem_serial_input, WizziComPacketUntreated);
Jeej 68:b2dd7309da44 123
Jeej 68:b2dd7309da44 124 // Wait for modem power up
Jeej 68:b2dd7309da44 125 ThisThread::sleep_for(100);
Jeej 69:8f2fe2426ef9 126
Jeej 68:b2dd7309da44 127 // Try reading UID
Jeej 68:b2dd7309da44 128 err = modem_read_file(D7A_FID_UID, uid.b, 0, 8);
Jeej 69:8f2fe2426ef9 129
Jeej 68:b2dd7309da44 130 if (ALP_ERR_NONE > err)
Jeej 68:b2dd7309da44 131 {
Jeej 68:b2dd7309da44 132 PRINT("Trying software reset...\n");
Jeej 69:8f2fe2426ef9 133
Jeej 68:b2dd7309da44 134 // Open driver to catch boot packet
Jeej 68:b2dd7309da44 135 modem_ref_close();
Jeej 68:b2dd7309da44 136 modem_ref_open(NULL, &boot_callbacks);
Jeej 69:8f2fe2426ef9 137
Jeej 68:b2dd7309da44 138 // Try software reset
Jeej 68:b2dd7309da44 139 g_modem_com->send(WizziComPacketSysReset, 0, NULL);
Jeej 69:8f2fe2426ef9 140
Jeej 68:b2dd7309da44 141 if (!boot.try_acquire_for(1000))
Jeej 68:b2dd7309da44 142 {
Jeej 68:b2dd7309da44 143 PRINT("Trying hardware reset...\n");
Jeej 69:8f2fe2426ef9 144
Jeej 68:b2dd7309da44 145 // Assert reset pin
Jeej 68:b2dd7309da44 146 DigitalOut reset_low(MODEM_PIN_RESET, 0);
Jeej 68:b2dd7309da44 147 ThisThread::sleep_for(100);
Jeej 69:8f2fe2426ef9 148
Jeej 68:b2dd7309da44 149 // Release reset pin
Jeej 68:b2dd7309da44 150 DigitalIn reset_release(MODEM_PIN_RESET);
Jeej 69:8f2fe2426ef9 151
Jeej 68:b2dd7309da44 152 if (!boot.try_acquire_for(1000))
Jeej 68:b2dd7309da44 153 {
Jeej 68:b2dd7309da44 154 // Modem not responding!
Jeej 68:b2dd7309da44 155 PRINT("Trying power cycle.\n");
Jeej 69:8f2fe2426ef9 156
Jeej 68:b2dd7309da44 157 // Assert power pin
Jeej 68:b2dd7309da44 158 DigitalOut power_high(D12, 1);
Jeej 68:b2dd7309da44 159 ThisThread::sleep_for(1000);
Jeej 69:8f2fe2426ef9 160
Jeej 68:b2dd7309da44 161 // Release reset pin
Jeej 68:b2dd7309da44 162 DigitalIn power_release(D12);
Jeej 69:8f2fe2426ef9 163
Jeej 68:b2dd7309da44 164 if (!boot.try_acquire_for(1000))
Jeej 68:b2dd7309da44 165 {
Jeej 68:b2dd7309da44 166 // Modem not responding!
Jeej 68:b2dd7309da44 167 g_fail_nb++;
Jeej 68:b2dd7309da44 168 PRINT("Failed to open modem.\n");
Jeej 68:b2dd7309da44 169 return -1;
Jeej 68:b2dd7309da44 170 }
Jeej 68:b2dd7309da44 171 else
Jeej 68:b2dd7309da44 172 {
Jeej 68:b2dd7309da44 173 g_pwc_nb++;
Jeej 68:b2dd7309da44 174 PRINT("Modem is up after power cycle.\n");
Jeej 68:b2dd7309da44 175 }
Jeej 68:b2dd7309da44 176 }
Jeej 68:b2dd7309da44 177 else
Jeej 68:b2dd7309da44 178 {
Jeej 68:b2dd7309da44 179 g_hwr_nb++;
Jeej 68:b2dd7309da44 180 PRINT("Modem is up after hardware reset.\n");
Jeej 68:b2dd7309da44 181 }
Jeej 68:b2dd7309da44 182 }
Jeej 68:b2dd7309da44 183 else
Jeej 68:b2dd7309da44 184 {
Jeej 68:b2dd7309da44 185 g_swr_nb++;
Jeej 68:b2dd7309da44 186 PRINT("Modem is up after software reset.\n");
Jeej 68:b2dd7309da44 187 }
Jeej 69:8f2fe2426ef9 188
Jeej 69:8f2fe2426ef9 189 // Re-open with user callbacks
Jeej 69:8f2fe2426ef9 190 modem_ref_close();
Jeej 69:8f2fe2426ef9 191 modem_ref_open(modem_serial_send, callbacks);
Jeej 68:b2dd7309da44 192 }
Jeej 68:b2dd7309da44 193 else
Jeej 68:b2dd7309da44 194 {
Jeej 68:b2dd7309da44 195 g_read_nb++;
Jeej 68:b2dd7309da44 196 PRINT("Modem is up.\n");
Jeej 68:b2dd7309da44 197 }
Jeej 69:8f2fe2426ef9 198
Jeej 68:b2dd7309da44 199 PRINT("Boot stats: boot:%d read:%d swr:%d hwr:%d pwc:%d fail:%d\n", g_boot_nb, g_read_nb, g_swr_nb, g_hwr_nb, g_pwc_nb, g_fail_nb);
Jeej 69:8f2fe2426ef9 200
Jeej 69:8f2fe2426ef9 201 ThisThread::sleep_for(100);
Jeej 69:8f2fe2426ef9 202
Jeej 68:b2dd7309da44 203 modem_read_file(D7A_FID_UID, uid.b, 0, 8);
Jeej 68:b2dd7309da44 204 modem_read_file(D7A_FID_FIRMWARE_VERSION, (uint8_t*)&rev, 0, sizeof(revision_t));
Jeej 69:8f2fe2426ef9 205
Jeej 68:b2dd7309da44 206 PRINT("------------ D7A Modem infos ------------\r\n");
Jeej 68:b2dd7309da44 207 PRINT_DATA(" - UID: ", "%02X", uid.b, 8, "\r\n");
Jeej 68:b2dd7309da44 208 PRINT(" - Manufacturer ID: %08X\r\n", rev.manufacturer_id);
Jeej 68:b2dd7309da44 209 PRINT(" - Device ID: %08X\r\n", rev.device_id);
Jeej 68:b2dd7309da44 210 PRINT(" - Hardware version: %08X\r\n", rev.hw_version);
Jeej 68:b2dd7309da44 211 PRINT(" - Firmware version: v%d.%d.%d [%02X]\r\n", rev.fw_version.major, rev.fw_version.minor, rev.fw_version.patch, rev.fw_version.id);
Jeej 68:b2dd7309da44 212 PRINT(" - CUP max size: %d\r\n", rev.cup_max_size);
Jeej 68:b2dd7309da44 213 PRINT("-----------------------------------------\r\n");
Jeej 69:8f2fe2426ef9 214 FLUSH();
Jeej 69:8f2fe2426ef9 215
Jeej 68:b2dd7309da44 216 if (MODEM_DEVICE_ID == rev.device_id)
Jeej 68:b2dd7309da44 217 {
Jeej 68:b2dd7309da44 218 // Check version
Jeej 68:b2dd7309da44 219 uint32_t rev_sum1 = (rev.fw_version.major << 24) | (rev.fw_version.minor << 16) | rev.fw_version.patch;
Jeej 68:b2dd7309da44 220 uint32_t rev_sum2 = (MODEM_VERSION_MAJOR << 24) | (MODEM_VERSION_MINOR << 16) | MODEM_VERSION_PATCH;
Jeej 68:b2dd7309da44 221 if (rev_sum1 < rev_sum2)
Jeej 68:b2dd7309da44 222 {
Jeej 68:b2dd7309da44 223 PRINT("\r\nYou need a modem at version %d.%d.%d or above to use this Driver.\r\n"
Jeej 69:8f2fe2426ef9 224 "You can:\r\n"
Jeej 69:8f2fe2426ef9 225 " - Check modem updates on the Dash7Board:\r\n"
Jeej 69:8f2fe2426ef9 226 " Go to your site's version manager.\r\n"
Jeej 69:8f2fe2426ef9 227 " - Check modem updates by importing:\r\n"
Jeej 69:8f2fe2426ef9 228 " https://developer.mbed.org/teams/WizziLab/code/D7A_WM_Updater\r\n"
Jeej 69:8f2fe2426ef9 229 " - Choose the right 'modem_ref_helper' revision.\r\n"
Jeej 69:8f2fe2426ef9 230 " Right click on modem_ref_helper -> Revision.\r\n"
Jeej 69:8f2fe2426ef9 231 , MODEM_VERSION_MAJOR, MODEM_VERSION_MINOR, MODEM_VERSION_PATCH);
Jeej 69:8f2fe2426ef9 232
Jeej 68:b2dd7309da44 233 ThisThread::sleep_for(osWaitForever);
Jeej 68:b2dd7309da44 234 }
Jeej 68:b2dd7309da44 235 }
Jeej 68:b2dd7309da44 236 else
Jeej 68:b2dd7309da44 237 {
Jeej 68:b2dd7309da44 238 // Do not check version
Jeej 68:b2dd7309da44 239 PRINT("/!\\ Not a modem firmware /!\\\r\n");
Jeej 68:b2dd7309da44 240 }
Jeej 69:8f2fe2426ef9 241
Jeej 68:b2dd7309da44 242 return 0;
Jeej 68:b2dd7309da44 243 }
Jeej 68:b2dd7309da44 244
Jeej 68:b2dd7309da44 245 int modem_close(void)
Jeej 68:b2dd7309da44 246 {
Jeej 68:b2dd7309da44 247 modem_ref_close();
Jeej 68:b2dd7309da44 248 delete g_modem_com;
Jeej 69:8f2fe2426ef9 249
Jeej 68:b2dd7309da44 250 return 0;
Jeej 68:b2dd7309da44 251 }
Jeej 68:b2dd7309da44 252
Jeej 69:8f2fe2426ef9 253 static int _modem_d7a_send(void* itf, alp_payload_t* alp, alp_payload_t** alp_rsp, uint32_t timeout)
Jeej 68:b2dd7309da44 254 {
Jeej 69:8f2fe2426ef9 255 u8 id = modem_ref_get_id(modem_cb);
Jeej 68:b2dd7309da44 256 int err = ALP_ERR_UNKNOWN;
Jeej 70:753b602bd7bd 257
Jeej 70:753b602bd7bd 258 // Make sure Semaphore is taken
Jeej 70:753b602bd7bd 259 g_s[id].try_acquire();
Jeej 69:8f2fe2426ef9 260
Jeej 68:b2dd7309da44 261 // Setup LoRaWAN URCs
Jeej 69:8f2fe2426ef9 262 modem_ref_alp(itf, alp, alp_rsp, id);
Jeej 69:8f2fe2426ef9 263 if (!g_s[id].try_acquire_for(timeout))
Jeej 69:8f2fe2426ef9 264 {
Jeej 69:8f2fe2426ef9 265 err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 266 }
Jeej 69:8f2fe2426ef9 267 else
Jeej 69:8f2fe2426ef9 268 {
Jeej 69:8f2fe2426ef9 269 err = ALP_ERR_NONE;
Jeej 69:8f2fe2426ef9 270 }
Jeej 69:8f2fe2426ef9 271
Jeej 68:b2dd7309da44 272 modem_ref_free_id(id);
Jeej 69:8f2fe2426ef9 273
Jeej 68:b2dd7309da44 274 return err;
Jeej 68:b2dd7309da44 275 }
Jeej 68:b2dd7309da44 276
Jeej 69:8f2fe2426ef9 277 static int _modem_get_istatus(alp_payload_t* alp, void* istatus)
Jeej 69:8f2fe2426ef9 278 {
Jeej 69:8f2fe2426ef9 279 alp_payload_t* alp_tmp = alp_payload_get(alp, ALP_OPCODE_RSP_ISTATUS);
Jeej 69:8f2fe2426ef9 280
Jeej 69:8f2fe2426ef9 281 if (alp_tmp)
Jeej 69:8f2fe2426ef9 282 {
Jeej 69:8f2fe2426ef9 283 alp_parsed_chunk_t r;
Jeej 69:8f2fe2426ef9 284 u8* p = alp_tmp->d;
Jeej 69:8f2fe2426ef9 285
Jeej 69:8f2fe2426ef9 286 alp_parse_chunk(&p, &r);
Jeej 69:8f2fe2426ef9 287 memcpy(istatus, r.data, r.meta.itf.length);
Jeej 69:8f2fe2426ef9 288
Jeej 69:8f2fe2426ef9 289 return ALP_ERR_NONE;
Jeej 69:8f2fe2426ef9 290 }
Jeej 69:8f2fe2426ef9 291 else
Jeej 69:8f2fe2426ef9 292 {
Jeej 69:8f2fe2426ef9 293 PRINT("No metadata\n");
Jeej 69:8f2fe2426ef9 294 }
Jeej 69:8f2fe2426ef9 295
Jeej 69:8f2fe2426ef9 296 return ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 297 }
Jeej 69:8f2fe2426ef9 298
Jeej 69:8f2fe2426ef9 299 int modem_raw_alp(alp_payload_t* alp, alp_payload_t** alp_rsp, uint32_t timeout)
Jeej 68:b2dd7309da44 300 {
Jeej 69:8f2fe2426ef9 301 return _modem_d7a_send(NULL, alp, alp_rsp, timeout);
Jeej 69:8f2fe2426ef9 302 }
Jeej 69:8f2fe2426ef9 303
Jeej 69:8f2fe2426ef9 304 int modem_remote_raw_alp(void* itf, alp_payload_t* alp, alp_payload_t** alp_rsp, uint32_t timeout)
Jeej 69:8f2fe2426ef9 305 {
Jeej 69:8f2fe2426ef9 306 return _modem_d7a_send(itf, alp, alp_rsp, timeout);
Jeej 69:8f2fe2426ef9 307 }
Jeej 69:8f2fe2426ef9 308
Jeej 69:8f2fe2426ef9 309 int modem_send_alp(void* itf, void *istatus, alp_payload_t* alp, uint32_t timeout)
Jeej 69:8f2fe2426ef9 310 {
Jeej 68:b2dd7309da44 311 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 312 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 313 alp_payload_t* alp_tmp = NULL;
Jeej 69:8f2fe2426ef9 314
Jeej 69:8f2fe2426ef9 315 err = _modem_d7a_send(NULL, alp, &alp_rsp, timeout);
Jeej 69:8f2fe2426ef9 316
Jeej 69:8f2fe2426ef9 317 do {
Jeej 69:8f2fe2426ef9 318 if (ALP_ERR_NONE > err) { PRINT("Send ALP timeout\n"); break; }
Jeej 69:8f2fe2426ef9 319
Jeej 69:8f2fe2426ef9 320 err = alp_payload_get_err(alp_rsp);
Jeej 69:8f2fe2426ef9 321
Jeej 69:8f2fe2426ef9 322 if (ALP_ERR_NONE > err) { PRINT("Send ALP err %d\n", err); break; }
Jeej 69:8f2fe2426ef9 323
Jeej 69:8f2fe2426ef9 324 if (istatus)
Jeej 69:8f2fe2426ef9 325 {
Jeej 69:8f2fe2426ef9 326 _modem_get_istatus(alp_rsp, istatus);
Jeej 69:8f2fe2426ef9 327 }
Jeej 68:b2dd7309da44 328
Jeej 69:8f2fe2426ef9 329 } while (0);
Jeej 69:8f2fe2426ef9 330
Jeej 69:8f2fe2426ef9 331 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 332 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 333
Jeej 69:8f2fe2426ef9 334 return err;
Jeej 69:8f2fe2426ef9 335 }
Jeej 69:8f2fe2426ef9 336
Jeej 69:8f2fe2426ef9 337 static int _modem_read_file(uint8_t* itf, void *istatus, uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout)
Jeej 69:8f2fe2426ef9 338 {
Jeej 69:8f2fe2426ef9 339 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 340 alp_payload_t* alp = NULL;
Jeej 69:8f2fe2426ef9 341 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 342 alp_payload_t* alp_tmp = NULL;
Jeej 69:8f2fe2426ef9 343
Jeej 69:8f2fe2426ef9 344 alp = alp_payload_f_rd_data(NULL, fid, offset, length, false);
Jeej 69:8f2fe2426ef9 345
Jeej 69:8f2fe2426ef9 346 err = _modem_d7a_send(NULL, alp, &alp_rsp, timeout);
Jeej 68:b2dd7309da44 347
Jeej 69:8f2fe2426ef9 348 do {
Jeej 69:8f2fe2426ef9 349 if (ALP_ERR_NONE > err) { PRINT("Read file timeout\n"); break; }
Jeej 69:8f2fe2426ef9 350
Jeej 69:8f2fe2426ef9 351 err = alp_payload_get_err(alp_rsp);
Jeej 69:8f2fe2426ef9 352
Jeej 69:8f2fe2426ef9 353 if (ALP_ERR_NONE > err) { PRINT("Read file err %d\n", err); break; }
Jeej 69:8f2fe2426ef9 354
Jeej 69:8f2fe2426ef9 355 alp_tmp = alp_payload_get(alp_rsp, ALP_OPCODE_RSP_F_DATA);
Jeej 69:8f2fe2426ef9 356 if (alp_tmp)
Jeej 69:8f2fe2426ef9 357 {
Jeej 69:8f2fe2426ef9 358 alp_parsed_chunk_t r;
Jeej 69:8f2fe2426ef9 359 u8* p = alp_tmp->d;
Jeej 69:8f2fe2426ef9 360
Jeej 69:8f2fe2426ef9 361 alp_parse_chunk(&p, &r);
Jeej 69:8f2fe2426ef9 362 memcpy(data, r.data, r.meta.f_data.length);
Jeej 69:8f2fe2426ef9 363 }
Jeej 69:8f2fe2426ef9 364 else
Jeej 69:8f2fe2426ef9 365 {
Jeej 69:8f2fe2426ef9 366 PRINT("Read file no payload\n");
Jeej 69:8f2fe2426ef9 367 err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 368 break;
Jeej 69:8f2fe2426ef9 369 }
Jeej 69:8f2fe2426ef9 370
Jeej 69:8f2fe2426ef9 371 if (istatus)
Jeej 69:8f2fe2426ef9 372 {
Jeej 69:8f2fe2426ef9 373 _modem_get_istatus(alp_rsp, istatus);
Jeej 69:8f2fe2426ef9 374 }
Jeej 68:b2dd7309da44 375
Jeej 69:8f2fe2426ef9 376 } while (0);
Jeej 69:8f2fe2426ef9 377
Jeej 69:8f2fe2426ef9 378 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 379 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 380
Jeej 69:8f2fe2426ef9 381 return err;
Jeej 69:8f2fe2426ef9 382 }
Jeej 69:8f2fe2426ef9 383
Jeej 69:8f2fe2426ef9 384 static int _modem_write_file(uint8_t* itf, void *istatus, uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout)
Jeej 69:8f2fe2426ef9 385 {
Jeej 69:8f2fe2426ef9 386 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 387 alp_payload_t* alp = NULL;
Jeej 69:8f2fe2426ef9 388 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 389 alp_payload_t* alp_tmp = NULL;
Jeej 69:8f2fe2426ef9 390
Jeej 69:8f2fe2426ef9 391 alp = alp_payload_f_wr_data(NULL, fid, data, offset, length, false);
Jeej 69:8f2fe2426ef9 392
Jeej 69:8f2fe2426ef9 393 err = _modem_d7a_send(NULL, alp, &alp_rsp, timeout);
Jeej 69:8f2fe2426ef9 394
Jeej 69:8f2fe2426ef9 395 do {
Jeej 69:8f2fe2426ef9 396 if (ALP_ERR_NONE > err) { PRINT("Write file timeout\n"); break; }
Jeej 69:8f2fe2426ef9 397
Jeej 69:8f2fe2426ef9 398 err = alp_payload_get_err(alp_rsp);
Jeej 69:8f2fe2426ef9 399
Jeej 69:8f2fe2426ef9 400 if (ALP_ERR_NONE > err) { PRINT("Write file err %d\n", err); break; }
Jeej 69:8f2fe2426ef9 401
Jeej 69:8f2fe2426ef9 402 if (istatus)
Jeej 69:8f2fe2426ef9 403 {
Jeej 69:8f2fe2426ef9 404 _modem_get_istatus(alp_rsp, istatus);
Jeej 69:8f2fe2426ef9 405 }
Jeej 69:8f2fe2426ef9 406
Jeej 69:8f2fe2426ef9 407 } while (0);
Jeej 69:8f2fe2426ef9 408
Jeej 69:8f2fe2426ef9 409 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 410 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 411
Jeej 68:b2dd7309da44 412 return err;
Jeej 68:b2dd7309da44 413 }
Jeej 68:b2dd7309da44 414
Jeej 68:b2dd7309da44 415 int modem_read_file(uint8_t fid, void *data, uint32_t offset, uint32_t length)
Jeej 68:b2dd7309da44 416 {
Jeej 69:8f2fe2426ef9 417 return _modem_read_file(NULL, NULL, fid, data, offset, length, MODEM_TIMEOUT);
Jeej 68:b2dd7309da44 418 }
Jeej 68:b2dd7309da44 419
Jeej 69:8f2fe2426ef9 420 int modem_remote_read_file(uint8_t* itf, void *istatus, uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout)
Jeej 68:b2dd7309da44 421 {
Jeej 69:8f2fe2426ef9 422 return _modem_read_file(itf, istatus, fid, data, offset, length, timeout);
Jeej 68:b2dd7309da44 423 }
Jeej 68:b2dd7309da44 424
Jeej 68:b2dd7309da44 425 int modem_write_file(uint8_t fid, void *data, uint32_t offset, uint32_t length)
Jeej 68:b2dd7309da44 426 {
Jeej 69:8f2fe2426ef9 427 return _modem_write_file(NULL, NULL, fid, data, offset, length, MODEM_TIMEOUT);
Jeej 68:b2dd7309da44 428 }
Jeej 68:b2dd7309da44 429
Jeej 69:8f2fe2426ef9 430 int modem_remote_write_file(uint8_t* itf, void *istatus , uint8_t fid, void *data, uint32_t offset, uint32_t length, uint32_t timeout)
Jeej 68:b2dd7309da44 431 {
Jeej 69:8f2fe2426ef9 432 return _modem_write_file(itf, istatus, fid, data, offset, length, timeout);
Jeej 68:b2dd7309da44 433 }
Jeej 68:b2dd7309da44 434
Jeej 68:b2dd7309da44 435 int modem_declare_file(uint8_t fid, alp_file_header_t* header)
Jeej 68:b2dd7309da44 436 {
Jeej 68:b2dd7309da44 437 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 438 alp_payload_t* alp = NULL;
Jeej 69:8f2fe2426ef9 439 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 440
Jeej 69:8f2fe2426ef9 441 alp = alp_payload_f_declare(NULL, fid, header);
Jeej 69:8f2fe2426ef9 442
Jeej 69:8f2fe2426ef9 443 _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT);
Jeej 69:8f2fe2426ef9 444
Jeej 69:8f2fe2426ef9 445 err = alp_payload_get_err(alp_rsp);
Jeej 68:b2dd7309da44 446
Jeej 69:8f2fe2426ef9 447 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 448 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 449
Jeej 69:8f2fe2426ef9 450 return err;
Jeej 69:8f2fe2426ef9 451 }
Jeej 69:8f2fe2426ef9 452
Jeej 69:8f2fe2426ef9 453 static int _modem_d7a_itf_enable(u8 enable)
Jeej 69:8f2fe2426ef9 454 {
Jeej 69:8f2fe2426ef9 455 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 456 alp_payload_t* alp = NULL;
Jeej 69:8f2fe2426ef9 457 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 458
Jeej 69:8f2fe2426ef9 459 alp = alp_payload_activate_itf(NULL, ALP_ITF_TYPE_D7A, 24, 0, ALP_D7A_ISTAT_RESP | ALP_D7A_ISTAT_UNS | ALP_D7A_ISTAT_EOP, enable);
Jeej 69:8f2fe2426ef9 460
Jeej 69:8f2fe2426ef9 461 _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT);
Jeej 69:8f2fe2426ef9 462
Jeej 69:8f2fe2426ef9 463 err = alp_payload_get_err(alp_rsp);
Jeej 68:b2dd7309da44 464
Jeej 69:8f2fe2426ef9 465 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 466 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 467
Jeej 68:b2dd7309da44 468 return err;
Jeej 68:b2dd7309da44 469 }
Jeej 68:b2dd7309da44 470
Jeej 68:b2dd7309da44 471 int modem_d7a_enable_itf(void)
Jeej 68:b2dd7309da44 472 {
Jeej 69:8f2fe2426ef9 473 return _modem_d7a_itf_enable(true);
Jeej 68:b2dd7309da44 474 }
Jeej 68:b2dd7309da44 475
Jeej 68:b2dd7309da44 476 int modem_d7a_disable_itf(void)
Jeej 68:b2dd7309da44 477 {
Jeej 69:8f2fe2426ef9 478 return _modem_d7a_itf_enable(false);
Jeej 69:8f2fe2426ef9 479 }
Jeej 69:8f2fe2426ef9 480
Jeej 69:8f2fe2426ef9 481 static int modem_lwan_set_urc(void)
Jeej 69:8f2fe2426ef9 482 {
Jeej 69:8f2fe2426ef9 483 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 484 alp_payload_t* alp = NULL;
Jeej 69:8f2fe2426ef9 485 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 486
Jeej 69:8f2fe2426ef9 487 alp = alp_payload_urcc_en(NULL, ALP_URC_TYPE_ITF_BUSY, FID_LWAN_ITF, 1);
Jeej 69:8f2fe2426ef9 488
Jeej 69:8f2fe2426ef9 489 _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT);
Jeej 69:8f2fe2426ef9 490
Jeej 69:8f2fe2426ef9 491 err = alp_payload_get_err(alp_rsp);
Jeej 69:8f2fe2426ef9 492
Jeej 69:8f2fe2426ef9 493 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 494 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 495
Jeej 69:8f2fe2426ef9 496 return err;
Jeej 69:8f2fe2426ef9 497 }
Jeej 69:8f2fe2426ef9 498
Jeej 69:8f2fe2426ef9 499 static int modem_lwan_enable_itf(void)
Jeej 69:8f2fe2426ef9 500 {
Jeej 69:8f2fe2426ef9 501 int err = ALP_ERR_UNKNOWN;
Jeej 69:8f2fe2426ef9 502 alp_payload_t* alp = NULL;
Jeej 69:8f2fe2426ef9 503 alp_payload_t* alp_rsp = NULL;
Jeej 69:8f2fe2426ef9 504
Jeej 69:8f2fe2426ef9 505 alp = alp_payload_activate_itf(NULL, ALP_ITF_TYPE_LWAN, 1, FID_LWAN_ITF, 0, true);
Jeej 69:8f2fe2426ef9 506
Jeej 69:8f2fe2426ef9 507 _modem_d7a_send(NULL, alp, &alp_rsp, MODEM_TIMEOUT);
Jeej 69:8f2fe2426ef9 508
Jeej 69:8f2fe2426ef9 509 err = alp_payload_get_err(alp_rsp);
Jeej 69:8f2fe2426ef9 510
Jeej 69:8f2fe2426ef9 511 alp_payload_free(alp);
Jeej 69:8f2fe2426ef9 512 alp_payload_free(alp_rsp);
Jeej 69:8f2fe2426ef9 513
Jeej 69:8f2fe2426ef9 514 return err;
Jeej 69:8f2fe2426ef9 515 }
Jeej 69:8f2fe2426ef9 516
Jeej 69:8f2fe2426ef9 517 int modem_lwan_open(modem_lwan_callbacks_t* callbacks)
Jeej 69:8f2fe2426ef9 518 {
Jeej 68:b2dd7309da44 519 int err = ALP_ERR_UNKNOWN;
Jeej 68:b2dd7309da44 520
Jeej 69:8f2fe2426ef9 521 modem_ref_set_lwan_cb(callbacks);
Jeej 68:b2dd7309da44 522
Jeej 69:8f2fe2426ef9 523 err = modem_lwan_set_urc();
Jeej 69:8f2fe2426ef9 524 if (ALP_ERR_NONE > err) { return err; }
Jeej 69:8f2fe2426ef9 525
Jeej 69:8f2fe2426ef9 526 err = modem_lwan_enable_itf();
Jeej 68:b2dd7309da44 527
Jeej 68:b2dd7309da44 528 return err;
Jeej 68:b2dd7309da44 529 }
Jeej 68:b2dd7309da44 530
Jeej 69:8f2fe2426ef9 531 int modem_lwan_set_cfg(lwan_cfg_t* cfg)
Jeej 69:8f2fe2426ef9 532 {
Jeej 69:8f2fe2426ef9 533 return modem_write_file(FID_LWAN_CFG, cfg, 0, sizeof(lwan_cfg_t));
Jeej 69:8f2fe2426ef9 534 }
Jeej 69:8f2fe2426ef9 535
Jeej 69:8f2fe2426ef9 536 int modem_lwan_set_nls(lwan_nls_t* nls)
Jeej 69:8f2fe2426ef9 537 {
Jeej 69:8f2fe2426ef9 538 return modem_write_file(FID_LWAN_NLS, nls, 0, sizeof(lwan_nls_t));
Jeej 69:8f2fe2426ef9 539 }
Jeej 69:8f2fe2426ef9 540
Jeej 69:8f2fe2426ef9 541 int modem_lwan_send(alp_payload_t* alp)
Jeej 69:8f2fe2426ef9 542 {
Jeej 69:8f2fe2426ef9 543 alp_itf_lwan_cfg_t itf = { .type = ALP_ITF_TYPE_LWAN };
Jeej 69:8f2fe2426ef9 544
Jeej 69:8f2fe2426ef9 545 return modem_remote_raw_alp((void*)&itf, alp, NULL, MODEM_TIMEOUT);
Jeej 69:8f2fe2426ef9 546 }
Jeej 69:8f2fe2426ef9 547
Jeej 69:8f2fe2426ef9 548 int modem_lwan_get_status(lwan_status_t* status)
Jeej 69:8f2fe2426ef9 549 {
Jeej 69:8f2fe2426ef9 550 return modem_read_file(FID_LWAN_STATUS, status, 0, sizeof(lwan_status_t));
Jeej 69:8f2fe2426ef9 551 }
Jeej 69:8f2fe2426ef9 552
Jeej 69:8f2fe2426ef9 553 void modem_print_error(uint8_t itf, int error)
Jeej 68:b2dd7309da44 554 {
Jeej 68:b2dd7309da44 555 if (ALP_ERR_ITF_START >= error && ALP_ERR_ITF_END < error)
Jeej 68:b2dd7309da44 556 {
Jeej 68:b2dd7309da44 557 error -= ALP_ERR_ITF_START;
Jeej 68:b2dd7309da44 558 // Interface specific error
Jeej 68:b2dd7309da44 559 if (ALP_ITF_TYPE_HOST == itf)
Jeej 68:b2dd7309da44 560 {
Jeej 69:8f2fe2426ef9 561 PRINT("ITF[%02X] Error %d\r\n", itf, error);
Jeej 68:b2dd7309da44 562 }
Jeej 68:b2dd7309da44 563 else if (ALP_ITF_TYPE_COM == itf)
Jeej 68:b2dd7309da44 564 {
Jeej 69:8f2fe2426ef9 565 PRINT("ITF[%02X] Error %d\r\n", itf, error);
Jeej 68:b2dd7309da44 566 }
Jeej 68:b2dd7309da44 567 else if (ALP_ITF_TYPE_D7A == itf)
Jeej 68:b2dd7309da44 568 {
Jeej 68:b2dd7309da44 569 PRINT("ITF[%02X] ", itf);
Jeej 68:b2dd7309da44 570 switch (error)
Jeej 68:b2dd7309da44 571 {
Jeej 68:b2dd7309da44 572 /// No error
Jeej 68:b2dd7309da44 573 case D7A_ERROR_NO: // = 0,
Jeej 68:b2dd7309da44 574 PRINT("D7A_ERROR_NO\r\n");
Jeej 68:b2dd7309da44 575 break;
Jeej 69:8f2fe2426ef9 576 /// Resource busy
Jeej 68:b2dd7309da44 577 case D7A_ERROR_BUSY: // = -1,
Jeej 68:b2dd7309da44 578 PRINT("D7A_ERROR_BUSY\r\n");
Jeej 68:b2dd7309da44 579 break;
Jeej 69:8f2fe2426ef9 580 /// Bad parameter
Jeej 68:b2dd7309da44 581 case D7A_ERROR_BAD_PARAM: // = -2,
Jeej 68:b2dd7309da44 582 PRINT("D7A_ERROR_BAD_PARAM\r\n");
Jeej 68:b2dd7309da44 583 break;
Jeej 69:8f2fe2426ef9 584 /// Duty cycle limit overflow
Jeej 68:b2dd7309da44 585 case D7A_ERROR_DUTY_CYCLE: // = -3,
Jeej 68:b2dd7309da44 586 PRINT("D7A_ERROR_DUTY_CYCLE\r\n");
Jeej 68:b2dd7309da44 587 break;
Jeej 69:8f2fe2426ef9 588 /// CCA timeout
Jeej 68:b2dd7309da44 589 case D7A_ERROR_CCA_TO: // = -4,
Jeej 68:b2dd7309da44 590 PRINT("D7A_ERROR_CCA_TO\r\n");
Jeej 68:b2dd7309da44 591 break;
Jeej 69:8f2fe2426ef9 592 /// Security frame counter overflow
Jeej 68:b2dd7309da44 593 case D7A_ERROR_NLS_KEY: // = -5,
Jeej 68:b2dd7309da44 594 PRINT("D7A_ERROR_NLS_KEY\r\n");
Jeej 68:b2dd7309da44 595 break;
Jeej 69:8f2fe2426ef9 596 /// TX stream underflow
Jeej 68:b2dd7309da44 597 case D7A_ERROR_TX_UDF: // = -6,
Jeej 68:b2dd7309da44 598 PRINT("D7A_ERROR_TX_UDF\r\n");
Jeej 68:b2dd7309da44 599 break;
Jeej 69:8f2fe2426ef9 600 /// RX stream overflow
Jeej 68:b2dd7309da44 601 case D7A_ERROR_RX_OVF: // = -7,
Jeej 68:b2dd7309da44 602 PRINT("D7A_ERROR_RX_OVF\r\n");
Jeej 68:b2dd7309da44 603 break;
Jeej 69:8f2fe2426ef9 604 /// RX checksum
Jeej 68:b2dd7309da44 605 case D7A_ERROR_RX_CRC: // = -8,
Jeej 68:b2dd7309da44 606 PRINT("D7A_ERROR_RX_CRC\r\n");
Jeej 68:b2dd7309da44 607 break;
Jeej 69:8f2fe2426ef9 608 /// Abort
Jeej 68:b2dd7309da44 609 case D7A_ERROR_ABORT: // = -9,
Jeej 68:b2dd7309da44 610 PRINT("D7A_ERROR_ABORT\r\n");
Jeej 68:b2dd7309da44 611 break;
Jeej 69:8f2fe2426ef9 612 /// No ACK received
Jeej 68:b2dd7309da44 613 case D7A_ERROR_NO_ACK: // = -10,
Jeej 68:b2dd7309da44 614 PRINT("D7A_ERROR_NO_ACK\r\n");
Jeej 68:b2dd7309da44 615 break;
Jeej 69:8f2fe2426ef9 616 /// RX timeout
Jeej 69:8f2fe2426ef9 617 case D7A_ERROR_RX_TO: // = -11,
Jeej 68:b2dd7309da44 618 PRINT("D7A_ERROR_RX_TO\r\n");
Jeej 68:b2dd7309da44 619 break;
Jeej 68:b2dd7309da44 620 default:
Jeej 68:b2dd7309da44 621 PRINT("Unknown Error %d\r\n", error);
Jeej 68:b2dd7309da44 622 break;
Jeej 68:b2dd7309da44 623 }
Jeej 68:b2dd7309da44 624 }
Jeej 68:b2dd7309da44 625 else if (ALP_ITF_TYPE_LWAN == itf)
Jeej 68:b2dd7309da44 626 {
Jeej 69:8f2fe2426ef9 627 PRINT("ITF[%02X] Error %d\r\n", itf, error);
Jeej 68:b2dd7309da44 628 }
Jeej 68:b2dd7309da44 629 else
Jeej 68:b2dd7309da44 630 {
Jeej 69:8f2fe2426ef9 631 PRINT("ITF[%02X] Error %d\r\n", itf, error);
Jeej 68:b2dd7309da44 632 }
Jeej 68:b2dd7309da44 633 }
Jeej 68:b2dd7309da44 634 else
Jeej 68:b2dd7309da44 635 {
Jeej 69:8f2fe2426ef9 636 PRINT("ITF[%02X] ALP: ", itf);
Jeej 68:b2dd7309da44 637 switch (error)
Jeej 68:b2dd7309da44 638 {
Jeej 68:b2dd7309da44 639 // Not really errors, more like status
Jeej 69:8f2fe2426ef9 640 case ALP_ERR_ITF_FULL: // 0x02: For interfaces supporting buffering, indicates buffer reached maximum capacity (no data loss)
Jeej 68:b2dd7309da44 641 PRINT("ALP_ERR_ITF_FULL\r\n");
Jeej 68:b2dd7309da44 642 break;
Jeej 68:b2dd7309da44 643 case ALP_ERR_PARTIAL_COMPLETION: // 0x01: Action received and partially completed at response. To be completed after response
Jeej 68:b2dd7309da44 644 PRINT("ALP_ERR_PARTIAL_COMPLETION\r\n");
Jeej 68:b2dd7309da44 645 break;
Jeej 69:8f2fe2426ef9 646
Jeej 69:8f2fe2426ef9 647 // ALP Errors
Jeej 68:b2dd7309da44 648 case ALP_ERR_NONE: // 0x00: Action completed (OK)
Jeej 68:b2dd7309da44 649 PRINT("ALP_ERR_NONE\r\n");
Jeej 68:b2dd7309da44 650 break;
Jeej 68:b2dd7309da44 651 case ALP_ERR_FILE_NOT_FOUND: // 0xFF: Error access file: File ID does not exist
Jeej 68:b2dd7309da44 652 PRINT("ALP_ERR_FILE_NOT_FOUND\r\n");
Jeej 68:b2dd7309da44 653 break;
Jeej 68:b2dd7309da44 654 case ALP_ERR_FILE_EXIST: // 0xFE: Error create file: File ID already exists
Jeej 68:b2dd7309da44 655 PRINT("ALP_ERR_FILE_EXIST\r\n");
Jeej 68:b2dd7309da44 656 break;
Jeej 68:b2dd7309da44 657 case ALP_ERR_FILE_NOT_RESTORABLE: // 0xFD: Error restore file: File is not restorable
Jeej 68:b2dd7309da44 658 PRINT("ALP_ERR_FILE_NOT_RESTORABLEr\n");
Jeej 68:b2dd7309da44 659 break;
Jeej 68:b2dd7309da44 660 case ALP_ERR_PERMISSION_DENIED: // 0xFC: Error access file: Insufficient permissions
Jeej 68:b2dd7309da44 661 PRINT("ALP_ERR_PERMISSION_DENIED\r\n");
Jeej 68:b2dd7309da44 662 break;
Jeej 68:b2dd7309da44 663 case ALP_ERR_LENGTH_OVERFLOW: // 0xFB: Error create file: Supplied length (in header) is beyond file limits
Jeej 68:b2dd7309da44 664 PRINT("ALP_ERR_LENGTH_OVERFLOW\r\n");
Jeej 68:b2dd7309da44 665 break;
Jeej 68:b2dd7309da44 666 case ALP_ERR_ALLOC_OVERFLOW: // 0xFA: Error create file: Supplied allocation (in header) is beyond file limits
Jeej 68:b2dd7309da44 667 PRINT("ALP_ERR_ALLOC_OVERFLOW\r\n");
Jeej 68:b2dd7309da44 668 break;
Jeej 68:b2dd7309da44 669 case ALP_ERR_OFFSET_OVERFLOW: // 0xF9: Error write: Supplied start offset is out of bounds of file allocation
Jeej 68:b2dd7309da44 670 PRINT("ALP_ERR_OFFSET_OVERFLOW\r\n");
Jeej 68:b2dd7309da44 671 break;
Jeej 68:b2dd7309da44 672 case ALP_ERR_WRITE_OVERFLOW: // 0xF8: Error complete write: Supplied data goes beyond file allocation
Jeej 68:b2dd7309da44 673 PRINT("ALP_ERR_WRITE_OVERFLOW\r\n");
Jeej 68:b2dd7309da44 674 break;
Jeej 68:b2dd7309da44 675 case ALP_ERR_WRITE_ERROR: // 0xF7: Error write: impossible to write in storage location
Jeej 68:b2dd7309da44 676 PRINT("ALP_ERR_WRITE_ERROR\r\n");
Jeej 68:b2dd7309da44 677 break;
Jeej 68:b2dd7309da44 678 case ALP_ERR_OPERATION_UNKNOWN: // 0xF6: Error unknown Operation
Jeej 68:b2dd7309da44 679 PRINT("ALP_ERR_OPERATION_UNKNOWN\r\n");
Jeej 68:b2dd7309da44 680 break;
Jeej 68:b2dd7309da44 681 case ALP_ERR_OPERAND_INCOMPLETE: // 0xF5: Error incomplete Operand
Jeej 68:b2dd7309da44 682 PRINT("ALP_ERR_OPERAND_INCOMPLETE\r\n");
Jeej 68:b2dd7309da44 683 break;
Jeej 68:b2dd7309da44 684 case ALP_ERR_OPERAND_WRONG_FORMAT: // 0xF4: Error wrong Operand format
Jeej 68:b2dd7309da44 685 PRINT("ALP_ERR_OPERAND_WRONG_FORMAT\r\n");
Jeej 68:b2dd7309da44 686 break;
Jeej 68:b2dd7309da44 687 case ALP_ERR_ITF_INVALID: // 0xF3: Error invalid interface
Jeej 68:b2dd7309da44 688 PRINT("ALP_ERR_ITF_INVALID\r\n");
Jeej 68:b2dd7309da44 689 break;
Jeej 68:b2dd7309da44 690 case ALP_ERR_ITF_OVERFLOW: // 0xF2: Error interface overflown (i.e. resources exhausted, buffer full with data discarded)
Jeej 68:b2dd7309da44 691 PRINT("ALP_ERR_ITF_OVERFLOW\r\n");
Jeej 68:b2dd7309da44 692 break;
Jeej 68:b2dd7309da44 693 case ALP_ERR_QUERY_FAIL: // 0xF1: (Group of) Query result was false (Informative error code).
Jeej 68:b2dd7309da44 694 PRINT("ALP_ERR_QUERY_FAIL\r\n");
Jeej 68:b2dd7309da44 695 break;
Jeej 68:b2dd7309da44 696 case ALP_ERR_ITF_NOT_SPECIFIED:
Jeej 68:b2dd7309da44 697 PRINT("ALP_ERR_ITF_NOT_SPECIFIED\r\n");
Jeej 68:b2dd7309da44 698 break;
Jeej 69:8f2fe2426ef9 699
Jeej 69:8f2fe2426ef9 700 // Other Errors
Jeej 68:b2dd7309da44 701 case ALP_ERR_UNKNOWN: // 0x80: Unknown error
Jeej 68:b2dd7309da44 702 PRINT("ALP_ERR_UNKNOWN\r\n");
Jeej 68:b2dd7309da44 703 break;
Jeej 68:b2dd7309da44 704 case ALP_ERR_FS_TIMEOUT: // 0x81: Internal FS Error
Jeej 68:b2dd7309da44 705 PRINT("ALP_ERR_FS_TIMEOUT\r\n");
Jeej 68:b2dd7309da44 706 break;
Jeej 68:b2dd7309da44 707 case ALP_ERR_ITF_UNKNOWN: // 0x82: Unknown Interface
Jeej 68:b2dd7309da44 708 PRINT("ALP_ERR_ITF_UNKNOWN\r\n");
Jeej 68:b2dd7309da44 709 break;
Jeej 68:b2dd7309da44 710 case ALP_ERR_ITF_TIMEOUT: // 0x83: Internal ITF Error
Jeej 68:b2dd7309da44 711 PRINT("ALP_ERR_ITF_TIMEOUT\r\n");
Jeej 68:b2dd7309da44 712 break;
Jeej 68:b2dd7309da44 713 default:
Jeej 68:b2dd7309da44 714 PRINT("Unknown Error %d\r\n", error);
Jeej 68:b2dd7309da44 715 break;
Jeej 68:b2dd7309da44 716 }
Jeej 68:b2dd7309da44 717 }
Jeej 69:8f2fe2426ef9 718 }