Add a bunch of APNs

Fork of C027_Support by Xinlei Cao

Committer:
mazgch
Date:
Tue Apr 08 13:52:07 2014 +0000
Revision:
26:07be5faf8925
Parent:
25:4045d02e44f1
Child:
28:4d9509e3b1cf
extract more device data from modem, use templates to simplify type checking

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 25:4045d02e44f1 45 typedef enum { NET_UNKNOWN, NET_DENIED, NET_NONE, NET_HOME, NET_ROAMING } Net;
mazgch 25:4045d02e44f1 46 typedef enum { ACT_UNKNOWN, ACT_GSM, ACT_EDGE, ACT_UTRAN, ACT_CDMA } AcT;
mazgch 25:4045d02e44f1 47 typedef struct { const char* num; const char* opr; int rssi; Net net; AcT act; } Status;
mazgch 21:c4d64830bf02 48
mazgch 21:c4d64830bf02 49 MDMParser(void);
mazgch 18:e5697801df29 50
mazgch 21:c4d64830bf02 51 // interaction with AT command interface
mazgch 18:e5697801df29 52 virtual int getLine(char* buf, int len) = 0;
mazgch 18:e5697801df29 53 virtual int send(const char* buf, int len);
mazgch 21:c4d64830bf02 54 int sendFormated(const char* format, ...);
mazgch 26:07be5faf8925 55
mazgch 26:07be5faf8925 56 typedef int (*_CALLBACKPTR)(int type, const char* buf, int len, void* param);
mazgch 26:07be5faf8925 57 int waitFinalResp(_CALLBACKPTR = NULL,
mazgch 26:07be5faf8925 58 void* param = NULL,
mazgch 26:07be5faf8925 59 int timeout_ms = 5000);
mazgch 26:07be5faf8925 60 template<class T>
mazgch 26:07be5faf8925 61 int waitFinalResp(int (*cb)(int type, const char* buf, int len,
mazgch 26:07be5faf8925 62 T* param),
mazgch 26:07be5faf8925 63 T* param, int timeout_ms = 5000)
mazgch 26:07be5faf8925 64 {
mazgch 26:07be5faf8925 65 return waitFinalResp((_CALLBACKPTR)cb, (void*)param, timeout_ms);
mazgch 26:07be5faf8925 66 }
mazgch 21:c4d64830bf02 67 // network
mazgch 21:c4d64830bf02 68 bool init(const char* pin = NULL);
mazgch 25:4045d02e44f1 69 bool checkNetStatus(Status* info = NULL);
mazgch 21:c4d64830bf02 70 bool powerOff(void);
mazgch 21:c4d64830bf02 71 // internet connection
mazgch 21:c4d64830bf02 72 bool join(const char* apn, const char* user = NULL, const char* password = NULL);
mazgch 21:c4d64830bf02 73 bool disconnect(void);
mazgch 21:c4d64830bf02 74 bool gethostbyname(const char* host, IP* ip);
mazgch 23:05a1aeeb5fd9 75 // socket interface
mazgch 21:c4d64830bf02 76 typedef enum { IPPROTO_TCP, IPPROTO_UDP } IpProtocol;
mazgch 21:c4d64830bf02 77 int socketSocket(IpProtocol ipproto);
mazgch 21:c4d64830bf02 78 bool socketConnect(int socket, const char * host, int port);
mazgch 21:c4d64830bf02 79 int socketSend(int socket, const char * buf, int len);
mazgch 21:c4d64830bf02 80 int socketSendTo(int socket, IP ip, int port, const char * buf, int len);
mazgch 21:c4d64830bf02 81 int socketReadable(int socket);
mazgch 21:c4d64830bf02 82 int socketRecv(int socket, char* buf, int len);
mazgch 21:c4d64830bf02 83 int socketRecvFrom(int socket, char* buf, int len, IP* ip);
mazgch 21:c4d64830bf02 84 bool socketClose(int socket);
mazgch 21:c4d64830bf02 85 bool socketFree(int socket);
mazgch 21:c4d64830bf02 86 // sms
mazgch 21:c4d64830bf02 87 bool smsSend(const char* num, const char* buf);
mazgch 21:c4d64830bf02 88 bool smsDelete(int ix);
mazgch 21:c4d64830bf02 89 bool smsRead(int ix, char* num, char* buf, int len);
mazgch 21:c4d64830bf02 90 // ussd
mazgch 21:c4d64830bf02 91 int ussdCommand(const char* cmd, char* buf, int len);
mazgch 18:e5697801df29 92 protected:
mazgch 18:e5697801df29 93 static int _getLine(Pipe<char>* pipe, char* buffer, int length);
mazgch 21:c4d64830bf02 94 static int _parseMatch(Pipe<char>* pipe, int len, const char* sta, const char* end);
mazgch 21:c4d64830bf02 95 static int _parseFormated(Pipe<char>* pipe, int len, const char* fmt);
mazgch 18:e5697801df29 96 virtual int _send(const void* buf, int len) = 0;
mazgch 21:c4d64830bf02 97 private:
mazgch 21:c4d64830bf02 98 typedef enum { MODEL_UNKNOWN, MODEL_SARA_G350, MODEL_LISA_U200, MODEL_LISA_C200 } Model;
mazgch 21:c4d64830bf02 99 typedef enum { SIM_UNKNOWN, SIM_PIN, SIM_READY } Sim;
mazgch 21:c4d64830bf02 100 static int _cbATI(int type, const char* buf, int len, Model* model);
mazgch 26:07be5faf8925 101 static int _cbCIMI(int type, const char* buf, int len, char* imsi);
mazgch 21:c4d64830bf02 102 static int _cbUDNSRN(int type, const char* buf, int len, IP* ip);
mazgch 21:c4d64830bf02 103 static int _cbUSOCR(int type, const char* buf, int len, int* socket);
mazgch 21:c4d64830bf02 104 static int _cbUSORD(int type, const char* buf, int len, char* out);
mazgch 21:c4d64830bf02 105 typedef struct { char* buf; IP ip; int port; } USORFparam;
mazgch 21:c4d64830bf02 106 static int _cbUSORF(int type, const char* buf, int len, USORFparam* param);
mazgch 21:c4d64830bf02 107 typedef struct { char* buf; char* num; } CMGRparam;
mazgch 21:c4d64830bf02 108 static int _cbCUSD(int type, const char* buf, int len, char* buf);
mazgch 21:c4d64830bf02 109 static int _cbCMGR(int type, const char* buf, int len, CMGRparam* param);
mazgch 26:07be5faf8925 110 static int _cbCGSN(int type, const char* buf, int len, char* imei);
mazgch 26:07be5faf8925 111 static int _cbGSN(int type, const char* buf, int len, char* imei);
mazgch 26:07be5faf8925 112 static int _cbCCID(int type, const char* buf, int len, char* ccid);
mazgch 21:c4d64830bf02 113 static IP strToIp(const char* str);
mazgch 21:c4d64830bf02 114 IP _ip;
mazgch 21:c4d64830bf02 115 Model _model;
mazgch 21:c4d64830bf02 116 Sim _sim;
mazgch 21:c4d64830bf02 117 Net _net;
mazgch 25:4045d02e44f1 118 AcT _act;
mazgch 23:05a1aeeb5fd9 119 char _num[32];
mazgch 25:4045d02e44f1 120 char _opr[32];
mazgch 21:c4d64830bf02 121 int _rssi;
mazgch 26:07be5faf8925 122 char _imsi[32];
mazgch 26:07be5faf8925 123 char _imei[32];
mazgch 26:07be5faf8925 124 char _ccid[32];
mazgch 21:c4d64830bf02 125 private:
mazgch 21:c4d64830bf02 126 typedef enum { SOCK_FREE, SOCK_CREATED, SOCK_CONNECTED } SockState;
mazgch 21:c4d64830bf02 127 typedef struct { SockState state; int pending; } SockCtrl;
mazgch 21:c4d64830bf02 128 SockCtrl _sockets[16];
mazgch 18:e5697801df29 129 };
mazgch 18:e5697801df29 130
mazgch 18:e5697801df29 131 // -----------------------------------------------------------------------
mazgch 18:e5697801df29 132
mazgch 18:e5697801df29 133 class MDMSerial : public SerialPipe, public MDMParser
mazgch 17:296d94a006b4 134 {
mazgch 17:296d94a006b4 135 public:
mazgch 19:2b5d097ca15d 136 MDMSerial(PinName tx _C027DEFAULT(MDMTXD),
mazgch 19:2b5d097ca15d 137 PinName rx _C027DEFAULT(MDMRXD),
mazgch 19:2b5d097ca15d 138 int baudrate _C027DEFAULT(MDMBAUD),
mazgch 19:2b5d097ca15d 139 #if DEVICE_SERIAL_FC
mazgch 19:2b5d097ca15d 140 PinName rts _C027DEFAULT(MDMRTS),
mazgch 19:2b5d097ca15d 141 PinName cts _C027DEFAULT(MDMCTS),
mazgch 19:2b5d097ca15d 142 #endif
mazgch 19:2b5d097ca15d 143 int rxSize = 256 ,
mazgch 21:c4d64830bf02 144 int txSize = 128 );
mazgch 18:e5697801df29 145 virtual int getLine(char* buffer, int length);
mazgch 18:e5697801df29 146 protected:
mazgch 18:e5697801df29 147 virtual int _send(const void* buf, int len);
mazgch 17:296d94a006b4 148 };
mazgch 18:e5697801df29 149
mazgch 18:e5697801df29 150 // -----------------------------------------------------------------------
mazgch 18:e5697801df29 151
mazgch 18:e5697801df29 152 #define HAVE_MDMUSB
mazgch 18:e5697801df29 153 #ifdef HAVE_MDMUSB
mazgch 18:e5697801df29 154 class MDMUsb : /*public UsbSerial,*/ public MDMParser
mazgch 18:e5697801df29 155 {
mazgch 18:e5697801df29 156 public:
mazgch 18:e5697801df29 157 MDMUsb(void);
mazgch 18:e5697801df29 158 virtual int getLine(char* buffer, int length);
mazgch 18:e5697801df29 159 protected:
mazgch 18:e5697801df29 160 virtual int _send(const void* buf, int len);
mazgch 18:e5697801df29 161 };
mazgch 18:e5697801df29 162 #endif
mazgch 18:e5697801df29 163
mazgch 18:e5697801df29 164