Fork of C027_Support by u-blox


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.

Tue Apr 08 15:48:16 2014 +0000
add sms count api

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazgch 17:296d94a006b4 1 #pragma once
mazgch 17:296d94a006b4 2
mazgch 17:296d94a006b4 3 #include "mbed.h"
mazgch 21:c4d64830bf02 4 #include <stdarg.h>
mazgch 21:c4d64830bf02 5
mazgch 18:e5697801df29 6 #include "Pipe.h"
mazgch 18:e5697801df29 7 #include "SerialPipe.h"
mazgch 17:296d94a006b4 8
mazgch 19:2b5d097ca15d 9 #ifdef TARGET_UBLOX_C027
mazgch 19:2b5d097ca15d 10 // if we detect the C027 platform we will assign the
mazgch 19:2b5d097ca15d 11 // default pinname and baudrate in the constructor
mazgch 19:2b5d097ca15d 12 // this helper macro will be used.
mazgch 19:2b5d097ca15d 13 #define _C027DEFAULT(name) = name
mazgch 19:2b5d097ca15d 14 #else
mazgch 19:2b5d097ca15d 15 #define _C027DEFAULT(name)
mazgch 19:2b5d097ca15d 16 #endif
mazgch 18:e5697801df29 17
mazgch 18:e5697801df29 18 class MDMParser
mazgch 18:e5697801df29 19 {
mazgch 18:e5697801df29 20 public:
mazgch 21:c4d64830bf02 21 // waitFinalResp Responses
mazgch 21:c4d64830bf02 22 #define NOT_FOUND 0
mazgch 21:c4d64830bf02 23 #define WAIT -1 // TIMEOUT
mazgch 21:c4d64830bf02 24 #define OK -2
mazgch 21:c4d64830bf02 25 #define ERROR -3
mazgch 21:c4d64830bf02 26 #define PROMPT -4
mazgch 21:c4d64830bf02 27 // getLine Responses
mazgch 21:c4d64830bf02 28 #define LENGTH(x) (x & 0x00FFFF)
mazgch 21:c4d64830bf02 29 #define TYPE(x) (x & 0xFF0000)
mazgch 21:c4d64830bf02 30 #define TYPE_UNKNOWN 0x000000
mazgch 21:c4d64830bf02 31 #define TYPE_OK 0x110000
mazgch 21:c4d64830bf02 32 #define TYPE_ERROR 0x120000
mazgch 21:c4d64830bf02 33 #define TYPE_RING 0x210000
mazgch 21:c4d64830bf02 34 #define TYPE_CONNECT 0x220000
mazgch 21:c4d64830bf02 35 #define TYPE_NOCARRIER 0x230000
mazgch 21:c4d64830bf02 36 #define TYPE_NODIALTONE 0x240000
mazgch 21:c4d64830bf02 37 #define TYPE_BUSY 0x250000
mazgch 21:c4d64830bf02 38 #define TYPE_NOANSWER 0x260000
mazgch 21:c4d64830bf02 39 #define TYPE_PROMPT 0x300000
mazgch 21:c4d64830bf02 40 #define TYPE_PLUS 0x400000
mazgch 21:c4d64830bf02 41 // Socket Return Codes
mazgch 21:c4d64830bf02 42 #define SOCKET_ERROR -1
mazgch 21:c4d64830bf02 43 #define SOCKET_OK 0
mazgch 22:29322c22577e 44 typedef uint32_t IP;
mazgch 28:4d9509e3b1cf 45
mazgch 28:4d9509e3b1cf 46 typedef enum { MODEL_UNKNOWN, MODEL_SARA_G350, MODEL_LISA_U200, MODEL_LISA_C200 } Model;
mazgch 28:4d9509e3b1cf 47 typedef enum { SIM_UNKNOWN, SIM_PIN, SIM_READY } Sim;
mazgch 28:4d9509e3b1cf 48 typedef struct { Model model; Sim sim; const char* imsi; const char* imei; const char* ccid; } DevStatus;
mazgch 25:4045d02e44f1 49 typedef enum { NET_UNKNOWN, NET_DENIED, NET_NONE, NET_HOME, NET_ROAMING } Net;
mazgch 25:4045d02e44f1 50 typedef enum { ACT_UNKNOWN, ACT_GSM, ACT_EDGE, ACT_UTRAN, ACT_CDMA } AcT;
mazgch 28:4d9509e3b1cf 51 typedef struct { const char* num; const char* opr; int rssi; Net net; AcT act; } NetStatus;
mazgch 21:c4d64830bf02 52
mazgch 21:c4d64830bf02 53 MDMParser(void);
mazgch 18:e5697801df29 54
mazgch 21:c4d64830bf02 55 // interaction with AT command interface
mazgch 18:e5697801df29 56 virtual int getLine(char* buf, int len) = 0;
mazgch 18:e5697801df29 57 virtual int send(const char* buf, int len);
mazgch 21:c4d64830bf02 58 int sendFormated(const char* format, ...);
mazgch 26:07be5faf8925 59
mazgch 26:07be5faf8925 60 typedef int (*_CALLBACKPTR)(int type, const char* buf, int len, void* param);
mazgch 26:07be5faf8925 61 int waitFinalResp(_CALLBACKPTR = NULL,
mazgch 26:07be5faf8925 62 void* param = NULL,
mazgch 26:07be5faf8925 63 int timeout_ms = 5000);
mazgch 26:07be5faf8925 64 template<class T>
mazgch 26:07be5faf8925 65 int waitFinalResp(int (*cb)(int type, const char* buf, int len,
mazgch 26:07be5faf8925 66 T* param),
mazgch 26:07be5faf8925 67 T* param, int timeout_ms = 5000)
mazgch 26:07be5faf8925 68 {
mazgch 26:07be5faf8925 69 return waitFinalResp((_CALLBACKPTR)cb, (void*)param, timeout_ms);
mazgch 26:07be5faf8925 70 }
mazgch 21:c4d64830bf02 71 // network
mazgch 28:4d9509e3b1cf 72 bool init(const char* pin = NULL, DevStatus* status = NULL);
mazgch 28:4d9509e3b1cf 73 bool checkNetStatus(NetStatus* status = NULL);
mazgch 21:c4d64830bf02 74 bool powerOff(void);
mazgch 21:c4d64830bf02 75 // internet connection
mazgch 28:4d9509e3b1cf 76 bool join(const char* apn = NULL, const char* user = NULL, const char* password = NULL);
mazgch 21:c4d64830bf02 77 bool disconnect(void);
mazgch 21:c4d64830bf02 78 bool gethostbyname(const char* host, IP* ip);
mazgch 23:05a1aeeb5fd9 79 // socket interface
mazgch 21:c4d64830bf02 80 typedef enum { IPPROTO_TCP, IPPROTO_UDP } IpProtocol;
mazgch 21:c4d64830bf02 81 int socketSocket(IpProtocol ipproto);
mazgch 21:c4d64830bf02 82 bool socketConnect(int socket, const char * host, int port);
mazgch 21:c4d64830bf02 83 int socketSend(int socket, const char * buf, int len);
mazgch 21:c4d64830bf02 84 int socketSendTo(int socket, IP ip, int port, const char * buf, int len);
mazgch 21:c4d64830bf02 85 int socketReadable(int socket);
mazgch 21:c4d64830bf02 86 int socketRecv(int socket, char* buf, int len);
mazgch 21:c4d64830bf02 87 int socketRecvFrom(int socket, char* buf, int len, IP* ip);
mazgch 21:c4d64830bf02 88 bool socketClose(int socket);
mazgch 21:c4d64830bf02 89 bool socketFree(int socket);
mazgch 21:c4d64830bf02 90 // sms
mazgch 29:53d346010624 91 int smsCount(void);
mazgch 21:c4d64830bf02 92 bool smsSend(const char* num, const char* buf);
mazgch 21:c4d64830bf02 93 bool smsDelete(int ix);
mazgch 21:c4d64830bf02 94 bool smsRead(int ix, char* num, char* buf, int len);
mazgch 21:c4d64830bf02 95 // ussd
mazgch 21:c4d64830bf02 96 int ussdCommand(const char* cmd, char* buf, int len);
mazgch 18:e5697801df29 97 protected:
mazgch 18:e5697801df29 98 static int _getLine(Pipe<char>* pipe, char* buffer, int length);
mazgch 21:c4d64830bf02 99 static int _parseMatch(Pipe<char>* pipe, int len, const char* sta, const char* end);
mazgch 21:c4d64830bf02 100 static int _parseFormated(Pipe<char>* pipe, int len, const char* fmt);
mazgch 18:e5697801df29 101 virtual int _send(const void* buf, int len) = 0;
mazgch 21:c4d64830bf02 102 private:
mazgch 21:c4d64830bf02 103 static int _cbATI(int type, const char* buf, int len, Model* model);
mazgch 26:07be5faf8925 104 static int _cbCIMI(int type, const char* buf, int len, char* imsi);
mazgch 21:c4d64830bf02 105 static int _cbUDNSRN(int type, const char* buf, int len, IP* ip);
mazgch 21:c4d64830bf02 106 static int _cbUSOCR(int type, const char* buf, int len, int* socket);
mazgch 21:c4d64830bf02 107 static int _cbUSORD(int type, const char* buf, int len, char* out);
mazgch 21:c4d64830bf02 108 typedef struct { char* buf; IP ip; int port; } USORFparam;
mazgch 21:c4d64830bf02 109 static int _cbUSORF(int type, const char* buf, int len, USORFparam* param);
mazgch 21:c4d64830bf02 110 typedef struct { char* buf; char* num; } CMGRparam;
mazgch 21:c4d64830bf02 111 static int _cbCUSD(int type, const char* buf, int len, char* buf);
mazgch 29:53d346010624 112 static int _cbCPMS(int type, const char* buf, int len, int* num);
mazgch 21:c4d64830bf02 113 static int _cbCMGR(int type, const char* buf, int len, CMGRparam* param);
mazgch 26:07be5faf8925 114 static int _cbCGSN(int type, const char* buf, int len, char* imei);
mazgch 26:07be5faf8925 115 static int _cbGSN(int type, const char* buf, int len, char* imei);
mazgch 26:07be5faf8925 116 static int _cbCCID(int type, const char* buf, int len, char* ccid);
mazgch 21:c4d64830bf02 117 static IP strToIp(const char* str);
mazgch 21:c4d64830bf02 118 IP _ip;
mazgch 21:c4d64830bf02 119 Model _model;
mazgch 21:c4d64830bf02 120 Sim _sim;
mazgch 21:c4d64830bf02 121 Net _net;
mazgch 25:4045d02e44f1 122 AcT _act;
mazgch 23:05a1aeeb5fd9 123 char _num[32];
mazgch 25:4045d02e44f1 124 char _opr[32];
mazgch 21:c4d64830bf02 125 int _rssi;
mazgch 26:07be5faf8925 126 char _imsi[32];
mazgch 26:07be5faf8925 127 char _imei[32];
mazgch 26:07be5faf8925 128 char _ccid[32];
mazgch 21:c4d64830bf02 129 private:
mazgch 21:c4d64830bf02 130 typedef enum { SOCK_FREE, SOCK_CREATED, SOCK_CONNECTED } SockState;
mazgch 21:c4d64830bf02 131 typedef struct { SockState state; int pending; } SockCtrl;
mazgch 21:c4d64830bf02 132 SockCtrl _sockets[16];
mazgch 18:e5697801df29 133 };
mazgch 18:e5697801df29 134
mazgch 18:e5697801df29 135 // -----------------------------------------------------------------------
mazgch 18:e5697801df29 136
mazgch 18:e5697801df29 137 class MDMSerial : public SerialPipe, public MDMParser
mazgch 17:296d94a006b4 138 {
mazgch 17:296d94a006b4 139 public:
mazgch 19:2b5d097ca15d 140 MDMSerial(PinName tx _C027DEFAULT(MDMTXD),
mazgch 19:2b5d097ca15d 141 PinName rx _C027DEFAULT(MDMRXD),
mazgch 19:2b5d097ca15d 142 int baudrate _C027DEFAULT(MDMBAUD),
mazgch 19:2b5d097ca15d 143 #if DEVICE_SERIAL_FC
mazgch 19:2b5d097ca15d 144 PinName rts _C027DEFAULT(MDMRTS),
mazgch 19:2b5d097ca15d 145 PinName cts _C027DEFAULT(MDMCTS),
mazgch 19:2b5d097ca15d 146 #endif
mazgch 19:2b5d097ca15d 147 int rxSize = 256 ,
mazgch 21:c4d64830bf02 148 int txSize = 128 );
mazgch 18:e5697801df29 149 virtual int getLine(char* buffer, int length);
mazgch 18:e5697801df29 150 protected:
mazgch 18:e5697801df29 151 virtual int _send(const void* buf, int len);
mazgch 17:296d94a006b4 152 };
mazgch 18:e5697801df29 153
mazgch 18:e5697801df29 154 // -----------------------------------------------------------------------
mazgch 18:e5697801df29 155
mazgch 18:e5697801df29 156 #define HAVE_MDMUSB
mazgch 18:e5697801df29 157 #ifdef HAVE_MDMUSB
mazgch 18:e5697801df29 158 class MDMUsb : /*public UsbSerial,*/ public MDMParser
mazgch 18:e5697801df29 159 {
mazgch 18:e5697801df29 160 public:
mazgch 18:e5697801df29 161 MDMUsb(void);
mazgch 18:e5697801df29 162 virtual int getLine(char* buffer, int length);
mazgch 18:e5697801df29 163 protected:
mazgch 18:e5697801df29 164 virtual int _send(const void* buf, int len);
mazgch 18:e5697801df29 165 };
mazgch 18:e5697801df29 166 #endif
mazgch 18:e5697801df29 167
mazgch 18:e5697801df29 168