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.

Dependents:   HTTPClient_Cellular_HelloWorld Cellular_HelloMQTT MbedSmartRestMain Car_Bon_car_module ... more

This library is intended to be used with u-blox products such as the C027 or a shield with u-blox cellular and GPS modules like the cellular and positioning shield from Embedded Artist.

For 2G/GSM and 3G/UMTS you need to:

  • have a SIM card and know its PIN number
  • need to know you network operators APN setting These setting should be passed to the connect or init and join functions. You can also extend the APN database in MDMAPN.h.

For CDMA products you need to make sure that you have provisioned and activated the modem with either Sprint or Verizon.

Committer:
mazgch
Date:
Sun Nov 10 16:39:42 2013 +0000
Revision:
9:e7a5959ffae1
Child:
11:b084552b03fe
update support library (tx pipe)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazgch 9:e7a5959ffae1 1 #pragma once
mazgch 9:e7a5959ffae1 2
mazgch 9:e7a5959ffae1 3 #include "SerialPipe.h"
mazgch 9:e7a5959ffae1 4
mazgch 9:e7a5959ffae1 5 SerialPipe::SerialPipe(PinName tx, PinName rx, int rxSize, int txSize, const char* name)
mazgch 9:e7a5959ffae1 6 : Serial(tx,rx,name), _pipeRx(rxSize), _pipeTx(txSize)
mazgch 9:e7a5959ffae1 7 {
mazgch 9:e7a5959ffae1 8 attach(this, &SerialPipe::rxIrqBuf, RxIrq);
mazgch 9:e7a5959ffae1 9 attach(this, &SerialPipe::txIrqBuf, TxIrq);
mazgch 9:e7a5959ffae1 10 }
mazgch 9:e7a5959ffae1 11
mazgch 9:e7a5959ffae1 12 SerialPipe::~SerialPipe(void)
mazgch 9:e7a5959ffae1 13 {
mazgch 9:e7a5959ffae1 14 attach(NULL, RxIrq);
mazgch 9:e7a5959ffae1 15 attach(NULL, TxIrq);
mazgch 9:e7a5959ffae1 16 }
mazgch 9:e7a5959ffae1 17
mazgch 9:e7a5959ffae1 18 // tx channel
mazgch 9:e7a5959ffae1 19 int SerialPipe::put(const char* b, int s, bool t)
mazgch 9:e7a5959ffae1 20 {
mazgch 9:e7a5959ffae1 21 int c = 0;
mazgch 9:e7a5959ffae1 22 while (s && t)
mazgch 9:e7a5959ffae1 23 {
mazgch 9:e7a5959ffae1 24 c += _pipeTx.put(b, s, false);
mazgch 9:e7a5959ffae1 25 b ++;
mazgch 9:e7a5959ffae1 26 s --;
mazgch 9:e7a5959ffae1 27 // give a chance to start tx
mazgch 9:e7a5959ffae1 28 __disable_irq();
mazgch 9:e7a5959ffae1 29 txIrqBuf();
mazgch 9:e7a5959ffae1 30 __enable_irq();
mazgch 9:e7a5959ffae1 31 }
mazgch 9:e7a5959ffae1 32 return c;
mazgch 9:e7a5959ffae1 33 }
mazgch 9:e7a5959ffae1 34
mazgch 9:e7a5959ffae1 35 void SerialPipe::txIrqBuf(void)
mazgch 9:e7a5959ffae1 36 {
mazgch 9:e7a5959ffae1 37 while (serial_writable(&_serial) && _pipeTx.readable())
mazgch 9:e7a5959ffae1 38 serial_putc(&_serial, _pipeTx.getc());
mazgch 9:e7a5959ffae1 39 }
mazgch 9:e7a5959ffae1 40
mazgch 9:e7a5959ffae1 41 // rx channel
mazgch 9:e7a5959ffae1 42 int SerialPipe::readable(void)
mazgch 9:e7a5959ffae1 43 {
mazgch 9:e7a5959ffae1 44 return _pipeRx.readable();
mazgch 9:e7a5959ffae1 45 }
mazgch 9:e7a5959ffae1 46
mazgch 9:e7a5959ffae1 47 int SerialPipe::getc(void)
mazgch 9:e7a5959ffae1 48 {
mazgch 9:e7a5959ffae1 49 return _pipeRx.getc();
mazgch 9:e7a5959ffae1 50 }
mazgch 9:e7a5959ffae1 51
mazgch 9:e7a5959ffae1 52 int SerialPipe::get(char* b, int s, bool t)
mazgch 9:e7a5959ffae1 53 {
mazgch 9:e7a5959ffae1 54 return _pipeRx.get(b,s,t);
mazgch 9:e7a5959ffae1 55 }
mazgch 9:e7a5959ffae1 56
mazgch 9:e7a5959ffae1 57 void SerialPipe::rxIrqBuf(void)
mazgch 9:e7a5959ffae1 58 {
mazgch 9:e7a5959ffae1 59 while (serial_readable(&_serial))
mazgch 9:e7a5959ffae1 60 {
mazgch 9:e7a5959ffae1 61 char ch = serial_getc(&_serial);
mazgch 9:e7a5959ffae1 62 if (_pipeRx.writeable())
mazgch 9:e7a5959ffae1 63 _pipeRx.putc(ch);
mazgch 9:e7a5959ffae1 64 else
mazgch 9:e7a5959ffae1 65 /* overflow */;
mazgch 9:e7a5959ffae1 66 }
mazgch 9:e7a5959ffae1 67 }
mazgch 9:e7a5959ffae1 68
mazgch 9:e7a5959ffae1 69 // -----------------------------------------------------------------------
mazgch 9:e7a5959ffae1 70
mazgch 9:e7a5959ffae1 71 SerialPipeEx::SerialPipeEx(PinName tx, PinName rx, int rxSize, int txSize, const char* name)
mazgch 9:e7a5959ffae1 72 : SerialPipe(tx,rx,rxSize,txSize,name)
mazgch 9:e7a5959ffae1 73 {}
mazgch 9:e7a5959ffae1 74
mazgch 9:e7a5959ffae1 75 int SerialPipeEx::getLine(char* b, int s)
mazgch 9:e7a5959ffae1 76 {
mazgch 9:e7a5959ffae1 77 int o = 0;
mazgch 9:e7a5959ffae1 78 int i = 0;
mazgch 9:e7a5959ffae1 79 int l = _pipeRx.start();
mazgch 9:e7a5959ffae1 80 while ((i < l) && (o < s))
mazgch 9:e7a5959ffae1 81 {
mazgch 9:e7a5959ffae1 82 int t = _pipeRx.next();
mazgch 9:e7a5959ffae1 83 i ++;
mazgch 9:e7a5959ffae1 84 if (t == '\r') // terminate commands with carriage return
mazgch 9:e7a5959ffae1 85 {
mazgch 9:e7a5959ffae1 86 _pipeRx.done();
mazgch 9:e7a5959ffae1 87 return o; // if enter send the zero char
mazgch 9:e7a5959ffae1 88 }
mazgch 9:e7a5959ffae1 89 else if (t == '\n') // skip/filter new line
mazgch 9:e7a5959ffae1 90 /* skip */;
mazgch 9:e7a5959ffae1 91 else if (t != '\b') // normal char (no backspace)
mazgch 9:e7a5959ffae1 92 b[o++] = t;
mazgch 9:e7a5959ffae1 93 else if (o > 0) // backspace
mazgch 9:e7a5959ffae1 94 o --; // remove it
mazgch 9:e7a5959ffae1 95 }
mazgch 9:e7a5959ffae1 96 o = 0;
mazgch 9:e7a5959ffae1 97 return WAIT;
mazgch 9:e7a5959ffae1 98 }