Send file data demo.

Dependencies:   modem_ref_helper CRC DebouncedInterrupt

Committer:
marin_wizzi
Date:
Fri Oct 29 13:11:38 2021 +0000
Revision:
20:5856f9bfd8e3
Parent:
17:d50191689d1f
Compatible with 6.2 modem version

Who changed what in which revision?

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