Board support library for C027

Dependents:   IoTWorkshopLCD IoTWorkshopBuzzer IoTWorkshopSensors C027_USSDTest ... more

Fork of C027 by u-blox

/media/uploads/ublox/c027_pinout_new.png

Revision:
13:fb30e9923a7b
Parent:
12:31fb5ff9fef5
Child:
14:e30f90b5447e
--- a/C027.cpp	Sun Nov 10 18:46:43 2013 +0000
+++ b/C027.cpp	Tue Nov 19 12:26:01 2013 +0000
@@ -26,19 +26,21 @@
 }
 
 C027::C027() :
-    mdmEn(MDMEN),   mdmRst(MDMRST),     mdmPwrOn(MDMPWRON),   // MDM CTRL
-    mdmRts(MDMRTS), mdmLvlOe(MDMLVLOE), mdmUsbDet(MDMUSBDET), // MDM IF
-    gpsEn(GPSEN),   gpsRst(GPSRST)                            // GPS CTRL
+    mdmEn(MDMEN),       mdmRst(MDMRST),         mdmPwrOn(MDMPWRON),   // MDM CTRL
+    mdmLvlOe(MDMLVLOE), mdmILvlOe(MDMILVLOE),   mdmUsbDet(MDMUSBDET), // MDM IF
+    gpsEn(GPSEN),       gpsRst(GPSRST)                                // GPS CTRL
 {
+    DigitalOut mdmRts(MDMRTS);
+    mdmRts    = 0;  // RTS.    0=ready to send 
     // we start with the gps disabled
     gpsEn     = 0;  // LDOEN:  1=on,0=off
     gpsRst    = 0;  // RESET:  0=reset,1=operating
     gpsIsEnabled = false;
     // we start with the modem disabled
-    mdmLvlOe  = 1;  // LVLEN:  1=disabled
+    mdmLvlOe  = 1;  // LVLEN:  1=disabled (uart/gpio)
+    mdmILvlOe = 0;  // ILVLEN: 0=disabled (i2c)
     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;
@@ -56,13 +58,13 @@
         mdmEn     = 0;  // LDOEN:  0=off
         mdmRst    = 0;  // RESET:  0=reset
         mdmLvlOe  = 1;  // LVLEN:  1=disabled
+        mdmILvlOe = 0;  // ILVLEN: 0=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 interfaces of the modem should be fully ready after a certain period
@@ -70,12 +72,16 @@
         // SARA-G350  3000ms
         // LISA-C200       
         wait_ms(1000);
+        mdmLvlOe  = 0;  // LVLEN:  0=enabled (uart/gpio)
+        if (gpsIsEnabled) 
+            mdmILvlOe = 1; // ILVLEN: 1=enabled (i2c)
     }
     else if (mdmIsEnabled && !enable) // disable modem
     {
         mdmIsEnabled = false;
         // initiate power off sequence by setting PwnOn low for >1s
-        mdmLvlOe  = 1;  // LVLEN:  1=disabled
+        mdmILvlOe = 0;  // ILVLEN: 0=disabled (i2c)
+        mdmLvlOe  = 1;  // LVLEN:  1=disabled (uart/gpio)
         mdmUsbDet = 0;  // USBDET: 0=disabled
         mdmPwrOn  = 0;  // PWRON:  0=active
         wait_ms(1000);  //         send to sleep
@@ -90,6 +96,7 @@
             gpsEn = 0;  // LDOEN(gps): 1=on -> 0=off
 #endif
     }
+        
 }
 
 void C027::mdmReset(void)
@@ -144,17 +151,20 @@
         gpsRst   = 1;   // RESET: 0=reset -> 1=operating
         gpsIsEnabled = true;
         // the gps schould be fully ready after 50ms
+        if (mdmIsEnabled) 
+            mdmILvlOe = 1; // ILVLEN: 0=enabled (i2c)
     }
     else if (gpsIsEnabled && !enable) // diasble gps
     {
         gpsIsEnabled = false;
-        gpsRst   = 0;   // RESET: 1=operating -> 0=reset
+        mdmILvlOe = 0;   // ILVLEN: 0=disabled (i2c)
+        gpsRst    = 0;   // RESET: 1=operating -> 0=reset
 #ifdef C027_REVA
         // the gps ldo may have to remain enabled for the level shifters of the modem
         if (!mdmIsEnabled) 
-            gpsEn    = 0;   // LDOEN: 1=on -> 0=off 
+            gpsEn = 0;   // LDOEN: 1=on -> 0=off 
 #else
-        gpsEn    = 0;   // LDOEN: 1=on -> 0=off 
+        gpsEn     = 0;   // LDOEN: 1=on -> 0=off 
 #endif
     }
 }