C027 support

Fork of C027_Support by u-blox

Committer:
mazgch
Date:
Tue Apr 08 11:15:33 2014 +0000
Revision:
24:0e287a85ac9e
Parent:
23:05a1aeeb5fd9
Parent:
20:535ef78655df
Child:
25:4045d02e44f1
merged branches

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