mbed 5.4 with sleep mode

Dependencies:  

Revision:
2:b77151f111a9
Parent:
0:4e3cb26f6019
Child:
4:90ab1ec64b0e
diff -r 46f9e36be3fa -r b77151f111a9 main.cpp
--- a/main.cpp	Thu Feb 27 07:39:06 2014 +0000
+++ b/main.cpp	Tue Apr 08 12:16:23 2014 +0000
@@ -20,54 +20,149 @@
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
 
-#include "GPRSInterface.h"
 #include "mbed.h"
+#include "C027.h"
+#include "GPS.h"
+#include "MDM.h"
 
-#if defined(TARGET_LPC11U24)//SEEEDUINO_ARCH
-#define PIN_TX        P1_22
-#define PIN_RX        P1_21
-#elif defined(TARGET_LPC1768)//SEEEDUINO_ARCH_PRO
-#define PIN_TX        P0_0
-#define PIN_RX        P0_1
-#else //please redefine the following pins
-#define PIN_TX
-#define PIN_RX
-#endif
+C027 c027;
 
-GPRSInterface gprsInterface(PIN_TX,PIN_RX,19200,"cmnet",NULL,NULL);
 
 int main(void)
 {
-    // use DHCP
-    gprsInterface.init();
+    int ret;
+    char buf[512] = "";
 
-    // attempt DHCP
-    while(false == gprsInterface.connect()) {
-        wait(2);
-    }
+    Serial pc(USBTX,USBRX);
+    pc.baud(115200);
+    
+    printf("Modem Example\n");
+
+    c027.mdmPower(true);
+    wait(2);
 
-    // successful DHCP
-    printf("IP Address is %s\n", gprsInterface.getIPAddress());
+#if 0
+    c027.gpsPower(true);
+    GPSI2C gps; // use GPSI2C or GPSSerial class 
+    while (1)
+    {
+        while ((ret = gps.getMessage(buf, sizeof(buf))) > 0)
+        {
+            int len = LENGTH(ret);
+            //printf("NMEA: %.*s\n", len-2, msg); 
+            if ((PROTOCOL(ret) == NMEA) && (len > 6) && !strncmp("$GPGLL", buf, 6))
+            {
+                double la = 0, lo = 0;
+                char ch;
+                if (gps.getNmeaAngle(1,buf,len,la) && 
+                    gps.getNmeaAngle(3,buf,len,lo) && 
+                    gps.getNmeaItem(6,buf,len,ch) && ch == 'A')
+                {
+                    printf("GPS: %.5f %.5f\n", la, lo); 
+                }
+            }
+        }
+        wait_ms(100);
+    }
+#endif    
 
-    TCPSocketConnection sock;
-    if(false == sock.connect("mbed.org", 80)) {
-        return -1;
-    }
+    MDMSerial mdm(MDMTXD, MDMRXD, MDMBAUD
+#if DEVICE_SERIAL_FC
+                 ,MDMRTS,MDMCTS
+#endif
+                );
+                
+    // initialize the modem 
+    printf("Init\r\n");
+    mdm.init();
+    
+    // wait until we are connected
+    printf("Network Check\r\n");
+    while (!mdm.checkNetStatus())
+        wait_ms(1000);
 
-    char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n";
-    sock.send_all(http_cmd, sizeof(http_cmd)-1);
-
-    char buffer[512];
-    int ret;
-    while (true) {
-        ret = sock.receive(buffer, sizeof(buffer)-1);
-        if (ret <= 0)
-            break;
-        buffer[ret] = '\0';
-        printf("Recv %d bytes:\n%s\n",ret,buffer);
+    printf("Network Join\r\n");
+    // join the internet connection 
+    if (mdm.join("gprs.swisscom.ch"))
+    {
+        printf("Socket Create\r\n");
+        int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
+        if (socket >= 0)
+        {
+            printf("Socket Connect\r\n");
+            if (mdm.socketConnect(socket, "mbed.org", 80))
+            {
+                printf("Make a Http Post Request\r\n");
+                const char http[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n";
+                printf("Socket Send\r\n");
+                mdm.socketSend(socket, http, sizeof(http)-1);
+            
+                printf("Socket Recving\r\n");
+                while (true) {
+                    ret = mdm.socketReadable(socket);
+                    if (ret > 0)
+                        ret = mdm.socketRecv(socket, buf, sizeof(buf)-1);
+                    if (ret < 0)
+                        break;
+                    else if (ret > 0)
+                        printf("Socket Recv \"%*s\"\r\n", ret, buf);
+                }
+                printf("Socket Close\r\n");
+                mdm.socketClose(socket);
+            }
+            printf("Socket Free\r\n");
+            mdm.socketFree(socket);
+        }
+        
+        // disconnect  
+        printf("Network Disconnect\r\n");
+        mdm.disconnect();
     }
-    sock.close();
-    gprsInterface.disconnect();
-
+    
+    const char* ussd = "*#134#";
+    printf("Send Ussd Command %s\r\n", ussd);
+    ret = mdm.ussdCommand(ussd, buf, sizeof(buf));
+    if (ret > 0) 
+        printf("Got Ussd Answer: \"%*s\"\r\n", ret, buf);
+        
+    printf("Checking SMS\r\n");
+    //int cnt = mdm.smsCount();
+    while (1) {
+        char num[32];
+        for (int ix = 0; ix < 16; ix ++) {
+            if (mdm.smsRead(ix, num, buf, sizeof(buf))) {
+                printf("Got SMS from \"%s\" with text \"%s\"\r\n", num, buf);
+                printf("Delete SMS at index %d\r\n", ix);
+                mdm.smsDelete(ix);
+                const char* reply = "Hello my friend";
+                printf("Send SMS reply \"%s\" to \"%s\"\r\n", reply, num);
+                mdm.smsSend(num, reply);
+            }
+        }
+        MDMParser::Status info;
+        if (mdm.checkNetStatus(&info))
+        {
+            printf("Network Status:\n");
+            const char* txtNet[] = { "Unknown", "Denied", "None", "Home", "Roaming" };
+            if (info.net < sizeof(txtNet)/sizeof(*txtNet) && (info.net != MDMParser::NET_UNKNOWN))
+                printf("  Network:            %s\n", txtNet[info.net]);
+            const char* txtAct[] = { "Unknown", "GSM", "Edge", "3G", "CDMA" };
+            if (info.act < sizeof(txtAct)/sizeof(*txtAct) && (info.act != MDMParser::ACT_UNKNOWN))
+                printf("  Access Technology:  %s\n", txtAct[info.act]);
+            if (info.rssi) 
+                printf("  Signal Strength:    %d dBm\r\n", info.rssi);
+            if (info.opr)  
+                printf("  Operator:           %s\n", info.opr);
+            if (info.num)  
+                printf("  Phone Number:       %s\n", info.num);
+        }
+        wait_ms(10000);
+    }  
+    
+    mdm.powerOff();
+    // now it is safe to switch off
+    c027.mdmPower(false);
+    
     return 0;
 }
+