Sending and reception of big data file (1kB example)

Dependencies:   modem_ref_helper CRC DebouncedInterrupt

Committer:
Jeej
Date:
Wed Feb 17 11:11:23 2021 +0000
Revision:
15:9a9cfb0c3c4e
Parent:
11:dc0e19b2d4a0
v2.0

Who changed what in which revision?

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