NNN50 WIFI_API library

Dependents:   NNN50_CE_Test_UDP NNN50_linux_firmware NNN50_SoftAP_HelloWorld NNN50_BLEWIFISensor ... more

This is mbed compatible EthernetInterface lib exclude for Delta DFCM-NNN50 platform.

Additional information and examples can be found in mbed Handbook

Committer:
tsungta
Date:
Mon Sep 04 05:40:11 2017 +0000
Revision:
32:8298a2fb074f
Parent:
28:2abbf8463fa8
56:f4cc53f; Add getRSSI() to readout RSSI while connected with AP router; Add SSL support refer to TCPSocketConnection.connect()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tsungta 28:2abbf8463fa8 1 /**
tsungta 28:2abbf8463fa8 2 *
tsungta 28:2abbf8463fa8 3 * \file
tsungta 28:2abbf8463fa8 4 *
tsungta 28:2abbf8463fa8 5 * \brief This module contains NMC1000 I2C protocol bus APIs implementation.
tsungta 28:2abbf8463fa8 6 *
tsungta 28:2abbf8463fa8 7 * Copyright (c) 2016 Atmel Corporation. All rights reserved.
tsungta 28:2abbf8463fa8 8 *
tsungta 28:2abbf8463fa8 9 * \asf_license_start
tsungta 28:2abbf8463fa8 10 *
tsungta 28:2abbf8463fa8 11 * \page License
tsungta 28:2abbf8463fa8 12 *
tsungta 28:2abbf8463fa8 13 * Redistribution and use in source and binary forms, with or without
tsungta 28:2abbf8463fa8 14 * modification, are permitted provided that the following conditions are met:
tsungta 28:2abbf8463fa8 15 *
tsungta 28:2abbf8463fa8 16 * 1. Redistributions of source code must retain the above copyright notice,
tsungta 28:2abbf8463fa8 17 * this list of conditions and the following disclaimer.
tsungta 28:2abbf8463fa8 18 *
tsungta 28:2abbf8463fa8 19 * 2. Redistributions in binary form must reproduce the above copyright notice,
tsungta 28:2abbf8463fa8 20 * this list of conditions and the following disclaimer in the documentation
tsungta 28:2abbf8463fa8 21 * and/or other materials provided with the distribution.
tsungta 28:2abbf8463fa8 22 *
tsungta 28:2abbf8463fa8 23 * 3. The name of Atmel may not be used to endorse or promote products derived
tsungta 28:2abbf8463fa8 24 * from this software without specific prior written permission.
tsungta 28:2abbf8463fa8 25 *
tsungta 28:2abbf8463fa8 26 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
tsungta 28:2abbf8463fa8 27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
tsungta 28:2abbf8463fa8 28 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
tsungta 28:2abbf8463fa8 29 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
tsungta 28:2abbf8463fa8 30 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
tsungta 28:2abbf8463fa8 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
tsungta 28:2abbf8463fa8 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
tsungta 28:2abbf8463fa8 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
tsungta 28:2abbf8463fa8 34 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
tsungta 28:2abbf8463fa8 35 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
tsungta 28:2abbf8463fa8 36 * POSSIBILITY OF SUCH DAMAGE.
tsungta 28:2abbf8463fa8 37 *
tsungta 28:2abbf8463fa8 38 * \asf_license_stop
tsungta 28:2abbf8463fa8 39 *
tsungta 28:2abbf8463fa8 40 */
tsungta 28:2abbf8463fa8 41
tsungta 28:2abbf8463fa8 42 #include "common/include/nm_common.h"
tsungta 28:2abbf8463fa8 43
tsungta 28:2abbf8463fa8 44 #ifdef CONF_WINC_USE_I2C
tsungta 28:2abbf8463fa8 45
tsungta 28:2abbf8463fa8 46 #include "nmi2c.h"
tsungta 28:2abbf8463fa8 47 #include "bus_wrapper/include/nm_bus_wrapper.h"
tsungta 28:2abbf8463fa8 48
tsungta 28:2abbf8463fa8 49
tsungta 28:2abbf8463fa8 50 /*
tsungta 28:2abbf8463fa8 51 * @fn nm_i2c_read_reg_with_ret
tsungta 28:2abbf8463fa8 52 * @brief Read register with error code return
tsungta 28:2abbf8463fa8 53 * @param [in] u32Addr
tsungta 28:2abbf8463fa8 54 * Register address
tsungta 28:2abbf8463fa8 55 * @param [out] pu32RetVal
tsungta 28:2abbf8463fa8 56 * Pointer to u32 variable used to return the read value
tsungta 28:2abbf8463fa8 57 * @return M2M_SUCCESS in case of success and M2M_ERR_BUS_FAIL in case of failure
tsungta 28:2abbf8463fa8 58 * @author M. Abdelmawla
tsungta 28:2abbf8463fa8 59 * @date 11 July 2012
tsungta 28:2abbf8463fa8 60 * @version 1.0
tsungta 28:2abbf8463fa8 61 */
tsungta 28:2abbf8463fa8 62 sint8 nm_i2c_read_reg_with_ret(uint32 u32Addr, uint32* pu32RetVal)
tsungta 28:2abbf8463fa8 63 {
tsungta 28:2abbf8463fa8 64 uint8 b[6];
tsungta 28:2abbf8463fa8 65 uint8 rsz;
tsungta 28:2abbf8463fa8 66 tstrNmI2cDefault strI2c;
tsungta 28:2abbf8463fa8 67 sint8 s8Ret = M2M_SUCCESS;
tsungta 28:2abbf8463fa8 68
tsungta 28:2abbf8463fa8 69 if(u32Addr < 0xff) { /* clockless i2c */
tsungta 28:2abbf8463fa8 70 b[0] = 0x09;
tsungta 28:2abbf8463fa8 71 b[1] = (uint8)(u32Addr);
tsungta 28:2abbf8463fa8 72 rsz = 1;
tsungta 28:2abbf8463fa8 73 strI2c.u16Sz = 2;
tsungta 28:2abbf8463fa8 74 } else {
tsungta 28:2abbf8463fa8 75 b[0] = 0x80;
tsungta 28:2abbf8463fa8 76 b[1] = (uint8)(u32Addr >> 24);
tsungta 28:2abbf8463fa8 77 b[2] = (uint8)(u32Addr >> 16);
tsungta 28:2abbf8463fa8 78 b[3] = (uint8)(u32Addr >> 8);
tsungta 28:2abbf8463fa8 79 b[4] = (uint8)(u32Addr);
tsungta 28:2abbf8463fa8 80 b[5] = 0x04;
tsungta 28:2abbf8463fa8 81 rsz = 4;
tsungta 28:2abbf8463fa8 82 strI2c.u16Sz = 6;
tsungta 28:2abbf8463fa8 83 }
tsungta 28:2abbf8463fa8 84
tsungta 28:2abbf8463fa8 85 strI2c.pu8Buf = b;
tsungta 28:2abbf8463fa8 86
tsungta 28:2abbf8463fa8 87 if(M2M_SUCCESS == nm_bus_ioctl(NM_BUS_IOCTL_W, &strI2c))
tsungta 28:2abbf8463fa8 88 {
tsungta 28:2abbf8463fa8 89 strI2c.u16Sz = rsz;
tsungta 28:2abbf8463fa8 90 if(M2M_SUCCESS != nm_bus_ioctl(NM_BUS_IOCTL_R, &strI2c))
tsungta 28:2abbf8463fa8 91 {
tsungta 28:2abbf8463fa8 92 //M2M_ERR("read error\n");
tsungta 28:2abbf8463fa8 93 s8Ret = M2M_ERR_BUS_FAIL;
tsungta 28:2abbf8463fa8 94 }
tsungta 28:2abbf8463fa8 95 }
tsungta 28:2abbf8463fa8 96 else
tsungta 28:2abbf8463fa8 97 {
tsungta 28:2abbf8463fa8 98 M2M_ERR("failed to send cfg bytes\n");
tsungta 28:2abbf8463fa8 99 s8Ret = M2M_ERR_BUS_FAIL;
tsungta 28:2abbf8463fa8 100 }
tsungta 28:2abbf8463fa8 101
tsungta 28:2abbf8463fa8 102 if (rsz == 1) {
tsungta 28:2abbf8463fa8 103 *pu32RetVal = b[0];
tsungta 28:2abbf8463fa8 104 } else {
tsungta 28:2abbf8463fa8 105 *pu32RetVal = b[0] | ((uint32)b[1] << 8) | ((uint32)b[2] << 16) | ((uint32)b[3] << 24);
tsungta 28:2abbf8463fa8 106 }
tsungta 28:2abbf8463fa8 107 return s8Ret;
tsungta 28:2abbf8463fa8 108 }
tsungta 28:2abbf8463fa8 109
tsungta 28:2abbf8463fa8 110 /*
tsungta 28:2abbf8463fa8 111 * @fn nm_i2c_read_reg
tsungta 28:2abbf8463fa8 112 * @brief Read register
tsungta 28:2abbf8463fa8 113 * @param [in] u32Addr
tsungta 28:2abbf8463fa8 114 * Register address
tsungta 28:2abbf8463fa8 115 * @return Register value
tsungta 28:2abbf8463fa8 116 * @author M. Abdelmawla
tsungta 28:2abbf8463fa8 117 * @date 11 July 2012
tsungta 28:2abbf8463fa8 118 * @version 1.0
tsungta 28:2abbf8463fa8 119 */
tsungta 28:2abbf8463fa8 120 uint32 nm_i2c_read_reg(uint32 u32Addr)
tsungta 28:2abbf8463fa8 121 {
tsungta 28:2abbf8463fa8 122 uint32 val;
tsungta 28:2abbf8463fa8 123 nm_i2c_read_reg_with_ret(u32Addr, &val);
tsungta 28:2abbf8463fa8 124 return val;
tsungta 28:2abbf8463fa8 125 }
tsungta 28:2abbf8463fa8 126
tsungta 28:2abbf8463fa8 127 /*
tsungta 28:2abbf8463fa8 128 * @fn nm_i2c_write_reg
tsungta 28:2abbf8463fa8 129 * @brief write register
tsungta 28:2abbf8463fa8 130 * @param [in] u32Addr
tsungta 28:2abbf8463fa8 131 * Register address
tsungta 28:2abbf8463fa8 132 * @param [in] u32Val
tsungta 28:2abbf8463fa8 133 * Value to be written to the register
tsungta 28:2abbf8463fa8 134 * @return M2M_SUCCESS in case of success and M2M_ERR_BUS_FAIL in case of failure
tsungta 28:2abbf8463fa8 135 * @author M. Abdelmawla
tsungta 28:2abbf8463fa8 136 * @date 11 July 2012
tsungta 28:2abbf8463fa8 137 * @version 1.0
tsungta 28:2abbf8463fa8 138 */
tsungta 28:2abbf8463fa8 139 sint8 nm_i2c_write_reg(uint32 u32Addr, uint32 u32Val)
tsungta 28:2abbf8463fa8 140 {
tsungta 28:2abbf8463fa8 141 tstrNmI2cDefault strI2c;
tsungta 28:2abbf8463fa8 142 uint8 b[16];
tsungta 28:2abbf8463fa8 143 sint8 s8Ret = M2M_SUCCESS;
tsungta 28:2abbf8463fa8 144
tsungta 28:2abbf8463fa8 145 if(u32Addr < 0xff) { /* clockless i2c */
tsungta 28:2abbf8463fa8 146 b[0] = 0x19;
tsungta 28:2abbf8463fa8 147 b[1] = (uint8)(u32Addr);
tsungta 28:2abbf8463fa8 148 b[2] = (uint8)(u32Val);
tsungta 28:2abbf8463fa8 149 strI2c.u16Sz = 3;
tsungta 28:2abbf8463fa8 150 } else {
tsungta 28:2abbf8463fa8 151 b[0] = 0x90;
tsungta 28:2abbf8463fa8 152 b[1] = (uint8)(u32Addr >> 24);
tsungta 28:2abbf8463fa8 153 b[2] = (uint8)(u32Addr >> 16);
tsungta 28:2abbf8463fa8 154 b[3] = (uint8)(u32Addr >> 8);
tsungta 28:2abbf8463fa8 155 b[4] = (uint8)u32Addr;
tsungta 28:2abbf8463fa8 156 b[5] = 0x04;
tsungta 28:2abbf8463fa8 157 b[6] = (uint8)u32Val;
tsungta 28:2abbf8463fa8 158 b[7] = (uint8)(u32Val >> 8);
tsungta 28:2abbf8463fa8 159 b[8] = (uint8)(u32Val >> 16);
tsungta 28:2abbf8463fa8 160 b[9] = (uint8)(u32Val >> 24);
tsungta 28:2abbf8463fa8 161 strI2c.u16Sz = 10;
tsungta 28:2abbf8463fa8 162 }
tsungta 28:2abbf8463fa8 163
tsungta 28:2abbf8463fa8 164 strI2c.pu8Buf = b;
tsungta 28:2abbf8463fa8 165
tsungta 28:2abbf8463fa8 166 if(M2M_SUCCESS != nm_bus_ioctl(NM_BUS_IOCTL_W, &strI2c))
tsungta 28:2abbf8463fa8 167 {
tsungta 28:2abbf8463fa8 168 M2M_ERR("write error\n");
tsungta 28:2abbf8463fa8 169 s8Ret = M2M_ERR_BUS_FAIL;
tsungta 28:2abbf8463fa8 170 }
tsungta 28:2abbf8463fa8 171
tsungta 28:2abbf8463fa8 172 return s8Ret;
tsungta 28:2abbf8463fa8 173 }
tsungta 28:2abbf8463fa8 174
tsungta 28:2abbf8463fa8 175 /*
tsungta 28:2abbf8463fa8 176 * @fn nm_i2c_read_block
tsungta 28:2abbf8463fa8 177 * @brief Read block of data
tsungta 28:2abbf8463fa8 178 * @param [in] u32Addr
tsungta 28:2abbf8463fa8 179 * Start address
tsungta 28:2abbf8463fa8 180 * @param [out] puBuf
tsungta 28:2abbf8463fa8 181 * Pointer to a buffer used to return the read data
tsungta 28:2abbf8463fa8 182 * @param [in] u16Sz
tsungta 28:2abbf8463fa8 183 * Number of bytes to read. The buffer size must be >= u16Sz
tsungta 28:2abbf8463fa8 184 * @return M2M_SUCCESS in case of success and M2M_ERR_BUS_FAIL in case of failure
tsungta 28:2abbf8463fa8 185 * @author M. Abdelmawla
tsungta 28:2abbf8463fa8 186 * @date 11 July 2012
tsungta 28:2abbf8463fa8 187 * @version 1.0
tsungta 28:2abbf8463fa8 188 */
tsungta 28:2abbf8463fa8 189 sint8 nm_i2c_read_block(uint32 u32Addr, uint8 *pu8Buf, uint16 u16Sz)
tsungta 28:2abbf8463fa8 190 {
tsungta 28:2abbf8463fa8 191 tstrNmI2cDefault strI2c;
tsungta 28:2abbf8463fa8 192 uint8 au8Buf[7];
tsungta 28:2abbf8463fa8 193 sint8 s8Ret = M2M_SUCCESS;
tsungta 28:2abbf8463fa8 194
tsungta 28:2abbf8463fa8 195 au8Buf[0] = 0x02;
tsungta 28:2abbf8463fa8 196 au8Buf[1] = (uint8)(u32Addr >> 24);
tsungta 28:2abbf8463fa8 197 au8Buf[2] = (uint8)(u32Addr >> 16);
tsungta 28:2abbf8463fa8 198 au8Buf[3] = (uint8)(u32Addr >> 8);
tsungta 28:2abbf8463fa8 199 au8Buf[4] = (uint8)(u32Addr >> 0);
tsungta 28:2abbf8463fa8 200 au8Buf[5] = (uint8)(u16Sz >> 8);
tsungta 28:2abbf8463fa8 201 au8Buf[6] = (uint8)(u16Sz);
tsungta 28:2abbf8463fa8 202
tsungta 28:2abbf8463fa8 203 strI2c.pu8Buf = au8Buf;
tsungta 28:2abbf8463fa8 204 strI2c.u16Sz = sizeof(au8Buf);
tsungta 28:2abbf8463fa8 205
tsungta 28:2abbf8463fa8 206 if(M2M_SUCCESS != nm_bus_ioctl(NM_BUS_IOCTL_W, &strI2c))
tsungta 28:2abbf8463fa8 207 {
tsungta 28:2abbf8463fa8 208 M2M_ERR("write error\n");
tsungta 28:2abbf8463fa8 209 s8Ret = M2M_ERR_BUS_FAIL;
tsungta 28:2abbf8463fa8 210 }
tsungta 28:2abbf8463fa8 211 else
tsungta 28:2abbf8463fa8 212 {
tsungta 28:2abbf8463fa8 213 strI2c.pu8Buf = pu8Buf;
tsungta 28:2abbf8463fa8 214 strI2c.u16Sz = u16Sz;
tsungta 28:2abbf8463fa8 215
tsungta 28:2abbf8463fa8 216 if(M2M_SUCCESS != nm_bus_ioctl(NM_BUS_IOCTL_R, &strI2c))
tsungta 28:2abbf8463fa8 217 {
tsungta 28:2abbf8463fa8 218 M2M_ERR("read error\n");
tsungta 28:2abbf8463fa8 219 s8Ret = M2M_ERR_BUS_FAIL;
tsungta 28:2abbf8463fa8 220 }
tsungta 28:2abbf8463fa8 221 }
tsungta 28:2abbf8463fa8 222
tsungta 28:2abbf8463fa8 223 return s8Ret;
tsungta 28:2abbf8463fa8 224 }
tsungta 28:2abbf8463fa8 225
tsungta 28:2abbf8463fa8 226 /*
tsungta 28:2abbf8463fa8 227 * @fn nm_i2c_write_block
tsungta 28:2abbf8463fa8 228 * @brief Write block of data
tsungta 28:2abbf8463fa8 229 * @param [in] u32Addr
tsungta 28:2abbf8463fa8 230 * Start address
tsungta 28:2abbf8463fa8 231 * @param [in] puBuf
tsungta 28:2abbf8463fa8 232 * Pointer to the buffer holding the data to be written
tsungta 28:2abbf8463fa8 233 * @param [in] u16Sz
tsungta 28:2abbf8463fa8 234 * Number of bytes to write. The buffer size must be >= u16Sz
tsungta 28:2abbf8463fa8 235 * @return M2M_SUCCESS in case of success and M2M_ERR_BUS_FAIL in case of failure
tsungta 28:2abbf8463fa8 236 * @author M. Abdelmawla
tsungta 28:2abbf8463fa8 237 * @date 11 July 2012
tsungta 28:2abbf8463fa8 238 * @version 1.0
tsungta 28:2abbf8463fa8 239 */
tsungta 28:2abbf8463fa8 240 sint8 nm_i2c_write_block(uint32 u32Addr, uint8 *pu8Buf, uint16 u16Sz)
tsungta 28:2abbf8463fa8 241 {
tsungta 28:2abbf8463fa8 242 uint8 au8Buf[7];
tsungta 28:2abbf8463fa8 243 tstrNmI2cSpecial strI2c;
tsungta 28:2abbf8463fa8 244 sint8 s8Ret = M2M_SUCCESS;
tsungta 28:2abbf8463fa8 245
tsungta 28:2abbf8463fa8 246 au8Buf[0] = 0x12;
tsungta 28:2abbf8463fa8 247 au8Buf[1] = (uint8)(u32Addr >> 24);
tsungta 28:2abbf8463fa8 248 au8Buf[2] = (uint8)(u32Addr >> 16);
tsungta 28:2abbf8463fa8 249 au8Buf[3] = (uint8)(u32Addr >> 8);
tsungta 28:2abbf8463fa8 250 au8Buf[4] = (uint8)(u32Addr);
tsungta 28:2abbf8463fa8 251 au8Buf[5] = (uint8)(u16Sz >> 8);
tsungta 28:2abbf8463fa8 252 au8Buf[6] = (uint8)(u16Sz);
tsungta 28:2abbf8463fa8 253
tsungta 28:2abbf8463fa8 254 strI2c.pu8Buf1 = au8Buf;
tsungta 28:2abbf8463fa8 255 strI2c.pu8Buf2 = pu8Buf;
tsungta 28:2abbf8463fa8 256 strI2c.u16Sz1 = sizeof(au8Buf);
tsungta 28:2abbf8463fa8 257 strI2c.u16Sz2 = u16Sz;
tsungta 28:2abbf8463fa8 258
tsungta 28:2abbf8463fa8 259 if(M2M_SUCCESS != nm_bus_ioctl(NM_BUS_IOCTL_W_SPECIAL, &strI2c))
tsungta 28:2abbf8463fa8 260 {
tsungta 28:2abbf8463fa8 261 M2M_ERR("write error\n");
tsungta 28:2abbf8463fa8 262 s8Ret = M2M_ERR_BUS_FAIL;
tsungta 28:2abbf8463fa8 263 }
tsungta 28:2abbf8463fa8 264
tsungta 28:2abbf8463fa8 265 return s8Ret;
tsungta 28:2abbf8463fa8 266 }
tsungta 28:2abbf8463fa8 267
tsungta 28:2abbf8463fa8 268 #endif
tsungta 28:2abbf8463fa8 269 /* EOF */
tsungta 28:2abbf8463fa8 270