Frank Vannieuwkerke / CC3000_Hostdriver

Dependencies:   NVIC_set_all_priorities

Dependents:   CC3000_Simple_Socket Wi-Go_IOT_Demo

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?

UserRevisionLine numberNew 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