Port of TI's CC3100 Websock camera demo. Using FreeRTOS, mbedTLS, also parts of Arducam for cams ov5642 and 0v2640. Can also use MT9D111. Work in progress. Be warned some parts maybe a bit flacky. This is for Seeed Arch max only, for an M3, see the demo for CM3 using the 0v5642 aducam mini.

Dependencies:   mbed

Committer:
dflet
Date:
Tue Sep 15 16:45:04 2015 +0000
Revision:
22:f9b5e0b80bf2
Parent:
0:50cedd586816
Removed some debug.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dflet 0:50cedd586816 1 /*
dflet 0:50cedd586816 2 * fs.c - CC31xx/CC32xx Host Driver Implementation
dflet 0:50cedd586816 3 *
dflet 0:50cedd586816 4 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
dflet 0:50cedd586816 5 *
dflet 0:50cedd586816 6 *
dflet 0:50cedd586816 7 * Redistribution and use in source and binary forms, with or without
dflet 0:50cedd586816 8 * modification, are permitted provided that the following conditions
dflet 0:50cedd586816 9 * are met:
dflet 0:50cedd586816 10 *
dflet 0:50cedd586816 11 * Redistributions of source code must retain the above copyright
dflet 0:50cedd586816 12 * notice, this list of conditions and the following disclaimer.
dflet 0:50cedd586816 13 *
dflet 0:50cedd586816 14 * Redistributions in binary form must reproduce the above copyright
dflet 0:50cedd586816 15 * notice, this list of conditions and the following disclaimer in the
dflet 0:50cedd586816 16 * documentation and/or other materials provided with the
dflet 0:50cedd586816 17 * distribution.
dflet 0:50cedd586816 18 *
dflet 0:50cedd586816 19 * Neither the name of Texas Instruments Incorporated nor the names of
dflet 0:50cedd586816 20 * its contributors may be used to endorse or promote products derived
dflet 0:50cedd586816 21 * from this software without specific prior written permission.
dflet 0:50cedd586816 22 *
dflet 0:50cedd586816 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
dflet 0:50cedd586816 24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
dflet 0:50cedd586816 25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
dflet 0:50cedd586816 26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
dflet 0:50cedd586816 27 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
dflet 0:50cedd586816 28 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dflet 0:50cedd586816 29 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
dflet 0:50cedd586816 30 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
dflet 0:50cedd586816 31 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
dflet 0:50cedd586816 32 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
dflet 0:50cedd586816 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dflet 0:50cedd586816 34 *
dflet 0:50cedd586816 35 */
dflet 0:50cedd586816 36
dflet 0:50cedd586816 37
dflet 0:50cedd586816 38
dflet 0:50cedd586816 39 /*****************************************************************************/
dflet 0:50cedd586816 40 /* Include files */
dflet 0:50cedd586816 41 /*****************************************************************************/
dflet 0:50cedd586816 42 #include "cc3100_simplelink.h"
dflet 0:50cedd586816 43 #include "cc3100_protocol.h"
dflet 0:50cedd586816 44 #include "cc3100_driver.h"
dflet 0:50cedd586816 45
dflet 0:50cedd586816 46 #include "cc3100_fs.h"
dflet 0:50cedd586816 47
dflet 0:50cedd586816 48
dflet 0:50cedd586816 49
dflet 0:50cedd586816 50 /*****************************************************************************/
dflet 0:50cedd586816 51 /* Macro declarations */
dflet 0:50cedd586816 52 /*****************************************************************************/
dflet 0:50cedd586816 53 #define sl_min(a,b) (((a) < (b)) ? (a) : (b))
dflet 0:50cedd586816 54 #define MAX_NVMEM_CHUNK_SIZE 1460
dflet 0:50cedd586816 55
dflet 0:50cedd586816 56 namespace mbed_cc3100 {
dflet 0:50cedd586816 57
dflet 0:50cedd586816 58 cc3100_fs::cc3100_fs(cc3100_driver &driver)
dflet 0:50cedd586816 59 : _driver(driver)
dflet 0:50cedd586816 60 {
dflet 0:50cedd586816 61
dflet 0:50cedd586816 62 }
dflet 0:50cedd586816 63
dflet 0:50cedd586816 64 cc3100_fs::~cc3100_fs()
dflet 0:50cedd586816 65 {
dflet 0:50cedd586816 66
dflet 0:50cedd586816 67 }
dflet 0:50cedd586816 68
dflet 0:50cedd586816 69 #ifndef SL_TINY
dflet 0:50cedd586816 70 /*****************************************************************************/
dflet 0:50cedd586816 71 /* Internal functions */
dflet 0:50cedd586816 72 /*****************************************************************************/
dflet 0:50cedd586816 73
dflet 0:50cedd586816 74
dflet 0:50cedd586816 75 /*****************************************************************************/
dflet 0:50cedd586816 76 /* _sl_Strlen */
dflet 0:50cedd586816 77 /*****************************************************************************/
dflet 0:50cedd586816 78 uint16_t cc3100_fs::_sl_Strlen(const uint8_t *buffer)
dflet 0:50cedd586816 79 {
dflet 0:50cedd586816 80 uint16_t len = 0;
dflet 0:50cedd586816 81 if( buffer != NULL ) {
dflet 0:50cedd586816 82 while(*buffer++) len++;
dflet 0:50cedd586816 83 }
dflet 0:50cedd586816 84 return len;
dflet 0:50cedd586816 85 }
dflet 0:50cedd586816 86
dflet 0:50cedd586816 87 /*****************************************************************************/
dflet 0:50cedd586816 88 /* _sl_GetCreateFsMode */
dflet 0:50cedd586816 89 /*****************************************************************************/
dflet 0:50cedd586816 90 uint32_t cc3100_fs::_sl_GetCreateFsMode(uint32_t maxSizeInBytes,uint32_t accessFlags)
dflet 0:50cedd586816 91 {
dflet 0:50cedd586816 92 uint32_t granIdx = 0;
dflet 0:50cedd586816 93 uint32_t granNum = 0;
dflet 0:50cedd586816 94 uint32_t granTable[_FS_MAX_MODE_SIZE_GRAN] = {256,1024,4096,16384,65536};
dflet 0:50cedd586816 95 for(granIdx= _FS_MODE_SIZE_GRAN_256B ; granIdx< _FS_MAX_MODE_SIZE_GRAN; granIdx++) {
dflet 0:50cedd586816 96 if( granTable[granIdx]*255 >= maxSizeInBytes )
dflet 0:50cedd586816 97 break;
dflet 0:50cedd586816 98 }
dflet 0:50cedd586816 99 granNum = maxSizeInBytes/granTable[granIdx];
dflet 0:50cedd586816 100 if( maxSizeInBytes % granTable[granIdx] != 0 )
dflet 0:50cedd586816 101 granNum++;
dflet 0:50cedd586816 102
dflet 0:50cedd586816 103 return _FS_MODE(_FS_MODE_OPEN_WRITE_CREATE_IF_NOT_EXIST, granIdx, granNum, accessFlags);
dflet 0:50cedd586816 104 }
dflet 0:50cedd586816 105 #endif
dflet 0:50cedd586816 106
dflet 0:50cedd586816 107 /*****************************************************************************/
dflet 0:50cedd586816 108 /* API functions */
dflet 0:50cedd586816 109 /*****************************************************************************/
dflet 0:50cedd586816 110
dflet 0:50cedd586816 111 /*****************************************************************************/
dflet 0:50cedd586816 112 /* sl_FsOpen */
dflet 0:50cedd586816 113 /*****************************************************************************/
dflet 0:50cedd586816 114 typedef union {
dflet 0:50cedd586816 115 _FsOpenCommand_t Cmd;
dflet 0:50cedd586816 116 _FsOpenResponse_t Rsp;
dflet 0:50cedd586816 117 } _SlFsOpenMsg_u;
dflet 0:50cedd586816 118
dflet 0:50cedd586816 119 #if _SL_INCLUDE_FUNC(sl_FsOpen)
dflet 0:50cedd586816 120 const _SlCmdCtrl_t _SlFsOpenCmdCtrl = {
dflet 0:50cedd586816 121 SL_OPCODE_NVMEM_FILEOPEN,
dflet 0:50cedd586816 122 sizeof(_FsOpenCommand_t),
dflet 0:50cedd586816 123 sizeof(_FsOpenResponse_t)
dflet 0:50cedd586816 124 };
dflet 0:50cedd586816 125
dflet 0:50cedd586816 126 int32_t cc3100_fs::sl_FsOpen(const uint8_t *pFileName, const uint32_t AccessModeAndMaxSize, uint32_t *pToken,int32_t *pFileHandle)
dflet 0:50cedd586816 127 {
dflet 0:50cedd586816 128 _SlReturnVal_t RetVal;
dflet 0:50cedd586816 129 _SlFsOpenMsg_u Msg;
dflet 0:50cedd586816 130 _SlCmdExt_t CmdExt;
dflet 0:50cedd586816 131
dflet 0:50cedd586816 132 CmdExt.TxPayloadLen = (_sl_Strlen(pFileName)+4) & (~3); // add 4: 1 for NULL and the 3 for align
dflet 0:50cedd586816 133 CmdExt.RxPayloadLen = 0;
dflet 0:50cedd586816 134 CmdExt.pTxPayload = (uint8_t *)pFileName;
dflet 0:50cedd586816 135 CmdExt.pRxPayload = NULL;
dflet 0:50cedd586816 136
dflet 0:50cedd586816 137 Msg.Cmd.Mode = AccessModeAndMaxSize;
dflet 0:50cedd586816 138
dflet 0:50cedd586816 139 if(pToken != NULL) {
dflet 0:50cedd586816 140 Msg.Cmd.Token = *pToken;
dflet 0:50cedd586816 141 } else {
dflet 0:50cedd586816 142 Msg.Cmd.Token = 0;
dflet 0:50cedd586816 143 }
dflet 0:50cedd586816 144
dflet 0:50cedd586816 145 RetVal = _driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsOpenCmdCtrl, &Msg, &CmdExt);
dflet 0:50cedd586816 146 *pFileHandle = Msg.Rsp.FileHandle;
dflet 0:50cedd586816 147 if (pToken != NULL) {
dflet 0:50cedd586816 148 *pToken = Msg.Rsp.Token;
dflet 0:50cedd586816 149 }
dflet 0:50cedd586816 150
dflet 0:50cedd586816 151 /* in case of an error, return the erros file handler as an error code */
dflet 0:50cedd586816 152 if( *pFileHandle < 0 ) {
dflet 0:50cedd586816 153 return *pFileHandle;
dflet 0:50cedd586816 154 }
dflet 0:50cedd586816 155 return (int32_t)RetVal;
dflet 0:50cedd586816 156 }
dflet 0:50cedd586816 157 #endif
dflet 0:50cedd586816 158
dflet 0:50cedd586816 159 /*****************************************************************************/
dflet 0:50cedd586816 160 /* sl_FsClose */
dflet 0:50cedd586816 161 /*****************************************************************************/
dflet 0:50cedd586816 162 typedef union {
dflet 0:50cedd586816 163 _FsCloseCommand_t Cmd;
dflet 0:50cedd586816 164 _BasicResponse_t Rsp;
dflet 0:50cedd586816 165 } _SlFsCloseMsg_u;
dflet 0:50cedd586816 166
dflet 0:50cedd586816 167 #if _SL_INCLUDE_FUNC(sl_FsClose)
dflet 0:50cedd586816 168 const _SlCmdCtrl_t _SlFsCloseCmdCtrl = {
dflet 0:50cedd586816 169 SL_OPCODE_NVMEM_FILECLOSE,
dflet 0:50cedd586816 170 sizeof(_FsCloseCommand_t),
dflet 0:50cedd586816 171 sizeof(_FsCloseResponse_t)
dflet 0:50cedd586816 172 };
dflet 0:50cedd586816 173
dflet 0:50cedd586816 174 int16_t cc3100_fs::sl_FsClose(const int32_t FileHdl, const uint8_t* pCeritificateFileName, const uint8_t* pSignature ,const uint32_t SignatureLen)
dflet 0:50cedd586816 175 {
dflet 0:50cedd586816 176 _SlFsCloseMsg_u Msg = {0};
dflet 0:50cedd586816 177 _SlCmdExt_t ExtCtrl;
dflet 0:50cedd586816 178
dflet 0:50cedd586816 179 Msg.Cmd.FileHandle = FileHdl;
dflet 0:50cedd586816 180 if( pCeritificateFileName != NULL ) {
dflet 0:50cedd586816 181 Msg.Cmd.CertificFileNameLength = (_sl_Strlen(pCeritificateFileName)+4) & (~3); /* add 4: 1 for NULL and the 3 for align */
dflet 0:50cedd586816 182 }
dflet 0:50cedd586816 183 Msg.Cmd.SignatureLen = SignatureLen;
dflet 0:50cedd586816 184
dflet 0:50cedd586816 185 ExtCtrl.TxPayloadLen = ((SignatureLen+3) & (~3)); /* align */
dflet 0:50cedd586816 186 ExtCtrl.pTxPayload = (uint8_t*)pSignature;
dflet 0:50cedd586816 187 ExtCtrl.RxPayloadLen = (int16_t)Msg.Cmd.CertificFileNameLength;
dflet 0:50cedd586816 188 ExtCtrl.pRxPayload = (uint8_t*)pCeritificateFileName; /* Add signature */
dflet 0:50cedd586816 189
dflet 0:50cedd586816 190 if(ExtCtrl.pRxPayload != NULL && ExtCtrl.RxPayloadLen != 0) {
dflet 0:50cedd586816 191 ExtCtrl.RxPayloadLen = ExtCtrl.RxPayloadLen * (-1);
dflet 0:50cedd586816 192 }
dflet 0:50cedd586816 193
dflet 0:50cedd586816 194 VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsCloseCmdCtrl, &Msg, &ExtCtrl));
dflet 0:50cedd586816 195
dflet 0:50cedd586816 196 return (int16_t)((int16_t)Msg.Rsp.status);
dflet 0:50cedd586816 197 }
dflet 0:50cedd586816 198 #endif
dflet 0:50cedd586816 199
dflet 0:50cedd586816 200
dflet 0:50cedd586816 201 /*****************************************************************************/
dflet 0:50cedd586816 202 /* sl_FsRead */
dflet 0:50cedd586816 203 /*****************************************************************************/
dflet 0:50cedd586816 204 typedef union {
dflet 0:50cedd586816 205 _FsReadCommand_t Cmd;
dflet 0:50cedd586816 206 _FsReadResponse_t Rsp;
dflet 0:50cedd586816 207 } _SlFsReadMsg_u;
dflet 0:50cedd586816 208
dflet 0:50cedd586816 209 #if _SL_INCLUDE_FUNC(sl_FsRead)
dflet 0:50cedd586816 210 const _SlCmdCtrl_t _SlFsReadCmdCtrl = {
dflet 0:50cedd586816 211 SL_OPCODE_NVMEM_FILEREADCOMMAND,
dflet 0:50cedd586816 212 sizeof(_FsReadCommand_t),
dflet 0:50cedd586816 213 sizeof(_FsReadResponse_t)
dflet 0:50cedd586816 214 };
dflet 0:50cedd586816 215
dflet 0:50cedd586816 216 int32_t cc3100_fs::sl_FsRead(const int32_t FileHdl, uint32_t Offset, uint8_t* pData, uint32_t Len)
dflet 0:50cedd586816 217 {
dflet 0:50cedd586816 218 _SlFsReadMsg_u Msg;
dflet 0:50cedd586816 219 _SlCmdExt_t ExtCtrl;
dflet 0:50cedd586816 220 uint16_t ChunkLen;
dflet 0:50cedd586816 221 _SlReturnVal_t RetVal =0;
dflet 0:50cedd586816 222 int32_t RetCount = 0;
dflet 0:50cedd586816 223
dflet 0:50cedd586816 224 ExtCtrl.TxPayloadLen = 0;
dflet 0:50cedd586816 225 ExtCtrl.pTxPayload = NULL;
dflet 0:50cedd586816 226
dflet 0:50cedd586816 227 ChunkLen = (uint16_t)sl_min(MAX_NVMEM_CHUNK_SIZE,Len);
dflet 0:50cedd586816 228 ExtCtrl.RxPayloadLen = ChunkLen;
dflet 0:50cedd586816 229 ExtCtrl.pRxPayload = (uint8_t *)(pData);
dflet 0:50cedd586816 230 Msg.Cmd.Offset = Offset;
dflet 0:50cedd586816 231 Msg.Cmd.Len = ChunkLen;
dflet 0:50cedd586816 232 Msg.Cmd.FileHandle = FileHdl;
dflet 0:50cedd586816 233 do {
dflet 0:50cedd586816 234 RetVal = _driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsReadCmdCtrl, &Msg, &ExtCtrl);
dflet 0:50cedd586816 235 if(SL_OS_RET_CODE_OK == RetVal) {
dflet 0:50cedd586816 236 if( Msg.Rsp.status < 0) {
dflet 0:50cedd586816 237 if( RetCount > 0) {
dflet 0:50cedd586816 238 return RetCount;
dflet 0:50cedd586816 239 } else {
dflet 0:50cedd586816 240 return Msg.Rsp.status;
dflet 0:50cedd586816 241 }
dflet 0:50cedd586816 242 }
dflet 0:50cedd586816 243 RetCount += (int32_t)Msg.Rsp.status;
dflet 0:50cedd586816 244 Len -= ChunkLen;
dflet 0:50cedd586816 245 Offset += ChunkLen;
dflet 0:50cedd586816 246 Msg.Cmd.Offset = Offset;
dflet 0:50cedd586816 247 ExtCtrl.pRxPayload += ChunkLen;
dflet 0:50cedd586816 248 ChunkLen = (uint16_t)sl_min(MAX_NVMEM_CHUNK_SIZE,Len);
dflet 0:50cedd586816 249 ExtCtrl.RxPayloadLen = ChunkLen;
dflet 0:50cedd586816 250 Msg.Cmd.Len = ChunkLen;
dflet 0:50cedd586816 251 Msg.Cmd.FileHandle = FileHdl;
dflet 0:50cedd586816 252 } else {
dflet 0:50cedd586816 253 return RetVal;
dflet 0:50cedd586816 254 }
dflet 0:50cedd586816 255 } while(ChunkLen > 0);
dflet 0:50cedd586816 256
dflet 0:50cedd586816 257 return (int32_t)RetCount;
dflet 0:50cedd586816 258 }
dflet 0:50cedd586816 259 #endif
dflet 0:50cedd586816 260
dflet 0:50cedd586816 261 /*****************************************************************************/
dflet 0:50cedd586816 262 /* sl_FsWrite */
dflet 0:50cedd586816 263 /*****************************************************************************/
dflet 0:50cedd586816 264 typedef union {
dflet 0:50cedd586816 265 _FsWriteCommand_t Cmd;
dflet 0:50cedd586816 266 _FsWriteResponse_t Rsp;
dflet 0:50cedd586816 267 } _SlFsWriteMsg_u;
dflet 0:50cedd586816 268
dflet 0:50cedd586816 269 #if _SL_INCLUDE_FUNC(sl_FsWrite)
dflet 0:50cedd586816 270 const _SlCmdCtrl_t _SlFsWriteCmdCtrl = {
dflet 0:50cedd586816 271 SL_OPCODE_NVMEM_FILEWRITECOMMAND,
dflet 0:50cedd586816 272 sizeof(_FsWriteCommand_t),
dflet 0:50cedd586816 273 sizeof(_FsWriteResponse_t)
dflet 0:50cedd586816 274 };
dflet 0:50cedd586816 275
dflet 0:50cedd586816 276 int32_t cc3100_fs::sl_FsWrite(const int32_t FileHdl, uint32_t Offset, uint8_t* pData, uint32_t Len)
dflet 0:50cedd586816 277 {
dflet 0:50cedd586816 278 _SlFsWriteMsg_u Msg;
dflet 0:50cedd586816 279 _SlCmdExt_t ExtCtrl;
dflet 0:50cedd586816 280 uint16_t ChunkLen;
dflet 0:50cedd586816 281 _SlReturnVal_t RetVal;
dflet 0:50cedd586816 282 int32_t RetCount = 0;
dflet 0:50cedd586816 283
dflet 0:50cedd586816 284 ExtCtrl.RxPayloadLen = 0;
dflet 0:50cedd586816 285 ExtCtrl.pRxPayload = NULL;
dflet 0:50cedd586816 286
dflet 0:50cedd586816 287 ChunkLen = (uint16_t)sl_min(MAX_NVMEM_CHUNK_SIZE,Len);
dflet 0:50cedd586816 288 ExtCtrl.TxPayloadLen = ChunkLen;
dflet 0:50cedd586816 289 ExtCtrl.pTxPayload = (uint8_t *)(pData);
dflet 0:50cedd586816 290 Msg.Cmd.Offset = Offset;
dflet 0:50cedd586816 291 Msg.Cmd.Len = ChunkLen;
dflet 0:50cedd586816 292 Msg.Cmd.FileHandle = FileHdl;
dflet 0:50cedd586816 293
dflet 0:50cedd586816 294 do {
dflet 0:50cedd586816 295
dflet 0:50cedd586816 296 RetVal = _driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsWriteCmdCtrl, &Msg, &ExtCtrl);
dflet 0:50cedd586816 297 if(SL_OS_RET_CODE_OK == RetVal) {
dflet 0:50cedd586816 298 if( Msg.Rsp.status < 0) {
dflet 0:50cedd586816 299 if( RetCount > 0) {
dflet 0:50cedd586816 300 return RetCount;
dflet 0:50cedd586816 301 } else {
dflet 0:50cedd586816 302 return Msg.Rsp.status;
dflet 0:50cedd586816 303 }
dflet 0:50cedd586816 304 }
dflet 0:50cedd586816 305
dflet 0:50cedd586816 306 RetCount += (int32_t)Msg.Rsp.status;
dflet 0:50cedd586816 307 Len -= ChunkLen;
dflet 0:50cedd586816 308 Offset += ChunkLen;
dflet 0:50cedd586816 309 Msg.Cmd.Offset = Offset;
dflet 0:50cedd586816 310 ExtCtrl.pTxPayload += ChunkLen;
dflet 0:50cedd586816 311 ChunkLen = (uint16_t)sl_min(MAX_NVMEM_CHUNK_SIZE,Len);
dflet 0:50cedd586816 312 ExtCtrl.TxPayloadLen = ChunkLen;
dflet 0:50cedd586816 313 Msg.Cmd.Len = ChunkLen;
dflet 0:50cedd586816 314 Msg.Cmd.FileHandle = FileHdl;
dflet 0:50cedd586816 315 } else {
dflet 0:50cedd586816 316 return RetVal;
dflet 0:50cedd586816 317 }
dflet 0:50cedd586816 318 } while(ChunkLen > 0);
dflet 0:50cedd586816 319
dflet 0:50cedd586816 320 return (int32_t)RetCount;
dflet 0:50cedd586816 321 }
dflet 0:50cedd586816 322 #endif
dflet 0:50cedd586816 323
dflet 0:50cedd586816 324 /*****************************************************************************/
dflet 0:50cedd586816 325 /* sl_FsGetInfo */
dflet 0:50cedd586816 326 /*****************************************************************************/
dflet 0:50cedd586816 327 typedef union {
dflet 0:50cedd586816 328 _FsGetInfoCommand_t Cmd;
dflet 0:50cedd586816 329 _FsGetInfoResponse_t Rsp;
dflet 0:50cedd586816 330 } _SlFsGetInfoMsg_u;
dflet 0:50cedd586816 331
dflet 0:50cedd586816 332 #if _SL_INCLUDE_FUNC(sl_FsGetInfo)
dflet 0:50cedd586816 333 const _SlCmdCtrl_t _SlFsGetInfoCmdCtrl = {
dflet 0:50cedd586816 334 SL_OPCODE_NVMEM_FILEGETINFOCOMMAND,
dflet 0:50cedd586816 335 sizeof(_FsGetInfoCommand_t),
dflet 0:50cedd586816 336 sizeof(_FsGetInfoResponse_t)
dflet 0:50cedd586816 337 };
dflet 0:50cedd586816 338
dflet 0:50cedd586816 339 int16_t cc3100_fs::sl_FsGetInfo(const uint8_t *pFileName, const uint32_t Token,SlFsFileInfo_t* pFsFileInfo)
dflet 0:50cedd586816 340 {
dflet 0:50cedd586816 341 _SlFsGetInfoMsg_u Msg;
dflet 0:50cedd586816 342 _SlCmdExt_t CmdExt;
dflet 0:50cedd586816 343
dflet 0:50cedd586816 344 CmdExt.TxPayloadLen = (_sl_Strlen(pFileName)+4) & (~3); /* add 4: 1 for NULL and the 3 for align */
dflet 0:50cedd586816 345 CmdExt.RxPayloadLen = 0;
dflet 0:50cedd586816 346 CmdExt.pTxPayload = (uint8_t *)pFileName;
dflet 0:50cedd586816 347 CmdExt.pRxPayload = NULL;
dflet 0:50cedd586816 348 Msg.Cmd.Token = Token;
dflet 0:50cedd586816 349
dflet 0:50cedd586816 350 VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsGetInfoCmdCtrl, &Msg, &CmdExt));
dflet 0:50cedd586816 351
dflet 0:50cedd586816 352 pFsFileInfo->flags = Msg.Rsp.flags;
dflet 0:50cedd586816 353 pFsFileInfo->FileLen = Msg.Rsp.FileLen;
dflet 0:50cedd586816 354 pFsFileInfo->AllocatedLen = Msg.Rsp.AllocatedLen;
dflet 0:50cedd586816 355 pFsFileInfo->Token[0] = Msg.Rsp.Token[0];
dflet 0:50cedd586816 356 pFsFileInfo->Token[1] = Msg.Rsp.Token[1];
dflet 0:50cedd586816 357 pFsFileInfo->Token[2] = Msg.Rsp.Token[2];
dflet 0:50cedd586816 358 pFsFileInfo->Token[3] = Msg.Rsp.Token[3];
dflet 0:50cedd586816 359 return (int16_t)((int16_t)Msg.Rsp.Status);
dflet 0:50cedd586816 360 }
dflet 0:50cedd586816 361 #endif
dflet 0:50cedd586816 362
dflet 0:50cedd586816 363 /*****************************************************************************/
dflet 0:50cedd586816 364 /* sl_FsDel */
dflet 0:50cedd586816 365 /*****************************************************************************/
dflet 0:50cedd586816 366 typedef union {
dflet 0:50cedd586816 367 _FsDeleteCommand_t Cmd;
dflet 0:50cedd586816 368 _FsDeleteResponse_t Rsp;
dflet 0:50cedd586816 369 } _SlFsDeleteMsg_u;
dflet 0:50cedd586816 370
dflet 0:50cedd586816 371 #if _SL_INCLUDE_FUNC(sl_FsDel)
dflet 0:50cedd586816 372 const _SlCmdCtrl_t _SlFsDeleteCmdCtrl = {
dflet 0:50cedd586816 373 SL_OPCODE_NVMEM_FILEDELCOMMAND,
dflet 0:50cedd586816 374 sizeof(_FsDeleteCommand_t),
dflet 0:50cedd586816 375 sizeof(_FsDeleteResponse_t)
dflet 0:50cedd586816 376 };
dflet 0:50cedd586816 377
dflet 0:50cedd586816 378 int16_t cc3100_fs::sl_FsDel(const uint8_t *pFileName, const uint32_t Token)
dflet 0:50cedd586816 379 {
dflet 0:50cedd586816 380 _SlFsDeleteMsg_u Msg;
dflet 0:50cedd586816 381 _SlCmdExt_t CmdExt;
dflet 0:50cedd586816 382
dflet 0:50cedd586816 383 CmdExt.TxPayloadLen = (_sl_Strlen(pFileName)+4) & (~3); /* add 4: 1 for NULL and the 3 for align */
dflet 0:50cedd586816 384 CmdExt.RxPayloadLen = 0;
dflet 0:50cedd586816 385 CmdExt.pTxPayload = (uint8_t *)pFileName;
dflet 0:50cedd586816 386 CmdExt.pRxPayload = NULL;
dflet 0:50cedd586816 387 Msg.Cmd.Token = Token;
dflet 0:50cedd586816 388
dflet 0:50cedd586816 389
dflet 0:50cedd586816 390 VERIFY_RET_OK(_driver._SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsDeleteCmdCtrl, &Msg, &CmdExt));
dflet 0:50cedd586816 391
dflet 0:50cedd586816 392 return (int16_t)((int16_t)Msg.Rsp.status);
dflet 0:50cedd586816 393 }
dflet 0:50cedd586816 394 #endif
dflet 0:50cedd586816 395
dflet 0:50cedd586816 396 }//namespace mbed_cc3100
dflet 0:50cedd586816 397
dflet 0:50cedd586816 398