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