C027_SupportTest_xively_locationで使用しているC027用ライブラリ

Fork of C027_Support by u-blox

下記のプログラムC027_SupportTest_xively_locationで使用しているC027用ライブラリです。

Import programC027_SupportTest_xively_location

インターフェース2014年10月号のu-blox C027で3G通信する記事で使用したプログラム。   CQ publishing Interface 2014.10 issue, C027 3G test program.

オリジナルのライブラリは下記を参照してください。

Import libraryC027_Support

support library for C027 helper functions for Buffer Pipes, Buffered Serial Port (rtos capable) and GPS parsing. It includes modem APIs for USSD, SMS and Sockets.

Committer:
mazgch
Date:
Mon Mar 24 07:38:05 2014 +0000
Revision:
19:2b5d097ca15d
Parent:
18:e5697801df29
Child:
21:c4d64830bf02
prepare for native C027 platform support; add api to get lat/lon; better separation of mdm libarary from serial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazgch 18:e5697801df29 1 #include "mbed.h"
mazgch 18:e5697801df29 2 #include <ctype.h>
mazgch 18:e5697801df29 3 #include "MDM.h"
mazgch 18:e5697801df29 4
mazgch 18:e5697801df29 5
mazgch 18:e5697801df29 6 int MDMParser::send(const char* buf, int len)
mazgch 18:e5697801df29 7 {
mazgch 18:e5697801df29 8 return _send(buf, len);
mazgch 18:e5697801df29 9 }
mazgch 18:e5697801df29 10
mazgch 18:e5697801df29 11 int MDMParser::_getLine(Pipe<char>* pipe, char* buffer, int length)
mazgch 18:e5697801df29 12 {
mazgch 18:e5697801df29 13 int o = 0;
mazgch 18:e5697801df29 14 int i = 0;
mazgch 18:e5697801df29 15 int l = pipe->start();
mazgch 18:e5697801df29 16 while ((i < l) && (o < length))
mazgch 18:e5697801df29 17 {
mazgch 18:e5697801df29 18 int t = pipe->next();
mazgch 18:e5697801df29 19 i ++;
mazgch 18:e5697801df29 20 if (t == '\r') // terminate commands with carriage return
mazgch 18:e5697801df29 21 {
mazgch 18:e5697801df29 22 pipe->done();
mazgch 18:e5697801df29 23 if (length > o)
mazgch 18:e5697801df29 24 buffer[o] = '\0';
mazgch 18:e5697801df29 25 return o; // if enter send the zero char
mazgch 18:e5697801df29 26 }
mazgch 18:e5697801df29 27 else if (t == '\n') // skip/filter new line
mazgch 18:e5697801df29 28 /* skip */;
mazgch 18:e5697801df29 29 else if (t != '\b') // normal char (no backspace)
mazgch 18:e5697801df29 30 buffer[o++] = t;
mazgch 18:e5697801df29 31 else if (o > 0) // backspace
mazgch 18:e5697801df29 32 o --; // remove it
mazgch 18:e5697801df29 33 }
mazgch 18:e5697801df29 34 o = 0;
mazgch 18:e5697801df29 35 if (length > 0)
mazgch 18:e5697801df29 36 buffer[0] = '\0';
mazgch 18:e5697801df29 37 return WAIT;
mazgch 18:e5697801df29 38 }
mazgch 18:e5697801df29 39
mazgch 18:e5697801df29 40 int MDMParser::_getResp(Pipe<char>* pipe, char* buffer, int length)
mazgch 18:e5697801df29 41 {
mazgch 18:e5697801df29 42 int o = 0;
mazgch 18:e5697801df29 43 int i = 0;
mazgch 18:e5697801df29 44 int l = pipe->start();
mazgch 18:e5697801df29 45 static const char erTxt[] = "ERROR\r\n";
mazgch 18:e5697801df29 46 static const char okTxt[] = "OK\r\n";
mazgch 18:e5697801df29 47 int er = 0;
mazgch 18:e5697801df29 48 int ok = 0;
mazgch 18:e5697801df29 49 while ((i < pipe->size()) && (o < length))
mazgch 18:e5697801df29 50 {
mazgch 18:e5697801df29 51 int t = pipe->next();
mazgch 18:e5697801df29 52 i ++;
mazgch 18:e5697801df29 53 buffer[o++] = t;
mazgch 18:e5697801df29 54 ok = (t == okTxt[ok]) ? ok + 1 : 0;
mazgch 18:e5697801df29 55 er = (t == erTxt[er]) ? er + 1 : 0;
mazgch 18:e5697801df29 56 if ((okTxt[ok] == '\0') || (erTxt[er] == '\0'))
mazgch 18:e5697801df29 57 {
mazgch 18:e5697801df29 58 pipe->done();
mazgch 18:e5697801df29 59 if (length > o)
mazgch 18:e5697801df29 60 buffer[o] = '\0';
mazgch 18:e5697801df29 61 return o;
mazgch 18:e5697801df29 62 }
mazgch 18:e5697801df29 63 }
mazgch 18:e5697801df29 64 o = 0;
mazgch 18:e5697801df29 65 if (length > 0)
mazgch 18:e5697801df29 66 buffer[0] = '\0';
mazgch 18:e5697801df29 67 return WAIT;
mazgch 18:e5697801df29 68 }
mazgch 18:e5697801df29 69
mazgch 18:e5697801df29 70 // ----------------------------------------------------------------
mazgch 18:e5697801df29 71 // Serial Implementation
mazgch 18:e5697801df29 72 // ----------------------------------------------------------------
mazgch 18:e5697801df29 73
mazgch 19:2b5d097ca15d 74 MDMSerial::MDMSerial(PinName tx /*= MDMTXD*/, PinName rx /*= MDMRXD*/,
mazgch 19:2b5d097ca15d 75 int baudrate /*= MDMBAUD*/,
mazgch 19:2b5d097ca15d 76 #if DEVICE_SERIAL_FC
mazgch 19:2b5d097ca15d 77 PinName rts /*= MDMRTS*/, PinName cts /*= MDMCTS*/,
mazgch 19:2b5d097ca15d 78 #endif
mazgch 18:e5697801df29 79 int rxSize /*= 256*/, int txSize /*= 128*/) :
mazgch 19:2b5d097ca15d 80 #if DEVICE_SERIAL_FC
mazgch 19:2b5d097ca15d 81 SerialPipe(tx, rx, rts, cts, rxSize, txSize)
mazgch 19:2b5d097ca15d 82 #else
mazgch 18:e5697801df29 83 SerialPipe(tx, rx, rxSize, txSize)
mazgch 19:2b5d097ca15d 84 #endif
mazgch 18:e5697801df29 85 {
mazgch 18:e5697801df29 86 baud(baudrate);
mazgch 18:e5697801df29 87 }
mazgch 18:e5697801df29 88
mazgch 18:e5697801df29 89 int MDMSerial::_send(const void* buf, int len)
mazgch 18:e5697801df29 90 {
mazgch 18:e5697801df29 91 return put((const char*)buf, len, true/*=blocking*/);
mazgch 18:e5697801df29 92 }
mazgch 18:e5697801df29 93
mazgch 18:e5697801df29 94 int MDMSerial::getLine(char* buffer, int length)
mazgch 18:e5697801df29 95 {
mazgch 18:e5697801df29 96 return _getLine(&_pipeRx, buffer, length);
mazgch 18:e5697801df29 97 }
mazgch 18:e5697801df29 98
mazgch 18:e5697801df29 99 int MDMSerial::getResp(char* buffer, int length)
mazgch 18:e5697801df29 100 {
mazgch 18:e5697801df29 101 return _getResp(&_pipeRx, buffer, length);
mazgch 18:e5697801df29 102 }
mazgch 18:e5697801df29 103
mazgch 18:e5697801df29 104 // ----------------------------------------------------------------
mazgch 18:e5697801df29 105 // USB Implementation
mazgch 18:e5697801df29 106 // ----------------------------------------------------------------
mazgch 18:e5697801df29 107
mazgch 18:e5697801df29 108 #ifdef HAVE_MDMUSB
mazgch 18:e5697801df29 109 // TODO properly implement with USB
mazgch 18:e5697801df29 110 MDMUsb::MDMUsb(void) { }
mazgch 18:e5697801df29 111 int MDMUsb::_send(const void* buf, int len) { return len; }
mazgch 18:e5697801df29 112 int MDMUsb::getLine(char* buffer, int length) { return NOT_FOUND; }
mazgch 18:e5697801df29 113 int MDMUsb::getResp(char* buffer, int length) { return NOT_FOUND; }
mazgch 18:e5697801df29 114 #endif