Own fork of C027_Support

Dependents:   MbedSmartRestMain MbedSmartRestMain

Fork of C027_Support by u-blox

Committer:
mazgch
Date:
Tue Apr 08 11:59:28 2014 +0000
Revision:
25:4045d02e44f1
Parent:
24:0e287a85ac9e
Child:
26:07be5faf8925
added possibility to get network status struct

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