Added support for the WNC M14A2A Cellular LTE Data Module.

Dependencies:   WNC14A2AInterface

Easy Connect

Easily add all supported connectivity methods to your mbed OS project

This project is derived from https://developer.mbed.org/teams/sandbox/code/simple-mbed-client-example/file/dd6231df71bb/easy-connect.lib. It give user the ability to switch between connectivity methods and includes support for the WNC14A2A Data Module. The `NetworkInterface` API makes this easy, but you still need a mechanism for the user to select the connection method, The selection is made by modifying the `mbed_app.json` file and using `easy_connect()` from your application.

Specifying connectivity method

To add support for the WNC14A2A, add the following to your ``mbed_app.json`` file:

mbed_app.json

{
    "config": {
        "network-interface":{
            "help": "options are ETHERNET,WIFI_ESP8266,WIFI_ODIN,MESH_LOWPAN_ND,MESH_THREAD,WNC14A2A",
            "value": "WNC14A2A"
        }
    },
}

After you choose `WNC14A2A` you'll also need to indicate if you want debug output or not by Enabling (true) or Disabling (false) WNC_DEBUG.

If WNC_DEBUG is enabled, there are 3 different levels of debug output (selected via bit settings). These debug levels are set using the following values:

ValueDescription
1Basic WNC driver debug output
2Comprehensive WNC driver debug output
4Network Layer debug output

You can have any combination of these three bit values for a total value of 0 – 7.

WNC Debug Settings

    "config": {
        "WNC_DEBUG": {
            "value": false
        },
        "WNC_DEBUG_SETTING": {
            "value": 4
        },
    }

Using Easy Connect from your application

Easy Connect has just one function which will either return a `NetworkInterface`-pointer or `NULL`:

Sample Code

#include "easy-connect.h"

int main(int, char**) {
    NetworkInterface* network = easy_connect(true); /* has 1 argument, enable_logging (pass in true to log to serial port) */
    if (!network) {
        printf("Connecting to the network failed... See serial output.\r\n");
        return 1;
    }
 
    // Rest of your program
}

Tested on

  • K64F with Ethernet.
  • AT&T Cellular IoT Starter Kit with WNC M14A2A Cellular Data Module

The WNCInterface class currently supports the following version(s):

  • MPSS: M14A2A_v11.50.164451 APSS: M14A2A_v11.53.164451

License

