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.
Fork of C027_Support by
Diff: MDM.h
- Revision:
- 95:8282dbbe1492
- Parent:
- 94:d697fe11f3e5
--- a/MDM.h Thu Jun 12 12:41:26 2014 +0000
+++ b/MDM.h Tue Jun 17 07:03:48 2014 +0000
@@ -493,6 +493,16 @@
static int _parseFormated(Pipe<char>* pipe, int len, const char* fmt);
protected:
+ // for rtos over riding by useing Rtos<MDMxx>
+ /** override in a rtos system, you us the wait function of a Thread
+ \param ms the number of milliseconds to wait
+ */
+ virtual void wait_ms(int ms) { if (ms) ::wait_ms(ms); }
+ //! override the lock in a rtos system
+ virtual void lock(void) { }
+ //! override the unlock in a rtos system
+ virtual void unlock(void) { }
+protected:
// parsing callbacks for different AT commands and their parameter arguments
static int _cbString(int type, const char* buf, int len, char* str);
static int _cbInt(int type, const char* buf, int len, int* val);
@@ -530,7 +540,7 @@
IP _ip; //!< assigned ip address
// management struture for sockets
typedef enum { SOCK_FREE, SOCK_CREATED, SOCK_CONNECTED } SockState;
- typedef struct { SockState state; int pending; int timeout_ms; } SockCtrl;
+ typedef struct { volatile SockState state; volatile int pending; int timeout_ms; } SockCtrl;
// LISA-C has 6 TCP and 6 UDP sockets starting at index 18
// LISA-U and SARA-G have 7 sockets starting at index 1
SockCtrl _sockets[32];
@@ -594,7 +604,6 @@
virtual int _send(const void* buf, int len);
};
-
// -----------------------------------------------------------------------
//#define HAVE_MDMUSB
@@ -612,4 +621,27 @@
};
#endif
+// -----------------------------------------------------------------------
+#ifdef RTOS_H
+/** Use this template to override the lock and wait functions of the
+ modem driver in a Rtos system. For example declare it the modem
+ object as MDMRtos<MDMSerial> instead of MDMSerial.
+*/
+template <class T>
+class MDMRtos : public T
+{
+protected:
+ //! we assume that the modem runs in a thread so we yield when waiting
+ virtual void wait_ms(int ms) {
+ if (ms) Thread::wait(ms);
+ else Thread::yield();
+ }
+ //! lock a mutex when accessing the modem
+ virtual void lock(void) { _mtx.lock(); }
+ //! unlock the modem when done accessing it
+ virtual void unlock(void) { _mtx.unlock(); }
+ // the mutex resource
+ Mutex _mtx;
+};
+#endif
\ No newline at end of file
