Board support library for C027
Dependents: IoTWorkshopLCD IoTWorkshopBuzzer IoTWorkshopSensors C027_USSDTest ... more
Fork of C027 by
Diff: C027.cpp
- Revision:
- 8:a356376db984
- Parent:
- 7:e3eab86f1de9
- Child:
- 9:7e038529bfff
diff -r e3eab86f1de9 -r a356376db984 C027.cpp --- a/C027.cpp Fri Oct 25 08:46:43 2013 +0000 +++ b/C027.cpp Tue Nov 05 21:41:46 2013 +0000 @@ -8,34 +8,33 @@ void mbed_die(void) { + DigitalOut led(LED); for (;;) { // nothing to do here - - // we do not have fancy leds that - // can be flashed on the C027 + led = 0; + wait_ms(200); + led = 1; + wait_ms(200); } } C027::C027() : - mdmEn(MDMEN), -#ifndef C027_REVA - mdmRst(MDMRST), -#endif - mdmPwrOn(MDMPWRON), mdmRts(MDMRTS), - gpsEn(GPSEN), gpsRst(GPSRST) + mdmEn(MDMEN), mdmRst(MDMRST), mdmPwrOn(MDMPWRON), // MDM CTRL + mdmRts(MDMRTS), mdmLvlOe(MDMLVLOE), mdmUsbDet(MDMUSBDET), // MDM IF + gpsEn(GPSEN), gpsRst(GPSRST) // GPS CTRL { // we start with the gps disabled - gpsEn = 0; // LDOEN: 1=on,0=off - gpsRst = 0; // RESET: 0=reset,1=operating + gpsEn = 0; // LDOEN: 1=on,0=off + gpsRst = 0; // RESET: 0=reset,1=operating gpsIsEnabled = false; // we start with the modem disabled - mdmPwrOn = 1; // PWRON: 1=idle,0=action - mdmRts = 0; // RTS. 0=ready to send - mdmEn = 0; // LDOEN: 1=on,0=off -#ifndef C027_REVA - mdmRst = 0; // RESET: 0=reset,1=operating -#endif + mdmLvlOe = 1; // LVLEN: 1=disabled + mdmUsbDet = 0; // USBDET: 0=disabled + mdmPwrOn = 1; // PWRON: 1=idle, 0=action + mdmRts = 0; // RTS. 0=ready to send + mdmEn = 0; // LDOEN: 1=on, 0=off + mdmRst = 0; // RESET: 0=reset, 1=operating mdmIsEnabled = false; } @@ -45,19 +44,20 @@ { #ifdef C027_REVA // we need the gps ldo for the level shifters of the modem - gpsEn = 1; // LDOEN(gps): 0=off -> 1=on -#endif - mdmPwrOn = 1; // PWRON: 1=idle - mdmEn = 0; // LDOEN: 0=off -#ifndef C027_REVA - mdmRst = 0; // RESET: 0=reset + gpsEn = 1; // LDOEN(gps): 0=off -> 1=on #endif - wait_ms(1); // wait until stable - mdmEn = 1; // LDOEN: 0=off -> 1=on - wait_ms(50); // power on sequence is triggered by keeping reset 50ms low -#ifndef C027_REVA - mdmRst = 1; // RESET: 0=reset -> 1=operating -#endif + mdmPwrOn = 1; // PWRON: 1=idle + mdmEn = 0; // LDOEN: 0=off + mdmRst = 0; // RESET: 0=reset + mdmLvlOe = 1; // LVLEN: 1=disabled + mdmUsbDet = 0; // USBDET: 0=disabled + wait_ms( 10); // wait until supply switched off + mdmEn = 1; // LDOEN: 0=off -> 1=on + wait_ms( 10); // wait until supply stable and on + wait_ms(300); // power on sequence is triggered by keeping reset 50ms-300ms low + mdmRst = 1; // RESET: 0=reset -> 1=operating + mdmLvlOe = 0; // LVLEN: 0=enabled + mdmUsbDet = 1; // USBDET: 1=enabled mdmIsEnabled = true; // the modem schould be fully ready after 3000ms } @@ -65,14 +65,14 @@ { mdmIsEnabled = false; // initiate power off sequence by setting PwnOn low for >1s - mdmPwrOn = 0; // PWRON: 0=active - wait_ms(1000); - mdmPwrOn = 1; // PWRON: 0=active -> 1=idle + mdmLvlOe = 1; // LVLEN: 1=disabled + mdmUsbDet = 0; // USBDET: 0=disabled + mdmPwrOn = 0; // PWRON: 0=active + wait_ms(1000); // send to sleep + mdmPwrOn = 1; // PWRON: 0=active -> 1=idle // now we can savely switch off the ldo -#ifndef C027_REVA - mdmRst = 0; // RESET: 1=operating -> 0=reset -#endif - mdmEn = 0; // LDOEN: 1=on -> 0=off + mdmRst = 0; // RESET: 1=operating -> 0=reset + mdmEn = 0; // LDOEN: 1=on -> 0=off #ifdef C027_REVA // the gps ldo may no longer be needed level shifters of the modem // so we switch it off if the gps is not enabled @@ -84,15 +84,44 @@ void C027::mdmReset(void) { -#ifndef C027_REVA + if (mdmIsEnabled) + { + mdmRst = 0; // RESET: 0=reset + // power on sequence is triggered by reset low + // LISA-U200 50ms + // SARA-G350 50ms + // LISA-C200 300ms + wait_ms(300); + mdmRst = 1; // RESET: 0=reset -> 1=operating + } +} + +void C027::mdmWakeup(void) +{ if (mdmIsEnabled) { - // power on sequence is triggered by 50ms reset low - mdmRst = 0; // RESET: 0=reset,1=operating - wait_ms(50); - mdmRst = 1; // RESET: 1=operating,0=reset + mdmPwrOn = 0; + // wakeup the device by low pulse: + // LISA-U200 50-80us + // SARA-G350 5ms + // LISA-C200 150ms + wait_ms(150); + mdmPwrOn = 1; } -#endif +} + +void C027::mdmSleep(void) +{ + if (mdmIsEnabled) + { + mdmPwrOn = 0; + // going to sleep is triggerd by low pulse: + // LISA-U200 1000ms + // SARA-G350 n/a + // LISA-C200 n/a + wait_ms(1000); + mdmPwrOn = 1; + } } void C027::gpsPower(bool enable)