This library is released under the Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License and may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Committer:
group-Avnet
Date:
Wed Apr 19 01:08:11 2017 +0000
Revision:
0:478cfd88041f
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-Avnet 0:478cfd88041f 1 /**
group-Avnet 0:478cfd88041f 2 ******************************************************************************
group-Avnet 0:478cfd88041f 3 * @file SPIRIT_Types.h
group-Avnet 0:478cfd88041f 4 * @author VMA division - AMS
group-Avnet 0:478cfd88041f 5 * @version 3.2.2
group-Avnet 0:478cfd88041f 6 * @date 08-July-2015
group-Avnet 0:478cfd88041f 7 * @brief Header file for SPIRIT types.
group-Avnet 0:478cfd88041f 8 * @details
group-Avnet 0:478cfd88041f 9 *
group-Avnet 0:478cfd88041f 10 * This module provide some types definitions which will be used in
group-Avnet 0:478cfd88041f 11 * all the modules of this library. Here is defined also the global
group-Avnet 0:478cfd88041f 12 * variable @ref g_xStatus which contains the status of Spirit and
group-Avnet 0:478cfd88041f 13 * is updated every time an SPI transaction occurs.
group-Avnet 0:478cfd88041f 14 *
group-Avnet 0:478cfd88041f 15 * @attention
group-Avnet 0:478cfd88041f 16 *
group-Avnet 0:478cfd88041f 17 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
group-Avnet 0:478cfd88041f 18 *
group-Avnet 0:478cfd88041f 19 * Redistribution and use in source and binary forms, with or without modification,
group-Avnet 0:478cfd88041f 20 * are permitted provided that the following conditions are met:
group-Avnet 0:478cfd88041f 21 * 1. Redistributions of source code must retain the above copyright notice,
group-Avnet 0:478cfd88041f 22 * this list of conditions and the following disclaimer.
group-Avnet 0:478cfd88041f 23 * 2. Redistributions in binary form must reproduce the above copyright notice,
group-Avnet 0:478cfd88041f 24 * this list of conditions and the following disclaimer in the documentation
group-Avnet 0:478cfd88041f 25 * and/or other materials provided with the distribution.
group-Avnet 0:478cfd88041f 26 * 3. Neither the name of STMicroelectronics nor the names of its contributors
group-Avnet 0:478cfd88041f 27 * may be used to endorse or promote products derived from this software
group-Avnet 0:478cfd88041f 28 * without specific prior written permission.
group-Avnet 0:478cfd88041f 29 *
group-Avnet 0:478cfd88041f 30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
group-Avnet 0:478cfd88041f 31 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
group-Avnet 0:478cfd88041f 32 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
group-Avnet 0:478cfd88041f 33 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
group-Avnet 0:478cfd88041f 34 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
group-Avnet 0:478cfd88041f 35 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
group-Avnet 0:478cfd88041f 36 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
group-Avnet 0:478cfd88041f 37 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
group-Avnet 0:478cfd88041f 38 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
group-Avnet 0:478cfd88041f 39 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
group-Avnet 0:478cfd88041f 40 *
group-Avnet 0:478cfd88041f 41 ******************************************************************************
group-Avnet 0:478cfd88041f 42 */
group-Avnet 0:478cfd88041f 43
group-Avnet 0:478cfd88041f 44 /* Define to prevent recursive inclusion -------------------------------------*/
group-Avnet 0:478cfd88041f 45 #ifndef __SPIRIT_GENERICTYPES_H
group-Avnet 0:478cfd88041f 46 #define __SPIRIT_GENERICTYPES_H
group-Avnet 0:478cfd88041f 47
group-Avnet 0:478cfd88041f 48
group-Avnet 0:478cfd88041f 49 /* Includes ------------------------------------------------------------------*/
group-Avnet 0:478cfd88041f 50
group-Avnet 0:478cfd88041f 51 /* Include all integer types definitions */
group-Avnet 0:478cfd88041f 52 #include <stdint.h>
group-Avnet 0:478cfd88041f 53 #include <stdio.h>
group-Avnet 0:478cfd88041f 54 #include "SPIRIT_Regs.h"
group-Avnet 0:478cfd88041f 55
group-Avnet 0:478cfd88041f 56
group-Avnet 0:478cfd88041f 57
group-Avnet 0:478cfd88041f 58 #ifdef __cplusplus
group-Avnet 0:478cfd88041f 59 extern "C" {
group-Avnet 0:478cfd88041f 60 #endif
group-Avnet 0:478cfd88041f 61
group-Avnet 0:478cfd88041f 62
group-Avnet 0:478cfd88041f 63 /**
group-Avnet 0:478cfd88041f 64 * @addtogroup SPIRIT_Libraries
group-Avnet 0:478cfd88041f 65 * @{
group-Avnet 0:478cfd88041f 66 */
group-Avnet 0:478cfd88041f 67
group-Avnet 0:478cfd88041f 68
group-Avnet 0:478cfd88041f 69 /**
group-Avnet 0:478cfd88041f 70 * @defgroup SPIRIT_Types Types
group-Avnet 0:478cfd88041f 71 * @brief Module for SPIRIT types definition.
group-Avnet 0:478cfd88041f 72 * * @details See the file <i>@ref SPIRIT_Types.h</i> for more details.
group-Avnet 0:478cfd88041f 73 * @{
group-Avnet 0:478cfd88041f 74 */
group-Avnet 0:478cfd88041f 75
group-Avnet 0:478cfd88041f 76 /**
group-Avnet 0:478cfd88041f 77 * @defgroup Types_Exported_Types Types Exported Types
group-Avnet 0:478cfd88041f 78 * @{
group-Avnet 0:478cfd88041f 79 */
group-Avnet 0:478cfd88041f 80
group-Avnet 0:478cfd88041f 81 /**
group-Avnet 0:478cfd88041f 82 * @brief Spirit Functional state. Used to enable or disable a specific option.
group-Avnet 0:478cfd88041f 83 */
group-Avnet 0:478cfd88041f 84 typedef enum
group-Avnet 0:478cfd88041f 85 {
group-Avnet 0:478cfd88041f 86 S_DISABLE = 0,
group-Avnet 0:478cfd88041f 87 S_ENABLE = !S_DISABLE
group-Avnet 0:478cfd88041f 88
group-Avnet 0:478cfd88041f 89 } SpiritFunctionalState;
group-Avnet 0:478cfd88041f 90
group-Avnet 0:478cfd88041f 91 #define IS_SPIRIT_FUNCTIONAL_STATE(STATE) (STATE == S_DISABLE || STATE == S_ENABLE)
group-Avnet 0:478cfd88041f 92
group-Avnet 0:478cfd88041f 93 /**
group-Avnet 0:478cfd88041f 94 * @brief Spirit Flag status. Used to control the state of a flag.
group-Avnet 0:478cfd88041f 95 */
group-Avnet 0:478cfd88041f 96 typedef enum
group-Avnet 0:478cfd88041f 97 {
group-Avnet 0:478cfd88041f 98 S_RESET = 0,
group-Avnet 0:478cfd88041f 99 S_SET = !S_RESET
group-Avnet 0:478cfd88041f 100
group-Avnet 0:478cfd88041f 101 } SpiritFlagStatus;
group-Avnet 0:478cfd88041f 102
group-Avnet 0:478cfd88041f 103 #define IS_SPIRIT_FLAG_STATUS(STATUS) (STATUS == S_RESET || STATUS == S_SET)
group-Avnet 0:478cfd88041f 104
group-Avnet 0:478cfd88041f 105
group-Avnet 0:478cfd88041f 106 /**
group-Avnet 0:478cfd88041f 107 * @brief boolean type enumeration.
group-Avnet 0:478cfd88041f 108 */
group-Avnet 0:478cfd88041f 109 typedef enum
group-Avnet 0:478cfd88041f 110 {
group-Avnet 0:478cfd88041f 111 S_FALSE = 0,
group-Avnet 0:478cfd88041f 112 S_TRUE = !S_FALSE
group-Avnet 0:478cfd88041f 113
group-Avnet 0:478cfd88041f 114 } SpiritBool;
group-Avnet 0:478cfd88041f 115
group-Avnet 0:478cfd88041f 116
group-Avnet 0:478cfd88041f 117 /**
group-Avnet 0:478cfd88041f 118 * @brief SPIRIT States enumeration.
group-Avnet 0:478cfd88041f 119 */
group-Avnet 0:478cfd88041f 120 typedef enum
group-Avnet 0:478cfd88041f 121 {
group-Avnet 0:478cfd88041f 122 MC_STATE_STANDBY =0x40, /*!< STANDBY */
group-Avnet 0:478cfd88041f 123 MC_STATE_SLEEP =0x36, /*!< SLEEP */
group-Avnet 0:478cfd88041f 124 MC_STATE_READY =0x03, /*!< READY */
group-Avnet 0:478cfd88041f 125 MC_STATE_PM_SETUP =0x3D, /*!< PM_SETUP */
group-Avnet 0:478cfd88041f 126 MC_STATE_XO_SETTLING =0x23, /*!< XO_SETTLING */
group-Avnet 0:478cfd88041f 127 MC_STATE_SYNTH_SETUP =0x53, /*!< SYNT_SETUP */
group-Avnet 0:478cfd88041f 128 MC_STATE_PROTOCOL =0x1F, /*!< PROTOCOL */
group-Avnet 0:478cfd88041f 129 MC_STATE_SYNTH_CALIBRATION =0x4F, /*!< SYNTH */
group-Avnet 0:478cfd88041f 130 MC_STATE_LOCK =0x0F, /*!< LOCK */
group-Avnet 0:478cfd88041f 131 MC_STATE_RX =0x33, /*!< RX */
group-Avnet 0:478cfd88041f 132 MC_STATE_TX =0x5F /*!< TX */
group-Avnet 0:478cfd88041f 133
group-Avnet 0:478cfd88041f 134 } SpiritState;
group-Avnet 0:478cfd88041f 135
group-Avnet 0:478cfd88041f 136
group-Avnet 0:478cfd88041f 137
group-Avnet 0:478cfd88041f 138 /**
group-Avnet 0:478cfd88041f 139 * @brief SPIRIT Status. This definition represents the single field of the SPIRIT
group-Avnet 0:478cfd88041f 140 * status returned on each SPI transaction, equal also to the MC_STATE registers.
group-Avnet 0:478cfd88041f 141 * This field-oriented structure allows user to address in simple way the single
group-Avnet 0:478cfd88041f 142 * field of the SPIRIT status.
group-Avnet 0:478cfd88041f 143 * The user shall define a variable of SpiritStatus type to access on SPIRIT status fields.
group-Avnet 0:478cfd88041f 144 * @note The fields order in the structure depends on used endianness (little or big
group-Avnet 0:478cfd88041f 145 * endian). The actual definition is valid ONLY for LITTLE ENDIAN mode. Be sure to
group-Avnet 0:478cfd88041f 146 * change opportunely the fields order when use a different endianness.
group-Avnet 0:478cfd88041f 147 */
group-Avnet 0:478cfd88041f 148
group-Avnet 0:478cfd88041f 149 typedef struct
group-Avnet 0:478cfd88041f 150 {
group-Avnet 0:478cfd88041f 151 uint8_t XO_ON:1; /*!< This one bit field notifies if XO is operating
group-Avnet 0:478cfd88041f 152 (XO_ON is 1) or not (XO_On is 0) */
group-Avnet 0:478cfd88041f 153 SpiritState MC_STATE: 7; /*!< This 7 bits field indicates the state of the
group-Avnet 0:478cfd88041f 154 Main Controller of SPIRIT. The possible states
group-Avnet 0:478cfd88041f 155 and their corresponding values are defined in
group-Avnet 0:478cfd88041f 156 @ref SpiritState */
group-Avnet 0:478cfd88041f 157 uint8_t ERROR_LOCK: 1; /*!< This one bit field notifies if there is an
group-Avnet 0:478cfd88041f 158 error on RCO calibration (ERROR_LOCK is 1) or
group-Avnet 0:478cfd88041f 159 not (ERROR_LOCK is 0) */
group-Avnet 0:478cfd88041f 160 uint8_t RX_FIFO_EMPTY: 1; /*!< This one bit field notifies if RX FIFO is empty
group-Avnet 0:478cfd88041f 161 (RX_FIFO_EMPTY is 1) or not (RX_FIFO_EMPTY is 0) */
group-Avnet 0:478cfd88041f 162 uint8_t TX_FIFO_FULL: 1; /*!< This one bit field notifies if TX FIFO is full
group-Avnet 0:478cfd88041f 163 (TX_FIFO_FULL is 1) or not (TX_FIFO_FULL is 0) */
group-Avnet 0:478cfd88041f 164 uint8_t ANT_SELECT: 1; /*!< This one bit field notifies the currently selected
group-Avnet 0:478cfd88041f 165 antenna */
group-Avnet 0:478cfd88041f 166 uint8_t : 4; /*!< This 4 bits field are reserved and equal to 5 */
group-Avnet 0:478cfd88041f 167
group-Avnet 0:478cfd88041f 168 }SpiritStatus;
group-Avnet 0:478cfd88041f 169
group-Avnet 0:478cfd88041f 170
group-Avnet 0:478cfd88041f 171
group-Avnet 0:478cfd88041f 172 /**
group-Avnet 0:478cfd88041f 173 * @}
group-Avnet 0:478cfd88041f 174 */
group-Avnet 0:478cfd88041f 175
group-Avnet 0:478cfd88041f 176
group-Avnet 0:478cfd88041f 177 /**
group-Avnet 0:478cfd88041f 178 * @defgroup Types_Exported_Constants Types Exported Constants
group-Avnet 0:478cfd88041f 179 * @{
group-Avnet 0:478cfd88041f 180 */
group-Avnet 0:478cfd88041f 181
group-Avnet 0:478cfd88041f 182
group-Avnet 0:478cfd88041f 183 /**
group-Avnet 0:478cfd88041f 184 * @}
group-Avnet 0:478cfd88041f 185 */
group-Avnet 0:478cfd88041f 186
group-Avnet 0:478cfd88041f 187 /**
group-Avnet 0:478cfd88041f 188 * @defgroup Types_Exported_Variables Types Exported Variables
group-Avnet 0:478cfd88041f 189 * @{
group-Avnet 0:478cfd88041f 190 */
group-Avnet 0:478cfd88041f 191
group-Avnet 0:478cfd88041f 192 extern volatile SpiritStatus g_xStatus;
group-Avnet 0:478cfd88041f 193
group-Avnet 0:478cfd88041f 194 /**
group-Avnet 0:478cfd88041f 195 * @}
group-Avnet 0:478cfd88041f 196 */
group-Avnet 0:478cfd88041f 197
group-Avnet 0:478cfd88041f 198 /**
group-Avnet 0:478cfd88041f 199 * @defgroup Types_Exported_Macros Types Exported Macros
group-Avnet 0:478cfd88041f 200 * @{
group-Avnet 0:478cfd88041f 201 */
group-Avnet 0:478cfd88041f 202
group-Avnet 0:478cfd88041f 203 #ifdef SPIRIT_USE_FULL_ASSERT
group-Avnet 0:478cfd88041f 204 /**
group-Avnet 0:478cfd88041f 205 * @brief The s_assert_param macro is used for function's parameters check.
group-Avnet 0:478cfd88041f 206 * @param expr If expr is false, it calls assert_failed function which reports
group-Avnet 0:478cfd88041f 207 * the name of the source file and the source line number of the call
group-Avnet 0:478cfd88041f 208 * that failed. If expr is true, it returns no value.
group-Avnet 0:478cfd88041f 209 * @retval None
group-Avnet 0:478cfd88041f 210 */
group-Avnet 0:478cfd88041f 211 #define s_assert_param(expr) ((expr) ? (void)0 : s_assert_failed((uint8_t *)__FILE__, __LINE__))
group-Avnet 0:478cfd88041f 212 void s_assert_failed(uint8_t* file, uint32_t line);
group-Avnet 0:478cfd88041f 213 #elif SPIRIT_USE_VCOM_ASSERT
group-Avnet 0:478cfd88041f 214 /**
group-Avnet 0:478cfd88041f 215 * @brief The s_assert_param macro is used for function's parameters check.
group-Avnet 0:478cfd88041f 216 * @param expr If expr is false, it calls assert_failed function which reports
group-Avnet 0:478cfd88041f 217 * the name of the source file and the source line number of the call
group-Avnet 0:478cfd88041f 218 * that failed. If expr is true, it returns no value.
group-Avnet 0:478cfd88041f 219 * @retval None
group-Avnet 0:478cfd88041f 220 */
group-Avnet 0:478cfd88041f 221 #define s_assert_param(expr) ((expr) ? (void)0 : s_assert_failed((uint8_t *)__FILE__, __LINE__,#expr))
group-Avnet 0:478cfd88041f 222 void s_assert_failed(uint8_t* file, uint32_t line, char* expression);
group-Avnet 0:478cfd88041f 223
group-Avnet 0:478cfd88041f 224 #elif SPIRIT_USE_FRAME_ASSERT
group-Avnet 0:478cfd88041f 225 /**
group-Avnet 0:478cfd88041f 226 * @brief The s_assert_param macro is used for function's parameters check.
group-Avnet 0:478cfd88041f 227 * @param expr If expr is false, it calls assert_failed function which reports
group-Avnet 0:478cfd88041f 228 * the name of the source file and the source line number of the call
group-Avnet 0:478cfd88041f 229 * that failed. If expr is true, it returns no value.
group-Avnet 0:478cfd88041f 230 * @retval None
group-Avnet 0:478cfd88041f 231 */
group-Avnet 0:478cfd88041f 232 #define s_assert_param(expr) ((expr) ? (void)0 : s_assert_failed(#expr))
group-Avnet 0:478cfd88041f 233 void s_assert_failed(char* expression);
group-Avnet 0:478cfd88041f 234 #else
group-Avnet 0:478cfd88041f 235 #define s_assert_param(expr) {}
group-Avnet 0:478cfd88041f 236 #endif
group-Avnet 0:478cfd88041f 237
group-Avnet 0:478cfd88041f 238 /**
group-Avnet 0:478cfd88041f 239 * @brief Returns the absolute value.
group-Avnet 0:478cfd88041f 240 */
group-Avnet 0:478cfd88041f 241 #define S_ABS(a) ((a)>0?(a):-(a))
group-Avnet 0:478cfd88041f 242
group-Avnet 0:478cfd88041f 243
group-Avnet 0:478cfd88041f 244 /**
group-Avnet 0:478cfd88041f 245 * @}
group-Avnet 0:478cfd88041f 246 */
group-Avnet 0:478cfd88041f 247
group-Avnet 0:478cfd88041f 248
group-Avnet 0:478cfd88041f 249 /**
group-Avnet 0:478cfd88041f 250 * @defgroup Types_Exported_Functions Types Exported Functions
group-Avnet 0:478cfd88041f 251 * @{
group-Avnet 0:478cfd88041f 252 */
group-Avnet 0:478cfd88041f 253
group-Avnet 0:478cfd88041f 254 void SpiritRefreshStatus(void);
group-Avnet 0:478cfd88041f 255
group-Avnet 0:478cfd88041f 256 /**
group-Avnet 0:478cfd88041f 257 *@}
group-Avnet 0:478cfd88041f 258 */
group-Avnet 0:478cfd88041f 259
group-Avnet 0:478cfd88041f 260 /**
group-Avnet 0:478cfd88041f 261 * @}
group-Avnet 0:478cfd88041f 262 */
group-Avnet 0:478cfd88041f 263
group-Avnet 0:478cfd88041f 264
group-Avnet 0:478cfd88041f 265 /**
group-Avnet 0:478cfd88041f 266 * @}
group-Avnet 0:478cfd88041f 267 */
group-Avnet 0:478cfd88041f 268
group-Avnet 0:478cfd88041f 269
group-Avnet 0:478cfd88041f 270 #ifdef __cplusplus
group-Avnet 0:478cfd88041f 271 }
group-Avnet 0:478cfd88041f 272 #endif
group-Avnet 0:478cfd88041f 273
group-Avnet 0:478cfd88041f 274 #endif
group-Avnet 0:478cfd88041f 275
group-Avnet 0:478cfd88041f 276 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/