diff options
author | Jack Humbert <jack.humb@gmail.com> | 2016-06-18 14:30:24 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-18 14:30:24 -0400 |
commit | db32864ce7029d758f57729cc2f75e051a28d0a2 (patch) | |
tree | f3ac60d9c826a9ad5ef5bc4d199efaddae156ba6 /tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem | |
parent | 1923cffd41d9d71cd9f434092654dba05513137b (diff) |
Cleans up quantum/keymap situation, removes extra lufa folders (#416)
* sorts out keycodes
* move midi around
* remove mbed
* replaces keymap with qmk/keymap_common
* fixes keymap.h
* keymap, config, quantum rearrange
* removes unneeded lufa stuff
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem')
26 files changed, 0 insertions, 4000 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/CellularModem.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/CellularModem.h deleted file mode 100644 index fd47622c86..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/CellularModem.h +++ /dev/null @@ -1,78 +0,0 @@ -/* CellularModem.h */ -/* Copyright (C) 2013 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef CELLULARMODEM_H_ -#define CELLULARMODEM_H_ - -#include "core/fwk.h" -#include "at/ATCommandsInterface.h" - -class CellularModem -{ -public: - //Internet-related functions - - /** Open a 3G internet connection - @return 0 on success, error code on failure - */ - virtual int connect(const char* apn = NULL, const char* user = NULL, const char* password = NULL) = 0; - - /** Close the internet connection - @return 0 on success, error code on failure - */ - virtual int disconnect() = 0; - - - /** Send a SM - @param number The receiver's phone number - @param message The message to send - @return 0 on success, error code on failure - */ - virtual int sendSM(const char* number, const char* message) = 0; - - - /** Receive a SM - @param number Pointer to a buffer to store the sender's phone number (must be at least 17 characters-long, including the sapce for the null-terminating char) - @param message Pointer to a buffer to store the the incoming message - @param maxLength Maximum message length that can be stored in buffer (including null-terminating character) - @return 0 on success, error code on failure - */ - virtual int getSM(char* number, char* message, size_t maxLength) = 0; - - /** Get the number of SMs in the incoming box - @param pCount pointer to store the number of unprocessed SMs on - @return 0 on success, error code on failure - */ - virtual int getSMCount(size_t* pCount) = 0; - - /** Get the ATCommandsInterface instance - @return Pointer to the ATCommandsInterface instance - */ - virtual ATCommandsInterface* getATCommandsInterface() = 0; - - /** Switch power on or off - In order to use this function, a pin name must have been entered in the constructor - @param enable true to switch the dongle on, false to switch it off - @return 0 on success, error code on failure - */ - virtual int power(bool enable) = 0; -}; - - -#endif /* CELLULARMODEM_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/at/ATCommandsInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/at/ATCommandsInterface.cpp deleted file mode 100644 index 9f711630ce..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/at/ATCommandsInterface.cpp +++ /dev/null @@ -1,902 +0,0 @@ -/* ATCommandsInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define __DEBUG__ 2 //ERR+WARN -#ifndef __MODULE__ -#define __MODULE__ "ATCommandsInterface.cpp" -#endif - -#include "core/fwk.h" - -#include <cstdio> -#include <cstring> //For memset, strstr... - -using std::memmove; - -#include "ATCommandsInterface.h" - -ATCommandsInterface::ATCommandsInterface(IOStream* pStream) : - m_pStream(pStream), m_open(false), m_transactionState(IDLE), m_env2AT(), m_AT2Env(), m_processingMtx(), - m_processingThread(&ATCommandsInterface::staticCallback, this, (osPriority)AT_THREAD_PRIORITY, 4*192), - m_eventsMgmtMtx(), m_eventsProcessingMtx() -{ - memset(m_eventsHandlers, 0, MAX_AT_EVENTS_HANDLERS * sizeof(IATEventsHandler*)); - - m_processingMtx.lock(); -} - -//Open connection to AT Interface in order to execute command & register/unregister events -int ATCommandsInterface::open() -{ - if( m_open ) - { - WARN("AT interface is already open"); - return OK; - } - DBG("Opening AT interface"); - //Start processing - m_processingThread.signal_set(AT_SIG_PROCESSING_START); - - m_processingMtx.unlock(); - - m_open = true; - - DBG("AT interface opened"); - - return OK; -} - -//Initialize AT link & start events processing -int ATCommandsInterface::init(bool reset /* = true*/) -{ - - //Lock transaction mutex - m_transactionMtx.lock(); - - if (reset) - { - DBG("Sending ATZ E1 V1"); - //Should we flush m_pStream at this point ??? - int err; - int tries = 5; - do - { - err = executeInternal("ATZ E1 V1", this, NULL, 3000); //Enable echo and verbosity - if(err && tries) - { - WARN("No response, trying again"); - Thread::wait(1000); //Give dongle time to recover - } - } while(err && tries--); - if( err ) - { - ERR("Sending ATZ E1 V1 returned with err code %d", err); - m_transactionMtx.unlock(); - return err; - } - } - - //Enable events handling and execute events enabling commands - enableEvents(); - - DBG("AT interface initialized"); - - //Unlock transaction mutex - m_transactionMtx.unlock(); - - return OK; -} - -//Close connection -int ATCommandsInterface::close() -{ - if( !m_open ) - { - WARN("AT interface is already closed"); - return OK; - } - - DBG("Closing AT interface"); - - //Lock transaction mutex - m_transactionMtx.lock(); - - //Disable events handling and advertize this to the events handlers - disableEvents(); - - //Stop processing - m_processingThread.signal_set(AT_SIG_PROCESSING_STOP); - //m_stopSphre.release(); - - int* msg = m_env2AT.alloc(osWaitForever); - *msg = AT_STOP; - m_env2AT.put(msg); //Used to unstall the process if needed - - //Unlock process routine (abort read) - m_pStream->abortRead(); //This is thread-safe - m_processingMtx.lock(); - m_open = false; - - //Unlock transaction mutex - m_transactionMtx.unlock(); - - DBG("AT interface closed"); - return OK; -} - -bool ATCommandsInterface::isOpen() -{ - return m_open; -} - -int ATCommandsInterface::executeSimple(const char* command, ATResult* pResult, uint32_t timeout/*=1000*/) -{ - return execute(command, this, pResult, timeout); -} - -int ATCommandsInterface::execute(const char* command, IATCommandsProcessor* pProcessor, ATResult* pResult, uint32_t timeout/*=1000*/) -{ - if(!m_open) - { - WARN("Interface is not open!"); - return NET_INVALID; - } - - //Lock transaction mutex - m_transactionMtx.lock(); - - disableEvents(); //Disable unsollicited result codes - int ret = executeInternal(command, pProcessor, pResult, timeout); - enableEvents(); //Re-enable unsollicited result codes whatever the result of the command is - - //Unlock transaction mutex - m_transactionMtx.unlock(); - - return ret; -} - -int ATCommandsInterface::registerEventsHandler(IATEventsHandler* pHdlr) -{ - m_eventsMgmtMtx.lock(); - m_eventsProcessingMtx.lock(); - for(int i = 0; i < MAX_AT_EVENTS_HANDLERS; i++) //Find a free slot - { - if( m_eventsHandlers[i] == NULL ) - { - m_eventsHandlers[i] = pHdlr; - m_eventsProcessingMtx.unlock(); - m_eventsMgmtMtx.unlock(); - return OK; - } - } - m_eventsProcessingMtx.unlock(); - m_eventsMgmtMtx.unlock(); - return NET_OOM; //No room left -} - -int ATCommandsInterface::deregisterEventsHandler(IATEventsHandler* pHdlr) -{ - m_eventsMgmtMtx.lock(); - m_eventsProcessingMtx.lock(); - for(int i = 0; i < MAX_AT_EVENTS_HANDLERS; i++) //Find handler in list - { - if( m_eventsHandlers[i] == pHdlr ) - { - m_eventsHandlers[i] = NULL; - m_eventsProcessingMtx.unlock(); - m_eventsMgmtMtx.unlock(); - return OK; - } - } - m_eventsProcessingMtx.unlock(); - m_eventsMgmtMtx.unlock(); - return NET_NOTFOUND; //Not found -} - -//Private methods - -int ATCommandsInterface::executeInternal(const char* command, IATCommandsProcessor* pProcessor, ATResult* pResult, uint32_t timeout/*=1000*/) -{ - DBG("Executing command %s", command); - - //Discard previous result if it arrived too late - osEvent evt = m_AT2Env.get(0); - - if(evt.status == osEventMail) - { - m_AT2Env.free((int*)evt.value.p); - WARN("Previous result discarded"); - } - - //Send params to the process routine - m_transactionCommand = command; - if(pProcessor != NULL) - { - m_pTransactionProcessor = pProcessor; - } - else - { - m_pTransactionProcessor = this; //Use default behaviour - } - - DBG("Sending command ready signal to AT thread & aborting current blocking read operation"); - - //Produce command ready signal - int* msg = m_env2AT.alloc(osWaitForever); - *msg = AT_CMD_READY; - m_env2AT.put(msg); - - DBG("Trying to enter abortRead()"); - //Unlock process routine (abort read) - m_pStream->abortRead(); //This is thread-safe - - //Wait for a result (get result message) - evt = m_AT2Env.get(timeout); - - if(evt.status != osEventMail) - { - //Cancel request - msg = m_env2AT.alloc(osWaitForever); - *msg = AT_TIMEOUT; - m_env2AT.put(msg); - - DBG("Trying to enter abortRead()"); - //Unlock process routine (abort read) - m_pStream->abortRead(); //This is thread-safe - - //Wait for acknowledge - int msgResult; - do - { - evt = m_AT2Env.get(osWaitForever); - msgResult = *((int*) evt.value.p); - m_AT2Env.free((int*)evt.value.p); - } while(msgResult != AT_TIMEOUT); - - WARN("Command returned no message"); - WARN("Command \"%s\" returned no message", command); - return NET_TIMEOUT; - } - DBG("Command returned with message %d", *msg); - - m_AT2Env.free((int*)evt.value.p); - - if(pResult != NULL) - { - *pResult = m_transactionResult; - } - - int ret = ATResultToReturnCode(m_transactionResult); - if(ret != OK) - { - WARN("Command returned AT result %d with code %d", m_transactionResult.result, m_transactionResult.code); - WARN("Command \"%s\" returned AT result %d with code %d", command, m_transactionResult.result, m_transactionResult.code); - } - - DBG("Command returned successfully"); - - return ret; -} - -int ATCommandsInterface::tryReadLine() -{ - static bool lineDetected = false; - - //Block on serial read or incoming command - DBG("Trying to read a new line from stream"); - int ret = m_pStream->waitAvailable(); //This can be aborted - size_t readLen = 0; - if(ret == OK) - { - ret = m_pStream->read((uint8_t*)m_inputBuf + m_inputPos, &readLen, AT_INPUT_BUF_SIZE - 1 - m_inputPos, 0); //Do NOT wait at this point - } - if(ret == OK) - { - m_inputPos+=readLen; - m_inputBuf[m_inputPos] = '\0'; //Add null terminating character to ease the use of str* functions - DBG("In buffer: [%s]", m_inputBuf); - } - - if( ret == NET_INTERRUPTED ) //It is worth checking readLen as data might have been read even though the read was interrupted - { - DBG("Read was interrupted"); - return NET_INTERRUPTED; //0 chars were read - } - else if(readLen == 0) - { - DBG("Nothing read"); - return OK; //0 chars were read - } - - DBG("Trying to process incoming line"); - bool lineProcessed = false; - - do - { - lineProcessed = false; //Reset flag - - DBG("New iteration"); - - //Look for a new line - if(!lineDetected) - { - DBG("No line detected yet"); - //Try to look for a starting CRLF - char* crPtr = strchr(m_inputBuf, CR); - /* - Different cases at this point: - - CRLF%c sequence: this is the start of a line - - CRLFCR(LF) sequence: this is the end of a line (followed by the beginning of the next one) - - LF: this is the trailing LF char of the previous line, discard - - CR / CRLF incomplete sequence: more data is needed to determine which action to take - - %c ... CR sequence: this should be the echo of the previous sequence - - %c sequence: This might be the echo of the previous command; more data is needed to determine which action to take - - In every case, move mem at the beginning - */ - if(crPtr != NULL) - { - DBG("CR char found"); - -#if 0 - //Discard all preceding characters (can do nothing if m_inputBuf == crPtr) - memmove(m_inputBuf, crPtr, (m_inputPos + 1) - (crPtr-m_inputBuf)); //Move null-terminating char as well - m_inputPos = m_inputPos - (crPtr-m_inputBuf); //Adjust m_inputPos -#endif - - //If the line starts with CR, this should be a result code - if( crPtr == m_inputBuf ) - { - //To determine the sequence we need at least 3 chars - if(m_inputPos >= 3) - { - //Look for a LF char next to the CR char - if(m_inputBuf[1] == LF) - { - //At this point we can check whether this is the end of a preceding line or the beginning of a new one - if(m_inputBuf[2] != CR) - { - DBG("Beginning of new line found"); - //Beginning of a line - lineDetected = true; //Move to next state-machine step - } - else - { - //End of an unprocessed line - WARN("End of unprocessed line"); - } - //In both cases discard CRLF - DBG("Discarding CRLF"); - memmove(m_inputBuf, m_inputBuf + 2, (m_inputPos + 1) - 2); //Move null-terminating char as well - m_inputPos = m_inputPos - 2; //Adjust m_inputPos - } - else - { - //This is completely unexpected, discard the CR char to try to recover good state - WARN("Unexpected %c char (%02d code) found after CR char", m_inputBuf[1]); - memmove(m_inputBuf, m_inputBuf + 1, (m_inputPos + 1) - 1); //Move null-terminating char as well - m_inputPos = m_inputPos - 1; //Adjust m_inputPos - } - } - } - //if the line does NOT begin with CR, this can be an echo of the previous command, process it - else - { - int crPos = crPtr - m_inputBuf; - int lfOff = 0; //Offset for LF if present - DBG("New line found (possible echo of command)"); - //This is the end of line - //Replace m_inputBuf[crPos] with null-terminating char - m_inputBuf[crPos] = '\0'; - //Check if there is a LF char afterwards - if(m_inputPos - crPos >= 1) - { - if(m_inputBuf[crPos+1] == LF) - { - lfOff++; //We will discard LF char as well - } - } - //Process line - int ret = processReadLine(); - if(ret) - { - m_inputPos = 0; - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - lineDetected = false; - return ret; - } - - //If sendData has been called, all incoming data has been discarded - if(m_inputPos > 0) - { - memmove(m_inputBuf, m_inputBuf + crPos + lfOff + 1, (m_inputPos + 1) - (crPos + lfOff + 1)); //Move null-terminating char as well - m_inputPos = m_inputPos - (crPos + lfOff + 1); //Adjust m_inputPos - } - DBG("One line was successfully processed"); - lineProcessed = true; //Line was processed with success - lineDetected = false; //Search now for a new line - } - } - else if(m_inputBuf[0] == LF) //If there is a remaining LF char from the previous line, discard it - { - DBG("Discarding single LF char"); - memmove(m_inputBuf, m_inputBuf + 1, (m_inputPos + 1) - 1); //Move null-terminating char as well - m_inputPos = m_inputPos - 1; //Adjust m_inputPos - } - } - - //Look for the end of line - if(lineDetected) - { - DBG("Looking for end of line"); - //Try to look for a terminating CRLF - char* crPtr = strchr(m_inputBuf, CR); - /* - Different cases at this point: - - CRLF sequence: this is the end of the line - - CR%c sequence : unexpected - - CR incomplete sequence: more data is needed to determine which action to take - */ - - //Try to look for a '>' (greater than character) that marks an entry prompt - char* greaterThanPtr = strchr(m_inputBuf, GD); - /* - This character must be detected as there is no CRLF sequence at the end of an entry prompt - */ - - if(crPtr != NULL) - { - DBG("CR char found"); - int crPos = crPtr - m_inputBuf; - //To determine the sequence we need at least 2 chars - if(m_inputPos - crPos >= 2) - { - //Look for a LF char next to the CR char - if(m_inputBuf[crPos + 1] == LF) - { - DBG("End of new line found"); - //This is the end of line - //Replace m_inputBuf[crPos] with null-terminating char - m_inputBuf[crPos] = '\0'; - //Process line - int ret = processReadLine(); - if(ret) - { - m_inputPos = 0; - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - lineDetected = false; - return ret; - } - - //If sendData has been called, all incoming data has been discarded - if(m_inputPos > 0) - { - //Shift remaining data to beginning of buffer - memmove(m_inputBuf, m_inputBuf + crPos + 2, (m_inputPos + 1) - (crPos + 2)); //Move null-terminating char as well - m_inputPos = m_inputPos - (crPos + 2); //Adjust m_inputPos - } - - DBG("One line was successfully processed"); - lineProcessed = true; //Line was processed with success - } - else - { - //This is completely unexpected, discard all chars till the CR char to try to recover good state - WARN("Unexpected %c char (%02d code) found in incoming line", m_inputBuf[crPos + 1]); - memmove(m_inputBuf, m_inputBuf + crPos + 1, (m_inputPos + 1) - (crPos + 1)); //Move null-terminating char as well - m_inputPos = m_inputPos - (crPos + 1); //Adjust m_inputPos - } - lineDetected = false; //In both case search now for a new line - } - } - else if(greaterThanPtr != NULL) - { - DBG("> char found"); - int gdPos = greaterThanPtr - m_inputBuf; - //To determine the sequence we need at least 2 chars - if(m_inputPos - gdPos >= 2) - { - //Look for a space char next to the GD char - if(m_inputBuf[gdPos + 1] == ' ') - { - //This is an entry prompt - //Replace m_inputBuf[gdPos] with null-terminating char - m_inputBuf[gdPos] = '\0'; - - //Shift remaining data to beginning of buffer - memmove(m_inputBuf, m_inputBuf + gdPos + 1, (m_inputPos + 1) - (gdPos + 1)); //Move null-terminating char as well - m_inputPos = m_inputPos - (gdPos + 1); //Adjust m_inputPos - - //Process prompt - ret = processEntryPrompt(); - if(ret) - { - m_inputPos = 0; - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - lineDetected = false; - return ret; - } - - DBG("One line was successfully processed"); - lineProcessed = true; //Line was processed with success - } - else - { - //This is completely unexpected, discard all chars till the GD char to try to recover good state - WARN("Unexpected %c char (%02d code) found in incoming line", m_inputBuf[gdPos + 1]); - memmove(m_inputBuf, m_inputBuf + gdPos + 1, (m_inputPos + 1) - (gdPos + 1)); //Move null-terminating char as well - m_inputPos = m_inputPos - (gdPos + 1); //Adjust m_inputPos - } - lineDetected = false; //In both case search now for a new line - } - } - } - } while(lineProcessed); //If one complete line was processed there might be other incoming lines that can also be processed without reading the buffer again - - //If the line could not be processed AND buffer is full, it means that we won't ever be able to process it (buffer too short) - if(m_inputPos == AT_INPUT_BUF_SIZE - 1) - { - //Discard everything - m_inputPos = 0; - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - WARN("Incoming buffer is too short to process incoming line"); - //Look for a new line - lineDetected = false; - } - - DBG("Processed every full incoming lines"); - - return OK; -} - -int ATCommandsInterface::trySendCommand() -{ - osEvent evt = m_env2AT.get(0); - DBG("status = %d, msg = %d", evt.status, evt.value.p); - if(evt.status == osEventMail) - { - int* msg = (int*) evt.value.p; - if( *msg == AT_CMD_READY ) //Command pending - { - if(m_transactionState != IDLE) - { - WARN("Previous command not processed!"); - } - DBG("Sending pending command"); - m_pStream->write((uint8_t*)m_transactionCommand, strlen(m_transactionCommand), osWaitForever); - char cr = CR; - m_pStream->write((uint8_t*)&cr, 1, osWaitForever); //Carriage return line terminator - m_transactionState = COMMAND_SENT; - } - else //Timeout - { - //Acknowledge - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_TIMEOUT; - m_AT2Env.put(msg); //Command has timed out - m_transactionState = IDLE; //State-machine reset - } - m_env2AT.free(msg); - } - return OK; -} - -int ATCommandsInterface::processReadLine() -{ - DBG("Processing read line [%s]", m_inputBuf); - //The line is stored in m_inputBuf - if(m_transactionState == COMMAND_SENT) - { - //If the command has been sent, checks echo to see if it has been received properly - if( strcmp(m_transactionCommand, m_inputBuf) == 0 ) - { - DBG("Command echo received"); - //If so, it means that the following lines will only be solicited results - m_transactionState = READING_RESULT; - return OK; - } - } - if(m_transactionState == IDLE || m_transactionState == COMMAND_SENT) - { - bool found = false; - char* pSemicol = strchr(m_inputBuf, ':'); - char* pData = NULL; - if( pSemicol != NULL ) //Split the identifier & the result code (if it exists) - { - *pSemicol = '\0'; - pData = pSemicol + 1; - if(pData[0]==' ') - { - pData++; //Suppress whitespace - } - } - //Looks for a unsolicited result code; we can have m_transactionState == COMMAND_SENT as the code may have arrived just before we sent the command - m_eventsProcessingMtx.lock(); - //Go through the list - for(int i = 0; i < MAX_AT_EVENTS_HANDLERS; i++) //Find a free slot - { - if( m_eventsHandlers[i] != NULL ) - { - if( m_eventsHandlers[i]->isATCodeHandled(m_inputBuf) ) - { - m_eventsHandlers[i]->onEvent(m_inputBuf, pData); - found = true; //Do not break here as there might be multiple handlers for one event type - } - } - } - m_eventsProcessingMtx.unlock(); - if(found) - { - return OK; - } - } - if(m_transactionState == READING_RESULT) - { - //The following lines can either be a command response or a result code (OK / ERROR / CONNECT / +CME ERROR: %s / +CMS ERROR: %s) - if(strcmp("OK", m_inputBuf) == 0) - { - DBG("OK result received"); - m_transactionResult.code = 0; - m_transactionResult.result = ATResult::AT_OK; - m_transactionState = IDLE; - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_RESULT_READY; - m_AT2Env.put(msg); //Command has been processed - return OK; - } - else if(strcmp("ERROR", m_inputBuf) == 0) - { - DBG("ERROR result received"); - m_transactionResult.code = 0; - m_transactionResult.result = ATResult::AT_ERROR; - m_transactionState = IDLE; - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_RESULT_READY; - m_AT2Env.put(msg); //Command has been processed - return OK; - } - else if(strncmp("CONNECT", m_inputBuf, 7 /*=strlen("CONNECT")*/) == 0) //Result can be "CONNECT" or "CONNECT %d", indicating baudrate - { - DBG("CONNECT result received"); - m_transactionResult.code = 0; - m_transactionResult.result = ATResult::AT_CONNECT; - m_transactionState = IDLE; - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_RESULT_READY; - m_AT2Env.put(msg); //Command has been processed - return OK; - } - else if(strcmp("COMMAND NOT SUPPORT", m_inputBuf) == 0) //Huawei-specific, not normalized - { - DBG("COMMAND NOT SUPPORT result received"); - m_transactionResult.code = 0; - m_transactionResult.result = ATResult::AT_ERROR; - m_transactionState = IDLE; - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_RESULT_READY; - m_AT2Env.put(msg); //Command has been processed - return OK; - } - else if(strstr(m_inputBuf, "+CME ERROR:") == m_inputBuf) //Mobile Equipment Error - { - std::sscanf(m_inputBuf + 12 /* =strlen("+CME ERROR: ") */, "%d", &m_transactionResult.code); - DBG("+CME ERROR: %d result received", m_transactionResult.code); - m_transactionResult.result = ATResult::AT_CME_ERROR; - m_transactionState = IDLE; - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_RESULT_READY; - m_AT2Env.put(msg); //Command has been processed - return OK; - } - else if(strstr(m_inputBuf, "+CMS ERROR:") == m_inputBuf) //SIM Error - { - std::sscanf(m_inputBuf + 13 /* =strlen("+CME ERROR: ") */, "%d", &m_transactionResult.code); - DBG("+CMS ERROR: %d result received", m_transactionResult.code); - m_transactionResult.result = ATResult::AT_CMS_ERROR; - m_transactionState = IDLE; - int* msg = m_AT2Env.alloc(osWaitForever); - *msg = AT_RESULT_READY; - m_AT2Env.put(msg); //Command has been processed - return OK; - } - else - { - DBG("Unprocessed result received: '%s'", m_inputBuf); - //Must call transaction processor to complete line processing - int ret = m_pTransactionProcessor->onNewATResponseLine(this, m_inputBuf); //Here sendData can be called - return ret; - } - } - - return OK; -} - -int ATCommandsInterface::processEntryPrompt() -{ - DBG("Calling prompt handler"); - int ret = m_pTransactionProcessor->onNewEntryPrompt(this); //Here sendData can be called - - if( ret != NET_MOREINFO ) //A new prompt is expected - { - DBG("Sending break character"); - //Send CTRL+Z (break sequence) to exit prompt - char seq[2] = {BRK, 0x00}; - sendData(seq); - } - return OK; -} - -//This will be called on initialization & after the execution of a command -void ATCommandsInterface::enableEvents() -{ - //Advertize this to events handlers - m_eventsMgmtMtx.lock(); - for(int i = 0; i < MAX_AT_EVENTS_HANDLERS; i++) //Find a free slot - { - if( m_eventsHandlers[i] != NULL ) - { - m_eventsHandlers[i]->onDispatchStart(); - //Enable this kind of events - const char* cmd = m_eventsHandlers[i]->getEventsEnableCommand(); - if(cmd != NULL) - { - int ret = executeInternal(cmd, this, NULL); //Execute enable command - if(ret) - { - WARN("Events enabling command \"%s\" failed", cmd); - } - } - } - } - m_eventsMgmtMtx.unlock(); -} - -//This will be called on de-initialization & before the execution of a command to prevent unsollicited result codes from polluting the results -void ATCommandsInterface::disableEvents() -{ - //Advertize this to events handlers - m_eventsMgmtMtx.lock(); - for(int i = 0; i < MAX_AT_EVENTS_HANDLERS; i++) //Find a free slot - { - if( m_eventsHandlers[i] != NULL ) - { - m_eventsHandlers[i]->onDispatchStart(); - //Disable this kind of events - const char* cmd = m_eventsHandlers[i]->getEventsDisableCommand(); - if(cmd != NULL) - { - int ret = executeInternal(cmd, this, NULL); //Execute disable command - if(ret) - { - WARN("Events disabling command \"%s\" failed", cmd); - } - } - } - } - m_eventsMgmtMtx.unlock(); -} - -//Commands that can be called during onNewATResponseLine callback, additionally to close() -//Access to this method is protected (can ONLY be called on processing thread during IATCommandsProcessor::onNewATResponseLine execution) -int ATCommandsInterface::sendData(const char* data) -{ - //m_inputBuf is cleared at this point (and MUST therefore be empty) - int dataLen = strlen(data); - DBG("Sending raw string of length %d", dataLen); - int ret = m_pStream->write((uint8_t*)data, dataLen, osWaitForever); - if(ret) - { - WARN("Could not write to stream (returned %d)", ret); - return ret; - } - - int dataPos = 0; - do - { - //Read echo - size_t readLen; - int ret = m_pStream->read((uint8_t*)m_inputBuf, &readLen, MIN(dataLen - dataPos, AT_INPUT_BUF_SIZE - 1), osWaitForever); //Make sure we do not read more than needed otherwise it could break the parser - if(ret) - { - WARN("Could not read from stream (returned %d)", ret); - m_inputPos = 0; //Reset input buffer state - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - return ret; - } - - if( memcmp(m_inputBuf, data + dataPos, readLen) != 0 ) - { - //Echo does not match output - m_inputBuf[readLen] = '\0'; - WARN("Echo does not match output, got '%s' instead", m_inputBuf); - m_inputPos = 0; //Reset input buffer state - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - return NET_DIFF; - } - - dataPos += readLen; - //If all characters have not been read yet - - } while(dataPos < dataLen); - - DBG("String sent successfully"); - - m_inputPos = 0; //Reset input buffer state - m_inputBuf[0] = '\0'; //Always have a null-terminating char at start of buffer - - return OK; -} - -/*static*/ void ATCommandsInterface::staticCallback(void const* p) -{ - ((ATCommandsInterface*)p)->process(); -} - -int ATCommandsInterface::ATResultToReturnCode(ATResult result) //Helper -{ - if(result.result == ATResult::AT_OK) - { - return OK; - } - else - { - return NET_MOREINFO; - } -} - -/*virtual*/ int ATCommandsInterface::onNewATResponseLine(ATCommandsInterface* pInst, const char* line) //Default implementation for simple commands handling -{ - return OK; -} - -/*virtual*/ int ATCommandsInterface::onNewEntryPrompt(ATCommandsInterface* pInst) //Default implementation (just sends Ctrl+Z to exit the prompt by returning OK right-away) -{ - return OK; -} - -void ATCommandsInterface::process() //Processing thread -{ - DBG("AT Thread started"); - while(true) - { - DBG("AT Processing on hold"); - m_processingThread.signal_wait(AT_SIG_PROCESSING_START); //Block until the process is started - - m_processingMtx.lock(); - DBG("AT Processing started"); - //First of all discard buffer - int ret; - size_t readLen; - do //Drop everything - { - ret = m_pStream->read((uint8_t*)m_inputBuf, &readLen, AT_INPUT_BUF_SIZE - 1, 0); //Do NOT wait at this point - } while(ret == OK); - m_inputPos = 0; //Clear input buffer - do - { - DBG("Trying to send a pending command"); - trySendCommand(); //This must be tried first as we discarded the buffer before and therefore would be blocking though there is a pending command - DBG("Trying to read a new line"); - tryReadLine(); - } while( m_processingThread.signal_wait(AT_SIG_PROCESSING_STOP, 0).status != osEventSignal ); //Loop until the process is interrupted - m_processingMtx.unlock(); - DBG("AT Processing stopped"); - } -} - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/at/ATCommandsInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/at/ATCommandsInterface.h deleted file mode 100644 index 8334df8957..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/at/ATCommandsInterface.h +++ /dev/null @@ -1,153 +0,0 @@ -/* ATCommandsInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef ATCOMMANDSINTERFACE_H_ -#define ATCOMMANDSINTERFACE_H_ - -#include "core/fwk.h" -#include "rtos.h" - -#define MAX_AT_EVENTS_HANDLERS 4 - -class ATCommandsInterface; - -/** Interface implemented by components handling AT events - * - */ -class IATEventsHandler -{ -protected: - virtual bool isATCodeHandled(const char* atCode) = 0; //Is this AT code handled - virtual void onDispatchStart() = 0; - virtual void onDispatchStop() = 0; - virtual char* getEventsEnableCommand() = 0; - virtual char* getEventsDisableCommand() = 0; - virtual void onEvent(const char* atCode, const char* evt) = 0; - friend class ATCommandsInterface; -}; - -/** Interface implemented by components executing complex AT commands - * - */ -class IATCommandsProcessor -{ -protected: - virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line) = 0; - virtual int onNewEntryPrompt(ATCommandsInterface* pInst) = 0; - friend class ATCommandsInterface; -}; - -#define AT_INPUT_BUF_SIZE 192//64 - -//Signals to be sent to the processing thread -#define AT_SIG_PROCESSING_START 1 -#define AT_SIG_PROCESSING_STOP 2 -//Messages to be sent to the processing thread -#define AT_CMD_READY 1 -#define AT_TIMEOUT 2 -#define AT_STOP 3 -//Messages to be sent from the processing thread -#define AT_RESULT_READY 1 - -/** AT Commands interface class - * - */ -class ATCommandsInterface : protected IATCommandsProcessor -{ -public: - ATCommandsInterface(IOStream* pStream); - - //Open connection to AT Interface in order to execute command & register/unregister events - int open(); - - //Initialize AT link - int init(bool reset = true); - - //Close connection - int close(); - - bool isOpen(); - - class ATResult - { - public: - enum { AT_OK, AT_ERROR, AT_CONNECT, AT_CMS_ERROR, AT_CME_ERROR } result; - int code; - }; - - int executeSimple(const char* command, ATResult* pResult, uint32_t timeout=1000); - int execute(const char* command, IATCommandsProcessor* pProcessor, ATResult* pResult, uint32_t timeout=1000); - - int registerEventsHandler(IATEventsHandler* pHdlr); - int deregisterEventsHandler(IATEventsHandler* pHdlr); - - //Commands that can be called during onNewATResponseLine callback, additionally to close() - //Access to this method is protected (can ONLY be called on processing thread during IATCommandsProcessor::onNewATResponseLine execution) - int sendData(const char* data); - - static void staticCallback(void const* p); -private: - int executeInternal(const char* command, IATCommandsProcessor* pProcessor, ATResult* pResult, uint32_t timeout=1000); - - int tryReadLine(); - int trySendCommand(); - int processReadLine(); - int processEntryPrompt(); - - void enableEvents(); - void disableEvents(); - - int ATResultToReturnCode(ATResult result); //Helper - - virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line); //Default implementation for simple commands handling - virtual int onNewEntryPrompt(ATCommandsInterface* pInst); //Default implementation (just sends Ctrl+Z to exit the prompt) - - void process(); //Processing thread - - IOStream* m_pStream; - - bool m_open; //< TRUE when the AT interface is open, and FALSE when it is not. - - const char* m_transactionCommand; - const char* m_transactionData; - - IATCommandsProcessor* m_pTransactionProcessor; - ATResult m_transactionResult; - - enum { IDLE, COMMAND_SENT, READING_RESULT, ABORTED } m_transactionState; - - char m_inputBuf[AT_INPUT_BUF_SIZE]; // Stores characters received from the modem. - int m_inputPos; // Current position of fill pointer in the input buffer. - - Mutex m_transactionMtx; - - // These are RTOS queues, concurrent access protected. In this case both only contain an integer. - Mail<int,1> m_env2AT; // used by calling function to inform processing thread of events - Mail<int,1> m_AT2Env; // used by processing thread to inform calling function of events - - IATEventsHandler* m_eventsHandlers[MAX_AT_EVENTS_HANDLERS]; // all registered events handlers - - Mutex m_processingMtx; - Thread m_processingThread; - - Mutex m_eventsMgmtMtx; //Lock events use within the calling thread - Mutex m_eventsProcessingMtx; //Lock events use within the processing thread -}; - -#endif /* ATCOMMANDSINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/IOStream.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/IOStream.h deleted file mode 100644 index 6d411b8e4b..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/IOStream.h +++ /dev/null @@ -1,59 +0,0 @@ -/* IOStream.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef IOSTREAM_H_ -#define IOSTREAM_H_ - -#include "rtos.h" - -class IStream -{ -public: - //IStream(); - //virtual ~IStream(); - - //0 for non-blocking (returns immediately), osWaitForever for infinite blocking - virtual int read(uint8_t* buf, size_t* pLength, size_t maxLength, uint32_t timeout=osWaitForever) = 0; - virtual size_t available() = 0; - virtual int waitAvailable(uint32_t timeout=osWaitForever) = 0; //Wait for data to be available - virtual int abortRead() = 0; //Abort current reading (or waiting) operation -}; - -class OStream -{ -public: - //OStream(); - //virtual ~OStream(); - - //0 for non-blocking (returns immediately), osWaitForever for infinite blocking - virtual int write(uint8_t* buf, size_t length, uint32_t timeout=osWaitForever) = 0; - virtual size_t space() = 0; - virtual int waitSpace(uint32_t timeout=osWaitForever) = 0; //Wait for space to be available - virtual int abortWrite() = 0; //Abort current writing (or waiting) operation -}; - -class IOStream : public IStream, public OStream -{ -public: - //IOStream(); - //virtual ~IOStream(); -}; - - -#endif /* IOSTREAM_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/MtxCircBuffer.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/MtxCircBuffer.h deleted file mode 100644 index b011693eb4..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/MtxCircBuffer.h +++ /dev/null @@ -1,95 +0,0 @@ -/* MtxCircBuf.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef MTXCIRCBUFFER_H -#define MTXCIRCBUFFER_H - -#include "rtos.h" - -//Mutex protected circualr buffer -template<typename T, int size> -class MtxCircBuffer -{ -public: - MtxCircBuffer() //: - //mtx() - { - write = 0; - read = 0; - } - - bool isFull() - { - mtx.lock(); - bool r = (((write + 1) % size) == read); - mtx.unlock(); - return r; - } - - bool isEmpty() - { - mtx.lock(); - bool r = (read == write); - mtx.unlock(); - return r; - } - - void queue(T k) - { - mtx.lock(); - buf[write++] = k; - write %= size; - if (isFull()) - { - read++; - read %= size; - } - mtx.unlock(); - } - - uint16_t available() - { - mtx.lock(); - uint16_t a = (write >= read) ? (write - read) : (size - read + write); - mtx.unlock(); - return a; - } - - bool dequeue(T * c) - { - mtx.lock(); - bool empty = (read == write); - if (!empty) - { - *c = buf[read++]; - read %= size; - } - mtx.unlock(); - return (!empty); - } - -private: - volatile uint16_t write; - volatile uint16_t read; - volatile T buf[size]; - Mutex mtx; -}; - -#endif - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/config.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/config.h deleted file mode 100644 index 508424dc66..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/config.h +++ /dev/null @@ -1,27 +0,0 @@ -/* config.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#ifndef CONFIG_H_ -#define CONFIG_H_ - - -//Configuration -#define AT_THREAD_PRIORITY 0 - - -#endif /* CONFIG_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/dbg.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/dbg.cpp deleted file mode 100644 index 4314e2342f..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/dbg.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* dbg.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include "dbg.h" - -#include "mbed.h" -#include "rtos.h" - -#include <cstdio> -#include <cstdarg> - -using namespace std; - -static Serial debug_pc(USBTX, USBRX); - -static char debug_newline[3]; - -static void debug_lock(bool set) -{ - static Mutex* mtx = new Mutex(); //Singleton runtime initialisation to avoid static initialisation chaos problems - static bool init = false; - if(set) - { - mtx->lock(); - if(!init) - { - strncpy( debug_newline, "\n", 2 ); - printf("[START]\n"); - fflush(stdout); - init = true; - } - } - else - { - mtx->unlock(); - } -} - -void debug_init() -{ - debug_lock(true); //Force init - debug_lock(false); -} - -void debug_set_newline(const char* newline) -{ - debug_lock(true); - strncpy( debug_newline, newline, 2 ); - debug_newline[2] = '\0'; - debug_lock(false); -} - -void debug_set_speed(int speed) -{ - debug_pc.baud(speed); -} - -void debug(int level, const char* module, int line, const char* fmt, ...) -{ - debug_lock(true); - switch(level) - { - default: - case 1: - printf("[ERROR]"); - break; - case 2: - printf("[WARN]"); - break; - case 3: - printf("[INFO]"); - break; - case 4: - printf("[DBG]"); - break; - } - - printf(" Module %s - Line %d: ", module, line); - - va_list argp; - - va_start(argp, fmt); - vprintf(fmt, argp); - va_end(argp); - - printf(debug_newline); - - fflush(stdout); - - debug_lock(false); - -} - -void debug_error(const char* module, int line, int ret) -{ - debug_lock(true); - printf("[RC] Module %s - Line %d : Error %d\n", module, line, ret); - fflush(stdout); - debug_lock(false); -} - -void debug_exact(const char* fmt, ...) -{ - debug_lock(true); - va_list argp; - - va_start(argp, fmt); - vprintf(fmt, argp); - va_end(argp); - debug_lock(false); -} diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/dbg.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/dbg.h deleted file mode 100644 index 2ff24e1b31..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/dbg.h +++ /dev/null @@ -1,79 +0,0 @@ -/* dbg.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef DBG_H_ -#define DBG_H_ - -#ifdef __cplusplus -extern "C" { -#endif - - -void debug_init(void); -void debug(int level, const char* module, int line, const char* fmt, ...); -void debug_set_newline(const char* newline); -void debug_set_speed(int speed); -void debug_error(const char* module, int line, int ret); -void debug_exact(const char* fmt, ...); - -#define DBG_INIT() do{ debug_init(); }while(0) - -#define DBG_SET_NEWLINE( x ) do{ debug_set_newline(x); }while(0) - -#define DBG_SET_SPEED( x ) do{ debug_set_speed(x); }while(0) - -#if __DEBUG__ > 0 -#ifndef __MODULE__ -#error "__MODULE__ must be defined" -#endif -#endif - -#if __DEBUG__ >= 1 -#define ERR(...) do{ debug(1, __MODULE__, __LINE__, __VA_ARGS__); }while(0) -#else -#define ERR(...) do{ }while(0) -#endif - -#if __DEBUG__ >= 2 -#define WARN(...) do{ debug(2, __MODULE__, __LINE__, __VA_ARGS__); }while(0) -#else -#define WARN(...) do{ }while(0) -#endif - -#if __DEBUG__ >= 3 -#define INFO(...) do{ debug(3, __MODULE__, __LINE__, __VA_ARGS__); }while(0) -#define CHECK(ret) do{ if(ret){ debug_error(__MODULE__, __LINE__, ret); } }while(0) -#else -#define INFO(...) do{ }while(0) -#define CHECK(ret) do{ }while(0) -#endif - -#if __DEBUG__ >= 4 -#define DBG(...) do{ debug(4, __MODULE__, __LINE__, __VA_ARGS__); }while(0) -#define DBGX(...) do{ debug_exact(__VA_ARGS__); }while(0) -#else -#define DBG(...) do{ }while(0) -#define DBGX(...) do{ }while(0) -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* DBG_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/errors.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/errors.h deleted file mode 100644 index 73ca00c1c4..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/errors.h +++ /dev/null @@ -1,47 +0,0 @@ -/* errors.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef ERRORS_H_ -#define ERRORS_H_ - -/** \page Network-related errors */ - -#define OK 0 //No error - -#define NET_FULL 1 //>All available resources are already used -#define NET_EMPTY 2 //>No resource -#define NET_NOTFOUND 3 //>Element cannot be found -#define NET_INVALID 4 //>Invalid -#define NET_CONTEXT 5 //>Called in a wrong context (eg during an interrupt) -#define NET_TIMEOUT 6 //>Timeout -#define NET_UNKNOWN 7 //>Unknown error -#define NET_OVERFLOW 8 //>Overflow -#define NET_PROCESSING 9 //>Command is processing -#define NET_INTERRUPTED 10 //>Current operation has been interrupted -#define NET_MOREINFO 11 //>More info on this error can be retrieved elsewhere (eg in a parameter passed as ptr) -#define NET_ABORT 12 //>Current operation must be aborted -#define NET_DIFF 13 //>Items that should match are different -#define NET_AUTH 14 //>Authentication failed -#define NET_PROTOCOL 15 //>Protocol error -#define NET_OOM 16 //>Out of memory -#define NET_CONN 17 //>Connection error -#define NET_CLOSED 18 //>Connection was closed by remote end -#define NET_TOOSMALL 19 //>Buffer is too small - -#endif /* ERRORS_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/fwk.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/fwk.h deleted file mode 100644 index 4efc281c0e..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/core/fwk.h +++ /dev/null @@ -1,61 +0,0 @@ -/* fwk.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef FWK_H_ -#define FWK_H_ - -#include "config.h" - -#include "string.h" -//using namespace std; - -#include "stdint.h" -typedef unsigned int size_t; - -#ifndef __cplusplus -//boolean type compatibility -typedef byte bool; -#define true 1 -#define false 0 -#endif - -#ifndef NULL -#define NULL ((void*)0) -#endif - -#define CR '\x0D' -#define LF '\x0A' -#define GD '\x3E' -#define BRK '\x1A' - -//Custom utility classes -#include "IOStream.h" -//#include "String.h" - -//Error codes -#include "errors.h" - -//Debug -#include "dbg.h" - -//Utility macros -#define MIN(x,y) (((x)<(y))?(x):(y)) -#define MAX(x,y) (((x)>(y))?(x):(y)) - -#endif /* FWK_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/IPInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/IPInterface.cpp deleted file mode 100644 index 3732303e24..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/IPInterface.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* IPInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#include "core/fwk.h" - -#include "IPInterface.h" - -#include <cstring> //For strcpy - - -IPInterface::IPInterface() : m_connected(false) -{ - -} - -/*virtual*/ IPInterface::~IPInterface() -{ - -} - -void IPInterface::registerAsDefaultInterface() //First come, first served -{ - s_pDefaultInterface = this; -} - -void IPInterface::unregisterAsDefaultInterface() //Must be called before inst is destroyed to avoid invalid ptr fault -{ - s_pDefaultInterface = NULL; -} - -/*static*/ IPInterface* IPInterface::getDefaultInterface() //For use by TCP, UDP sockets library -{ - return s_pDefaultInterface; -} - -/*static*/ IPInterface* IPInterface::s_pDefaultInterface = NULL; - - -char* IPInterface::getIPAddress() //Get IP Address as a string ('a.b.c.d') -{ - if(isConnected()) - { - return m_ipAddr; - } - else - { - return NULL; - } -} - -bool IPInterface::isConnected() //Is the interface connected? -{ - return m_connected; -} - -void IPInterface::setIPAddress(char* ipAddr) -{ - std::strcpy(m_ipAddr, ipAddr); //Let's trust the derived class not to buffer overflow us -} - -void IPInterface::setConnected(bool connected) -{ - m_connected = connected; -} - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/IPInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/IPInterface.h deleted file mode 100644 index 6655aec9ca..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/IPInterface.h +++ /dev/null @@ -1,60 +0,0 @@ -/* IPInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef IPINTERFACE_H_ -#define IPINTERFACE_H_ - -#include "core/fwk.h" - -/** Generic IP-based network interface - * - */ -class IPInterface -{ -public: - IPInterface(); - virtual ~IPInterface(); - - //int init(); //Initialize interface; no connection should be performed at this stage - virtual int connect() = 0; //Do connect the interface - virtual int disconnect() = 0; - //It is encouraged that the derived class implement a "setup(...)" function to configure the interface before the connection - - char* getIPAddress(); //Get IP Address as a string ('a.b.c.d') - bool isConnected(); //Is the interface connected? - - static IPInterface* getDefaultInterface(); //For use by TCP, UDP sockets library - - //WARN: Implementation will have to be more careful in case of multiple interfaces (or implement a routing protocol based on local IP addresses differentiation) - void registerAsDefaultInterface(); //First come, first served - void unregisterAsDefaultInterface(); //Must be called before inst is destroyed to avoid invalid ptr fault - -protected: - //Must be called by subclasses - void setIPAddress(char* ipAddr); - void setConnected(bool connected); - -private: - char m_ipAddr[16]; - bool m_connected; - - static IPInterface* s_pDefaultInterface; -}; - -#endif /* IPINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/LwIPInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/LwIPInterface.cpp deleted file mode 100644 index b20f2a6617..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/LwIPInterface.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* LwIPInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - - -#include "core/fwk.h" - -#include "LwIPInterface.h" - -extern "C" { -#include "lwip/init.h" -#include "lwip/tcpip.h" -} - -LwIPInterface::LwIPInterface() : IPInterface(), m_rdySphre(1) -{ - m_rdySphre.wait(); -} - -LwIPInterface::~LwIPInterface() -{ - -} - -int LwIPInterface::init() //Init LwIP-specific stuff, create the right bindings, etc -{ - //lwip_init(); //All LwIP initialisation functions called on a per-module basis (according to lwipopts.h) - tcpip_init(LwIPInterface::tcpipRdyCb, this); //Start TCP/IP processing thread - m_rdySphre.wait(); //Wait for callback to produce resource - return OK; -} - -/*static*/ void LwIPInterface::tcpipRdyCb(void* ctx) //Result of TCP/IP thread launch -{ - LwIPInterface* pIf = (LwIPInterface*) ctx; - pIf->m_rdySphre.release(); -} diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/LwIPInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/LwIPInterface.h deleted file mode 100644 index 7e5471e204..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/LwIPInterface.h +++ /dev/null @@ -1,44 +0,0 @@ -/* LwIPInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef LWIPINTERFACE_H_ -#define LWIPINTERFACE_H_ - -#include "core/fwk.h" -#include "IPInterface.h" - -#include "rtos.h" - -/** LwIP-based network interface - * - */ -class LwIPInterface : public IPInterface -{ -public: - LwIPInterface(); - virtual ~LwIPInterface(); - - int init(); //Init LwIP-specific stuff, create the right bindings, etc - -private: - static void tcpipRdyCb(void* ctx); //Result of TCP/IP thread launch - Semaphore m_rdySphre; -}; - -#endif /* LWIPINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/PPPIPInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/PPPIPInterface.cpp deleted file mode 100644 index 98614050ef..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/PPPIPInterface.cpp +++ /dev/null @@ -1,466 +0,0 @@ -/* PPPIPInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define __DEBUG__ 0 -#ifndef __MODULE__ -#define __MODULE__ "PPPIPInterface.cpp" -#endif - -#include "core/fwk.h" -#include "rtos.h" - -#include <cstdio> -using std::sscanf; -using std::sprintf; - -#include "PPPIPInterface.h" - -#define MSISDN "*99#" - -#define CONNECT_CMD_PREFIX "ATD " -#define CONNECT_CMD_SUFFIX "\x0D" -#define EXPECTED_RESP_SUFFIX "\x0D" "\x0A" "CONNECT" "\x0D" "\x0A" -#define EXPECTED_RESP_DATARATE_SUFFIX "\x0D" "\x0A" "CONNECT %d" "\x0D" "\x0A" -#define EXPECTED_RESP_MIN_LEN 20 -#define OK_RESP "\x0D" "\x0A" "OK" "\x0D" "\x0A" -#define ESCAPE_SEQ "+++" -#define HANGUP_CMD "ATH" "\x0D" -#define NO_CARRIER_RESP "\x0D" "\x0A" "NO CARRIER" "\x0D" "\x0A" -extern "C" { -#include "lwip/ip_addr.h" -#include "lwip/inet.h" -#include "lwip/err.h" -#include "lwip/dns.h" - -#include "netif/ppp/ppp.h" -} - -PPPIPInterface::PPPIPInterface(IOStream* pStream) : LwIPInterface(), m_linkStatusSphre(1), m_pppErrCode(0), m_pStream(pStream), m_streamAvail(true), m_pppd(-1) -{ - m_linkStatusSphre.wait(); -} - - - -/*virtual*/ PPPIPInterface::~PPPIPInterface() -{ -} - -/*virtual*/ int PPPIPInterface::init() //Init PPP-specific stuff, create the right bindings, etc -{ - DBG("Initializing LwIP"); - LwIPInterface::init(); //Init LwIP, NOT including PPP - DBG("Initializing PPP"); - pppInit(); - DBG("Done"); - return OK; -} - -int PPPIPInterface::setup(const char* user, const char* pw, const char* msisdn) -{ - DBG("Configuring PPP authentication method"); - pppSetAuth(PPPAUTHTYPE_ANY, user, pw); - m_msisdn = msisdn; - DBG("Done"); - return OK; -} - -/*virtual*/ int PPPIPInterface::connect() -{ - int ret; - char cmd[32]; - int cmdLen; - char buf[32]; - size_t len; - DBG("Trying to connect with PPP"); - - cleanupLink(); - - cmdLen = sprintf(cmd, "%s%s%s", CONNECT_CMD_PREFIX, m_msisdn, CONNECT_CMD_SUFFIX); - DBG("Sending %s", cmd); - ret = m_pStream->write((uint8_t*)cmd, cmdLen, osWaitForever); - if( ret != OK ) - { - return NET_UNKNOWN; - } - - len = 0; - size_t readLen; - ret = m_pStream->read((uint8_t*)buf + len, &readLen, EXPECTED_RESP_MIN_LEN, 10000); - if( ret != OK ) - { - return NET_UNKNOWN; - } - len += readLen; - while( (len < EXPECTED_RESP_MIN_LEN) || (buf[len-1] != LF) ) - { - ret = m_pStream->read((uint8_t*)buf + len, &readLen, 1, 10000); - if( ret != OK ) - { - return NET_UNKNOWN; - } - len += readLen; - } - - buf[len]=0; - - DBG("Got %s[len %d]", buf, len); - - int datarate = 0; - strcpy(&cmd[cmdLen], EXPECTED_RESP_DATARATE_SUFFIX); - if( (sscanf(buf, cmd, &datarate ) != 1)) - { - strcpy(&cmd[cmdLen], EXPECTED_RESP_SUFFIX); - if (strcmp(cmd, buf) != 0) - { - //Discard buffer - do //Clear buf - { - ret = m_pStream->read((uint8_t*)buf, &len, 32, 0); - } while( (ret == OK) && (len > 0) ); - return NET_CONN; - } - } - - DBG("Transport link open"); - if(datarate != 0) - { - DBG("Datarate: %d bps", datarate); - } - m_linkStatusSphre.wait(0); - if((m_pppd != -1) && (m_pppErrCode == 0)) //Already connected - { - return NET_INVALID; - } - - ret = pppOverSerialOpen(this, PPPIPInterface::linkStatusCb, this); - if(ret < 0) - { - switch(ret) - { - case PPPERR_OPEN: - default: - return NET_FULL; //All available resources are already used - } - } - m_pppd = ret; //PPP descriptor - m_linkStatusSphre.wait(); //Block indefinitely; there should be a timeout there - if(m_pppErrCode != PPPERR_NONE) - { - m_pppd = -1; - } - switch(m_pppErrCode) - { - case PPPERR_NONE: //Connected OK - return OK; - case PPPERR_CONNECT: //Connection lost - return NET_INTERRUPTED; - case PPPERR_AUTHFAIL: //Authentication failed - return NET_AUTH; - case PPPERR_PROTOCOL: //Protocol error - return NET_PROTOCOL; - default: - return NET_UNKNOWN; - } -} - -/*virtual*/ int PPPIPInterface::disconnect() -{ - int ret = m_linkStatusSphre.wait(0); - if(ret > 0) //Already disconnected? - { - m_pppd = -1; //Discard PPP descriptor - switch(m_pppErrCode) - { - case PPPERR_CONNECT: //Connection terminated - case PPPERR_AUTHFAIL: //Authentication failed - case PPPERR_PROTOCOL: //Protocol error - case PPPERR_USER: - return OK; - default: - return NET_UNKNOWN; - } - } - else - { - if(m_pppd == -1) - { - return NET_INVALID; - } - pppClose(m_pppd); - do - { - m_linkStatusSphre.wait(); //Block indefinitely; there should be a timeout there - DBG("Received PPP err code %d", m_pppErrCode); - } while(m_pppErrCode != PPPERR_USER); - m_pppd = -1; //Discard PPP descriptor - } - - DBG("Sending %s", ESCAPE_SEQ); - - ret = m_pStream->write((uint8_t*)ESCAPE_SEQ, strlen(ESCAPE_SEQ), osWaitForever); - if( ret != OK ) - { - return NET_UNKNOWN; - } - - cleanupLink(); - - return OK; -} - - -int PPPIPInterface::cleanupLink() -{ - int ret; - char buf[32]; - size_t len; - - do //Clear buf - { - ret = m_pStream->read((uint8_t*)buf, &len, 32, 100); - if(ret == OK) - { - buf[len] = '\0'; - DBG("Got %s", buf); - } - } while( (ret == OK) && (len > 0) ); - - DBG("Sending %s", HANGUP_CMD); - - ret = m_pStream->write((uint8_t*)HANGUP_CMD, strlen(HANGUP_CMD), osWaitForever); - if( ret != OK ) - { - return NET_UNKNOWN; - } - - size_t readLen; - - //Hangup - DBG("Expect %s", HANGUP_CMD); - - len = 0; - while( len < strlen(HANGUP_CMD) ) - { - ret = m_pStream->read((uint8_t*)buf + len, &readLen, strlen(HANGUP_CMD) - len, 100); - if( ret != OK ) - { - break; - } - len += readLen; - ///// - buf[len]=0; - DBG("Got %s", buf); - } - - buf[len]=0; - - DBG("Got %s[len %d]", buf, len); - - //OK response - DBG("Expect %s", OK_RESP); - - len = 0; - while( len < strlen(OK_RESP) ) - { - ret = m_pStream->read((uint8_t*)buf + len, &readLen, strlen(OK_RESP) - len, 100); - if( ret != OK ) - { - break; - } - len += readLen; - ///// - buf[len]=0; - DBG("Got %s", buf); - } - - buf[len]=0; - - DBG("Got %s[len %d]", buf, len); - - //NO CARRIER event - DBG("Expect %s", NO_CARRIER_RESP); - - len = 0; - while( len < strlen(NO_CARRIER_RESP) ) - { - ret = m_pStream->read((uint8_t*)buf + len, &readLen, strlen(NO_CARRIER_RESP) - len, 100); - if( ret != OK ) - { - break; - } - len += readLen; - ///// - buf[len]=0; - DBG("Got %s", buf); - } - - buf[len]=0; - - DBG("Got %s[len %d]", buf, len); - - do //Clear buf - { - ret = m_pStream->read((uint8_t*)buf, &len, 32, 100); - if(ret == OK) - { - buf[len] = '\0'; - DBG("Got %s", buf); - } - } while( (ret == OK) && (len > 0) ); - - - return OK; -} - -/*static*/ void PPPIPInterface::linkStatusCb(void *ctx, int errCode, void *arg) //PPP link status -{ - PPPIPInterface* pIf = (PPPIPInterface*)ctx; - struct ppp_addrs* addrs = (struct ppp_addrs*) arg; - - switch(errCode) - { - case PPPERR_NONE: - WARN("Connected via PPP."); - DBG("Local IP address: %s", inet_ntoa(addrs->our_ipaddr)); - DBG("Netmask: %s", inet_ntoa(addrs->netmask)); - DBG("Remote IP address: %s", inet_ntoa(addrs->his_ipaddr)); - DBG("Primary DNS: %s", inet_ntoa(addrs->dns1)); - DBG("Secondary DNS: %s", inet_ntoa(addrs->dns2)); - //Setup DNS - if (addrs->dns1.addr != 0) - { - dns_setserver(0, (struct ip_addr*)&(addrs->dns1)); - } - if (addrs->dns2.addr != 0) - { - dns_setserver(1, (struct ip_addr*)&(addrs->dns1)); - } - - pIf->setConnected(true); - pIf->setIPAddress(inet_ntoa(addrs->our_ipaddr)); - break; - case PPPERR_CONNECT: //Connection lost - WARN("Connection lost/terminated"); - pIf->setConnected(false); - break; - case PPPERR_AUTHFAIL: //Authentication failed - WARN("Authentication failed"); - pIf->setConnected(false); - break; - case PPPERR_PROTOCOL: //Protocol error - WARN("Protocol error"); - pIf->setConnected(false); - break; - case PPPERR_USER: - WARN("Disconnected by user"); - pIf->setConnected(false); - break; - default: - WARN("Unknown error (%d)", errCode); - pIf->setConnected(false); - break; - } - - pIf->m_linkStatusSphre.wait(0); //If previous event has not been handled, "delete" it now - pIf->m_pppErrCode = errCode; - pIf->m_linkStatusSphre.release(); -} - -//LwIP PPP implementation -extern "C" -{ - -/** - * Writes to the serial device. - * - * @param fd serial device handle - * @param data pointer to data to send - * @param len length (in bytes) of data to send - * @return number of bytes actually sent - * - * @note This function will block until all data can be sent. - */ -u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len) -{ - DBG("sio_write"); - PPPIPInterface* pIf = (PPPIPInterface*)fd; - int ret; - if(!pIf->m_streamAvail) //If stream is not available (it is a shared resource) don't go further - { - return 0; - } - ret = pIf->m_pStream->write(data, len, osWaitForever); //Blocks until all data is sent or an error happens - if(ret != OK) - { - return 0; - } - return len; -} - -/** - * Reads from the serial device. - * - * @param fd serial device handle - * @param data pointer to data buffer for receiving - * @param len maximum length (in bytes) of data to receive - * @return number of bytes actually received - may be 0 if aborted by sio_read_abort - * - * @note This function will block until data can be received. The blocking - * can be cancelled by calling sio_read_abort(). - */ -u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len) -{ - DBG("sio_read"); - PPPIPInterface* pIf = (PPPIPInterface*)fd; - int ret; - size_t readLen; - if(!pIf->m_streamAvail) //If stream is not available (it is a shared resource) don't go further - { - WARN("EXIT NOT AVAIL"); - return 0; - } - ret = pIf->m_pStream->read(data, &readLen, len, osWaitForever); //Blocks until some data is received or an error happens - if(ret != OK) - { - return 0; - } - DBG("ret"); - return readLen; -} - -/** - * Aborts a blocking sio_read() call. - * - * @param fd serial device handle - */ -void sio_read_abort(sio_fd_t fd) -{ - DBG("sio_read_abort"); - PPPIPInterface* pIf = (PPPIPInterface*)fd; - if(!pIf->m_streamAvail) //If stream is not available (it is a shared resource) don't go further - { - return; - } - pIf->m_pStream->abortRead(); - DBG("ret"); -} - -} - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/PPPIPInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/PPPIPInterface.h deleted file mode 100644 index 2d24009dcd..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ip/PPPIPInterface.h +++ /dev/null @@ -1,69 +0,0 @@ -/* PPPIPInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef PPPIPINTERFACE_H_ -#define PPPIPINTERFACE_H_ - -#include "core/fwk.h" - -#include "LwIPInterface.h" - -#include "lwip/sio.h" - -namespace rtos { -class Semaphore; -} -using namespace rtos; - -#define DEFAULT_MSISDN_GSM "*99#" -#define DEFAULT_MSISDN_CDMA "#777" - -/** Interface using PPP to connect to an IP-based network - * - */ -class PPPIPInterface : public LwIPInterface -{ -public: - PPPIPInterface(IOStream* pStream); - virtual ~PPPIPInterface(); - - int init(); //Init PPP-specific stuff, create the right bindings, etc - int setup(const char* user, const char* pw, const char* msisdn); //Setup authentication - virtual int connect(); - virtual int disconnect(); - -private: - int cleanupLink(); - - static void linkStatusCb(void *ctx, int errCode, void *arg); //PPP link status - Semaphore m_linkStatusSphre; - int m_pppErrCode; - - IOStream* m_pStream; //Serial stream - bool m_streamAvail; - const char* m_msisdn; - - int m_pppd; - - friend u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len); - friend u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len); - friend void sio_read_abort(sio_fd_t fd); -}; - -#endif /* PPPIPINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/link/LinkMonitor.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/link/LinkMonitor.cpp deleted file mode 100644 index 612b376921..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/link/LinkMonitor.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/* LinkMonitor.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define __DEBUG__ 0 -#ifndef __MODULE__ -#define __MODULE__ "LinkMonitor.cpp" -#endif - -#include "core/fwk.h" - -#include "LinkMonitor.h" - -#include <cstdio> -using std::sscanf; - -#define DEFAULT_TIMEOUT 10000 - -LinkMonitor::LinkMonitor(ATCommandsInterface* pIf) : m_pIf(pIf), m_rssi(0), m_registrationState(REGISTRATION_STATE_UNKNOWN), m_bearer(BEARER_UNKNOWN) -{ - m_gsm = true; -} - -int LinkMonitor::init(bool gsm) -{ - m_gsm = gsm; - if (m_gsm) - { - // we need to make sure that we setup the operator selection to be in 'numeric' format. - // i.e. it is made up of a network and country code when returned by the modem e.g. Operator = 23415. This allows easy logic parsing for - // setting up other network parameters in future. - DBG("LinkMonitor::init() being called. This should only happen once: executinging AT+COPS=0,2"); - int ret = m_pIf->executeSimple("AT+COPS=0,2", NULL, DEFAULT_TIMEOUT); //Configure to set the operator string to Country Code and mobile network code - if(ret != OK) - { - WARN(" NET_PROTOCOL error from sending the AT+COPS command to the modem. "); - return NET_PROTOCOL; - } - } - return OK; -} - -/*virtual*/ int LinkMonitor::onNewATResponseLine(ATCommandsInterface* pInst, const char* line) -{ - DBG("Line is %s", line); - char n[32] = ""; - char s[32] = ""; - int v; - if( sscanf(line, "+CREG: %*d,%d", &v) >= 1 ) //Reg state is valid - { - DBG("+CREG %d", v); - switch( v ) - { - case 0: - m_registrationState = REGISTRATION_STATE_UNKNOWN; - break; - case 1: - m_registrationState = REGISTRATION_STATE_HOME_NETWORK; - break; - case 2: - m_registrationState = REGISTRATION_STATE_REGISTERING; - break; - case 3: - m_registrationState = REGISTRATION_STATE_DENIED; - break; - case 4: - m_registrationState = REGISTRATION_STATE_NO_SIGNAL; - break; - case 5: - m_registrationState = REGISTRATION_STATE_ROAMING; - break; - default: - m_registrationState = REGISTRATION_STATE_UNKNOWN; - break; - } - } - else if( sscanf(line, "+COPS: %*d,%*d,\"%*[^\"]\",%d", &v) >= 1 ) - { - DBG("+COPS %d", v); - switch( v ) - { - case 0: - m_bearer = BEARER_GSM; - break; - case 2: - m_bearer = BEARER_UMTS; - break; - case 3: - m_bearer = BEARER_EDGE; - break; - case 4: //HSDPA - case 5: //HSUPA - case 6: //HSDPA + HSUPA - m_bearer = BEARER_HSPA; - break; - case 7: - m_bearer = BEARER_LTE; - break; - case 1: //GSM Compact - default: - m_bearer = BEARER_UNKNOWN; - break; - } - } - else if( sscanf(line, "+CSQ: %d,%*d", &v) >= 1 ) - { - DBG("+CSQ %d", v); - if(v == 99) //Unknown - { - m_rssi = 0; //Unknown - } - else - { - m_rssi = -113 + 2*v; - } - } - else if ( (sscanf(line, "+CNUM: \"%[^\"]\",\"%[^\"]\",%d", n, s, &v) == 3) || - (sscanf(line, "+CNUM: \"\",\"%[^\"]\",%d", s, &v) == 2) ) - { - if (*s && ((v == 145/*number includes + */) || (v == 129/*otherwise*/))) { - strcpy(m_phoneNumber, s); - } - } - return OK; -} - -/*virtual*/ int LinkMonitor::onNewEntryPrompt(ATCommandsInterface* pInst) -{ - return OK; -} - -int LinkMonitor::getState(int* pRssi, REGISTRATION_STATE* pRegistrationState, BEARER* pBearer) -{ - m_rssi = 0; - m_registrationState = REGISTRATION_STATE_UNKNOWN; - m_bearer = BEARER_UNKNOWN; - int ret = m_pIf->execute(m_gsm ? "AT+CREG?;+COPS?;+CSQ" : "AT+CREG?;+CSQ", this, NULL, DEFAULT_TIMEOUT); //Configure to get registration info & get it; get signal quality - if(ret != OK) - { - return NET_PROTOCOL; - } - *pRssi = m_rssi; - *pRegistrationState = m_registrationState; - *pBearer = m_bearer; - return OK; -} - -int LinkMonitor::getPhoneNumber(char* phoneNumber) -{ - *m_phoneNumber = '\0'; - if (m_gsm) { - int ret = m_pIf->execute("AT+CNUM", this, NULL, DEFAULT_TIMEOUT); - if(ret != OK) - { - return NET_PROTOCOL; - } - } - strcpy(phoneNumber, m_phoneNumber); - return OK; -}
\ No newline at end of file diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/link/LinkMonitor.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/link/LinkMonitor.h deleted file mode 100644 index 864909d6c5..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/link/LinkMonitor.h +++ /dev/null @@ -1,96 +0,0 @@ -/* LinkMonitor.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef LINKMONITOR_H_ -#define LINKMONITOR_H_ - -#include "core/fwk.h" - -#include "rtos.h" - -#include "at/ATCommandsInterface.h" - -/** Component to monitor link quality - * - */ -class LinkMonitor : protected IATCommandsProcessor -{ -public: - /** Create LinkMonitor instance - @param pIf Pointer to the ATCommandsInterface instance to use - */ - LinkMonitor(ATCommandsInterface* pIf); - - /** Initialize monitor - */ - int init(bool gsm = true); - - /** Registration State - */ - enum REGISTRATION_STATE - { - REGISTRATION_STATE_UNKNOWN, //!< Unknown - REGISTRATION_STATE_REGISTERING, //!< Registering - REGISTRATION_STATE_DENIED, //!< Denied - REGISTRATION_STATE_NO_SIGNAL, //!< No Signal - REGISTRATION_STATE_HOME_NETWORK, //!< Registered on home network - REGISTRATION_STATE_ROAMING //!< Registered on roaming network - }; - - /** Bearer type - */ - enum BEARER - { - BEARER_UNKNOWN, //!< Unknown - BEARER_GSM, //!< GSM (2G) - BEARER_EDGE, //!< EDGE (2.5G) - BEARER_UMTS, //!< UMTS (3G) - BEARER_HSPA, //!< HSPA (3G+) - BEARER_LTE //!< LTE (4G) - }; - - /** Get link state - @param pRssi pointer to store the current RSSI in dBm, between -51 dBm and -113 dBm if known; -51 dBm means -51 dBm or more; -113 dBm means -113 dBm or less; 0 if unknown - @param pRegistrationState pointer to store the current registration state - @param pBearer pointer to store the current bearer - @return 0 on success, error code on failure - */ - int getState(int* pRssi, REGISTRATION_STATE* pRegistrationState, BEARER* pBearer); - - /** Get my phone number - @param phoneNumber pointer to store the current phoneNumber - @return 0 on success, error code on failure - */ - int getPhoneNumber(char* phoneNumber); -protected: - //IATCommandsProcessor - virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line); - virtual int onNewEntryPrompt(ATCommandsInterface* pInst); - -private: - ATCommandsInterface* m_pIf; - - int m_rssi; - bool m_gsm; - REGISTRATION_STATE m_registrationState; - BEARER m_bearer; - char m_phoneNumber[16]; -}; - -#endif /* LINKMONITOR_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/lwipopts_conf.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/lwipopts_conf.h deleted file mode 100644 index 5cd84be875..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/lwipopts_conf.h +++ /dev/null @@ -1,26 +0,0 @@ -/* lwipopts.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef LWIPOPTS_CONF_H_ -#define LWIPOPTS_CONF_H_ - -#define LWIP_TRANSPORT_PPP 1 - -#endif /* LWIPOPTS_CONF_H_ */ - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/CDMASMSInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/CDMASMSInterface.cpp deleted file mode 100644 index 978b3e1e8b..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/CDMASMSInterface.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* CDMASMSInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define __DEBUG__ 0 -#ifndef __MODULE__ -#define __MODULE__ "CDMASMSInterface.cpp" -#endif - -#include "core/fwk.h" - -#include "CDMASMSInterface.h" - -#include <cstdio> -#include <cstring> - -using std::sscanf; - -#define DEFAULT_TIMEOUT 10000 - -CDMASMSInterface::CDMASMSInterface(ATCommandsInterface* pIf) : m_pIf(pIf), m_msg(NULL), m_maxMsgLength(0), m_msisdn(NULL) -{ -} - -int CDMASMSInterface::init() -{ - m_state = SMS_IDLE; - - DBG("Get number of messages in the different inboxes"); - int ret = updateInbox(); - if(ret) - { - return NET_PROTOCOL; - } - - DBG("Initialization done"); - return OK; -} - -int CDMASMSInterface::send(const char* number, const char* message) -{ - if( strlen(number) > 16 ) - { - return NET_INVALID; //Number too long - } - - int ret; - - //Prepare infos - m_state = SMS_SEND_CMD_SENT; - - bool intlNumber=(number[0]=='+'); //If the number starts with the + sign, replace it with 011 instead (int'l dialing code in the US) - - DBG("Send SM"); - //Send command - char cmd[32+strlen(message)]; - std::sprintf(cmd, "AT!SSMS=0,%s%s,,\"%s\"",intlNumber?"011":"", intlNumber?(number+1):number, message); //Send with normal priority - ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT); - - if(ret != OK) - { - WARN("ret %d", ret); - m_state = SMS_IDLE; - return NET_PROTOCOL; - } - - DBG("Check status"); - m_txState = SMS_PENDING; - - int tries = 10; - while(tries--) - { - m_state = SMS_GET_TX_STATUS_CMD_SENT; - ret = m_pIf->execute("AT!SSMS?", this, NULL, DEFAULT_TIMEOUT); - if(ret) - { - m_state = SMS_IDLE; - return ret; - } - m_state = SMS_IDLE; - if(m_txState == SMS_PENDING) //Wait more - { - Thread::wait(1000); - continue; - } - else if(m_txState == SMS_FAILED) - { - ERR("The modem could not send the SM"); - return NET_CONN; //Probably a conenction issue, the user can retry - } - else - { - break; - } - } - if(!tries) - { - ERR("The is still trying to send the SM"); - return NET_TIMEOUT; - } - return OK; -} - - -int CDMASMSInterface::get(char* number, char* message, size_t maxLength) -{ - if( maxLength < 1 ) - { - return NET_INVALID; //Buffer too short - } - - int ret; - - DBG("Get next message"); - if( (m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]) == 0) - { - DBG("Message list count is 0 and needs updating. Running updateInbox."); - ret = updateInbox(); - if (ret) - { - return ret; - } - } - - if( (m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]) == 0) - { - DBG("Message list count is 0"); - return NET_EMPTY; //No message to read - } - - //Determine which index to use : 3 (read), then 1 (urgent), then 2 (regular) - int index; - if(m_msgInListsCount[2]) - { - index = 3; - } - else if(m_msgInListsCount[0]) - { - index = 1; - } - else //if(m_msgInListsCount[1]) - { - index = 2; - } - - //Prepare infos - m_state = SMS_GET_CMD_SENT; - m_msisdn = (char*) number; - m_msg = (char*) message; - m_maxMsgLength = maxLength; - m_headersToRead = 3; - - m_msisdn[0] = '\0'; - - DBG("Get SMS"); - //Read command - char cmd[32]; - std::sprintf(cmd, "AT!GSMS?%d,1", index); //1 is the oldest message - ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT); - if( ret != OK ) - { - WARN("AT!GSMS returned %d", ret); - m_state = SMS_IDLE; - return NET_PROTOCOL; - } - - //If message is not read, it will be put at the end of the read list - int item; - if( index != 3 ) - { - //Decrement count in relevant list - m_msgInListsCount[index-1]--; - //Increment count in read list - m_msgInListsCount[3-1]++; - item = m_msgInListsCount[3-1]; - //Normally item should be equal to 1 as we'd have read any older messages first - if( item != 1 ) - { - WARN("Still some older messages pending in the read inbox"); - } - } - else - { - //The item is still the oldest one - item = 1; - } - - DBG("Deleting message"); - //Delete message from inbox - std::sprintf(cmd, "AT!DSMS=3"/*,%d", item*/); //FIXME why doesn't that work when specifying the index?? - ret = m_pIf->executeSimple(cmd, NULL, DEFAULT_TIMEOUT); - if(ret != OK) - { - ERR("Could not delete message"); - } - else - { - //Now we can decrease the number of read messages - m_msgInListsCount[3-1]--; - } - - if (m_state != SMS_CMD_PROCESSED) - { - WARN("Message could not be retrieved properly"); - m_state = SMS_IDLE; - return NET_EMPTY; - } - - m_state = SMS_IDLE; - - return OK; -} - - -int CDMASMSInterface::getCount(size_t* pCount) -{ - int ret = updateInbox(); - if(ret) - { - return NET_PROTOCOL; - } - - *pCount = m_msgInListsCount[0] + m_msgInListsCount[1] + m_msgInListsCount[2]; //Urgent messages + regular messages + read messages - - return OK; -} - - -/*virtual*/ int CDMASMSInterface::onNewATResponseLine(ATCommandsInterface* pInst, const char* line) -{ - if(m_state == SMS_SEND_CMD_SENT) - { - DBG("SMS Send: %s", line); - } - else if(m_state == SMS_GET_TX_STATUS_CMD_SENT) - { - if(!strcmp(line, "sent")) - { - m_txState = SMS_SENT; - m_state = SMS_CMD_PROCESSED; - } - else if(!strcmp(line, "failed")) - { - m_txState = SMS_FAILED; - m_state = SMS_CMD_PROCESSED; - } - else if(!strcmp(line, "none")) - { - m_txState = SMS_NONE; - m_state = SMS_CMD_PROCESSED; - } - else if(!strcmp(line, "pending")) - { - m_txState = SMS_PENDING; - m_state = SMS_CMD_PROCESSED; - } - } - else if(m_state == SMS_GET_CMD_SENT) - { - DBG("Header: %s", line); - - if(m_msisdn[0]=='\0') - { - sscanf(line, "From: %16s", m_msisdn); - } - - m_headersToRead--; - - if(m_headersToRead==0) //End of headers - { - if(m_msisdn[0]!='\0') //Checks that the incoming number has been retrieved - { - m_state = SMS_GET_HDR_RECEIVED; - } - else - { - m_state = SMS_IDLE; //Error, signal it - } - } - } - else if(m_state == SMS_GET_HDR_RECEIVED) - { - DBG("Message: %s", line); - size_t cpyLen = MIN( std::strlen(line), m_maxMsgLength - 1 ); - std::memcpy( m_msg, line, cpyLen ); - m_msg[cpyLen] = '\0'; - m_state = SMS_CMD_PROCESSED; - } - else if(m_state == SMS_GET_COUNT_CMD_SENT) - { - DBG("Inbox: %s", line); - int index; - size_t count; - if((strlen(line) > 16) && sscanf(line + 16, "{Index = %d}: %d", &index, &count) == 2) - { - if((index > 0) && (index <=4)) - { - m_msgInListsCount[index-1] = count; - } - if(index == 4) - { - m_state = SMS_CMD_PROCESSED; - } - } - } - return OK; -} - -/*virtual*/ int CDMASMSInterface::onNewEntryPrompt(ATCommandsInterface* pInst) -{ - return OK; -} - - -int CDMASMSInterface::updateInbox() -{ - //Get number of unread/read messages - - DBG("Updating inbox"); - m_msgInListsCount[0] = m_msgInListsCount[1] = m_msgInListsCount[2] = m_msgInListsCount[3] = 0; //Reset counts - - //Get counts - m_state = SMS_GET_COUNT_CMD_SENT; - int ret = m_pIf->execute("AT!CNTSMS", this, NULL, DEFAULT_TIMEOUT); - if( ret != OK ) - { - WARN("AT!CNTSMS returned %d", ret); - m_msgInListsCount[0] = m_msgInListsCount[1] = m_msgInListsCount[2] = m_msgInListsCount[3] = 0; //Invalidate counts - m_state = SMS_IDLE; - return NET_PROTOCOL; - } - - return OK; -} - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/CDMASMSInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/CDMASMSInterface.h deleted file mode 100644 index 6aa4557c36..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/CDMASMSInterface.h +++ /dev/null @@ -1,90 +0,0 @@ -/* SMSInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef CDMASMSINTERFACE_H_ -#define CDMASMSINTERFACE_H_ - -#include "SMSInterface.h" - -#define MAX_SM 8 - -/** Component to use the Short Messages Service (SMS) - * - */ -class CDMASMSInterface : public ISMSInterface, protected IATCommandsProcessor -{ -public: - /** Create SMSInterface instance - @param pIf Pointer to the ATCommandsInterface instance to use - */ - CDMASMSInterface(ATCommandsInterface* pIf); - - /** Initialize interface - Configure SMS commands & register for SMS-related unsolicited result codes - */ - virtual int init(); - - /** Send a SM - @param number The receiver's phone number - @param message The message to send - @return 0 on success, error code on failure - */ - virtual int send(const char* number, const char* message); - - - /** Receive a SM - @param number Pointer to a buffer to store the sender's phone number (must be at least 17 characters-long, including the space for the null-terminating char) - @param message Pointer to a buffer to store the the incoming message - @param maxLength Maximum message length that can be stored in buffer (including null-terminating character) - @return 0 on success, error code on failure - */ - virtual int get(char* number, char* message, size_t maxLength); - - - /** Get the number of SMs in the incoming box - @param pCount pointer to store the number of unprocessed SMs on - @return 0 on success, error code on failure - */ - virtual int getCount(size_t* pCount); - -protected: - //IATCommandsProcessor - virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line); - virtual int onNewEntryPrompt(ATCommandsInterface* pInst); - - int updateInbox(); //Update messages count in the different inboxes - -private: - ATCommandsInterface* m_pIf; - - //Current message - char* m_msg; - size_t m_maxMsgLength; - char* m_msisdn; - - //Messages list - size_t m_msgInListsCount[4]; //4 lists - - size_t m_headersToRead; - - enum { SMS_NONE, SMS_SENT, SMS_PENDING, SMS_FAILED } m_txState; - enum { SMS_IDLE, SMS_SEND_CMD_SENT, SMS_GET_TX_STATUS_CMD_SENT, SMS_GET_CMD_SENT, SMS_GET_HDR_RECEIVED, SMS_GET_COUNT_CMD_SENT, SMS_CMD_PROCESSED } m_state; -}; - -#endif /* CDMASMSINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/GSMSMSInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/GSMSMSInterface.cpp deleted file mode 100644 index 2ed50ad126..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/GSMSMSInterface.cpp +++ /dev/null @@ -1,423 +0,0 @@ -/* GSMSMSInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define __DEBUG__ 2 -#ifndef __MODULE__ -#define __MODULE__ "GSMSMSInterface.cpp" -#endif - -#include "core/fwk.h" - -#include "GSMSMSInterface.h" - -#include <cstdio> -#include <cstring> - -#define DEFAULT_TIMEOUT 10000 - -GSMSMSInterface::GSMSMSInterface(ATCommandsInterface* pIf) : m_pIf(pIf), m_msg(NULL), m_maxMsgLength(0), m_msisdn(NULL) -{ - m_pIf->registerEventsHandler(this); //Add us to the unsolicited result codes handlers -} - -int GSMSMSInterface::init() -{ - m_msgRefListCount = 0; - m_needsUpdate = true; - m_state = SMS_IDLE; - - DBG("Set format"); - //Set Text mode format - int ret = m_pIf->executeSimple("AT+CMGF=1", NULL, DEFAULT_TIMEOUT); - if(ret != OK) - { - return NET_PROTOCOL; - } - - DBG("Setup new messages indication"); - //Setup new messages indication - ret = m_pIf->executeSimple("AT+CNMI=2,1,0,0,0", NULL, DEFAULT_TIMEOUT); - if(ret != OK) - { - return NET_PROTOCOL; - } - - DBG("Try to fetch inbox"); - m_inboxMtx.lock(); - if( m_needsUpdate ) - { - ret = updateInbox(); //Fetch existing messages references - if(ret) - { - m_inboxMtx.unlock(); - return NET_PROTOCOL; - } - } - m_inboxMtx.unlock(); - - DBG("Initialization done"); - return OK; -} - -int GSMSMSInterface::send(const char* number, const char* message) -{ - if( strlen(number) > 16 ) - { - return NET_INVALID; //Number too long to match 3GPP spec - } - - int ret; - - //Prepare infos - m_state = SMS_SEND_CMD_SENT; - m_msg = (char*) message; - - DBG("Send SM"); - //Send command - char cmd[32]; - std::sprintf(cmd, "AT+CMGS=\"%s\"", number); - ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT); - - if( (ret != OK) || (m_state != SMS_CMD_PROCESSED) ) - { - WARN("ret %d, state %d", ret, m_state); - m_state = SMS_IDLE; - return NET_PROTOCOL; - } - - DBG("SM sent"); - m_state = SMS_IDLE; - return OK; -} - - -int GSMSMSInterface::get(char* number, char* message, size_t maxLength) -{ - if( maxLength < 1 ) - { - return NET_INVALID; //Buffer too short - } - - int ret; - - DBG("Get next message"); - m_inboxMtx.lock(); - if( ((m_msgRefListCount == 0) && m_needsUpdate) || ((m_msgRefListCount > 0) && (m_msgRefList[0] == -1)) ) - { - DBG("Message list count is 0 and needs updating or next index is unknown, calling updateInbox()"); - ret = updateInbox(); - - if (ret) - { - m_inboxMtx.unlock(); - return ret; - } - } - - DBG("%d messages to read", m_msgRefListCount); - - if(m_msgRefListCount == 0) - { - m_inboxMtx.unlock(); - DBG("Message list count is 0, I think it's empty and returning."); - return NET_EMPTY; //No message to read - } - - //Prepare infos - m_state = SMS_GET_CMD_SENT; - m_msisdn = (char*) number; - m_msg = (char*) message; - m_maxMsgLength = maxLength; - - DBG("Get SMS"); - //List command - char cmd[32]; - std::sprintf(cmd, "AT+CMGR=%d", m_msgRefList[0]); - ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT); - if( ret != OK ) - { - WARN("AT+CMGR returned %d", ret); - m_state = SMS_IDLE; - m_inboxMtx.unlock(); - return NET_PROTOCOL; - } - - if (m_state != SMS_CMD_PROCESSED) - { - WARN("State variable is not 'SMS_CMD_PROCESSED' - returning 'NET_EMPTY'"); - } - - DBG("Deleting message from index number: %d", m_msgRefList[0] ); - //Delete message from outbox - std::sprintf(cmd, "AT+CMGD=%d", m_msgRefList[0]); - ret = m_pIf->executeSimple(cmd, NULL, DEFAULT_TIMEOUT); - if(ret != OK) - { - ERR("Could not delete message"); - } - //Remove message from list - std::memmove(&m_msgRefList[0], &m_msgRefList[1], MIN(m_msgRefListCount-1,MAX_SM-1)*sizeof(m_msgRefList[0])); - m_msgRefListCount--; - - if(m_msgRefListCount > MAX_SM - 1) //Last message index is unknown, so put -1 to tell the lib to fetch it when needed - { - DBG("Last message index is unknown, will need to be updated"); - m_msgRefList[MAX_SM - 1] = -1; - } - - DBG("%d messages to read", m_msgRefListCount); - - if (m_state != SMS_CMD_PROCESSED) - { - m_state = SMS_IDLE; - m_inboxMtx.unlock(); - return NET_EMPTY; - } - - m_state = SMS_IDLE; - m_inboxMtx.unlock(); - - return OK; -} - - -int GSMSMSInterface::getCount(size_t* pCount) -{ - int ret; - - m_inboxMtx.lock(); - if( m_needsUpdate ) - { - ret = updateInbox(); - if(ret) - { - m_inboxMtx.unlock(); - return NET_PROTOCOL; - } - } - - *pCount = m_msgRefListCount; - m_inboxMtx.unlock(); - - return OK; -} - - -/*virtual*/ int GSMSMSInterface::onNewATResponseLine(ATCommandsInterface* pInst, const char* line) -{ - if(m_state == SMS_SEND_CMD_SENT) - { - if( std::sscanf(line, "+CMGS: %*d") == 0 ) - { - DBG("SM sent"); - m_state = SMS_CMD_PROCESSED; - } - } - else if(m_state == SMS_GET_CMD_SENT) - { - DBG("Header: %s", line); - if( std::sscanf(line, "+CMGR: %*[^,],\"%16[^\"]\"", m_msisdn) == 1 ) //Get message ref - { - m_state = SMS_GET_HDR_RECEIVED; - } - } - else if(m_state == SMS_GET_HDR_RECEIVED) - { - DBG("Message: %s", line); - size_t cpyLen = MIN( std::strlen(line), m_maxMsgLength - 1 ); - std::memcpy( m_msg, line, cpyLen ); - m_msg[cpyLen] = '\0'; - m_state = SMS_CMD_PROCESSED; - } - else if(m_state == SMS_GET_COUNT_CMD_SENT) - { - DBG("Header: %s", line); - int msgRef; - if( std::sscanf(line, "+CMGL: %d,\"REC", &msgRef) == 1 ) //Filter on REC READ and REC UNREAD messages - { - m_state = SMS_GET_COUNT_HDR_RECEIVED; - //Add message to list - if(m_msgRefListCount < MAX_SM) - { - m_msgRefList[m_msgRefListCount] = msgRef; - } - m_msgRefListCount++; //Always count message - DBG("m_msgRefListCount=%d",m_msgRefListCount); - } - } - else if(m_state == SMS_GET_COUNT_HDR_RECEIVED) - { - DBG("Message (debug only): %s", line); //For debug only - m_state = SMS_GET_COUNT_CMD_SENT; - } - return OK; -} - -/*virtual*/ int GSMSMSInterface::onNewEntryPrompt(ATCommandsInterface* pInst) -{ - if(m_state == SMS_SEND_CMD_SENT) - { - char* crPtr = strchr(m_msg, CR); - if(crPtr != NULL) - { - int crPos = crPtr - m_msg; - //Replace m_inputBuf[crPos] with null-terminating char - m_msg[crPos] = '\x0'; - - //If there is a CR char, split message there - - //Do print the message - int ret = pInst->sendData(m_msg); - if(ret) - { - return ret; - } - - char cr[2] = {CR, '\0'}; - ret = pInst->sendData(cr); - if(ret) - { - return ret; - } - - m_msg += crPos; - - if(m_msg[0] == LF) - { - m_msg++; //Discard LF char as well - } - - return NET_MOREINFO; - } - else - { - //Do print the message - pInst->sendData(m_msg); - return OK; - } - } - - return OK; -} - -/*virtual*/ bool GSMSMSInterface::isATCodeHandled(const char* atCode) //Is this AT code handled -{ - DBG("AT code is %s", atCode); - if( strcmp("+CMTI", atCode) == 0 ) - { - return true; - } - - DBG("Not handled"); - return false; -} - -/*virtual*/ void GSMSMSInterface::onDispatchStart() -{ - -} - -/*virtual*/ void GSMSMSInterface::onDispatchStop() -{ - -} - -/*virtual*/ char* GSMSMSInterface::getEventsEnableCommand() -{ - return "AT+CNMI=2,1,0,0,0"; -} - -/*virtual*/ char* GSMSMSInterface::getEventsDisableCommand() -{ - return "AT+CNMI=0,0,0,0,0"; //Indications will be buffered within the modem and flushed back when the former command is executed -} - -/*virtual*/ void GSMSMSInterface::onEvent(const char* atCode, const char* evt) -{ - if( strcmp("+CMTI", atCode) != 0 ) - { - return; //Not supported - } - - DBG("Unsollicited result code: %s - %s", atCode, evt); - - //Get index - int msgRef; - if(( std::sscanf(evt, "\"SM\",%d", &msgRef) == 1 ) || - ( std::sscanf(evt, "\"ME\",%d", &msgRef) == 1 )) - { - DBG("Adding message to list (ref %d)", msgRef); - if(m_inboxMtx.trylock()) - { - //Add message to list - if(m_msgRefListCount < MAX_SM) - { - m_msgRefList[m_msgRefListCount] = msgRef; - } - m_msgRefListCount++; //Always count message - m_inboxMtx.unlock(); - } - else - { - WARN("Could not get lock"); - m_needsUpdate = true; - } - } -} - -int GSMSMSInterface::updateInbox() -{ - //Get memory indexes of unread messages - - DBG("Updating inbox"); - m_msgRefListCount = 0; //Reset list - m_needsUpdate = false; //Assume we won't need update after this routine (can be set to true by an incoming SM event) - - //First list the "REC READ" messages that were not processed in the previous session - m_state = SMS_GET_COUNT_CMD_SENT; - int ret = m_pIf->execute("AT+CMGL=\"REC READ\"", this, NULL, DEFAULT_TIMEOUT); - if( ret != OK ) - { - WARN("AT+CMGL returned %d", ret); - m_state = SMS_IDLE; - m_msgRefListCount = 0; //List could be invalid - m_needsUpdate = true; - return NET_PROTOCOL; - } - - //Now list the "REC UNREAD" messages that were received by the modem since - m_state = SMS_GET_COUNT_CMD_SENT; - ret = m_pIf->execute("AT+CMGL=\"REC UNREAD\"", this, NULL, DEFAULT_TIMEOUT); - if( ret != OK ) - { - WARN("AT+CMGL returned %d", ret); - m_state = SMS_IDLE; - m_msgRefListCount = 0; //List could be invalid - m_needsUpdate = true; - return NET_PROTOCOL; - } - - DBG("%d incoming messages in inbox", m_msgRefListCount); - - m_state = SMS_IDLE; - - return OK; -} - - diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/GSMSMSInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/GSMSMSInterface.h deleted file mode 100644 index 446a73e518..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/GSMSMSInterface.h +++ /dev/null @@ -1,97 +0,0 @@ -/* SMSInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef GSMSMSINTERFACE_H_ -#define GSMSMSINTERFACE_H_ - -#include "SMSInterface.h" - -/** Component to use the Short Messages Service (SMS) - * - */ -class GSMSMSInterface : public ISMSInterface, protected IATCommandsProcessor, IATEventsHandler -{ -public: - /** Create SMSInterface instance - @param pIf Pointer to the ATCommandsInterface instance to use - */ - GSMSMSInterface(ATCommandsInterface* pIf); - - /** Initialize interface - Configure SMS commands & register for SMS-related unsolicited result codes - */ - virtual int init(); - - /** Send a SM - @param number The receiver's phone number - @param message The message to send - @return 0 on success, error code on failure - */ - virtual int send(const char* number, const char* message); - - - /** Receive a SM - @param number Pointer to a buffer to store the sender's phone number (must be at least 17 characters-long, including the space for the null-terminating char) - @param message Pointer to a buffer to store the the incoming message - @param maxLength Maximum message length that can be stored in buffer (including null-terminating character) - @return 0 on success, error code on failure - */ - virtual int get(char* number, char* message, size_t maxLength); - - - /** Get the number of SMs in the incoming box - @param pCount pointer to store the number of unprocessed SMs on - @return 0 on success, error code on failure - */ - virtual int getCount(size_t* pCount); - -protected: - //IATCommandsProcessor - virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line); - virtual int onNewEntryPrompt(ATCommandsInterface* pInst); - - //IATEventsHandler - virtual bool isATCodeHandled(const char* atCode); //Is this AT code handled - virtual void onDispatchStart(); - virtual void onDispatchStop(); - virtual char* getEventsEnableCommand(); - virtual char* getEventsDisableCommand(); - virtual void onEvent(const char* atCode, const char* evt); - - //Updates messages count/references - int updateInbox(); - -private: - ATCommandsInterface* m_pIf; - - //Current message - char* m_msg; - size_t m_maxMsgLength; - char* m_msisdn; - - //Messages list - int m_msgRefList[MAX_SM]; - size_t m_msgRefListCount; - bool m_needsUpdate; - Mutex m_inboxMtx; //To protect concurrent accesses btw the user's thread and the AT thread - - enum { SMS_IDLE, SMS_SEND_CMD_SENT, SMS_GET_CMD_SENT, SMS_GET_HDR_RECEIVED, SMS_GET_COUNT_CMD_SENT, SMS_GET_COUNT_HDR_RECEIVED, SMS_CMD_PROCESSED } m_state; -}; - -#endif /* GSMSMSINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/SMSInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/SMSInterface.h deleted file mode 100644 index df226709d1..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/sms/SMSInterface.h +++ /dev/null @@ -1,67 +0,0 @@ -/* SMSInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef ISMSINTERFACE_H_ -#define ISMSINTERFACE_H_ - -#include "core/fwk.h" - -#include "rtos.h" - -#include "at/ATCommandsInterface.h" - -#define MAX_SM 8 - -/** Component to use the Short Messages Service (SMS) - * - */ -class ISMSInterface -{ -public: - /** Initialize interface - Configure SMS commands & register for SMS-related unsolicited result codes - */ - virtual int init() = 0; - - - /** Send a SM - @param number The receiver's phone number - @param message The message to send - @return 0 on success, error code on failure - */ - virtual int send(const char* number, const char* message) = 0; - - - /** Receive a SM - @param number Pointer to a buffer to store the sender's phone number (must be at least 17 characters-long, including the space for the null-terminating char) - @param message Pointer to a buffer to store the the incoming message - @param maxLength Maximum message length that can be stored in buffer (including null-terminating character) - @return 0 on success, error code on failure - */ - virtual int get(char* number, char* message, size_t maxLength) = 0; - - - /** Get the number of SMs in the incoming box - @param pCount pointer to store the number of unprocessed SMs on - @return 0 on success, error code on failure - */ - virtual int getCount(size_t* pCount) = 0; -}; - -#endif /* ISMSINTERFACE_H_ */ diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ussd/USSDInterface.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ussd/USSDInterface.cpp deleted file mode 100644 index 4815babd6a..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ussd/USSDInterface.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* USSDInterface.cpp */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define __DEBUG__ 0 -#ifndef __MODULE__ -#define __MODULE__ "USSDInterface.cpp" -#endif - -#include "core/fwk.h" - -#include "USSDInterface.h" - -#include <cstdio> - -#define DEFAULT_TIMEOUT 10000 -#define USSD_TIMEOUT 15000 - -USSDInterface::USSDInterface(ATCommandsInterface* pIf) : m_pIf(pIf), m_responseMtx(), m_responseSphre(1), m_result(NULL), m_maxResultLength(0) -{ - m_responseSphre.wait(0); //Take ownership of the semaphore - m_pIf->registerEventsHandler(this); //Add us to the unsolicited result codes handlers -} - -int USSDInterface::init() -{ - DBG("Initialization done"); - return OK; -} - -int USSDInterface::send(const char* command, char* result, size_t maxLength) -{ - if (strlen(command) > 20) //Prevent buffer overflow - { - return NET_TOOSMALL; - } - - m_responseMtx.lock(); - m_result = result; - m_maxResultLength = maxLength; - m_responseMtx.unlock(); - - m_responseSphre.wait(0); //Make sure there is not a pending result that needs to be discarded - - DBG("Send USSD command & register for unsolicited result codes"); - //Send USSD command to the network - char cmd[32]; - std::sprintf(cmd, "AT+CUSD=1,\"%s\"", command); - int ret = m_pIf->execute(cmd, this, NULL, DEFAULT_TIMEOUT); - if( ret != OK ) - { - return NET_PROTOCOL; - } - - //Did we already get a response (3GPP rev < 6) ? - - //Now wait for response - int res = m_responseSphre.wait(USSD_TIMEOUT); - - //Reset data - m_responseMtx.lock(); - m_result = NULL; - m_maxResultLength = 0; - m_responseMtx.unlock(); - - if(res <= 0) - { - DBG("No result received"); - ret = m_pIf->executeSimple("AT+CUSD=2", NULL, DEFAULT_TIMEOUT); //Cancel command - if( ret != OK ) - { - return NET_PROTOCOL; - } - return NET_TIMEOUT; - } - - DBG("Result received: %s", result); - - return OK; -} - -/*virtual*/ int USSDInterface::onNewATResponseLine(ATCommandsInterface* pInst, const char* line) -{ - const char* pSemicol = strchr(line, ':'); - if( ( (pSemicol - line) != strlen("+CUSD") ) || ( memcmp(line, "+CUSD", strlen("+CUSD")) != 0) ) - { - WARN("Unknown code"); - return OK; - } - - const char* pData = NULL; - if( pSemicol != NULL ) //Split the identifier & the result code (if it exists) - { - pData = pSemicol + 1; - if(pData[0]==' ') - { - pData++; //Suppress whitespace - } - processResult(pData); - } - return OK; -} - -/*virtual*/ int USSDInterface::onNewEntryPrompt(ATCommandsInterface* pInst) -{ - return OK; -} - -/*virtual*/ bool USSDInterface::isATCodeHandled(const char* atCode) //Is this AT code handled -{ - DBG("AT code is %s", atCode); - if( strcmp("+CUSD", atCode) == 0 ) - { - return true; - } - - DBG("Not handled"); - return false; -} - -/*virtual*/ void USSDInterface::onDispatchStart() -{ - - -} - -/*virtual*/ void USSDInterface::onDispatchStop() -{ - -} - -/*virtual*/ char* USSDInterface::getEventsEnableCommand() -{ - return NULL; //No need to disable events here -} - -/*virtual*/ char* USSDInterface::getEventsDisableCommand() -{ - return NULL; //No need to re-enable events here -} - -/*virtual*/ void USSDInterface::onEvent(const char* atCode, const char* evt) -{ - if( strcmp("+CUSD", atCode) != 0 ) - { - WARN("Wrong AT Code"); - return; //Not supported - } - - processResult(evt); -} - -void USSDInterface::processResult(const char* data) -{ - char* pStart = (char*) strchr(data,'\"'); - if(pStart==NULL) - { - WARN("Could not find opening quote"); - return; //Invalid/incomplete response - } - pStart++; //Point to first char of response - char* pEnd = (char*) strchr(pStart,'\"'); - if(pEnd==NULL) - { - WARN("Could not find closing quote"); - return; //Invalid/incomplete response - } - m_responseMtx.lock(); - if(m_maxResultLength == 0) //No pending command - { - WARN("No pending command"); - m_responseMtx.unlock(); - return; - } - size_t cpyLen = MIN( pEnd - pStart, m_maxResultLength - 1 ); - memcpy((void*)m_result, pStart, cpyLen); - m_result[cpyLen] = '\0'; - DBG("Got USSD response: %s", m_result); - m_responseMtx.unlock(); - m_responseSphre.release(); //Signal user thread that response is ready -} diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ussd/USSDInterface.h b/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ussd/USSDInterface.h deleted file mode 100644 index 47984d1d91..0000000000 --- a/tmk_core/tool/mbed/mbed-sdk/libraries/net/cellular/CellularModem/ussd/USSDInterface.h +++ /dev/null @@ -1,80 +0,0 @@ -/* USSDInterface.h */ -/* Copyright (C) 2012 mbed.org, MIT License - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software - * and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef USSDINTERFACE_H_ -#define USSDINTERFACE_H_ - -#include "core/fwk.h" - -#include "rtos.h" - -#include "at/ATCommandsInterface.h" - -/** Component to send/receive Unstructured Supplementary Service Data (USSD) - * - */ -class USSDInterface : protected IATCommandsProcessor, IATEventsHandler -{ -public: - /** Create USSDInterface instance - @param pIf Pointer to the ATCommandsInterface instance to use - */ - USSDInterface(ATCommandsInterface* pIf); - - /** Initialize interface - Configure USSD commands & register for USSD-related unsolicited result codes - */ - int init(); - - /** Send a USSD command & wait for its result - @param command The command to send - @param result Buffer in which to store the result - @param maxLength Maximum result length that can be stored in buffer (including null-terminating character) - @return 0 on success, error code on failure - */ - int send(const char* command, char* result, size_t maxLength); - -protected: - //IATCommandsProcessor, needed for implementations of 3GGP standard < r06 - virtual int onNewATResponseLine(ATCommandsInterface* pInst, const char* line); - virtual int onNewEntryPrompt(ATCommandsInterface* pInst); - - //IATEventsHandler, needed for implementations of 3GGP standard >= r06 - virtual bool isATCodeHandled(const char* atCode); //Is this AT code handled - virtual void onDispatchStart(); - virtual void onDispatchStop(); - virtual char* getEventsEnableCommand(); - virtual char* getEventsDisableCommand(); - virtual void onEvent(const char* atCode, const char* evt); - -private: - void processResult(const char* data); - - ATCommandsInterface* m_pIf; - Mutex m_responseMtx; //To protect concurrent accesses btw the user's thread and the AT thread - Semaphore m_responseSphre; - - //Result - volatile char* m_result; - volatile size_t m_maxResultLength; - -}; - - -#endif /* USSDINTERFACE_H_ */ |