Cellular module AT Serial interface passthrough to Debug COM port. This program can be used on the C030 boards excluding the C030 N2xx version.

Committer:
euygun
Date:
Thu May 10 14:53:51 2018 +0000
Revision:
0:fd90bb768e20
Child:
1:f39e92fcdf5e
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
euygun 0:fd90bb768e20 1 /* mbed Microcontroller Library
euygun 0:fd90bb768e20 2 * Copyright (c) 2017 u-blox
euygun 0:fd90bb768e20 3 *
euygun 0:fd90bb768e20 4 * Licensed under the Apache License, Version 2.0 (the "License");
euygun 0:fd90bb768e20 5 * you may not use this file except in compliance with the License.
euygun 0:fd90bb768e20 6 * You may obtain a copy of the License at
euygun 0:fd90bb768e20 7 *
euygun 0:fd90bb768e20 8 * http://www.apache.org/licenses/LICENSE-2.0
euygun 0:fd90bb768e20 9 *
euygun 0:fd90bb768e20 10 * Unless required by applicable law or agreed to in writing, software
euygun 0:fd90bb768e20 11 * distributed under the License is distributed on an "AS IS" BASIS,
euygun 0:fd90bb768e20 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
euygun 0:fd90bb768e20 13 * See the License for the specific language governing permissions and
euygun 0:fd90bb768e20 14 * limitations under the License.
euygun 0:fd90bb768e20 15 */
euygun 0:fd90bb768e20 16
euygun 0:fd90bb768e20 17 #include "mbed.h"
euygun 0:fd90bb768e20 18 #include "gnss.h"
euygun 0:fd90bb768e20 19 #include "battery_charger_bq24295.h"
euygun 0:fd90bb768e20 20 #include "UbloxCellularDriverGen.h"
euygun 0:fd90bb768e20 21 #include "onboard_modem_api.h"
euygun 0:fd90bb768e20 22
euygun 0:fd90bb768e20 23 // Set the minimum input voltage limit for the BQ24295 to 3.8 Volt
euygun 0:fd90bb768e20 24 #define MIN_INPUT_VOLTAGE_LIMIT_MV 3880
euygun 0:fd90bb768e20 25
euygun 0:fd90bb768e20 26 /* The example program for the u-blox C030 boards. It sets up
euygun 0:fd90bb768e20 27 * - the GNSS module for automatic fix
euygun 0:fd90bb768e20 28 * - the I2C3 Bus to access BQ24295 Battery Charger
euygun 0:fd90bb768e20 29 * - the BQ24295 Battery Charger for 3.88 Volt input supply threshold
euygun 0:fd90bb768e20 30 *
euygun 0:fd90bb768e20 31 */
euygun 0:fd90bb768e20 32
euygun 0:fd90bb768e20 33 // User LEDs
euygun 0:fd90bb768e20 34 DigitalOut ledRed(LED1, 1);
euygun 0:fd90bb768e20 35 DigitalOut ledGreen(LED2, 1);
euygun 0:fd90bb768e20 36 DigitalOut ledBlue(LED3, 1);
euygun 0:fd90bb768e20 37
euygun 0:fd90bb768e20 38 // Ethernet socket LED
euygun 0:fd90bb768e20 39 DigitalOut ledYellow(LED4,1);
euygun 0:fd90bb768e20 40
euygun 0:fd90bb768e20 41 // User Button
euygun 0:fd90bb768e20 42 #ifdef TARGET_UBLOX_C027
euygun 0:fd90bb768e20 43 // No user button on C027
euygun 0:fd90bb768e20 44 InterruptIn userButton(NC);
euygun 0:fd90bb768e20 45 #else
euygun 0:fd90bb768e20 46 InterruptIn userButton(SW0);
euygun 0:fd90bb768e20 47 #endif
euygun 0:fd90bb768e20 48
euygun 0:fd90bb768e20 49 // GNSS
euygun 0:fd90bb768e20 50 GnssSerial gnss;
euygun 0:fd90bb768e20 51
euygun 0:fd90bb768e20 52 // i2c3 Bus
euygun 0:fd90bb768e20 53 I2C i2c3(I2C_SDA_B, I2C_SCL_B);
euygun 0:fd90bb768e20 54
euygun 0:fd90bb768e20 55 // Battery Charger BQ24295
euygun 0:fd90bb768e20 56 BatteryChargerBq24295 charger;
euygun 0:fd90bb768e20 57
euygun 0:fd90bb768e20 58 // Delay between LED changes in second
euygun 0:fd90bb768e20 59 volatile float delay = 0.5;
euygun 0:fd90bb768e20 60
euygun 0:fd90bb768e20 61 // To check if the user pressed the User Button or not
euygun 0:fd90bb768e20 62 void threadBodyUserButtonCheck(void const *args){
euygun 0:fd90bb768e20 63 float delayToggle = delay;
euygun 0:fd90bb768e20 64 while (1){
euygun 0:fd90bb768e20 65 if (userButton.read() == 1 ) {
euygun 0:fd90bb768e20 66 // User Button is pressed
euygun 0:fd90bb768e20 67 delay = 0.1;
euygun 0:fd90bb768e20 68 // Indicate with the Yellow LED on Ethernet socket
euygun 0:fd90bb768e20 69 ledYellow = 0;
euygun 0:fd90bb768e20 70 }
euygun 0:fd90bb768e20 71 else {
euygun 0:fd90bb768e20 72 // User button is released
euygun 0:fd90bb768e20 73 delay = 0.5;
euygun 0:fd90bb768e20 74 // Turn off the Yellow LED on Ethernet socket
euygun 0:fd90bb768e20 75 ledYellow = 1;
euygun 0:fd90bb768e20 76 }
euygun 0:fd90bb768e20 77 }
euygun 0:fd90bb768e20 78 }
euygun 0:fd90bb768e20 79
euygun 0:fd90bb768e20 80 RawSerial pc(PD_5, PD_6);
euygun 0:fd90bb768e20 81 RawSerial dev(PA_9, PA_10);
euygun 0:fd90bb768e20 82
euygun 0:fd90bb768e20 83 void dev_recv()
euygun 0:fd90bb768e20 84 {
euygun 0:fd90bb768e20 85
euygun 0:fd90bb768e20 86 while(dev.readable()) {
euygun 0:fd90bb768e20 87 pc.putc(dev.getc());
euygun 0:fd90bb768e20 88 }
euygun 0:fd90bb768e20 89 }
euygun 0:fd90bb768e20 90
euygun 0:fd90bb768e20 91 void pc_recv()
euygun 0:fd90bb768e20 92 {
euygun 0:fd90bb768e20 93
euygun 0:fd90bb768e20 94 while(pc.readable()) {
euygun 0:fd90bb768e20 95 dev.putc(pc.getc());
euygun 0:fd90bb768e20 96 }
euygun 0:fd90bb768e20 97 }
euygun 0:fd90bb768e20 98 /*
euygun 0:fd90bb768e20 99 ** Out of the Box Demo for C030 variants
euygun 0:fd90bb768e20 100 **
euygun 0:fd90bb768e20 101 */
euygun 0:fd90bb768e20 102
euygun 0:fd90bb768e20 103 int main()
euygun 0:fd90bb768e20 104 {
euygun 0:fd90bb768e20 105 printf("u-blox C030-R410M Bring-up baseline using Out-of-the-Box Demo\n\r");
euygun 0:fd90bb768e20 106
euygun 0:fd90bb768e20 107 // GNSS initialisation
euygun 0:fd90bb768e20 108 if(gnss.init()) {
euygun 0:fd90bb768e20 109 printf("GNSS initialised.\n\r");
euygun 0:fd90bb768e20 110 }
euygun 0:fd90bb768e20 111 else {
euygun 0:fd90bb768e20 112 printf("GNSS initialisation failure.\n\r");
euygun 0:fd90bb768e20 113 }
euygun 0:fd90bb768e20 114
euygun 0:fd90bb768e20 115 // The battery charger initialisation
euygun 0:fd90bb768e20 116 if(charger.init(&i2c3)) {
euygun 0:fd90bb768e20 117 printf("Battery charger initialised.\n\r");
euygun 0:fd90bb768e20 118
euygun 0:fd90bb768e20 119 charger.setInputVoltageLimit(MIN_INPUT_VOLTAGE_LIMIT_MV);
euygun 0:fd90bb768e20 120 // Disable the battery charger's watchdog, otherwise it resets the battry charger
euygun 0:fd90bb768e20 121 charger.setWatchdog(0);
euygun 0:fd90bb768e20 122 }
euygun 0:fd90bb768e20 123 else {
euygun 0:fd90bb768e20 124 printf("Battery charger initialisation failure.\n\r");
euygun 0:fd90bb768e20 125 }
euygun 0:fd90bb768e20 126 printf("\n\r");
euygun 0:fd90bb768e20 127
euygun 0:fd90bb768e20 128 // The modem initialisation
euygun 0:fd90bb768e20 129 onboard_modem_init();
euygun 0:fd90bb768e20 130
euygun 0:fd90bb768e20 131 // Power up the modem
euygun 0:fd90bb768e20 132 onboard_modem_power_up();
euygun 0:fd90bb768e20 133
euygun 0:fd90bb768e20 134 // Create threadUserButtonCheck thread
euygun 0:fd90bb768e20 135 Thread threadUserButtonCheck(threadBodyUserButtonCheck);
euygun 0:fd90bb768e20 136
euygun 0:fd90bb768e20 137 // Set the LED states
euygun 0:fd90bb768e20 138 ledRed = 0;
euygun 0:fd90bb768e20 139 ledGreen = 1;
euygun 0:fd90bb768e20 140 ledBlue = 1;
euygun 0:fd90bb768e20 141
euygun 0:fd90bb768e20 142 pc.baud(115200);
euygun 0:fd90bb768e20 143 dev.baud(115200);
euygun 0:fd90bb768e20 144
euygun 0:fd90bb768e20 145 pc.attach(&pc_recv, Serial::RxIrq);
euygun 0:fd90bb768e20 146 dev.attach(&dev_recv, Serial::RxIrq);
euygun 0:fd90bb768e20 147
euygun 0:fd90bb768e20 148 while(1) {
euygun 0:fd90bb768e20 149 sleep();
euygun 0:fd90bb768e20 150 }
euygun 0:fd90bb768e20 151
euygun 0:fd90bb768e20 152
euygun 0:fd90bb768e20 153 // Main loop
euygun 0:fd90bb768e20 154 while(1) {
euygun 0:fd90bb768e20 155 wait(delay);
euygun 0:fd90bb768e20 156 // Shift the LED states
euygun 0:fd90bb768e20 157 int carry = ledBlue;
euygun 0:fd90bb768e20 158 ledBlue = ledRed;
euygun 0:fd90bb768e20 159 ledRed = ledGreen;
euygun 0:fd90bb768e20 160 ledGreen = carry;
euygun 0:fd90bb768e20 161 }
euygun 0:fd90bb768e20 162 }
euygun 0:fd90bb768e20 163
euygun 0:fd90bb768e20 164 // End Of File