ublox-cellular-base
UbloxATCmdParser.cpp@25:e67d3d9d2e7e, 2019-05-29 (annotated)
- Committer:
- wajahat.abbas@u-blox.com
- Date:
- Wed May 29 12:39:28 2019 +0500
- Revision:
- 25:e67d3d9d2e7e
- Child:
- 37:a2466fcd63c3
Added support for +UPSV (idle mode) for C030_R412M
Who changed what in which revision?
User | Revision | Line number | New 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 */ |