Send file data demo.

Dependencies:   modem_ref_helper CRC DebouncedInterrupt

Committer:
Jeej
Date:
Tue Aug 20 14:06:45 2019 +0000
Revision:
18:71fd5e218400
Parent:
17:d50191689d1f
Child:
20:5856f9bfd8e3
WizziCom now uses DMA instead of interrupts.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 6:05e26c3a495a 1 #include "modem_ref_helper.h"
Jeej 0:065f2318fcb9 2
Jeej 0:065f2318fcb9 3
Jeej 0:065f2318fcb9 4 // ============================================================}}}
Jeej 0:065f2318fcb9 5
Jeej 0:065f2318fcb9 6 // Callbacks to MODEM's ALP requests
Jeej 0:065f2318fcb9 7 // ============================================================{{{
Jeej 0:065f2318fcb9 8 void my_read(u8 fid, u32 offset, u32 length, int id)
Jeej 0:065f2318fcb9 9 {
Jeej 2:992b87360140 10 u8 data[256];
Jeej 0:065f2318fcb9 11
Jeej 1:f4a7a48a5f2b 12 if (ram_fs_read(fid, offset, length, data))
Jeej 1:f4a7a48a5f2b 13 {
Jeej 17:d50191689d1f 14 modem_respond(ALP_ERR_FILE_NOT_FOUND, id);
Jeej 1:f4a7a48a5f2b 15 }
Jeej 2:992b87360140 16 else
Jeej 2:992b87360140 17 {
Jeej 2:992b87360140 18 modem_respond_read(fid, data, offset, length, id);
Jeej 2:992b87360140 19 }
Jeej 0:065f2318fcb9 20 }
Jeej 0:065f2318fcb9 21
Jeej 0:065f2318fcb9 22 void my_write(u8 fid, void *data, u32 offset, u32 length, int id)
Jeej 0:065f2318fcb9 23 {
Jeej 17:d50191689d1f 24 modem_respond((ram_fs_write(fid, offset, length, (uint8_t*)data))? ALP_ERR_FILE_NOT_FOUND : ALP_ERR_NONE, id);
Jeej 0:065f2318fcb9 25 }
Jeej 0:065f2318fcb9 26
Jeej 0:065f2318fcb9 27 void my_read_fprop(u8 fid, int id)
Jeej 0:065f2318fcb9 28 {
Jeej 1:f4a7a48a5f2b 29 u8* hdr = (u8*)ram_fs_get_header(fid);
Jeej 0:065f2318fcb9 30
Jeej 1:f4a7a48a5f2b 31 if (hdr != NULL)
Jeej 1:f4a7a48a5f2b 32 {
Jeej 1:f4a7a48a5f2b 33 modem_respond_fprop(fid, hdr, id);
Jeej 1:f4a7a48a5f2b 34 }
Jeej 1:f4a7a48a5f2b 35 else
Jeej 1:f4a7a48a5f2b 36 {
Jeej 17:d50191689d1f 37 modem_respond(ALP_ERR_FILE_NOT_FOUND, id);
Jeej 1:f4a7a48a5f2b 38 }
Jeej 0:065f2318fcb9 39 }
Jeej 0:065f2318fcb9 40
Jeej 0:065f2318fcb9 41 void my_flush(u8 fid, int id)
Jeej 0:065f2318fcb9 42 {
Jeej 0:065f2318fcb9 43 // No flush in this file system
Jeej 17:d50191689d1f 44 modem_respond(ALP_ERR_NONE, id);
Jeej 0:065f2318fcb9 45 }
Jeej 0:065f2318fcb9 46
Jeej 0:065f2318fcb9 47 void my_delete(u8 fid, int id)
Jeej 0:065f2318fcb9 48 {
Jeej 17:d50191689d1f 49 modem_respond((ram_fs_delete(fid))? ALP_ERR_FILE_NOT_FOUND : ALP_ERR_NONE, id);
Jeej 0:065f2318fcb9 50 }
Jeej 0:065f2318fcb9 51
Jeej 14:788c749cabed 52 void my_udata(void *data, u32 length)
Jeej 14:788c749cabed 53 {
Jeej 14:788c749cabed 54 uint8_t* p = (uint8_t*)data;
Jeej 14:788c749cabed 55 int32_t rem = length;
Jeej 14:788c749cabed 56 alp_parsed_chunk_t r;
Jeej 14:788c749cabed 57 d7a_sp_res_t* istat;
Jeej 14:788c749cabed 58
Jeej 14:788c749cabed 59 do {
Jeej 14:788c749cabed 60 uint32_t parsed = alp_parse_chunk(&p, &r);
Jeej 14:788c749cabed 61 if (!parsed)
Jeej 14:788c749cabed 62 {
Jeej 14:788c749cabed 63 // Discard the payload in case of parsing error.
Jeej 14:788c749cabed 64 PRINT("Parsing error!\r\n");
Jeej 14:788c749cabed 65 break;
Jeej 14:788c749cabed 66 }
Jeej 14:788c749cabed 67 rem -= parsed;
Jeej 14:788c749cabed 68
Jeej 14:788c749cabed 69 switch (r.type)
Jeej 14:788c749cabed 70 {
Jeej 14:788c749cabed 71 // Interface status
Jeej 14:788c749cabed 72 case ALP_OPCODE_RSP_ISTATUS:
Jeej 14:788c749cabed 73 // D7A Interface
Jeej 14:788c749cabed 74 if (ALP_ITF_TYPE_D7A == r.meta.itf.type)
Jeej 14:788c749cabed 75 {
Jeej 14:788c749cabed 76 union {
Jeej 14:788c749cabed 77 u8 b[8];
Jeej 14:788c749cabed 78 u32 w[2];
Jeej 14:788c749cabed 79 } uid;
Jeej 14:788c749cabed 80
Jeej 14:788c749cabed 81 // ISTATUS can come either alone or together with ALP_OPCODE_RSP_F_DATA
Jeej 14:788c749cabed 82 // but there should be only one per payload, moreover it will come first
Jeej 14:788c749cabed 83 istat = (d7a_sp_res_t*)r.data;
Jeej 14:788c749cabed 84 memcpy(uid.b,istat->addressee.id,8);
Jeej 14:788c749cabed 85
Jeej 14:788c749cabed 86 PRINT("Got accessed by UID:%08X%08X SNR: %3ddB RXLEV: -%-3ddBm LB: %3ddB\n",
Jeej 14:788c749cabed 87 HAL_U32_BYTE_SWAP(uid.w[0]), HAL_U32_BYTE_SWAP(uid.w[1]),
Jeej 14:788c749cabed 88 istat->snr, istat->rxlev, istat->lb);
Jeej 14:788c749cabed 89 }
Jeej 14:788c749cabed 90 else
Jeej 14:788c749cabed 91 {
Jeej 14:788c749cabed 92 PRINT("Got accessed by unknown Interface 0x%02X\n", r.meta.itf.type);
Jeej 14:788c749cabed 93 }
Jeej 14:788c749cabed 94 break;
Jeej 14:788c749cabed 95 // Data return
Jeej 14:788c749cabed 96 case ALP_OPCODE_RSP_F_DATA:
Jeej 14:788c749cabed 97 // RSP_F_DATA can come either alone or together with ISTATUS
Jeej 14:788c749cabed 98 PRINT("Got UNS File[%3d]@%d %d Bytes\n", r.meta.f_data.fid, r.meta.f_data.offset, r.meta.f_data.length);
Jeej 14:788c749cabed 99 break;
Jeej 14:788c749cabed 100 default:
Jeej 14:788c749cabed 101 PRINT("Untreated OPCODE %d\n", r.type);
Jeej 14:788c749cabed 102 break;
Jeej 14:788c749cabed 103 }
Jeej 14:788c749cabed 104 } while (rem > 0);
Jeej 6:05e26c3a495a 105 }
Jeej 6:05e26c3a495a 106
Jeej 0:065f2318fcb9 107 void my_lqual(u8 ifid, int per)
Jeej 0:065f2318fcb9 108 {
Jeej 4:999305b576c0 109 PRINT("Interface File [%3d] LQUAL : %d%% PER\r\n", ifid, per);
Jeej 0:065f2318fcb9 110 }
Jeej 0:065f2318fcb9 111
Jeej 0:065f2318fcb9 112 void my_ldown(u8 ifid)
Jeej 0:065f2318fcb9 113 {
Jeej 4:999305b576c0 114 PRINT("Interface File [%3d] LDOWN\r\n", ifid);
Jeej 0:065f2318fcb9 115 }
Jeej 0:065f2318fcb9 116
Jeej 0:065f2318fcb9 117 void my_reset(void)
Jeej 0:065f2318fcb9 118 {
Jeej 8:db5679d113c2 119 PRINT("Restarting application...\r\n");
Jeej 8:db5679d113c2 120 FLUSH();
Jeej 0:065f2318fcb9 121 NVIC_SystemReset();
Jeej 0:065f2318fcb9 122 }
Jeej 0:065f2318fcb9 123
Jeej 0:065f2318fcb9 124 void my_boot(u8 cause, u16 number)
Jeej 0:065f2318fcb9 125 {
Jeej 8:db5679d113c2 126 PRINT("Modem BOOT[%c] #%d\r\n", cause, number);
Jeej 0:065f2318fcb9 127
Jeej 0:065f2318fcb9 128 // Modem re-booted, restart APP
Jeej 0:065f2318fcb9 129 my_reset();
Jeej 14:788c749cabed 130 }
Jeej 14:788c749cabed 131
Jeej 14:788c749cabed 132 void my_busy(u8 busy)
Jeej 14:788c749cabed 133 {
Jeej 14:788c749cabed 134 if (busy)
Jeej 14:788c749cabed 135 {
Jeej 14:788c749cabed 136 PRINT("Modem Busy\r\n");
Jeej 14:788c749cabed 137
Jeej 14:788c749cabed 138 /* Stop report, do not use modem */
Jeej 14:788c749cabed 139 /* Wait for modem reboot or modem not busy */
Jeej 14:788c749cabed 140 }
Jeej 14:788c749cabed 141 else
Jeej 14:788c749cabed 142 {
Jeej 14:788c749cabed 143 PRINT("Modem not Busy\r\n");
Jeej 14:788c749cabed 144
Jeej 14:788c749cabed 145 /* Resume reports */
Jeej 14:788c749cabed 146 }
Jeej 0:065f2318fcb9 147 }