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