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: GPS_6Axis_DataLogger_SD_UDP
Fork of C027_Support by
MDM.cpp
- Committer:
- mazgch
- Date:
- 2014-03-24
- Revision:
- 19:2b5d097ca15d
- Parent:
- 18:e5697801df29
- Child:
- 21:c4d64830bf02
File content as of revision 19:2b5d097ca15d:
#include "mbed.h"
#include <ctype.h>
#include "MDM.h"
int MDMParser::send(const char* buf, int len)
{
return _send(buf, len);
}
int MDMParser::_getLine(Pipe<char>* pipe, char* buffer, int length)
{
int o = 0;
int i = 0;
int l = pipe->start();
while ((i < l) && (o < length))
{
int t = pipe->next();
i ++;
if (t == '\r') // terminate commands with carriage return
{
pipe->done();
if (length > o)
buffer[o] = '\0';
return o; // if enter send the zero char
}
else if (t == '\n') // skip/filter new line
/* skip */;
else if (t != '\b') // normal char (no backspace)
buffer[o++] = t;
else if (o > 0) // backspace
o --; // remove it
}
o = 0;
if (length > 0)
buffer[0] = '\0';
return WAIT;
}
int MDMParser::_getResp(Pipe<char>* pipe, char* buffer, int length)
{
int o = 0;
int i = 0;
int l = pipe->start();
static const char erTxt[] = "ERROR\r\n";
static const char okTxt[] = "OK\r\n";
int er = 0;
int ok = 0;
while ((i < pipe->size()) && (o < length))
{
int t = pipe->next();
i ++;
buffer[o++] = t;
ok = (t == okTxt[ok]) ? ok + 1 : 0;
er = (t == erTxt[er]) ? er + 1 : 0;
if ((okTxt[ok] == '\0') || (erTxt[er] == '\0'))
{
pipe->done();
if (length > o)
buffer[o] = '\0';
return o;
}
}
o = 0;
if (length > 0)
buffer[0] = '\0';
return WAIT;
}
// ----------------------------------------------------------------
// Serial Implementation
// ----------------------------------------------------------------
MDMSerial::MDMSerial(PinName tx /*= MDMTXD*/, PinName rx /*= MDMRXD*/,
int baudrate /*= MDMBAUD*/,
#if DEVICE_SERIAL_FC
PinName rts /*= MDMRTS*/, PinName cts /*= MDMCTS*/,
#endif
int rxSize /*= 256*/, int txSize /*= 128*/) :
#if DEVICE_SERIAL_FC
SerialPipe(tx, rx, rts, cts, rxSize, txSize)
#else
SerialPipe(tx, rx, rxSize, txSize)
#endif
{
baud(baudrate);
}
int MDMSerial::_send(const void* buf, int len)
{
return put((const char*)buf, len, true/*=blocking*/);
}
int MDMSerial::getLine(char* buffer, int length)
{
return _getLine(&_pipeRx, buffer, length);
}
int MDMSerial::getResp(char* buffer, int length)
{
return _getResp(&_pipeRx, buffer, length);
}
// ----------------------------------------------------------------
// USB Implementation
// ----------------------------------------------------------------
#ifdef HAVE_MDMUSB
// TODO properly implement with USB
MDMUsb::MDMUsb(void) { }
int MDMUsb::_send(const void* buf, int len) { return len; }
int MDMUsb::getLine(char* buffer, int length) { return NOT_FOUND; }
int MDMUsb::getResp(char* buffer, int length) { return NOT_FOUND; }
#endif
