mbed 5.4 with sleep mode

Dependencies:  

main.cpp

Committer:
mazgch
Date:
2014-04-08
Revision:
2:b77151f111a9
Parent:
0:4e3cb26f6019
Child:
4:90ab1ec64b0e

File content as of revision 2:b77151f111a9:

/*
  main.cpp
  2013 Copyright (c) Seeed Technology Inc.  All right reserved.

  Author:lawliet zou(lawliet.zou@gmail.com)
  2014-02-18

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

#include "mbed.h"
#include "C027.h"
#include "GPS.h"
#include "MDM.h"

C027 c027;


int main(void)
{
    int ret;
    char buf[512] = "";

    Serial pc(USBTX,USBRX);
    pc.baud(115200);
    
    printf("Modem Example\n");

    c027.mdmPower(true);
    wait(2);

#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    

    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);

    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();
    }
    
    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;
}