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 * Copyright (c) 2012, STMicroelectronics.
group-Avnet 0:478cfd88041f 3 * All rights reserved.
group-Avnet 0:478cfd88041f 4 *
group-Avnet 0:478cfd88041f 5 * Redistribution and use in source and binary forms, with or without
group-Avnet 0:478cfd88041f 6 * modification, are permitted provided that the following conditions
group-Avnet 0:478cfd88041f 7 * are met:
group-Avnet 0:478cfd88041f 8 * 1. Redistributions of source code must retain the above copyright
group-Avnet 0:478cfd88041f 9 * notice, this list of conditions and the following disclaimer.
group-Avnet 0:478cfd88041f 10 * 2. Redistributions in binary form must reproduce the above copyright
group-Avnet 0:478cfd88041f 11 * notice, this list of conditions and the following disclaimer in the
group-Avnet 0:478cfd88041f 12 * documentation and/or other materials provided with the distribution.
group-Avnet 0:478cfd88041f 13 * 3. Neither the name of the Institute nor the names of its contributors
group-Avnet 0:478cfd88041f 14 * may be used to endorse or promote products derived from this software
group-Avnet 0:478cfd88041f 15 * without specific prior written permission.
group-Avnet 0:478cfd88041f 16 *
group-Avnet 0:478cfd88041f 17 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
group-Avnet 0:478cfd88041f 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
group-Avnet 0:478cfd88041f 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
group-Avnet 0:478cfd88041f 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
group-Avnet 0:478cfd88041f 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
group-Avnet 0:478cfd88041f 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
group-Avnet 0:478cfd88041f 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
group-Avnet 0:478cfd88041f 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
group-Avnet 0:478cfd88041f 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
group-Avnet 0:478cfd88041f 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
group-Avnet 0:478cfd88041f 27 * SUCH DAMAGE.
group-Avnet 0:478cfd88041f 28 *
group-Avnet 0:478cfd88041f 29 * This file is part of the Contiki operating system.
group-Avnet 0:478cfd88041f 30 *
group-Avnet 0:478cfd88041f 31 */
group-Avnet 0:478cfd88041f 32 /*---------------------------------------------------------------------------*/
group-Avnet 0:478cfd88041f 33 #ifndef __SPIRIT_H__
group-Avnet 0:478cfd88041f 34 #define __SPIRIT_H__
group-Avnet 0:478cfd88041f 35 /*---------------------------------------------------------------------------*/
group-Avnet 0:478cfd88041f 36 #include "radio.h"
group-Avnet 0:478cfd88041f 37 #include "SPIRIT_Config.h"
group-Avnet 0:478cfd88041f 38 #include "spirit1-config.h"
group-Avnet 0:478cfd88041f 39 //#include "spirit1_appli.h"
group-Avnet 0:478cfd88041f 40 #include "spirit1-const.h"
group-Avnet 0:478cfd88041f 41 /*---------------------------------------------------------------------------*/
group-Avnet 0:478cfd88041f 42 extern const struct radio_driver spirit_radio_driver;
group-Avnet 0:478cfd88041f 43 void spirit1_interrupt_callback(void);
group-Avnet 0:478cfd88041f 44
group-Avnet 0:478cfd88041f 45 /* exported from spirit1appli.h */
group-Avnet 0:478cfd88041f 46
group-Avnet 0:478cfd88041f 47 #include "radio_shield_config.h"
group-Avnet 0:478cfd88041f 48 #include "MCU_Interface.h"
group-Avnet 0:478cfd88041f 49 #include "SPIRIT_Config.h"
group-Avnet 0:478cfd88041f 50 // betzw - WAS: #include "SPIRIT1_Util.h"
group-Avnet 0:478cfd88041f 51
group-Avnet 0:478cfd88041f 52
group-Avnet 0:478cfd88041f 53 #if defined(X_NUCLEO_IDS01A3)
group-Avnet 0:478cfd88041f 54 #define USE_SPIRIT1_433MHz
group-Avnet 0:478cfd88041f 55 #elif defined(X_NUCLEO_IDS01A4)
group-Avnet 0:478cfd88041f 56 #define USE_SPIRIT1_868MHz
group-Avnet 0:478cfd88041f 57 #elif defined(X_NUCLEO_IDS01A5)
group-Avnet 0:478cfd88041f 58 #define USE_SPIRIT1_915MHz
group-Avnet 0:478cfd88041f 59 #else
group-Avnet 0:478cfd88041f 60 #error SPIRIT1 Nucleo Shield undefined or unsupported
group-Avnet 0:478cfd88041f 61 #endif
group-Avnet 0:478cfd88041f 62
group-Avnet 0:478cfd88041f 63 /* Uncomment the Link Layer features to be used */
group-Avnet 0:478cfd88041f 64 // #define USE_AUTO_ACK
group-Avnet 0:478cfd88041f 65 // #define USE_AUTO_ACK_PIGGYBACKING
group-Avnet 0:478cfd88041f 66 // #define USE_AUTO_RETRANSMISSION
group-Avnet 0:478cfd88041f 67
group-Avnet 0:478cfd88041f 68 #if defined(USE_AUTO_ACK)&& defined(USE_AUTO_ACK_PIGGYBACKING)&& defined(USE_AUTO_RETRANSMISSION)
group-Avnet 0:478cfd88041f 69 #define USE_STack_PROTOCOL
group-Avnet 0:478cfd88041f 70
group-Avnet 0:478cfd88041f 71 /* LLP configuration parameters */
group-Avnet 0:478cfd88041f 72 #define EN_AUTOACK S_ENABLE
group-Avnet 0:478cfd88041f 73 #define EN_PIGGYBACKING S_ENABLE
group-Avnet 0:478cfd88041f 74 #define MAX_RETRANSMISSIONS PKT_N_RETX_2
group-Avnet 0:478cfd88041f 75
group-Avnet 0:478cfd88041f 76 #else
group-Avnet 0:478cfd88041f 77 #define USE_BASIC_PROTOCOL
group-Avnet 0:478cfd88041f 78
group-Avnet 0:478cfd88041f 79 #endif
group-Avnet 0:478cfd88041f 80
group-Avnet 0:478cfd88041f 81 /* Uncomment the system Operating mode */
group-Avnet 0:478cfd88041f 82 //#define USE_LOW_POWER_MODE
group-Avnet 0:478cfd88041f 83
group-Avnet 0:478cfd88041f 84 #if defined (USE_LOW_POWER_MODE)
group-Avnet 0:478cfd88041f 85 #define LPM_ENABLE
group-Avnet 0:478cfd88041f 86 #define MCU_STOP_MODE
group-Avnet 0:478cfd88041f 87 //#define MCU_SLEEP_MODE
group-Avnet 0:478cfd88041f 88 //#define RF_STANDBY
group-Avnet 0:478cfd88041f 89 #endif
group-Avnet 0:478cfd88041f 90
group-Avnet 0:478cfd88041f 91
group-Avnet 0:478cfd88041f 92 /* Exported constants --------------------------------------------------------*/
group-Avnet 0:478cfd88041f 93
group-Avnet 0:478cfd88041f 94 /* Radio configuration parameters */
group-Avnet 0:478cfd88041f 95 #define XTAL_OFFSET_PPM 0
group-Avnet 0:478cfd88041f 96 #define INFINITE_TIMEOUT 0.0
group-Avnet 0:478cfd88041f 97
group-Avnet 0:478cfd88041f 98 #ifdef USE_SPIRIT1_433MHz
group-Avnet 0:478cfd88041f 99 #define BASE_FREQUENCY 433.0e6
group-Avnet 0:478cfd88041f 100 #endif
group-Avnet 0:478cfd88041f 101
group-Avnet 0:478cfd88041f 102 #ifdef USE_SPIRIT1_868MHz
group-Avnet 0:478cfd88041f 103 #define BASE_FREQUENCY 868.0e6
group-Avnet 0:478cfd88041f 104 #endif
group-Avnet 0:478cfd88041f 105
group-Avnet 0:478cfd88041f 106 #ifdef USE_SPIRIT1_915MHz
group-Avnet 0:478cfd88041f 107 //#define BASE_FREQUENCY 915.0e6
group-Avnet 0:478cfd88041f 108 #define BASE_FREQUENCY 902.0e6
group-Avnet 0:478cfd88041f 109 #endif
group-Avnet 0:478cfd88041f 110
group-Avnet 0:478cfd88041f 111
group-Avnet 0:478cfd88041f 112 /* Addresses configuration parameters */
group-Avnet 0:478cfd88041f 113 #define EN_FILT_MY_ADDRESS S_DISABLE
group-Avnet 0:478cfd88041f 114 #define MY_ADDRESS 0x24
group-Avnet 0:478cfd88041f 115 #define EN_FILT_MULTICAST_ADDRESS S_DISABLE
group-Avnet 0:478cfd88041f 116 #define MULTICAST_ADDRESS 0xEE
group-Avnet 0:478cfd88041f 117 #define EN_FILT_BROADCAST_ADDRESS S_DISABLE
group-Avnet 0:478cfd88041f 118 #define BROADCAST_ADDRESS 0xFF
group-Avnet 0:478cfd88041f 119 #define DESTINATION_ADDRESS 0x44
group-Avnet 0:478cfd88041f 120 #define EN_FILT_SOURCE_ADDRESS S_DISABLE
group-Avnet 0:478cfd88041f 121 #define SOURCE_ADDR_MASK 0xf0
group-Avnet 0:478cfd88041f 122 #define SOURCE_ADDR_REF 0x37
group-Avnet 0:478cfd88041f 123
group-Avnet 0:478cfd88041f 124 #define APPLI_CMD 0x11
group-Avnet 0:478cfd88041f 125 #define NWK_CMD 0x22
group-Avnet 0:478cfd88041f 126 #define LED_TOGGLE 0xff
group-Avnet 0:478cfd88041f 127 #define ACK_OK 0x01
group-Avnet 0:478cfd88041f 128 #define MAX_BUFFER_LEN 96
group-Avnet 0:478cfd88041f 129 #define TIME_TO_EXIT_RX 3000
group-Avnet 0:478cfd88041f 130 #define DELAY_RX_LED_TOGGLE 200
group-Avnet 0:478cfd88041f 131 #define DELAY_TX_LED_GLOW 1000
group-Avnet 0:478cfd88041f 132 #define LPM_WAKEUP_TIME 100
group-Avnet 0:478cfd88041f 133 #define DATA_SEND_TIME 30
group-Avnet 0:478cfd88041f 134
group-Avnet 0:478cfd88041f 135 #define PREAMBLE_LENGTH PKT_PREAMBLE_LENGTH_04BYTES
group-Avnet 0:478cfd88041f 136 #define SYNC_LENGTH PKT_SYNC_LENGTH_4BYTES
group-Avnet 0:478cfd88041f 137 #define CONTROL_LENGTH PKT_CONTROL_LENGTH_0BYTES
group-Avnet 0:478cfd88041f 138 #define EN_ADDRESS S_DISABLE
group-Avnet 0:478cfd88041f 139 #define EN_FEC S_DISABLE
group-Avnet 0:478cfd88041f 140 #define CHANNEL_NUMBER 1 // betzw - WAS: 0
group-Avnet 0:478cfd88041f 141 #define LENGTH_TYPE PKT_LENGTH_VAR
group-Avnet 0:478cfd88041f 142 #define POWER_INDEX 7
group-Avnet 0:478cfd88041f 143 #define RECEIVE_TIMEOUT 2000.0 /*change the value for required timeout period*/
group-Avnet 0:478cfd88041f 144 #define RSSI_THRESHOLD -120
group-Avnet 0:478cfd88041f 145
group-Avnet 0:478cfd88041f 146
group-Avnet 0:478cfd88041f 147
group-Avnet 0:478cfd88041f 148 #define POWER_DBM 11.6
group-Avnet 0:478cfd88041f 149 #define CHANNEL_SPACE 100e3
group-Avnet 0:478cfd88041f 150 #define FREQ_DEVIATION 127e3
group-Avnet 0:478cfd88041f 151 #define BANDWIDTH 540.0e3
group-Avnet 0:478cfd88041f 152 #define MODULATION_SELECT GFSK_BT1
group-Avnet 0:478cfd88041f 153 #define DATARATE 250000
group-Avnet 0:478cfd88041f 154 #define XTAL_OFFSET_PPM 0
group-Avnet 0:478cfd88041f 155 #define SYNC_WORD 0x88888888
group-Avnet 0:478cfd88041f 156 #define LENGTH_WIDTH 8 // betzw - NOTE: only 255 bytes for payload!!!
group-Avnet 0:478cfd88041f 157 #define CRC_MODE PKT_CRC_MODE_16BITS_2
group-Avnet 0:478cfd88041f 158 #define EN_WHITENING S_DISABLE
group-Avnet 0:478cfd88041f 159 #define INFINITE_TIMEOUT 0.0
group-Avnet 0:478cfd88041f 160
group-Avnet 0:478cfd88041f 161 // extern volatile FlagStatus xRxDoneFlag, xTxDoneFlag;
group-Avnet 0:478cfd88041f 162 // extern volatile FlagStatus PushButtonStatusWakeup;
group-Avnet 0:478cfd88041f 163 extern uint16_t wakeupCounter;
group-Avnet 0:478cfd88041f 164 extern uint16_t dataSendCounter ;
group-Avnet 0:478cfd88041f 165 // extern volatile FlagStatus PushButtonStatusData, datasendFlag;
group-Avnet 0:478cfd88041f 166
group-Avnet 0:478cfd88041f 167 typedef struct
group-Avnet 0:478cfd88041f 168 {
group-Avnet 0:478cfd88041f 169 uint8_t Cmdtag;
group-Avnet 0:478cfd88041f 170 uint8_t CmdType;
group-Avnet 0:478cfd88041f 171 uint8_t CmdLen;
group-Avnet 0:478cfd88041f 172 uint8_t Cmd;
group-Avnet 0:478cfd88041f 173 uint8_t DataLen;
group-Avnet 0:478cfd88041f 174 uint8_t* DataBuff;
group-Avnet 0:478cfd88041f 175 }AppliFrame_t;
group-Avnet 0:478cfd88041f 176
group-Avnet 0:478cfd88041f 177 /*---------------------------------------------------------------------------*/
group-Avnet 0:478cfd88041f 178 #endif /* __SPIRIT_H__ */
group-Avnet 0:478cfd88041f 179 /*---------------------------------------------------------------------------*/