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.
Dependencies: Socket USBHostWANDongle lwip-sys lwip
Fork of VodafoneUSBModem by
Revision 91:7b311719374d, committed 2013-09-20
- Comitter:
- ashleymills
- Date:
- Fri Sep 20 10:40:58 2013 +0000
- Parent:
- 90:f8d65dc86a97
- Child:
- 92:ed0443728c60
- Commit message:
- Added support for Ublox LISA U200 module. Fixed bug for modules that throw away blocked unsolicited messages.
Changed in this revision
--- a/USBHostWANDongle.lib Thu Jun 27 12:16:30 2013 +0000 +++ b/USBHostWANDongle.lib Fri Sep 20 10:40:58 2013 +0000 @@ -1,1 +1,1 @@ -https://mbed.org/users/mbed_official/code/USBHostWANDongle/#b241a57c465b +https://mbed.org/users/mbed_official/code/USBHostWANDongle/#980fe31c14f7
--- a/VodafoneUSBModem.cpp Thu Jun 27 12:16:30 2013 +0000
+++ b/VodafoneUSBModem.cpp Fri Sep 20 10:40:58 2013 +0000
@@ -507,7 +507,7 @@
int VodafoneUSBModem::init()
{
- DBG("Entering init method for the VodafoneUSBModem");
+ //DBG("Entering init method for the VodafoneUSBModem");
if( !m_dongleConnected )
{
DBG("Dongle is not connected");
@@ -576,7 +576,7 @@
return ret;
}
- if(m_dongle.getDongleType() == WAN_DONGLE_TYPE_VODAFONEK3770)
+ if(m_dongle.getDongleType() == WAN_DONGLE_TYPE_VODAFONE_K3770)
{
INFO("Using a Vodafone K3770 Dongle");
#if USE_ONE_PORT
@@ -596,7 +596,7 @@
}
#endif
}
- else if(m_dongle.getDongleType() == WAN_DONGLE_TYPE_VODAFONEK3772Z)
+ else if(m_dongle.getDongleType() == WAN_DONGLE_TYPE_VODAFONE_K3772Z)
{
INFO("Using a Vodafone K3772-Z Dongle");
//FIXME this returns %USBMODEM: [0] MODEM DRIVER<CR><LF><CR><LF><CR><LF>OK<CR><LF> which is not a compliant response
@@ -609,7 +609,7 @@
}
*/
}
- else if(m_dongle.getDongleType()== WAN_DONGLE_TYPE_VODAFONEK3773)
+ else if(m_dongle.getDongleType()== WAN_DONGLE_TYPE_VODAFONE_K3773)
{
INFO("Using a Vodafone K3773 M2M dongle.");
INFO("Disabling sim toolkit notifications");
@@ -623,7 +623,7 @@
return NET_PROTOCOL;
}
}
- else if(m_dongle.getDongleType()== WAN_DONGLE_TYPE_VODAFONEMU509)
+ else if(m_dongle.getDongleType()== WAN_DONGLE_TYPE_HUAWEI_MU509)
{
INFO("Using a Huawei MU509 module.");
m_ppp.setHangupViaATPort(true);
@@ -642,6 +642,18 @@
return NET_PROTOCOL;
}
}
+ else if(m_dongle.getDongleType() == WAN_DONGLE_TYPE_UBLOX_LISAU200)
+ {
+ INFO("Using a u-blox LISA-U");
+
+ /*
+ // change SMS storage to SIM
+ ret = m_at.executeSimple("at+cpms=\"mt\",\"mt\",\"sm\"",NULL);
+ if(ret!=0) {
+ return NET_PROTOCOL;
+ }
+ */
+ }
else
{
WARN("Using an Unknown Dongle");
--- a/at/ATCommandsInterface.cpp Thu Jun 27 12:16:30 2013 +0000
+++ b/at/ATCommandsInterface.cpp Fri Sep 20 10:40:58 2013 +0000
@@ -297,7 +297,7 @@
}
DBG("Command returned successfully");
-
+
return ret;
}
@@ -318,7 +318,20 @@
{
m_inputPos+=readLen;
m_inputBuf[m_inputPos] = '\0'; //Add null terminating character to ease the use of str* functions
- DBG("In buffer: [%s]", m_inputBuf);
+ #if __DEBUG__ >= 4
+ DBGX("In buffer: [");
+ if __DEBUG__
+ for(int i=0; i<strlen(m_inputBuf); i++) {
+ if(m_inputBuf[i]=='\r') {
+ DBGX("<CR>");
+ } else if(m_inputBuf[i]=='\n') {
+ DBGX("<LF>");
+ } else {
+ DBGX("%c",m_inputBuf[i]);
+ }
+ }
+ DBGX("]\r\n");
+ #endif
}
if( ret == NET_INTERRUPTED ) //It is worth checking readLen as data might have been read even though the read was interrupted
@@ -484,6 +497,7 @@
m_inputBuf[crPos] = '\0';
//Process line
int ret = processReadLine();
+ // ret is non-zero in case of error
if(ret)
{
m_inputPos = 0;
--- a/core/MtxCircBuffer.h Thu Jun 27 12:16:30 2013 +0000
+++ b/core/MtxCircBuffer.h Fri Sep 20 10:40:58 2013 +0000
@@ -54,6 +54,10 @@
void queue(T k)
{
+ // XXX Some modems spew stuff out on multiple interfaces
+ // which can cause the circular buffer to block if
+ // the unread queues are not flushed. Need to make this
+ // non-blocking: just overwrite oldest chars for example.
mtx.lock();
while (((write + 1) % size) == read) //if (isFull())
{
--- a/sms/SMSInterface.cpp Thu Jun 27 12:16:30 2013 +0000
+++ b/sms/SMSInterface.cpp Fri Sep 20 10:40:58 2013 +0000
@@ -103,6 +103,8 @@
}
DBG("SM sent");
+ // since unsolicited events are blocked during send SM events,it makes sense to update the mailbox
+ m_needsUpdate = true;
m_state = SMS_IDLE;
return OK;
}
@@ -281,7 +283,7 @@
{
int crPos = crPtr - m_msg;
//Replace m_inputBuf[crPos] with null-terminating char
- m_msg[crPos] = '\x0';
+ m_msg[crPos] = '\0';
//If there is a CR char, split message there
@@ -363,7 +365,8 @@
//Get index
int msgRef;
- if( std::sscanf(evt, "\"SM\",%d", &msgRef) == 1 )
+ if(( std::sscanf(evt, "\"SM\",%d", &msgRef) == 1 ) ||
+ ( std::sscanf(evt, "\"ME\",%d", &msgRef) == 1 )) // ublox modules preferentially use ME for storage
{
DBG("Adding message to list (ref %d)", msgRef);
if(m_inboxMtx.trylock())
