Scan nearby anchors and send result for location engine.

Dependencies:   modem_ref_helper DebouncedInterrupt

Committer:
Jeej
Date:
Wed Nov 13 13:51:15 2019 +0000
Revision:
1:4534345afb6b
Parent:
0:83836029943b
Use custom AP.

Who changed what in which revision?

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