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

Dependencies:   modem_ref_helper CRC DebouncedInterrupt

Committer:
Jeej
Date:
Thu Dec 14 14:22:40 2017 +0000
Revision:
0:a2bbc478f812
Child:
4:fd480d5fe62b
Sanity commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:a2bbc478f812 1 #include "modem_ref_helper.h"
Jeej 0:a2bbc478f812 2 #include "files.h"
Jeej 0:a2bbc478f812 3
Jeej 0:a2bbc478f812 4 // ============================================================}}}
Jeej 0:a2bbc478f812 5
Jeej 0:a2bbc478f812 6 // Callbacks to MODEM's ALP requests
Jeej 0:a2bbc478f812 7 // ============================================================{{{
Jeej 0:a2bbc478f812 8 void my_read(u8 fid, u32 offset, u32 length, int id)
Jeej 0:a2bbc478f812 9 {
Jeej 0:a2bbc478f812 10 u8 data[256];
Jeej 0:a2bbc478f812 11
Jeej 0:a2bbc478f812 12 if (ram_fs_read(fid, offset, length, data))
Jeej 0:a2bbc478f812 13 {
Jeej 0:a2bbc478f812 14 modem_respond(0, ALP_ERR_FILE_NOT_FOUND, id);
Jeej 0:a2bbc478f812 15 }
Jeej 0:a2bbc478f812 16 else
Jeej 0:a2bbc478f812 17 {
Jeej 0:a2bbc478f812 18 modem_respond_read(fid, data, offset, length, id);
Jeej 0:a2bbc478f812 19 }
Jeej 0:a2bbc478f812 20 }
Jeej 0:a2bbc478f812 21
Jeej 0:a2bbc478f812 22 void my_write(u8 fid, void *data, u32 offset, u32 length, int id)
Jeej 0:a2bbc478f812 23 {
Jeej 0:a2bbc478f812 24 alp_errors_t err;
Jeej 0:a2bbc478f812 25
Jeej 0:a2bbc478f812 26 if (ram_fs_write(fid, offset, length, (uint8_t*)data))
Jeej 0:a2bbc478f812 27 {
Jeej 0:a2bbc478f812 28 err = ALP_ERR_FILE_NOT_FOUND;
Jeej 0:a2bbc478f812 29 }
Jeej 0:a2bbc478f812 30 else
Jeej 0:a2bbc478f812 31 {
Jeej 0:a2bbc478f812 32 err = ALP_ERR_NONE;
Jeej 0:a2bbc478f812 33
Jeej 0:a2bbc478f812 34 touch_t* touch = (touch_t*)MALLOC(sizeof(touch_t));
Jeej 0:a2bbc478f812 35
Jeej 0:a2bbc478f812 36 touch->fid = fid;
Jeej 0:a2bbc478f812 37 touch->offset = offset;
Jeej 0:a2bbc478f812 38 touch->length = length;
Jeej 0:a2bbc478f812 39
Jeej 0:a2bbc478f812 40 g_file_modified.put(touch);
Jeej 0:a2bbc478f812 41 }
Jeej 0:a2bbc478f812 42
Jeej 0:a2bbc478f812 43 modem_respond(0, err, id);
Jeej 0:a2bbc478f812 44 }
Jeej 0:a2bbc478f812 45
Jeej 0:a2bbc478f812 46 void my_read_fprop(u8 fid, int id)
Jeej 0:a2bbc478f812 47 {
Jeej 0:a2bbc478f812 48 u8* hdr = (u8*)ram_fs_get_header(fid);
Jeej 0:a2bbc478f812 49
Jeej 0:a2bbc478f812 50 if (hdr != NULL)
Jeej 0:a2bbc478f812 51 {
Jeej 0:a2bbc478f812 52 modem_respond_fprop(fid, hdr, id);
Jeej 0:a2bbc478f812 53 }
Jeej 0:a2bbc478f812 54 else
Jeej 0:a2bbc478f812 55 {
Jeej 0:a2bbc478f812 56 modem_respond(0, ALP_ERR_FILE_NOT_FOUND, id);
Jeej 0:a2bbc478f812 57 }
Jeej 0:a2bbc478f812 58 }
Jeej 0:a2bbc478f812 59
Jeej 0:a2bbc478f812 60 void my_flush(u8 fid, int id)
Jeej 0:a2bbc478f812 61 {
Jeej 0:a2bbc478f812 62 // No flush in this file system
Jeej 0:a2bbc478f812 63 modem_respond(0, ALP_ERR_NONE, id);
Jeej 0:a2bbc478f812 64 }
Jeej 0:a2bbc478f812 65
Jeej 0:a2bbc478f812 66 void my_delete(u8 fid, int id)
Jeej 0:a2bbc478f812 67 {
Jeej 0:a2bbc478f812 68 modem_respond(0, (ram_fs_delete(fid))? ALP_ERR_FILE_NOT_FOUND : ALP_ERR_NONE, id);
Jeej 0:a2bbc478f812 69 }
Jeej 0:a2bbc478f812 70
Jeej 0:a2bbc478f812 71 void my_udata(u8 fid, void *data, u32 offset, u32 length, u8 i_type, u8 i_length, u8* i_data)
Jeej 0:a2bbc478f812 72 {
Jeej 0:a2bbc478f812 73 (void)data;
Jeej 0:a2bbc478f812 74 (void)i_length;
Jeej 0:a2bbc478f812 75 PRINT("Got UNS File[%3d]@%d %d Bytes\n",fid,offset,length);
Jeej 0:a2bbc478f812 76 if (i_type == ALP_ITF_TYPE_D7A)
Jeej 0:a2bbc478f812 77 {
Jeej 0:a2bbc478f812 78 static union {
Jeej 0:a2bbc478f812 79 u8 b[8];
Jeej 0:a2bbc478f812 80 u32 w[2];
Jeej 0:a2bbc478f812 81 } uid;
Jeej 0:a2bbc478f812 82 d7a_sp_res_t* istat = (d7a_sp_res_t*) i_data;
Jeej 0:a2bbc478f812 83 memcpy(uid.b,istat->addressee.id,8);
Jeej 0:a2bbc478f812 84 PRINT("From UID: %08X%08X (rxlev:%d lb:%d)\n",
Jeej 0:a2bbc478f812 85 HAL_U32_BYTE_SWAP(uid.w[0]), HAL_U32_BYTE_SWAP(uid.w[1]),
Jeej 0:a2bbc478f812 86 istat->rxlev, istat->lb);
Jeej 0:a2bbc478f812 87 }
Jeej 0:a2bbc478f812 88 }
Jeej 0:a2bbc478f812 89
Jeej 0:a2bbc478f812 90 void my_lqual(u8 ifid, int per)
Jeej 0:a2bbc478f812 91 {
Jeej 0:a2bbc478f812 92 PRINT("Interface File [%3d] LQUAL : %d%% PER\r\n", ifid, per);
Jeej 0:a2bbc478f812 93 }
Jeej 0:a2bbc478f812 94
Jeej 0:a2bbc478f812 95 void my_ldown(u8 ifid)
Jeej 0:a2bbc478f812 96 {
Jeej 0:a2bbc478f812 97 PRINT("Interface File [%3d] LDOWN\r\n", ifid);
Jeej 0:a2bbc478f812 98 }
Jeej 0:a2bbc478f812 99
Jeej 0:a2bbc478f812 100 void my_reset(void)
Jeej 0:a2bbc478f812 101 {
Jeej 0:a2bbc478f812 102 PRINT("Restarting application...\r\n");
Jeej 0:a2bbc478f812 103 FLUSH();
Jeej 0:a2bbc478f812 104 NVIC_SystemReset();
Jeej 0:a2bbc478f812 105 }
Jeej 0:a2bbc478f812 106
Jeej 0:a2bbc478f812 107 void my_boot(u8 cause, u16 number)
Jeej 0:a2bbc478f812 108 {
Jeej 0:a2bbc478f812 109 PRINT("Modem BOOT[%c] #%d\r\n", cause, number);
Jeej 0:a2bbc478f812 110
Jeej 0:a2bbc478f812 111 // Modem re-booted, restart APP
Jeej 0:a2bbc478f812 112 my_reset();
Jeej 0:a2bbc478f812 113 }