seeedstudio ARCH GPRS Test for GPRS function

Dependencies:   GPRS mbed

Fork of ARCH_GPRS_Demo by hs loovee

ARCH GPRS Introduction

ARCH GPRS

  • Arch GPRS is a wireless network module based on EG-10, it can achive remote data colletion function to communicate with outside world by GPRS network.
  • Arch GPRS has standard Arduino interface and Grove connectors. It’s convenient to connect existing Shields and Grove products to Arch GPRS.
  • You can use the solar panel to charge for battery, and own to its low-power design, so Arch GPRS can work normally in outdoor.
  • For more information, please visit http://www.seeedstudio.com/depot/arch-gprs-p-1657.html?cPath=6_11

main.cpp

/*
  main.cpp
  2013 Copyright (c) Seeed Technology Inc.  All right reserved.
 
  Author:lawliet zou(lawliet.zou@gmail.com)
  2013-7-21
 
  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 "string.h"
#include "gprs.h"
 
#define SEND_SMS_TEST           0
#define CALL_UP_TEST            0
#define ANSWER_TEST             0
#define READ_SMS_TEST           0
 
#define PHONE_NUMBER            "150****9566"
 
#define PINPWR                  P1_2 // power on EG 10, low enable
#define PINONOFF                P1_7 // switch of EG10, low enable, low for 2s to turn on EG10
 
DigitalOut eg10_pwr(PINPWR);
DigitalOut eg10_on(PINONOFF);
GPRS  gprsTest(P0_19, P0_18, 115200, PHONE_NUMBER);
 
void EG10_PowerUp(void)
{
    eg10_pwr = 1;
    eg10_on  = 1;
    wait(2);
    eg10_pwr = 0;
    eg10_on = 0;
    wait(2);
    eg10_on = 1;
    wait(2);
}
 
int main(void)
{
    EG10_PowerUp();
    while(0 != gprsTest.init()) {
        wait(2);
    }
 
#if CALL_UP_TEST
    gprsTest.callUp(PHONE_NUMBER);
#endif
 
#if SEND_SMS_TEST
    gprsTest.sendSMS(PHONE_NUMBER,"hello,lawliet");
#endif
 
#if ANSWER_TEST || READ_SMS_TEST
    while(1) {
        int messageType = gprsTest.loopHandle();
        if(MESSAGE_RING == messageType) {
            gprsTest.answer();
        } else if(MESSAGE_SMS == messageType) {
            char smsMessage[SMS_MAX_LENGTH];
            gprsTest.getSMS(smsMessage);
        }
    }
#endif
 
    return 0;
}
Committer:
loovee
Date:
Fri Aug 23 02:31:06 2013 +0000
Revision:
0:6d297fe482af
seeedstudio Arch Gprs Demo. ; ; post data to yeelink.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loovee 0:6d297fe482af 1 #include "mbed.h"
loovee 0:6d297fe482af 2 #include "ARCH_GPRS_Sleep.h"
loovee 0:6d297fe482af 3 #include "ARCH_GPRS_HW.h"
loovee 0:6d297fe482af 4
loovee 0:6d297fe482af 5 void Stalker3_0_sleep::gotoSleep() // goto sleep mode, untill wdt interrupt
loovee 0:6d297fe482af 6 {
loovee 0:6d297fe482af 7 LPC_PMU->PCON |= 0x01; /* ????????? */
loovee 0:6d297fe482af 8 LPC_SYSCON->PDSLEEPCFG |= (1UL << 3); /* ??BOD??????? */
loovee 0:6d297fe482af 9 SCB->SCR &= ~(1UL << 2); /* ?????? */
loovee 0:6d297fe482af 10 __wfi();
loovee 0:6d297fe482af 11 }
loovee 0:6d297fe482af 12
loovee 0:6d297fe482af 13 void Stalker3_0_sleep::wdtClkSetup(unsigned long clksrc)
loovee 0:6d297fe482af 14 {
loovee 0:6d297fe482af 15 /* Freq = 0.5Mhz, div_sel is 0x1F, divided by 64. WDT_OSC should be 7.8125khz */
loovee 0:6d297fe482af 16 LPC_SYSCON->WDTOSCCTRL = (0x1<<5)|0x1F;
loovee 0:6d297fe482af 17 LPC_SYSCON->PDRUNCFG &= ~(0x1<<6); /* Let WDT clock run */
loovee 0:6d297fe482af 18
loovee 0:6d297fe482af 19 /* Enables clock for WDT */
loovee 0:6d297fe482af 20 LPC_SYSCON->SYSAHBCLKCTRL |= (1<<15);
loovee 0:6d297fe482af 21 LPC_WWDT->CLKSEL = clksrc; /* Select clock source */
loovee 0:6d297fe482af 22
loovee 0:6d297fe482af 23 }
loovee 0:6d297fe482af 24
loovee 0:6d297fe482af 25 void Stalker3_0_sleep::wdtInit(long tc) // init wdt
loovee 0:6d297fe482af 26 {
loovee 0:6d297fe482af 27 uint32_t regVal;
loovee 0:6d297fe482af 28
loovee 0:6d297fe482af 29 LPC_WWDT->TC = tc;
loovee 0:6d297fe482af 30
loovee 0:6d297fe482af 31 regVal = WDEN;
loovee 0:6d297fe482af 32 LPC_WWDT->MOD = regVal;
loovee 0:6d297fe482af 33
loovee 0:6d297fe482af 34 LPC_WWDT->FEED = 0xAA; /* Feeding sequence */
loovee 0:6d297fe482af 35 LPC_WWDT->FEED = 0x55;
loovee 0:6d297fe482af 36
loovee 0:6d297fe482af 37 NVIC_EnableIRQ(WDT_IRQn);
loovee 0:6d297fe482af 38 NVIC_SetPriority(WDT_IRQn, 2);
loovee 0:6d297fe482af 39 return;
loovee 0:6d297fe482af 40
loovee 0:6d297fe482af 41 }
loovee 0:6d297fe482af 42
loovee 0:6d297fe482af 43 void Stalker3_0_sleep::init()
loovee 0:6d297fe482af 44 {
loovee 0:6d297fe482af 45
loovee 0:6d297fe482af 46 }
loovee 0:6d297fe482af 47
loovee 0:6d297fe482af 48 void Stalker3_0_sleep::sleep(long ts) // sleep for ts (s)
loovee 0:6d297fe482af 49 {
loovee 0:6d297fe482af 50
loovee 0:6d297fe482af 51 workMode = MODE_SLEEP;
loovee 0:6d297fe482af 52 wdtInit(0x2dc6c0);
loovee 0:6d297fe482af 53
loovee 0:6d297fe482af 54 for(int i=0; i<ts; i++)
loovee 0:6d297fe482af 55 {
loovee 0:6d297fe482af 56 gotoSleep();
loovee 0:6d297fe482af 57 }
loovee 0:6d297fe482af 58
loovee 0:6d297fe482af 59 workMode = MODE_WORKING;
loovee 0:6d297fe482af 60 feed();
loovee 0:6d297fe482af 61 }
loovee 0:6d297fe482af 62
loovee 0:6d297fe482af 63 void Stalker3_0_sleep::wakeUp() // wake up from sleep
loovee 0:6d297fe482af 64 {
loovee 0:6d297fe482af 65
loovee 0:6d297fe482af 66 }
loovee 0:6d297fe482af 67
loovee 0:6d297fe482af 68 void Stalker3_0_sleep::feed() // watch dog feed
loovee 0:6d297fe482af 69 {
loovee 0:6d297fe482af 70 LPC_WWDT->FEED = 0xAA; /* Feeding sequence */
loovee 0:6d297fe482af 71 LPC_WWDT->FEED = 0x55;
loovee 0:6d297fe482af 72 return;
loovee 0:6d297fe482af 73 }
loovee 0:6d297fe482af 74
loovee 0:6d297fe482af 75 Stalker3_0_sleep wdt_sleep;
loovee 0:6d297fe482af 76
loovee 0:6d297fe482af 77 extern "C"{
loovee 0:6d297fe482af 78
loovee 0:6d297fe482af 79 void WDT_IRQHandler(void)
loovee 0:6d297fe482af 80 {
loovee 0:6d297fe482af 81
loovee 0:6d297fe482af 82 if(wdt_sleep.workMode == MODE_WORKING) // WORKING MODE, AND NO FEET WDT, RESET!!!
loovee 0:6d297fe482af 83 {
loovee 0:6d297fe482af 84 NVIC_SystemReset();
loovee 0:6d297fe482af 85 }
loovee 0:6d297fe482af 86 LPC_WWDT->MOD &= ~WDTOF; /* clear the time-out flag and interrupt flag */
loovee 0:6d297fe482af 87 LPC_WWDT->MOD &= ~WDINT; /* clear the time-out flag and interrupt flag */
loovee 0:6d297fe482af 88 wdt_sleep.wdtInit(0x2dc6c0);
loovee 0:6d297fe482af 89 }
loovee 0:6d297fe482af 90 }