Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: modem_ref_helper_for_v5_3_217
Diff: src/modem_ref.cpp
- Revision:
- 46:9b83866cef2c
- Parent:
- 45:6a4c373e1178
- Child:
- 50:9eb5eed8b014
--- a/src/modem_ref.cpp Wed Feb 20 13:43:19 2019 +0000
+++ b/src/modem_ref.cpp Wed Jul 31 16:48:48 2019 +0000
@@ -41,12 +41,6 @@
#define ROOT_KEY_SIZE 16
-#define SERIAL_SEND(_flow,_data,_size) do { \
- ASSERT(_size<256, "SERIAL_SEND too big for serial protocol (%d/%dmax)", _size, 255);\
- u8 wch[WC_HEADER_SIZE] = {WC_SYNC_BYTE_0,WC_SYNC_BYTE_1,_size,g_modem.tx_sequ++,_flow};\
- g_modem.send(wch,WC_HEADER_SIZE,_data,_size);\
-}while(0)
-
// Flows
#define WC_FLOWID_CMD 0x10
#define WC_FLOWID_ALP 0x20
@@ -67,6 +61,21 @@
// Misc CMD...
#define WM_BOOT 0x81
+static void serial_send(u8 flowid, u8* data, int size)
+{
+ u8 len = (u8)size;
+ u8 wch[WC_HEADER_SIZE] = {
+ WC_SYNC_BYTE_0,
+ WC_SYNC_BYTE_1,
+ len,
+ g_modem.tx_sequ++,
+ flowid
+ };
+
+ ASSERT(size < 256, "serial_send too big for serial protocol (%d/%dmax)", size, 255);
+
+ g_modem.send(wch, WC_HEADER_SIZE, data, len);
+}
protected void modem_input(u8 flowid,u8* payload,u8 size)
{
@@ -423,7 +432,7 @@
public void modem_reset(void)
{
- SERIAL_SEND(WC_FLOW_SYS_RST,NULL,0);
+ serial_send(WC_FLOW_SYS_RST,NULL,0);
}
public void modem_read_file(u8 fid, void *data, u32 offset, u32 length, u8 id)
@@ -434,7 +443,7 @@
g_modem.user[id].data = (u8*)data;
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_RD_DATA(p,true,fid,offset,length);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_read_fprop(u8 fid, alp_file_header_t* data, u8 id)
@@ -445,7 +454,7 @@
g_modem.user[id].data = (u8*)data;
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_RD_PROP(p,true,fid);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_read_fprop_root(u8 fid, alp_file_header_t* data, u8* root_key, u8 id)
@@ -464,7 +473,7 @@
modem_add_root_permission(&tmp[ALP_ACTION_TAG_SIZE], root_key,
&tmp[ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_OFFSET],
ALP_ACTION_F_RD_PROP_SIZE);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(lastp-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (lastp-tmp));
}
public void modem_write_fprop(u8 fid, alp_file_header_t* data, u8 id)
@@ -474,7 +483,7 @@
DPRINT(L_API, "WR PROPS[%d]\n",fid);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_WR_PROP(p,true,fid,0,sizeof(alp_file_header_t),data);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_write_fprop_root(u8 fid, alp_file_header_t* data, u8* root_key, u8 id)
@@ -492,24 +501,24 @@
modem_add_root_permission(&tmp[ALP_ACTION_TAG_SIZE], root_key,
&tmp[ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_OFFSET],
ALP_ACTION_F_WR_PROP_SIZE_MAX);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(lastp-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (lastp-tmp));
}
public void modem_write_file(u8 fid, void *data, u32 offset, u32 length, u8 id)
{
- ALLOC_BUFFER(u8,tmp,(ALP_ACTION_TAG_SIZE + ALP_ACTION_F_WR_DATA_SIZE_MAX(length)));
+ ALLOC_BUFFER(u8, tmp,(ALP_ACTION_TAG_SIZE + ALP_ACTION_F_WR_DATA_SIZE_MAX(length)));
u8* p = tmp;
REF_PRINT("WR[%d]@%d %d Bytes\n",fid,offset,length);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_WR_DATA(p,true,fid,offset,length,data);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
public void modem_write_file_root(u8 fid, void *data, u32 offset, u32 length, u8* root_key, u8 id)
{
- ALLOC_BUFFER(u8,tmp,(ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_SIZE(ALP_ACTION_F_WR_DATA_SIZE_MAX(length))));
+ ALLOC_BUFFER(u8, tmp,(ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_SIZE(ALP_ACTION_F_WR_DATA_SIZE_MAX(length))));
u8* p = tmp;
u8* lastp;
@@ -523,7 +532,7 @@
modem_add_root_permission(&tmp[ALP_ACTION_TAG_SIZE], root_key,
&tmp[ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_OFFSET],
ALP_ACTION_F_WR_DATA_SIZE(offset,length));
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(lastp-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (lastp-tmp));
DEALLOC_BUFFER(tmp);
}
@@ -534,7 +543,7 @@
REF_PRINT("FLUSH[%d]\n",fid);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_FLUSH(p,true,fid);
- SERIAL_SEND(WC_FLOW_ALP_UNS, tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_flush_file_root(u8 fid, u8* root_key, u8 id)
@@ -552,7 +561,7 @@
modem_add_root_permission(&tmp[ALP_ACTION_TAG_SIZE], root_key,
&tmp[ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_OFFSET],
ALP_ACTION_F_FLUSH_SIZE);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(lastp-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (lastp-tmp));
}
public void modem_declare_file(u8 fid, alp_file_header_t* hdr, u8 local, u8 id)
@@ -563,7 +572,7 @@
REF_PRINT("DECLARE[%d]\n",fid);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_DECLARE(p,true,fid,hdr,local);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_create_file(u8 fid, alp_file_header_t* hdr, u8 id)
@@ -574,7 +583,7 @@
REF_PRINT("CREATE[%d]\n",fid);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_CREATE(p,true,fid,hdr);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_notify_file(u8 fid, u32 offset, u32 length, u8 id)
@@ -585,7 +594,7 @@
REF_PRINT("NOTIFY[%d]@%d %d Bytes\n",fid,offset,length);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_TOUCH(p,true,fid,offset,length);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_delete_file(u8 fid, u8 id)
@@ -596,7 +605,7 @@
REF_PRINT("DELETE[%d]\n",fid);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_F_DELETE(p,true,fid);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_delete_file_root(u8 fid, u8* root_key, u8 id)
@@ -614,25 +623,25 @@
modem_add_root_permission(&tmp[ALP_ACTION_TAG_SIZE], root_key,
&tmp[ALP_ACTION_TAG_SIZE + ALP_ACTION_PERM_REQ_OFFSET],
ALP_ACTION_F_DELETE_SIZE);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(lastp-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (lastp-tmp));
}
public void modem_send_raw_alp(u8* payload, u32 length, u8 id)
{
- ALLOC_BUFFER(u8,tmp,ALP_ACTION_TAG_SIZE + length);
+ ALLOC_BUFFER(u8, tmp,ALP_ACTION_TAG_SIZE + length);
u8* p = tmp;
REF_PRINT("ALP RAW %d Bytes\n",length);
ALP_ACTION_TAG(p,id,true);
// User Payload
memcpy(p,payload,length);p+=length;
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
public void modem_send_file_content(u8* itf, u8 itf_length, void *istatus, u8 fid, void *data, u32 offset, u32 length, u8 id)
{
- ALLOC_BUFFER(u8,tmp,ALP_ACTION_TAG_SIZE + ALP_ACTION_FORWARD_SIZE(itf_length) + ALP_ACTION_RSP_F_DATA_SIZE_MAX(length));
+ ALLOC_BUFFER(u8, tmp,ALP_ACTION_TAG_SIZE + ALP_ACTION_FORWARD_SIZE(itf_length) + ALP_ACTION_RSP_F_DATA_SIZE_MAX(length));
u8* p = tmp;
g_modem.user[id].istatus= (u8*)istatus;
@@ -645,13 +654,13 @@
ALP_ACTION_NOP(p,true);
}
ALP_ACTION_RSP_F_DATA(p,fid,offset,length,data);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
public void modem_remote_read_file(u8* itf, u8 itf_length, void *istatus , u8 fid, void *data, u32 offset, u32 length, u8 id)
{
- ALLOC_BUFFER(u8,tmp,ALP_ACTION_TAG_SIZE + ALP_ACTION_FORWARD_SIZE(itf_length) + ALP_ACTION_F_RD_DATA_SIZE_MAX);
+ ALLOC_BUFFER(u8, tmp,ALP_ACTION_TAG_SIZE + ALP_ACTION_FORWARD_SIZE(itf_length) + ALP_ACTION_F_RD_DATA_SIZE_MAX);
u8* p = tmp;
g_modem.user[id].data = (u8*)data;
g_modem.user[id].istatus = (u8*)istatus;
@@ -660,13 +669,13 @@
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_FORWARD(p,itf,itf_length);
ALP_ACTION_F_RD_DATA(p,true,fid,offset,length);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
public void modem_remote_write_file(u8* itf, u8 itf_length, void *istatus, u8 fid, void *data, u32 offset, u32 length, u8 id)
{
- ALLOC_BUFFER(u8,tmp,ALP_ACTION_TAG_SIZE + ALP_ACTION_FORWARD_SIZE(itf_length) + ALP_ACTION_F_WR_DATA_SIZE_MAX(length));
+ ALLOC_BUFFER(u8, tmp,ALP_ACTION_TAG_SIZE + ALP_ACTION_FORWARD_SIZE(itf_length) + ALP_ACTION_F_WR_DATA_SIZE_MAX(length));
u8* p = tmp;
g_modem.user[id].istatus = (u8*)istatus;
@@ -674,7 +683,7 @@
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_FORWARD(p,itf,itf_length);
ALP_ACTION_F_WR_DATA(p,true,fid,offset,length,data);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
@@ -715,7 +724,7 @@
ALP_ACTION_F_WR_DATA_SIZE(offset,length)
);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
@@ -735,7 +744,7 @@
{
ALP_ACTION_URCC_DIS(p,true,type,ifid,val);
}
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_activate_itf(u8 type, u8 nb_dev, u8 ifid, u8 flags, u8 enable, u8 id)
@@ -746,7 +755,7 @@
REF_PRINT("ACTIVATE ITFTYPE[%x]:%d\n",type,enable);
ALP_ACTION_TAG(p,id,true);
ALP_ACTION_ACTIVATE_ITF(p,true,enable,type,nb_dev,ifid,flags);
- SERIAL_SEND(WC_FLOW_ALP_UNS,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_UNS, tmp, (p-tmp));
}
public void modem_respond(s8 status, int id)
@@ -757,7 +766,7 @@
if (id>=0) { ALP_ACTION_RSP_TAG(p,id,true,(status<0)?true:false); }
ALP_ACTION_RSP_STATUS(p, g_modem.action, status);
- SERIAL_SEND(WC_FLOW_ALP_RESP,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_RESP, tmp, (p-tmp));
}
public void modem_respond_fprop(u8 fid, u8* hdr, int id)
@@ -768,16 +777,16 @@
if (id>=0) { ALP_ACTION_RSP_TAG(p,id,true,false); }
ALP_ACTION_RSP_F_PROP(p,fid,hdr);
- SERIAL_SEND(WC_FLOW_ALP_RESP,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_RESP, tmp, (p-tmp));
}
public void modem_respond_read(u8 fid,void *data, u32 offset, u32 length, int id)
{
- ALLOC_BUFFER(u8,tmp,ALP_ACTION_RSP_TAG_SIZE + ALP_ACTION_RSP_F_DATA_SIZE_MAX(length));
+ ALLOC_BUFFER(u8, tmp,ALP_ACTION_RSP_TAG_SIZE + ALP_ACTION_RSP_F_DATA_SIZE_MAX(length));
u8* p = tmp;
REF_PRINT("F_DATA[%d]@%d %d Bytes\n",fid,offset,length);
if (id>=0) { ALP_ACTION_RSP_TAG(p,id,true,false); }
ALP_ACTION_RSP_F_DATA(p,fid,offset,length,data);
- SERIAL_SEND(WC_FLOW_ALP_RESP,tmp, (u8)(p-tmp));
+ serial_send(WC_FLOW_ALP_RESP, tmp, (p-tmp));
DEALLOC_BUFFER(tmp);
}
\ No newline at end of file