upsv

Committer:
wajahat.abbas@u-blox.com
Date:
Wed May 29 12:39:28 2019 +0500
Revision:
25:e67d3d9d2e7e
Added support for +UPSV (idle mode) for C030_R412M

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 1 /*
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 2 * Copyright (c) 2017, Arm Limited and affiliates.
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 3 * SPDX-License-Identifier: Apache-2.0
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 4 *
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 5 * Licensed under the Apache License, Version 2.0 (the "License");
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 6 * you may not use this file except in compliance with the License.
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 7 * You may obtain a copy of the License at
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 8 *
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 9 * http://www.apache.org/licenses/LICENSE-2.0
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 10 *
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 11 * Unless required by applicable law or agreed to in writing, software
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 12 * distributed under the License is distributed on an "AS IS" BASIS,
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 14 * See the License for the specific language governing permissions and
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 15 * limitations under the License.
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 16 */
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 17 #ifdef TARGET_UBLOX_C030_R41XM
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 18
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 19 #include "UbloxATCmdParser.h"
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 20 #include "rtos/Thread.h"
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 21
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 22 using namespace mbed;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 23
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 24 UbloxATCmdParser::UbloxATCmdParser(FileHandle *fh, const char *output_delimiter, int buffer_size, int timeout, bool debug) : ATCmdParser(fh, output_delimiter, buffer_size, timeout, debug)
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 25 {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 26 idle_mode_disabled();
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 27 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 28 UbloxATCmdParser::~UbloxATCmdParser()
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 29 {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 30
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 31 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 32
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 33
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 34 bool UbloxATCmdParser::send(const char *command, ...)
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 35 {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 36 bool status = false;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 37
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 38 if (_idle_mode_status == true) { //idle mode is active
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 39 if ( _wakeup_timer.read_ms() >= 5000) { //if more than 5 secs have passed since last TX activity, wake up the modem.
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 40 uint8_t retries = 3;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 41 ATCmdParser::set_timeout(1000);
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 42 while(retries--) {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 43 ATCmdParser::putc('A');
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 44 wait_ms(10); //wait a little
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 45 if ( (ATCmdParser::send("AT")) && (ATCmdParser::recv("OK")) ) { //check if modem is awake and accepting commands
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 46 status = true;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 47 break;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 48 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 49 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 50 ATCmdParser::set_timeout(_timeout);
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 51 if (status == false) { //all tries failed, return false
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 52 _wakeup_timer.reset();
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 53 return status;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 54 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 55 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 56 _wakeup_timer.reset(); //Any activity on tx will reset the timer. Timer will expire if no activity since last 5 secs
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 57 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 58
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 59 va_list args;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 60 va_start(args, command);
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 61 status = ATCmdParser::vsend(command, args);
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 62 va_end(args);
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 63 return status;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 64 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 65
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 66 void UbloxATCmdParser::idle_mode_enabled()
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 67 {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 68 _idle_mode_status = true;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 69 _wakeup_timer.start();
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 70 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 71
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 72 void UbloxATCmdParser::idle_mode_disabled()
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 73 {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 74 _idle_mode_status = false;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 75 _wakeup_timer.stop();
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 76 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 77
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 78 bool UbloxATCmdParser::is_idle_mode_enabled()
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 79 {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 80 return _idle_mode_status;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 81 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 82
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 83 void UbloxATCmdParser::set_timeout(int timeout) {
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 84 _timeout = timeout;
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 85 ATCmdParser::set_timeout(timeout);
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 86 }
wajahat.abbas@u-blox.com 25:e67d3d9d2e7e 87 #endif /* TARGET_UBLOX_C030_R41XM */