CQ出版 Interface 2014年10月号のC027(MAX7-Q)GPSテスト記事のプログラム。 CQ publishing Interface 2014.10 issue, C027 GPS(MAX-7Q) test program.
Dependencies: C027 C027_Support mbed
C027/C027.cpp@3:002503ab7199, 2014-07-28 (annotated)
- Committer:
- ntaka206
- Date:
- Mon Jul 28 15:51:53 2014 +0000
- Revision:
- 3:002503ab7199
- Parent:
- 0:1ababa0d0c42
C027_SupportTest_xively_location????????C027_Support?????????????; http://mbed.org/users/ntaka206/code/C027_Support/;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ntaka206 | 0:1ababa0d0c42 | 1 | /* Platform source file, for the u-blox C27-C20/U20/G35 |
ntaka206 | 0:1ababa0d0c42 | 2 | * mbed Internet of Things Starter Kit |
ntaka206 | 0:1ababa0d0c42 | 3 | * http://mbed.org/platforms/u-blox-C027/ |
ntaka206 | 0:1ababa0d0c42 | 4 | * |
ntaka206 | 0:1ababa0d0c42 | 5 | */ |
ntaka206 | 0:1ababa0d0c42 | 6 | #if defined(TARGET_UBLOX_C027) |
ntaka206 | 0:1ababa0d0c42 | 7 | |
ntaka206 | 0:1ababa0d0c42 | 8 | #include "C027.h" |
ntaka206 | 0:1ababa0d0c42 | 9 | |
ntaka206 | 0:1ababa0d0c42 | 10 | C027::C027() : |
ntaka206 | 0:1ababa0d0c42 | 11 | // Modem |
ntaka206 | 0:1ababa0d0c42 | 12 | mdmEn(MDMEN, 0), // LDO off |
ntaka206 | 0:1ababa0d0c42 | 13 | mdmRst(MDMRST, 1), // not reset |
ntaka206 | 0:1ababa0d0c42 | 14 | mdmPwrOn(MDMPWRON, 1), // Power On idle |
ntaka206 | 0:1ababa0d0c42 | 15 | mdmLvlOe(MDMLVLOE, 1), // GPIO/Serial velel shifters off |
ntaka206 | 0:1ababa0d0c42 | 16 | mdmILvlOe(MDMILVLOE, 0), // I2C Level shifter off |
ntaka206 | 0:1ababa0d0c42 | 17 | mdmUsbDet(MDMUSBDET, 0), // USB not used |
ntaka206 | 0:1ababa0d0c42 | 18 | // GPS |
ntaka206 | 0:1ababa0d0c42 | 19 | gpsEn(GPSEN, 0), // LDO off |
ntaka206 | 0:1ababa0d0c42 | 20 | gpsRst(GPSRST, 1) // not reset |
ntaka206 | 0:1ababa0d0c42 | 21 | { |
ntaka206 | 0:1ababa0d0c42 | 22 | DigitalOut led(LED, 0); // start with leds off |
ntaka206 | 0:1ababa0d0c42 | 23 | DigitalOut mdmRts(MDMRTS, 0); // make sure that rts is low |
ntaka206 | 0:1ababa0d0c42 | 24 | |
ntaka206 | 0:1ababa0d0c42 | 25 | gpsIsEnabled = false; |
ntaka206 | 0:1ababa0d0c42 | 26 | mdmIsEnabled = false; |
ntaka206 | 0:1ababa0d0c42 | 27 | mdmUseUsb = false; |
ntaka206 | 0:1ababa0d0c42 | 28 | } |
ntaka206 | 0:1ababa0d0c42 | 29 | |
ntaka206 | 0:1ababa0d0c42 | 30 | void C027::mdmPower(bool enable) |
ntaka206 | 0:1ababa0d0c42 | 31 | { |
ntaka206 | 0:1ababa0d0c42 | 32 | if (!mdmIsEnabled && enable) // enable modem |
ntaka206 | 0:1ababa0d0c42 | 33 | { |
ntaka206 | 0:1ababa0d0c42 | 34 | #ifdef C027_REVA |
ntaka206 | 0:1ababa0d0c42 | 35 | // we need the gps ldo for the level shifters of the modem |
ntaka206 | 0:1ababa0d0c42 | 36 | if (!gpsIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 37 | gpsEn = 1; // LDOEN(gps): 0=off -> 1=on |
ntaka206 | 0:1ababa0d0c42 | 38 | #endif |
ntaka206 | 0:1ababa0d0c42 | 39 | mdmLvlOe = 1; // LVLEN: 1=disabled |
ntaka206 | 0:1ababa0d0c42 | 40 | mdmILvlOe = 0; // ILVLEN: 0=disabled |
ntaka206 | 0:1ababa0d0c42 | 41 | // turn on the mode by enabling power with power on pin low and correct USB detect level |
ntaka206 | 0:1ababa0d0c42 | 42 | mdmUsbDet = mdmUseUsb ? 1 : 0; // USBDET: 0=disabled, 1=enabled |
ntaka206 | 0:1ababa0d0c42 | 43 | mdmPwrOn = 0; // PWRON: 0=turn on |
ntaka206 | 0:1ababa0d0c42 | 44 | mdmEn = 1; // LDOEN: 1=on |
ntaka206 | 0:1ababa0d0c42 | 45 | wait_ms( 1); // wait until supply switched off |
ntaka206 | 0:1ababa0d0c42 | 46 | // mnake sure reset is also off |
ntaka206 | 0:1ababa0d0c42 | 47 | mdmRst = 1; // RESET: 0=not reset |
ntaka206 | 0:1ababa0d0c42 | 48 | wait_ms(300); // power on sequence is triggered by keeping reset 50ms-300ms low |
ntaka206 | 0:1ababa0d0c42 | 49 | mdmPwrOn = 1; // PWRON: 0=turn on -> 1=idle |
ntaka206 | 0:1ababa0d0c42 | 50 | mdmIsEnabled = true; |
ntaka206 | 0:1ababa0d0c42 | 51 | // the interfaces of the modem should be fully ready after a certain period |
ntaka206 | 0:1ababa0d0c42 | 52 | // LISA-U200 5000ms |
ntaka206 | 0:1ababa0d0c42 | 53 | // SARA-G350 3000ms |
ntaka206 | 0:1ababa0d0c42 | 54 | // LISA-C200 |
ntaka206 | 0:1ababa0d0c42 | 55 | wait_ms(1000); |
ntaka206 | 0:1ababa0d0c42 | 56 | // now we can safely enable the level shifters |
ntaka206 | 0:1ababa0d0c42 | 57 | mdmLvlOe = 0; // LVLEN: 0=enabled (uart/gpio) |
ntaka206 | 0:1ababa0d0c42 | 58 | if (gpsIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 59 | mdmILvlOe = 1; // ILVLEN: 1=enabled (i2c) |
ntaka206 | 0:1ababa0d0c42 | 60 | } |
ntaka206 | 0:1ababa0d0c42 | 61 | else if (mdmIsEnabled && !enable) // disable modem |
ntaka206 | 0:1ababa0d0c42 | 62 | { |
ntaka206 | 0:1ababa0d0c42 | 63 | mdmIsEnabled = false; |
ntaka206 | 0:1ababa0d0c42 | 64 | // diable all level shifters |
ntaka206 | 0:1ababa0d0c42 | 65 | mdmILvlOe = 0; // ILVLEN: 0=disabled (i2c) |
ntaka206 | 0:1ababa0d0c42 | 66 | mdmLvlOe = 1; // LVLEN: 1=disabled (uart/gpio) |
ntaka206 | 0:1ababa0d0c42 | 67 | mdmUsbDet = 0; // USBDET: 0=disabled |
ntaka206 | 0:1ababa0d0c42 | 68 | // initiate power off sequence by setting PwnOn low for >1s |
ntaka206 | 0:1ababa0d0c42 | 69 | mdmPwrOn = 0; // PWRON: 0=active |
ntaka206 | 0:1ababa0d0c42 | 70 | wait_ms(1000); // send to sleep |
ntaka206 | 0:1ababa0d0c42 | 71 | mdmPwrOn = 1; // PWRON: 0=active -> 1=idle |
ntaka206 | 0:1ababa0d0c42 | 72 | // now we can savely switch off the ldo |
ntaka206 | 0:1ababa0d0c42 | 73 | mdmEn = 0; // LDOEN: 1=on -> 0=off |
ntaka206 | 0:1ababa0d0c42 | 74 | #ifdef C027_REVA |
ntaka206 | 0:1ababa0d0c42 | 75 | // the gps ldo may no longer be needed level shifters of the modem |
ntaka206 | 0:1ababa0d0c42 | 76 | // so we switch it off if the gps is not enabled |
ntaka206 | 0:1ababa0d0c42 | 77 | if (!gpsIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 78 | gpsEn = 0; // LDOEN(gps): 1=on -> 0=off |
ntaka206 | 0:1ababa0d0c42 | 79 | #endif |
ntaka206 | 0:1ababa0d0c42 | 80 | } |
ntaka206 | 0:1ababa0d0c42 | 81 | |
ntaka206 | 0:1ababa0d0c42 | 82 | } |
ntaka206 | 0:1ababa0d0c42 | 83 | |
ntaka206 | 0:1ababa0d0c42 | 84 | void C027::mdmUsbEnable(bool enable) |
ntaka206 | 0:1ababa0d0c42 | 85 | { |
ntaka206 | 0:1ababa0d0c42 | 86 | mdmUseUsb = enable; |
ntaka206 | 0:1ababa0d0c42 | 87 | if (mdmIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 88 | mdmUsbDet = mdmUseUsb ? 1 : 0; |
ntaka206 | 0:1ababa0d0c42 | 89 | } |
ntaka206 | 0:1ababa0d0c42 | 90 | |
ntaka206 | 0:1ababa0d0c42 | 91 | void C027::mdmReset(void) |
ntaka206 | 0:1ababa0d0c42 | 92 | { |
ntaka206 | 0:1ababa0d0c42 | 93 | if (mdmIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 94 | { |
ntaka206 | 0:1ababa0d0c42 | 95 | mdmRst = 0; // RESET: 0=reset |
ntaka206 | 0:1ababa0d0c42 | 96 | // power on sequence is triggered by reset low |
ntaka206 | 0:1ababa0d0c42 | 97 | // LISA-U200 50ms |
ntaka206 | 0:1ababa0d0c42 | 98 | // SARA-G350 50ms |
ntaka206 | 0:1ababa0d0c42 | 99 | // LISA-C200 300ms |
ntaka206 | 0:1ababa0d0c42 | 100 | wait_ms(300); |
ntaka206 | 0:1ababa0d0c42 | 101 | mdmRst = 1; // RESET: 0=reset -> 1=operating |
ntaka206 | 0:1ababa0d0c42 | 102 | } |
ntaka206 | 0:1ababa0d0c42 | 103 | } |
ntaka206 | 0:1ababa0d0c42 | 104 | |
ntaka206 | 0:1ababa0d0c42 | 105 | void C027::mdmWakeup(void) |
ntaka206 | 0:1ababa0d0c42 | 106 | { |
ntaka206 | 0:1ababa0d0c42 | 107 | if (mdmIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 108 | { |
ntaka206 | 0:1ababa0d0c42 | 109 | mdmPwrOn = 0; |
ntaka206 | 0:1ababa0d0c42 | 110 | // wakeup the device by low pulse: |
ntaka206 | 0:1ababa0d0c42 | 111 | // LISA-U200 50-80us |
ntaka206 | 0:1ababa0d0c42 | 112 | // SARA-G350 5ms |
ntaka206 | 0:1ababa0d0c42 | 113 | // LISA-C200 300ms |
ntaka206 | 0:1ababa0d0c42 | 114 | wait_ms(300); |
ntaka206 | 0:1ababa0d0c42 | 115 | mdmPwrOn = 1; |
ntaka206 | 0:1ababa0d0c42 | 116 | } |
ntaka206 | 0:1ababa0d0c42 | 117 | } |
ntaka206 | 0:1ababa0d0c42 | 118 | |
ntaka206 | 0:1ababa0d0c42 | 119 | void C027::mdmSleep(void) |
ntaka206 | 0:1ababa0d0c42 | 120 | { |
ntaka206 | 0:1ababa0d0c42 | 121 | if (mdmIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 122 | { |
ntaka206 | 0:1ababa0d0c42 | 123 | mdmPwrOn = 0; |
ntaka206 | 0:1ababa0d0c42 | 124 | // going to sleep is triggerd by low pulse: |
ntaka206 | 0:1ababa0d0c42 | 125 | // LISA-U200 1000ms |
ntaka206 | 0:1ababa0d0c42 | 126 | // SARA-G350 n/a |
ntaka206 | 0:1ababa0d0c42 | 127 | // LISA-C200 n/a |
ntaka206 | 0:1ababa0d0c42 | 128 | wait_ms(1000); |
ntaka206 | 0:1ababa0d0c42 | 129 | mdmPwrOn = 1; |
ntaka206 | 0:1ababa0d0c42 | 130 | } |
ntaka206 | 0:1ababa0d0c42 | 131 | } |
ntaka206 | 0:1ababa0d0c42 | 132 | |
ntaka206 | 0:1ababa0d0c42 | 133 | void C027::gpsPower(bool enable) |
ntaka206 | 0:1ababa0d0c42 | 134 | { |
ntaka206 | 0:1ababa0d0c42 | 135 | if (!gpsIsEnabled && enable) // enable gps |
ntaka206 | 0:1ababa0d0c42 | 136 | { |
ntaka206 | 0:1ababa0d0c42 | 137 | // switch on power supply |
ntaka206 | 0:1ababa0d0c42 | 138 | gpsEn = 1; // LDOEN: 0=off -> 1=on |
ntaka206 | 0:1ababa0d0c42 | 139 | wait_ms(1); // wait until stable |
ntaka206 | 0:1ababa0d0c42 | 140 | // make sure we are not in reset |
ntaka206 | 0:1ababa0d0c42 | 141 | gpsRst = 1; // RESET: 0=reset -> 1=operating |
ntaka206 | 0:1ababa0d0c42 | 142 | gpsIsEnabled = true; |
ntaka206 | 0:1ababa0d0c42 | 143 | // the gps schould be fully ready after 50ms |
ntaka206 | 0:1ababa0d0c42 | 144 | if (mdmIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 145 | mdmILvlOe = 1; // ILVLEN: 0=enabled (i2c) |
ntaka206 | 0:1ababa0d0c42 | 146 | } |
ntaka206 | 0:1ababa0d0c42 | 147 | else if (gpsIsEnabled && !enable) // diasble gps |
ntaka206 | 0:1ababa0d0c42 | 148 | { |
ntaka206 | 0:1ababa0d0c42 | 149 | gpsIsEnabled = false; |
ntaka206 | 0:1ababa0d0c42 | 150 | mdmILvlOe = 0; // ILVLEN: 0=disabled (i2c) |
ntaka206 | 0:1ababa0d0c42 | 151 | #ifdef C027_REVA |
ntaka206 | 0:1ababa0d0c42 | 152 | // the gps ldo may have to remain enabled for the level shifters of the modem |
ntaka206 | 0:1ababa0d0c42 | 153 | if (!mdmIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 154 | gpsEn = 0; // LDOEN: 1=on -> 0=off |
ntaka206 | 0:1ababa0d0c42 | 155 | #else |
ntaka206 | 0:1ababa0d0c42 | 156 | gpsEn = 0; // LDOEN: 1=on -> 0=off |
ntaka206 | 0:1ababa0d0c42 | 157 | #endif |
ntaka206 | 0:1ababa0d0c42 | 158 | } |
ntaka206 | 0:1ababa0d0c42 | 159 | } |
ntaka206 | 0:1ababa0d0c42 | 160 | |
ntaka206 | 0:1ababa0d0c42 | 161 | void C027::gpsReset(void) |
ntaka206 | 0:1ababa0d0c42 | 162 | { |
ntaka206 | 0:1ababa0d0c42 | 163 | if (gpsIsEnabled) |
ntaka206 | 0:1ababa0d0c42 | 164 | { |
ntaka206 | 0:1ababa0d0c42 | 165 | gpsRst = 0; // RESET: 0=reset,1=operating |
ntaka206 | 0:1ababa0d0c42 | 166 | wait_ms(1); |
ntaka206 | 0:1ababa0d0c42 | 167 | gpsRst = 1; // RESET: 1=operating,0=reset |
ntaka206 | 0:1ababa0d0c42 | 168 | } |
ntaka206 | 0:1ababa0d0c42 | 169 | } |
ntaka206 | 0:1ababa0d0c42 | 170 | #endif |