CC3000HostDriver for device TI CC3000 some changes were made due to mbed compiler and the use of void*
nvmem.cpp@0:9cb694f00b7b, 2013-08-02 (annotated)
- Committer:
- dflet
- Date:
- Fri Aug 02 15:06:15 2013 +0000
- Revision:
- 0:9cb694f00b7b
First commit TI CC3000HostDriver library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dflet | 0:9cb694f00b7b | 1 | /***************************************************************************** |
dflet | 0:9cb694f00b7b | 2 | * |
dflet | 0:9cb694f00b7b | 3 | * nvmem.c - CC3000 Host Driver Implementation. |
dflet | 0:9cb694f00b7b | 4 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ |
dflet | 0:9cb694f00b7b | 5 | * |
dflet | 0:9cb694f00b7b | 6 | * Redistribution and use in source and binary forms, with or without |
dflet | 0:9cb694f00b7b | 7 | * modification, are permitted provided that the following conditions |
dflet | 0:9cb694f00b7b | 8 | * are met: |
dflet | 0:9cb694f00b7b | 9 | * |
dflet | 0:9cb694f00b7b | 10 | * Redistributions of source code must retain the above copyright |
dflet | 0:9cb694f00b7b | 11 | * notice, this list of conditions and the following disclaimer. |
dflet | 0:9cb694f00b7b | 12 | * |
dflet | 0:9cb694f00b7b | 13 | * Redistributions in binary form must reproduce the above copyright |
dflet | 0:9cb694f00b7b | 14 | * notice, this list of conditions and the following disclaimer in the |
dflet | 0:9cb694f00b7b | 15 | * documentation and/or other materials provided with the |
dflet | 0:9cb694f00b7b | 16 | * distribution. |
dflet | 0:9cb694f00b7b | 17 | * |
dflet | 0:9cb694f00b7b | 18 | * Neither the name of Texas Instruments Incorporated nor the names of |
dflet | 0:9cb694f00b7b | 19 | * its contributors may be used to endorse or promote products derived |
dflet | 0:9cb694f00b7b | 20 | * from this software without specific prior written permission. |
dflet | 0:9cb694f00b7b | 21 | * |
dflet | 0:9cb694f00b7b | 22 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
dflet | 0:9cb694f00b7b | 23 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
dflet | 0:9cb694f00b7b | 24 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
dflet | 0:9cb694f00b7b | 25 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
dflet | 0:9cb694f00b7b | 26 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
dflet | 0:9cb694f00b7b | 27 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
dflet | 0:9cb694f00b7b | 28 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
dflet | 0:9cb694f00b7b | 29 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
dflet | 0:9cb694f00b7b | 30 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
dflet | 0:9cb694f00b7b | 31 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
dflet | 0:9cb694f00b7b | 32 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
dflet | 0:9cb694f00b7b | 33 | * |
dflet | 0:9cb694f00b7b | 34 | *****************************************************************************/ |
dflet | 0:9cb694f00b7b | 35 | |
dflet | 0:9cb694f00b7b | 36 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 37 | // |
dflet | 0:9cb694f00b7b | 38 | //! \addtogroup nvmem_api |
dflet | 0:9cb694f00b7b | 39 | //! @{ |
dflet | 0:9cb694f00b7b | 40 | // |
dflet | 0:9cb694f00b7b | 41 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 42 | |
dflet | 0:9cb694f00b7b | 43 | #include <stdio.h> |
dflet | 0:9cb694f00b7b | 44 | #include <string.h> |
dflet | 0:9cb694f00b7b | 45 | #include "nvmem.h" |
dflet | 0:9cb694f00b7b | 46 | #include "hci.h" |
dflet | 0:9cb694f00b7b | 47 | #include "socket.h" |
dflet | 0:9cb694f00b7b | 48 | #include "evnt_handler.h" |
dflet | 0:9cb694f00b7b | 49 | |
dflet | 0:9cb694f00b7b | 50 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 51 | // |
dflet | 0:9cb694f00b7b | 52 | // Prototypes for the structures for APIs. |
dflet | 0:9cb694f00b7b | 53 | // |
dflet | 0:9cb694f00b7b | 54 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 55 | |
dflet | 0:9cb694f00b7b | 56 | #define NVMEM_READ_PARAMS_LEN (12) |
dflet | 0:9cb694f00b7b | 57 | #define NVMEM_CREATE_PARAMS_LEN (8) |
dflet | 0:9cb694f00b7b | 58 | #define NVMEM_WRITE_PARAMS_LEN (16) |
dflet | 0:9cb694f00b7b | 59 | |
dflet | 0:9cb694f00b7b | 60 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 61 | // |
dflet | 0:9cb694f00b7b | 62 | //! nvmem_read |
dflet | 0:9cb694f00b7b | 63 | //! |
dflet | 0:9cb694f00b7b | 64 | //! @param ulFileId nvmem file id:\n |
dflet | 0:9cb694f00b7b | 65 | //! NVMEM_NVS_FILEID, NVMEM_NVS_SHADOW_FILEID, |
dflet | 0:9cb694f00b7b | 66 | //! NVMEM_WLAN_CONFIG_FILEID, NVMEM_WLAN_CONFIG_SHADOW_FILEID, |
dflet | 0:9cb694f00b7b | 67 | //! NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, |
dflet | 0:9cb694f00b7b | 68 | //! NVMEM_MAC_FILEID, NVMEM_FRONTEND_VARS_FILEID, |
dflet | 0:9cb694f00b7b | 69 | //! NVMEM_IP_CONFIG_FILEID, NVMEM_IP_CONFIG_SHADOW_FILEID, |
dflet | 0:9cb694f00b7b | 70 | //! NVMEM_BOOTLOADER_SP_FILEID, NVMEM_RM_FILEID, |
dflet | 0:9cb694f00b7b | 71 | //! and user files 12-15. |
dflet | 0:9cb694f00b7b | 72 | //! @param ulLength number of bytes to read |
dflet | 0:9cb694f00b7b | 73 | //! @param ulOffset ulOffset in file from where to read |
dflet | 0:9cb694f00b7b | 74 | //! @param buff output buffer pointer |
dflet | 0:9cb694f00b7b | 75 | //! |
dflet | 0:9cb694f00b7b | 76 | //! @return number of bytes read, otherwise error. |
dflet | 0:9cb694f00b7b | 77 | //! |
dflet | 0:9cb694f00b7b | 78 | //! @brief Reads data from the file referred by the ulFileId parameter. |
dflet | 0:9cb694f00b7b | 79 | //! Reads data from file ulOffset till length. Err if the file can't |
dflet | 0:9cb694f00b7b | 80 | //! be used, is invalid, or if the read is out of bounds. |
dflet | 0:9cb694f00b7b | 81 | //! |
dflet | 0:9cb694f00b7b | 82 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 83 | |
dflet | 0:9cb694f00b7b | 84 | signed long |
dflet | 0:9cb694f00b7b | 85 | nvmem_read(unsigned long ulFileId, unsigned long ulLength, unsigned long ulOffset, unsigned char *buff) |
dflet | 0:9cb694f00b7b | 86 | { |
dflet | 0:9cb694f00b7b | 87 | unsigned char ucStatus = 0xFF; |
dflet | 0:9cb694f00b7b | 88 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 89 | unsigned char *args; |
dflet | 0:9cb694f00b7b | 90 | |
dflet | 0:9cb694f00b7b | 91 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 92 | args = (ptr + HEADERS_SIZE_CMD); |
dflet | 0:9cb694f00b7b | 93 | |
dflet | 0:9cb694f00b7b | 94 | // Fill in HCI packet structure |
dflet | 0:9cb694f00b7b | 95 | args = UINT32_TO_STREAM(args, ulFileId); |
dflet | 0:9cb694f00b7b | 96 | args = UINT32_TO_STREAM(args, ulLength); |
dflet | 0:9cb694f00b7b | 97 | args = UINT32_TO_STREAM(args, ulOffset); |
dflet | 0:9cb694f00b7b | 98 | |
dflet | 0:9cb694f00b7b | 99 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 100 | hci_command_send(HCI_CMND_NVMEM_READ, ptr, NVMEM_READ_PARAMS_LEN); |
dflet | 0:9cb694f00b7b | 101 | SimpleLinkWaitEvent(HCI_CMND_NVMEM_READ, (long*)&ucStatus); |
dflet | 0:9cb694f00b7b | 102 | |
dflet | 0:9cb694f00b7b | 103 | // In case there is data - read it - even if an error code is returned |
dflet | 0:9cb694f00b7b | 104 | // Note: It is the user responsibility to ignore the data in case of an error code |
dflet | 0:9cb694f00b7b | 105 | |
dflet | 0:9cb694f00b7b | 106 | // Wait for the data in a synchronous way. Here we assume that the buffer is |
dflet | 0:9cb694f00b7b | 107 | // big enough to store also parameters of nvmem |
dflet | 0:9cb694f00b7b | 108 | |
dflet | 0:9cb694f00b7b | 109 | SimpleLinkWaitData(buff, 0, 0); |
dflet | 0:9cb694f00b7b | 110 | |
dflet | 0:9cb694f00b7b | 111 | return(ucStatus); |
dflet | 0:9cb694f00b7b | 112 | } |
dflet | 0:9cb694f00b7b | 113 | |
dflet | 0:9cb694f00b7b | 114 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 115 | // |
dflet | 0:9cb694f00b7b | 116 | //! nvmem_write |
dflet | 0:9cb694f00b7b | 117 | //! |
dflet | 0:9cb694f00b7b | 118 | //! @param ulFileId nvmem file id:\n |
dflet | 0:9cb694f00b7b | 119 | //! NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, |
dflet | 0:9cb694f00b7b | 120 | //! NVMEM_MAC_FILEID, NVMEM_BOOTLOADER_SP_FILEID, |
dflet | 0:9cb694f00b7b | 121 | //! and user files 12-15. |
dflet | 0:9cb694f00b7b | 122 | //! @param ulLength number of bytes to write |
dflet | 0:9cb694f00b7b | 123 | //! @param ulEntryOffset offset in file to start write operation from |
dflet | 0:9cb694f00b7b | 124 | //! @param buff data to write |
dflet | 0:9cb694f00b7b | 125 | //! |
dflet | 0:9cb694f00b7b | 126 | //! @return on success 0, error otherwise. |
dflet | 0:9cb694f00b7b | 127 | //! |
dflet | 0:9cb694f00b7b | 128 | //! @brief Write data to nvmem. |
dflet | 0:9cb694f00b7b | 129 | //! writes data to file referred by the ulFileId parameter. |
dflet | 0:9cb694f00b7b | 130 | //! Writes data to file ulOffset till ulLength.The file id will be |
dflet | 0:9cb694f00b7b | 131 | //! marked invalid till the write is done. The file entry doesn't |
dflet | 0:9cb694f00b7b | 132 | //! need to be valid - only allocated. |
dflet | 0:9cb694f00b7b | 133 | //! |
dflet | 0:9cb694f00b7b | 134 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 135 | |
dflet | 0:9cb694f00b7b | 136 | signed long |
dflet | 0:9cb694f00b7b | 137 | nvmem_write(unsigned long ulFileId, unsigned long ulLength, unsigned long |
dflet | 0:9cb694f00b7b | 138 | ulEntryOffset, unsigned char *buff) |
dflet | 0:9cb694f00b7b | 139 | { |
dflet | 0:9cb694f00b7b | 140 | long iRes; |
dflet | 0:9cb694f00b7b | 141 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 142 | unsigned char *args; |
dflet | 0:9cb694f00b7b | 143 | |
dflet | 0:9cb694f00b7b | 144 | iRes = EFAIL; |
dflet | 0:9cb694f00b7b | 145 | |
dflet | 0:9cb694f00b7b | 146 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 147 | args = (ptr + SPI_HEADER_SIZE + HCI_DATA_CMD_HEADER_SIZE); |
dflet | 0:9cb694f00b7b | 148 | |
dflet | 0:9cb694f00b7b | 149 | // Fill in HCI packet structure |
dflet | 0:9cb694f00b7b | 150 | args = UINT32_TO_STREAM(args, ulFileId); |
dflet | 0:9cb694f00b7b | 151 | args = UINT32_TO_STREAM(args, 12); |
dflet | 0:9cb694f00b7b | 152 | args = UINT32_TO_STREAM(args, ulLength); |
dflet | 0:9cb694f00b7b | 153 | args = UINT32_TO_STREAM(args, ulEntryOffset); |
dflet | 0:9cb694f00b7b | 154 | |
dflet | 0:9cb694f00b7b | 155 | memcpy((ptr + SPI_HEADER_SIZE + HCI_DATA_CMD_HEADER_SIZE + NVMEM_WRITE_PARAMS_LEN),buff,ulLength); |
dflet | 0:9cb694f00b7b | 156 | |
dflet | 0:9cb694f00b7b | 157 | // Initiate a HCI command but it will come on data channel |
dflet | 0:9cb694f00b7b | 158 | hci_data_command_send(HCI_CMND_NVMEM_WRITE, ptr, NVMEM_WRITE_PARAMS_LEN, ulLength); |
dflet | 0:9cb694f00b7b | 159 | |
dflet | 0:9cb694f00b7b | 160 | SimpleLinkWaitEvent(HCI_EVNT_NVMEM_WRITE, &iRes); |
dflet | 0:9cb694f00b7b | 161 | |
dflet | 0:9cb694f00b7b | 162 | return(iRes); |
dflet | 0:9cb694f00b7b | 163 | } |
dflet | 0:9cb694f00b7b | 164 | |
dflet | 0:9cb694f00b7b | 165 | |
dflet | 0:9cb694f00b7b | 166 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 167 | // |
dflet | 0:9cb694f00b7b | 168 | //! nvmem_set_mac_address |
dflet | 0:9cb694f00b7b | 169 | //! |
dflet | 0:9cb694f00b7b | 170 | //! @param mac mac address to be set |
dflet | 0:9cb694f00b7b | 171 | //! |
dflet | 0:9cb694f00b7b | 172 | //! @return on success 0, error otherwise. |
dflet | 0:9cb694f00b7b | 173 | //! |
dflet | 0:9cb694f00b7b | 174 | //! @brief Write MAC address to EEPROM. |
dflet | 0:9cb694f00b7b | 175 | //! mac address as appears over the air (OUI first) |
dflet | 0:9cb694f00b7b | 176 | //! |
dflet | 0:9cb694f00b7b | 177 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 178 | |
dflet | 0:9cb694f00b7b | 179 | unsigned char nvmem_set_mac_address(unsigned char *mac) |
dflet | 0:9cb694f00b7b | 180 | { |
dflet | 0:9cb694f00b7b | 181 | return nvmem_write(NVMEM_MAC_FILEID, MAC_ADDR_LEN, 0, mac); |
dflet | 0:9cb694f00b7b | 182 | } |
dflet | 0:9cb694f00b7b | 183 | |
dflet | 0:9cb694f00b7b | 184 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 185 | // |
dflet | 0:9cb694f00b7b | 186 | //! nvmem_get_mac_address |
dflet | 0:9cb694f00b7b | 187 | //! |
dflet | 0:9cb694f00b7b | 188 | //! @param[out] mac mac address |
dflet | 0:9cb694f00b7b | 189 | //! |
dflet | 0:9cb694f00b7b | 190 | //! @return on success 0, error otherwise. |
dflet | 0:9cb694f00b7b | 191 | //! |
dflet | 0:9cb694f00b7b | 192 | //! @brief Read MAC address from EEPROM. |
dflet | 0:9cb694f00b7b | 193 | //! mac address as appears over the air (OUI first) |
dflet | 0:9cb694f00b7b | 194 | //! |
dflet | 0:9cb694f00b7b | 195 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 196 | |
dflet | 0:9cb694f00b7b | 197 | unsigned char nvmem_get_mac_address(unsigned char *mac) |
dflet | 0:9cb694f00b7b | 198 | { |
dflet | 0:9cb694f00b7b | 199 | return nvmem_read(NVMEM_MAC_FILEID, MAC_ADDR_LEN, 0, mac); |
dflet | 0:9cb694f00b7b | 200 | } |
dflet | 0:9cb694f00b7b | 201 | |
dflet | 0:9cb694f00b7b | 202 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 203 | // |
dflet | 0:9cb694f00b7b | 204 | //! nvmem_write_patch |
dflet | 0:9cb694f00b7b | 205 | //! |
dflet | 0:9cb694f00b7b | 206 | //! @param ulFileId nvmem file id:\n |
dflet | 0:9cb694f00b7b | 207 | //! NVMEM_WLAN_DRIVER_SP_FILEID, NVMEM_WLAN_FW_SP_FILEID, |
dflet | 0:9cb694f00b7b | 208 | //! @param spLength number of bytes to write |
dflet | 0:9cb694f00b7b | 209 | //! @param spData SP data to write |
dflet | 0:9cb694f00b7b | 210 | //! |
dflet | 0:9cb694f00b7b | 211 | //! @return on success 0, error otherwise. |
dflet | 0:9cb694f00b7b | 212 | //! |
dflet | 0:9cb694f00b7b | 213 | //! @brief program a patch to a specific file ID. |
dflet | 0:9cb694f00b7b | 214 | //! The SP data is assumed to be organized in 2-dimensional. |
dflet | 0:9cb694f00b7b | 215 | //! Each line is SP_PORTION_SIZE bytes long. Actual programming is |
dflet | 0:9cb694f00b7b | 216 | //! applied in SP_PORTION_SIZE bytes portions. |
dflet | 0:9cb694f00b7b | 217 | //! |
dflet | 0:9cb694f00b7b | 218 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 219 | |
dflet | 0:9cb694f00b7b | 220 | unsigned char nvmem_write_patch(unsigned long ulFileId, unsigned long spLength, const unsigned char *spData) |
dflet | 0:9cb694f00b7b | 221 | { |
dflet | 0:9cb694f00b7b | 222 | unsigned char status = 0; |
dflet | 0:9cb694f00b7b | 223 | unsigned short offset = 0; |
dflet | 0:9cb694f00b7b | 224 | unsigned char* spDataPtr = (unsigned char*)spData; |
dflet | 0:9cb694f00b7b | 225 | |
dflet | 0:9cb694f00b7b | 226 | while ((status == 0) && (spLength >= SP_PORTION_SIZE)) |
dflet | 0:9cb694f00b7b | 227 | { |
dflet | 0:9cb694f00b7b | 228 | status = nvmem_write(ulFileId, SP_PORTION_SIZE, offset, spDataPtr); |
dflet | 0:9cb694f00b7b | 229 | offset += SP_PORTION_SIZE; |
dflet | 0:9cb694f00b7b | 230 | spLength -= SP_PORTION_SIZE; |
dflet | 0:9cb694f00b7b | 231 | spDataPtr += SP_PORTION_SIZE; |
dflet | 0:9cb694f00b7b | 232 | } |
dflet | 0:9cb694f00b7b | 233 | |
dflet | 0:9cb694f00b7b | 234 | if (status !=0) |
dflet | 0:9cb694f00b7b | 235 | { |
dflet | 0:9cb694f00b7b | 236 | // NVMEM error occurred |
dflet | 0:9cb694f00b7b | 237 | return status; |
dflet | 0:9cb694f00b7b | 238 | } |
dflet | 0:9cb694f00b7b | 239 | |
dflet | 0:9cb694f00b7b | 240 | if (spLength != 0) |
dflet | 0:9cb694f00b7b | 241 | { |
dflet | 0:9cb694f00b7b | 242 | // if reached here, a reminder is left |
dflet | 0:9cb694f00b7b | 243 | status = nvmem_write(ulFileId, spLength, offset, spDataPtr); |
dflet | 0:9cb694f00b7b | 244 | } |
dflet | 0:9cb694f00b7b | 245 | |
dflet | 0:9cb694f00b7b | 246 | return status; |
dflet | 0:9cb694f00b7b | 247 | } |
dflet | 0:9cb694f00b7b | 248 | |
dflet | 0:9cb694f00b7b | 249 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 250 | // |
dflet | 0:9cb694f00b7b | 251 | //! nvmem_read_sp_version |
dflet | 0:9cb694f00b7b | 252 | //! |
dflet | 0:9cb694f00b7b | 253 | //! @param[out] patchVer first number indicates package ID and the second |
dflet | 0:9cb694f00b7b | 254 | //! number indicates package build number |
dflet | 0:9cb694f00b7b | 255 | //! |
dflet | 0:9cb694f00b7b | 256 | //! @return on success 0, error otherwise. |
dflet | 0:9cb694f00b7b | 257 | //! |
dflet | 0:9cb694f00b7b | 258 | //! @brief Read patch version. read package version (WiFi FW patch, |
dflet | 0:9cb694f00b7b | 259 | //! driver-supplicant-NS patch, bootloader patch) |
dflet | 0:9cb694f00b7b | 260 | //! |
dflet | 0:9cb694f00b7b | 261 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 262 | |
dflet | 0:9cb694f00b7b | 263 | #ifndef CC3000_TINY_DRIVER |
dflet | 0:9cb694f00b7b | 264 | unsigned char nvmem_read_sp_version(unsigned char* patchVer) |
dflet | 0:9cb694f00b7b | 265 | { |
dflet | 0:9cb694f00b7b | 266 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 267 | // 1st byte is the status and the rest is the SP version |
dflet | 0:9cb694f00b7b | 268 | unsigned char retBuf[5]; |
dflet | 0:9cb694f00b7b | 269 | |
dflet | 0:9cb694f00b7b | 270 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 271 | |
dflet | 0:9cb694f00b7b | 272 | // Initiate a HCI command, no args are required |
dflet | 0:9cb694f00b7b | 273 | hci_command_send(HCI_CMND_READ_SP_VERSION, ptr, 0); |
dflet | 0:9cb694f00b7b | 274 | SimpleLinkWaitEvent(HCI_CMND_READ_SP_VERSION, (long*)retBuf); |
dflet | 0:9cb694f00b7b | 275 | |
dflet | 0:9cb694f00b7b | 276 | // package ID |
dflet | 0:9cb694f00b7b | 277 | *patchVer = retBuf[3]; |
dflet | 0:9cb694f00b7b | 278 | // package build number |
dflet | 0:9cb694f00b7b | 279 | *(patchVer+1) = retBuf[4]; |
dflet | 0:9cb694f00b7b | 280 | |
dflet | 0:9cb694f00b7b | 281 | return(retBuf[0]); |
dflet | 0:9cb694f00b7b | 282 | } |
dflet | 0:9cb694f00b7b | 283 | #endif |
dflet | 0:9cb694f00b7b | 284 | |
dflet | 0:9cb694f00b7b | 285 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 286 | // |
dflet | 0:9cb694f00b7b | 287 | //! nvmem_create_entry |
dflet | 0:9cb694f00b7b | 288 | //! |
dflet | 0:9cb694f00b7b | 289 | //! @param ulFileId nvmem file Id:\n |
dflet | 0:9cb694f00b7b | 290 | //! * NVMEM_AES128_KEY_FILEID: 12 |
dflet | 0:9cb694f00b7b | 291 | //! * NVMEM_SHARED_MEM_FILEID: 13 |
dflet | 0:9cb694f00b7b | 292 | //! * and fileIDs 14 and 15 |
dflet | 0:9cb694f00b7b | 293 | //! @param ulNewLen entry ulLength |
dflet | 0:9cb694f00b7b | 294 | //! |
dflet | 0:9cb694f00b7b | 295 | //! @return on success 0, error otherwise. |
dflet | 0:9cb694f00b7b | 296 | //! |
dflet | 0:9cb694f00b7b | 297 | //! @brief Create new file entry and allocate space on the NVMEM. |
dflet | 0:9cb694f00b7b | 298 | //! Applies only to user files. |
dflet | 0:9cb694f00b7b | 299 | //! Modify the size of file. |
dflet | 0:9cb694f00b7b | 300 | //! If the entry is unallocated - allocate it to size |
dflet | 0:9cb694f00b7b | 301 | //! ulNewLen (marked invalid). |
dflet | 0:9cb694f00b7b | 302 | //! If it is allocated then deallocate it first. |
dflet | 0:9cb694f00b7b | 303 | //! To just mark the file as invalid without resizing - |
dflet | 0:9cb694f00b7b | 304 | //! set ulNewLen=0. |
dflet | 0:9cb694f00b7b | 305 | //! |
dflet | 0:9cb694f00b7b | 306 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 307 | |
dflet | 0:9cb694f00b7b | 308 | signed long |
dflet | 0:9cb694f00b7b | 309 | nvmem_create_entry(unsigned long ulFileId, unsigned long ulNewLen) |
dflet | 0:9cb694f00b7b | 310 | { |
dflet | 0:9cb694f00b7b | 311 | unsigned char *ptr; |
dflet | 0:9cb694f00b7b | 312 | unsigned char *args; |
dflet | 0:9cb694f00b7b | 313 | unsigned short retval; |
dflet | 0:9cb694f00b7b | 314 | |
dflet | 0:9cb694f00b7b | 315 | ptr = tSLInformation.pucTxCommandBuffer; |
dflet | 0:9cb694f00b7b | 316 | args = (ptr + HEADERS_SIZE_CMD); |
dflet | 0:9cb694f00b7b | 317 | |
dflet | 0:9cb694f00b7b | 318 | // Fill in HCI packet structure |
dflet | 0:9cb694f00b7b | 319 | args = UINT32_TO_STREAM(args, ulFileId); |
dflet | 0:9cb694f00b7b | 320 | args = UINT32_TO_STREAM(args, ulNewLen); |
dflet | 0:9cb694f00b7b | 321 | |
dflet | 0:9cb694f00b7b | 322 | // Initiate a HCI command |
dflet | 0:9cb694f00b7b | 323 | hci_command_send(HCI_CMND_NVMEM_CREATE_ENTRY,ptr, NVMEM_CREATE_PARAMS_LEN); |
dflet | 0:9cb694f00b7b | 324 | |
dflet | 0:9cb694f00b7b | 325 | SimpleLinkWaitEvent(HCI_CMND_NVMEM_CREATE_ENTRY, (long*)&retval); |
dflet | 0:9cb694f00b7b | 326 | |
dflet | 0:9cb694f00b7b | 327 | return(retval); |
dflet | 0:9cb694f00b7b | 328 | } |
dflet | 0:9cb694f00b7b | 329 | |
dflet | 0:9cb694f00b7b | 330 | |
dflet | 0:9cb694f00b7b | 331 | |
dflet | 0:9cb694f00b7b | 332 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 333 | // |
dflet | 0:9cb694f00b7b | 334 | // Close the Doxygen group. |
dflet | 0:9cb694f00b7b | 335 | //! @} |
dflet | 0:9cb694f00b7b | 336 | // |
dflet | 0:9cb694f00b7b | 337 | //***************************************************************************** |
dflet | 0:9cb694f00b7b | 338 | |
dflet | 0:9cb694f00b7b | 339 |