Data reception demo.

Dependencies:   modem_ref_helper CRC

Committer:
marin_wizzi
Date:
Fri Oct 29 13:12:47 2021 +0000
Revision:
15:e90cc8e37c4d
Parent:
12:404a3ca64a44
Compatible with 6.2 modem version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marin_wizzi 15:e90cc8e37c4d 1 #include "modem_d7a.h"
marin_wizzi 15:e90cc8e37c4d 2 #include "files.h"
Jeej 0:02418479dcf7 3
marin_wizzi 15:e90cc8e37c4d 4 #define SERIAL_MAX_PACKET_SIZE (255)
Jeej 0:02418479dcf7 5
Jeej 0:02418479dcf7 6 // ============================================================}}}
Jeej 0:02418479dcf7 7
Jeej 0:02418479dcf7 8 // Callbacks to MODEM's ALP requests
Jeej 0:02418479dcf7 9 // ============================================================{{{
marin_wizzi 15:e90cc8e37c4d 10 void my_read(u8 action, u8 fid, u32 offset, u32 length, int id)
Jeej 0:02418479dcf7 11 {
marin_wizzi 15:e90cc8e37c4d 12 u8 data[SERIAL_MAX_PACKET_SIZE];
Jeej 0:02418479dcf7 13
marin_wizzi 15:e90cc8e37c4d 14 ASSERT((ALP_ACTION_RSP_TAG_SIZE + ALP_ACTION_RSP_F_DATA_SIZE(offset, length)) <= SERIAL_MAX_PACKET_SIZE,
marin_wizzi 15:e90cc8e37c4d 15 "Read response too big for serial protocol (%d/%dmax)", length, ALP_ACTION_RSP_TAG_SIZE + ALP_ACTION_RSP_F_DATA_SIZE(offset,SERIAL_MAX_PACKET_SIZE));
marin_wizzi 15:e90cc8e37c4d 16
marin_wizzi 15:e90cc8e37c4d 17 if (ram_fs_read(fid, data, offset, length))
Jeej 0:02418479dcf7 18 {
marin_wizzi 15:e90cc8e37c4d 19 modem_ref_respond(action, ALP_ERR_FILE_NOT_FOUND, id);
Jeej 0:02418479dcf7 20 }
Jeej 0:02418479dcf7 21 else
Jeej 0:02418479dcf7 22 {
marin_wizzi 15:e90cc8e37c4d 23 modem_ref_respond_read(fid, data, offset, length, id);
Jeej 0:02418479dcf7 24 }
Jeej 0:02418479dcf7 25 }
Jeej 0:02418479dcf7 26
marin_wizzi 15:e90cc8e37c4d 27
marin_wizzi 15:e90cc8e37c4d 28 void my_write(u8 action, u8 fid, void *data, u32 offset, u32 length, int id)
Jeej 0:02418479dcf7 29 {
marin_wizzi 15:e90cc8e37c4d 30 alp_errors_t err;
marin_wizzi 15:e90cc8e37c4d 31
marin_wizzi 15:e90cc8e37c4d 32 if (ram_fs_write(fid, (uint8_t*)data, offset, length))
Jeej 3:e9ea4d325c01 33 {
marin_wizzi 15:e90cc8e37c4d 34 err = ALP_ERR_FILE_NOT_FOUND;
Jeej 3:e9ea4d325c01 35 }
Jeej 3:e9ea4d325c01 36 else
Jeej 3:e9ea4d325c01 37 {
marin_wizzi 15:e90cc8e37c4d 38 err = ALP_ERR_NONE;
marin_wizzi 15:e90cc8e37c4d 39
marin_wizzi 15:e90cc8e37c4d 40 touch_t* touch = (touch_t*)MALLOC(sizeof(touch_t));
marin_wizzi 15:e90cc8e37c4d 41
marin_wizzi 15:e90cc8e37c4d 42 touch->fid = fid;
marin_wizzi 15:e90cc8e37c4d 43 touch->offset = offset;
marin_wizzi 15:e90cc8e37c4d 44 touch->length = length;
marin_wizzi 15:e90cc8e37c4d 45
marin_wizzi 15:e90cc8e37c4d 46 g_file_modified.put(touch);
marin_wizzi 15:e90cc8e37c4d 47 }
marin_wizzi 15:e90cc8e37c4d 48
marin_wizzi 15:e90cc8e37c4d 49 modem_ref_respond(action, err, id);
Jeej 0:02418479dcf7 50 }
Jeej 0:02418479dcf7 51
marin_wizzi 15:e90cc8e37c4d 52 void my_read_fprop(u8 action, u8 fid, int id)
Jeej 0:02418479dcf7 53 {
Jeej 0:02418479dcf7 54 u8* hdr = (u8*)ram_fs_get_header(fid);
Jeej 0:02418479dcf7 55
Jeej 0:02418479dcf7 56 if (hdr != NULL)
Jeej 0:02418479dcf7 57 {
marin_wizzi 15:e90cc8e37c4d 58 modem_ref_respond_fprop(fid, (alp_file_header_t*)hdr, id);
Jeej 0:02418479dcf7 59 }
Jeej 0:02418479dcf7 60 else
Jeej 0:02418479dcf7 61 {
marin_wizzi 15:e90cc8e37c4d 62 modem_ref_respond(action, ALP_ERR_FILE_NOT_FOUND, id);
Jeej 0:02418479dcf7 63 }
Jeej 0:02418479dcf7 64 }
Jeej 0:02418479dcf7 65
marin_wizzi 15:e90cc8e37c4d 66 void my_flush(u8 action, u8 fid, int id)
Jeej 0:02418479dcf7 67 {
Jeej 0:02418479dcf7 68 // No flush in this file system
marin_wizzi 15:e90cc8e37c4d 69 modem_ref_respond(action, ALP_ERR_NONE, id);
Jeej 0:02418479dcf7 70 }
Jeej 0:02418479dcf7 71
marin_wizzi 15:e90cc8e37c4d 72 void my_delete(u8 action, u8 fid, int id)
marin_wizzi 15:e90cc8e37c4d 73 {
marin_wizzi 15:e90cc8e37c4d 74 modem_ref_respond(action, (ram_fs_delete(fid))? ALP_ERR_FILE_NOT_FOUND : ALP_ERR_NONE, id);
marin_wizzi 15:e90cc8e37c4d 75 }
marin_wizzi 15:e90cc8e37c4d 76
marin_wizzi 15:e90cc8e37c4d 77 void my_udata(alp_payload_t* alp)
marin_wizzi 15:e90cc8e37c4d 78 {
marin_wizzi 15:e90cc8e37c4d 79 alp_payload_print(alp);
Jeej 3:e9ea4d325c01 80 }
Jeej 3:e9ea4d325c01 81
Jeej 0:02418479dcf7 82 void my_lqual(u8 ifid, int per)
Jeej 0:02418479dcf7 83 {
Jeej 2:6652be2d061f 84 PRINT("Interface File [%3d] LQUAL : %d%% PER\r\n", ifid, per);
Jeej 0:02418479dcf7 85 }
Jeej 0:02418479dcf7 86
Jeej 0:02418479dcf7 87 void my_ldown(u8 ifid)
Jeej 0:02418479dcf7 88 {
Jeej 2:6652be2d061f 89 PRINT("Interface File [%3d] LDOWN\r\n", ifid);
Jeej 0:02418479dcf7 90 }
Jeej 0:02418479dcf7 91
Jeej 0:02418479dcf7 92 void my_reset(void)
Jeej 0:02418479dcf7 93 {
Jeej 5:a44b6f60bfc7 94 PRINT("Restarting application...\r\n");
Jeej 5:a44b6f60bfc7 95 FLUSH();
Jeej 0:02418479dcf7 96 NVIC_SystemReset();
Jeej 0:02418479dcf7 97 }
Jeej 0:02418479dcf7 98
Jeej 0:02418479dcf7 99 void my_boot(u8 cause, u16 number)
Jeej 0:02418479dcf7 100 {
Jeej 5:a44b6f60bfc7 101 PRINT("Modem BOOT[%c] #%d\r\n", cause, number);
Jeej 0:02418479dcf7 102
Jeej 0:02418479dcf7 103 // Modem re-booted, restart APP
Jeej 0:02418479dcf7 104 my_reset();
Jeej 9:72a15235e097 105 }
Jeej 9:72a15235e097 106
Jeej 9:72a15235e097 107 void my_busy(u8 busy)
Jeej 9:72a15235e097 108 {
Jeej 9:72a15235e097 109 if (busy)
Jeej 9:72a15235e097 110 {
Jeej 9:72a15235e097 111 PRINT("Modem Busy\r\n");
Jeej 9:72a15235e097 112
Jeej 9:72a15235e097 113 /* Stop report, do not use modem */
Jeej 9:72a15235e097 114 /* Wait for modem reboot or modem not busy */
Jeej 9:72a15235e097 115 }
Jeej 9:72a15235e097 116 else
Jeej 9:72a15235e097 117 {
Jeej 9:72a15235e097 118 PRINT("Modem not Busy\r\n");
Jeej 9:72a15235e097 119
Jeej 9:72a15235e097 120 /* Resume reports */
Jeej 9:72a15235e097 121 }
Jeej 0:02418479dcf7 122 }