David Fletcher
/
cc3100_test
TI's CC3100 host driver and demo. Experimental and a work in progress.
simplelink/cc3100_device.cpp@2:a3e52cf86086, 2014-11-19 (annotated)
- Committer:
- dflet
- Date:
- Wed Nov 19 23:04:04 2014 +0000
- Revision:
- 2:a3e52cf86086
- Parent:
- 0:bbe98578d4c0
Added more boards!
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dflet | 0:bbe98578d4c0 | 1 | /* |
dflet | 0:bbe98578d4c0 | 2 | * device.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_flowcont.h" |
dflet | 0:bbe98578d4c0 | 45 | #include "cc3100_driver.h" |
dflet | 0:bbe98578d4c0 | 46 | |
dflet | 0:bbe98578d4c0 | 47 | |
dflet | 0:bbe98578d4c0 | 48 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 49 | /* Internal functions */ |
dflet | 0:bbe98578d4c0 | 50 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 51 | |
dflet | 0:bbe98578d4c0 | 52 | _i16 _sl_GetStartResponseConvert(_u32 Status) |
dflet | 0:bbe98578d4c0 | 53 | { |
dflet | 0:bbe98578d4c0 | 54 | switch(Status) |
dflet | 0:bbe98578d4c0 | 55 | { |
dflet | 0:bbe98578d4c0 | 56 | case INIT_STA_OK: |
dflet | 0:bbe98578d4c0 | 57 | return ROLE_STA; |
dflet | 0:bbe98578d4c0 | 58 | case INIT_STA_ERR: |
dflet | 0:bbe98578d4c0 | 59 | return ROLE_STA_ERR; |
dflet | 0:bbe98578d4c0 | 60 | case INIT_AP_OK: |
dflet | 0:bbe98578d4c0 | 61 | return ROLE_AP; |
dflet | 0:bbe98578d4c0 | 62 | case INIT_AP_ERR: |
dflet | 0:bbe98578d4c0 | 63 | return ROLE_AP_ERR; |
dflet | 0:bbe98578d4c0 | 64 | case INIT_P2P_OK: |
dflet | 0:bbe98578d4c0 | 65 | return ROLE_P2P; |
dflet | 0:bbe98578d4c0 | 66 | case INIT_P2P_ERR: |
dflet | 0:bbe98578d4c0 | 67 | return ROLE_P2P_ERR; |
dflet | 0:bbe98578d4c0 | 68 | default: |
dflet | 0:bbe98578d4c0 | 69 | return (_i16)Status; |
dflet | 0:bbe98578d4c0 | 70 | } |
dflet | 0:bbe98578d4c0 | 71 | } |
dflet | 0:bbe98578d4c0 | 72 | |
dflet | 0:bbe98578d4c0 | 73 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 74 | /* API Functions */ |
dflet | 0:bbe98578d4c0 | 75 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 76 | |
dflet | 0:bbe98578d4c0 | 77 | |
dflet | 0:bbe98578d4c0 | 78 | |
dflet | 0:bbe98578d4c0 | 79 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 80 | /* sl_Task */ |
dflet | 0:bbe98578d4c0 | 81 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 82 | #if _SL_INCLUDE_FUNC(sl_Task) |
dflet | 0:bbe98578d4c0 | 83 | void sl_Task(void) |
dflet | 0:bbe98578d4c0 | 84 | { |
dflet | 0:bbe98578d4c0 | 85 | #ifdef _SlTaskEntry |
dflet | 0:bbe98578d4c0 | 86 | _SlTaskEntry(); |
dflet | 0:bbe98578d4c0 | 87 | #endif |
dflet | 0:bbe98578d4c0 | 88 | } |
dflet | 0:bbe98578d4c0 | 89 | #endif |
dflet | 0:bbe98578d4c0 | 90 | |
dflet | 0:bbe98578d4c0 | 91 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 92 | /* sl_Start */ |
dflet | 0:bbe98578d4c0 | 93 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 94 | #if _SL_INCLUDE_FUNC(sl_Start) |
dflet | 0:bbe98578d4c0 | 95 | _i16 sl_Start(const void* pIfHdl, _i8* pDevName, const P_INIT_CALLBACK pInitCallBack) |
dflet | 0:bbe98578d4c0 | 96 | { |
dflet | 0:bbe98578d4c0 | 97 | _i16 ObjIdx = MAX_CONCURRENT_ACTIONS; |
dflet | 0:bbe98578d4c0 | 98 | InitComplete_t AsyncRsp; |
dflet | 0:bbe98578d4c0 | 99 | |
dflet | 0:bbe98578d4c0 | 100 | /* Perform any preprocessing before enable networking services */ |
dflet | 0:bbe98578d4c0 | 101 | sl_DeviceEnablePreamble(); |
dflet | 0:bbe98578d4c0 | 102 | |
dflet | 0:bbe98578d4c0 | 103 | /* ControlBlock init */ |
dflet | 0:bbe98578d4c0 | 104 | _SlDrvDriverCBInit(); |
dflet | 0:bbe98578d4c0 | 105 | |
dflet | 0:bbe98578d4c0 | 106 | /* open the interface: usually SPI or UART */ |
dflet | 0:bbe98578d4c0 | 107 | if (NULL == pIfHdl) |
dflet | 0:bbe98578d4c0 | 108 | { |
dflet | 0:bbe98578d4c0 | 109 | g_pCB->FD = sl_IfOpen((char *)pDevName, 0);//char* replaced void* |
dflet | 0:bbe98578d4c0 | 110 | } |
dflet | 0:bbe98578d4c0 | 111 | else |
dflet | 0:bbe98578d4c0 | 112 | { |
dflet | 0:bbe98578d4c0 | 113 | g_pCB->FD = (_SlFd_t)pIfHdl; |
dflet | 0:bbe98578d4c0 | 114 | } |
dflet | 0:bbe98578d4c0 | 115 | /* Use Obj to issue the command, if not available try later */ |
dflet | 0:bbe98578d4c0 | 116 | ObjIdx = _SlDrvWaitForPoolObj(START_STOP_ID,SL_MAX_SOCKETS); |
dflet | 0:bbe98578d4c0 | 117 | if (MAX_CONCURRENT_ACTIONS == ObjIdx) |
dflet | 0:bbe98578d4c0 | 118 | { |
dflet | 0:bbe98578d4c0 | 119 | return SL_POOL_IS_EMPTY; |
dflet | 0:bbe98578d4c0 | 120 | } |
dflet | 0:bbe98578d4c0 | 121 | OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER)); |
dflet | 0:bbe98578d4c0 | 122 | g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&AsyncRsp; |
dflet | 0:bbe98578d4c0 | 123 | OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj)); |
dflet | 0:bbe98578d4c0 | 124 | |
dflet | 0:bbe98578d4c0 | 125 | if( g_pCB->FD >= 0) |
dflet | 0:bbe98578d4c0 | 126 | { |
dflet | 0:bbe98578d4c0 | 127 | sl_DeviceDisable(); |
dflet | 0:bbe98578d4c0 | 128 | |
dflet | 0:bbe98578d4c0 | 129 | sl_IfRegIntHdlr((SL_P_EVENT_HANDLER)_SlDrvRxIrqHandler, NULL); |
dflet | 0:bbe98578d4c0 | 130 | |
dflet | 0:bbe98578d4c0 | 131 | if(NULL != pInitCallBack) |
dflet | 0:bbe98578d4c0 | 132 | { |
dflet | 0:bbe98578d4c0 | 133 | g_pCB->pInitCallback = pInitCallBack; |
dflet | 0:bbe98578d4c0 | 134 | } |
dflet | 0:bbe98578d4c0 | 135 | sl_DeviceEnable(); |
dflet | 0:bbe98578d4c0 | 136 | |
dflet | 0:bbe98578d4c0 | 137 | if (NULL == pInitCallBack) |
dflet | 0:bbe98578d4c0 | 138 | { |
dflet | 0:bbe98578d4c0 | 139 | OSI_RET_OK_CHECK(sl_SyncObjWait(&g_pCB->ObjPool[ObjIdx].SyncObj, SL_OS_WAIT_FOREVER)); |
dflet | 0:bbe98578d4c0 | 140 | /*release Pool Object*/ |
dflet | 0:bbe98578d4c0 | 141 | _SlDrvReleasePoolObj(g_pCB->FunctionParams.AsyncExt.ActionIndex); |
dflet | 0:bbe98578d4c0 | 142 | return _sl_GetStartResponseConvert(AsyncRsp.Status); |
dflet | 0:bbe98578d4c0 | 143 | } |
dflet | 0:bbe98578d4c0 | 144 | } |
dflet | 0:bbe98578d4c0 | 145 | |
dflet | 0:bbe98578d4c0 | 146 | return (_i16)g_pCB->FD; |
dflet | 0:bbe98578d4c0 | 147 | |
dflet | 0:bbe98578d4c0 | 148 | } |
dflet | 0:bbe98578d4c0 | 149 | #endif |
dflet | 0:bbe98578d4c0 | 150 | |
dflet | 0:bbe98578d4c0 | 151 | /*************************************************************************** |
dflet | 0:bbe98578d4c0 | 152 | _sl_HandleAsync_InitComplete - handles init complete signalling to |
dflet | 0:bbe98578d4c0 | 153 | a waiting object |
dflet | 0:bbe98578d4c0 | 154 | ****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 155 | void _sl_HandleAsync_InitComplete(void *pVoidBuf) |
dflet | 0:bbe98578d4c0 | 156 | { |
dflet | 0:bbe98578d4c0 | 157 | InitComplete_t *pMsgArgs = (InitComplete_t *)_SL_RESP_ARGS_START(pVoidBuf); |
dflet | 0:bbe98578d4c0 | 158 | |
dflet | 0:bbe98578d4c0 | 159 | OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER)); |
dflet | 0:bbe98578d4c0 | 160 | |
dflet | 0:bbe98578d4c0 | 161 | if(g_pCB->pInitCallback) |
dflet | 0:bbe98578d4c0 | 162 | { |
dflet | 0:bbe98578d4c0 | 163 | g_pCB->pInitCallback(_sl_GetStartResponseConvert(pMsgArgs->Status)); |
dflet | 0:bbe98578d4c0 | 164 | } |
dflet | 0:bbe98578d4c0 | 165 | else |
dflet | 0:bbe98578d4c0 | 166 | { |
dflet | 0:bbe98578d4c0 | 167 | sl_Memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(InitComplete_t)); |
dflet | 0:bbe98578d4c0 | 168 | OSI_RET_OK_CHECK(sl_SyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj)); |
dflet | 0:bbe98578d4c0 | 169 | } |
dflet | 0:bbe98578d4c0 | 170 | OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj)); |
dflet | 0:bbe98578d4c0 | 171 | |
dflet | 0:bbe98578d4c0 | 172 | if(g_pCB->pInitCallback) |
dflet | 0:bbe98578d4c0 | 173 | { |
dflet | 0:bbe98578d4c0 | 174 | _SlDrvReleasePoolObj(g_pCB->FunctionParams.AsyncExt.ActionIndex); |
dflet | 0:bbe98578d4c0 | 175 | } |
dflet | 0:bbe98578d4c0 | 176 | |
dflet | 0:bbe98578d4c0 | 177 | } |
dflet | 0:bbe98578d4c0 | 178 | |
dflet | 0:bbe98578d4c0 | 179 | /*************************************************************************** |
dflet | 0:bbe98578d4c0 | 180 | _sl_HandleAsync_Stop - handles stop signalling to |
dflet | 0:bbe98578d4c0 | 181 | a waiting object |
dflet | 0:bbe98578d4c0 | 182 | ****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 183 | void _sl_HandleAsync_Stop(void *pVoidBuf) |
dflet | 0:bbe98578d4c0 | 184 | { |
dflet | 0:bbe98578d4c0 | 185 | _BasicResponse_t *pMsgArgs = (_BasicResponse_t *)_SL_RESP_ARGS_START(pVoidBuf); |
dflet | 0:bbe98578d4c0 | 186 | |
dflet | 0:bbe98578d4c0 | 187 | VERIFY_SOCKET_CB(NULL != g_pCB->StopCB.pAsyncRsp); |
dflet | 0:bbe98578d4c0 | 188 | |
dflet | 0:bbe98578d4c0 | 189 | OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER)); |
dflet | 0:bbe98578d4c0 | 190 | |
dflet | 0:bbe98578d4c0 | 191 | sl_Memcpy(g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].pRespArgs, pMsgArgs, sizeof(_BasicResponse_t)); |
dflet | 0:bbe98578d4c0 | 192 | OSI_RET_OK_CHECK(sl_SyncObjSignal(&g_pCB->ObjPool[g_pCB->FunctionParams.AsyncExt.ActionIndex].SyncObj)); |
dflet | 0:bbe98578d4c0 | 193 | OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj)); |
dflet | 0:bbe98578d4c0 | 194 | return; |
dflet | 0:bbe98578d4c0 | 195 | } |
dflet | 0:bbe98578d4c0 | 196 | |
dflet | 0:bbe98578d4c0 | 197 | |
dflet | 0:bbe98578d4c0 | 198 | /***************************************************************************** |
dflet | 0:bbe98578d4c0 | 199 | sl_stop |
dflet | 0:bbe98578d4c0 | 200 | ******************************************************************************/ |
dflet | 0:bbe98578d4c0 | 201 | typedef union |
dflet | 0:bbe98578d4c0 | 202 | { |
dflet | 0:bbe98578d4c0 | 203 | _DevStopCommand_t Cmd; |
dflet | 0:bbe98578d4c0 | 204 | _BasicResponse_t Rsp; |
dflet | 0:bbe98578d4c0 | 205 | }_SlStopMsg_u; |
dflet | 0:bbe98578d4c0 | 206 | |
dflet | 0:bbe98578d4c0 | 207 | const _SlCmdCtrl_t _SlStopCmdCtrl = |
dflet | 0:bbe98578d4c0 | 208 | { |
dflet | 0:bbe98578d4c0 | 209 | SL_OPCODE_DEVICE_STOP_COMMAND, |
dflet | 0:bbe98578d4c0 | 210 | sizeof(_DevStopCommand_t), |
dflet | 0:bbe98578d4c0 | 211 | sizeof(_BasicResponse_t) |
dflet | 0:bbe98578d4c0 | 212 | }; |
dflet | 0:bbe98578d4c0 | 213 | |
dflet | 0:bbe98578d4c0 | 214 | #if _SL_INCLUDE_FUNC(sl_Stop) |
dflet | 0:bbe98578d4c0 | 215 | _i16 sl_Stop(_u16 timeout) |
dflet | 0:bbe98578d4c0 | 216 | { |
dflet | 0:bbe98578d4c0 | 217 | _i16 RetVal=0; |
dflet | 0:bbe98578d4c0 | 218 | _SlStopMsg_u Msg; |
dflet | 0:bbe98578d4c0 | 219 | _BasicResponse_t AsyncRsp; |
dflet | 0:bbe98578d4c0 | 220 | _i16 ObjIdx = MAX_CONCURRENT_ACTIONS; |
dflet | 0:bbe98578d4c0 | 221 | /* if timeout is 0 the shutdown is forced immediately */ |
dflet | 0:bbe98578d4c0 | 222 | if( 0 == timeout ) |
dflet | 0:bbe98578d4c0 | 223 | { |
dflet | 0:bbe98578d4c0 | 224 | sl_IfRegIntHdlr(NULL, NULL); |
dflet | 0:bbe98578d4c0 | 225 | sl_DeviceDisable(); |
dflet | 0:bbe98578d4c0 | 226 | RetVal = sl_IfClose(g_pCB->FD); |
dflet | 0:bbe98578d4c0 | 227 | |
dflet | 0:bbe98578d4c0 | 228 | } |
dflet | 0:bbe98578d4c0 | 229 | else |
dflet | 0:bbe98578d4c0 | 230 | { |
dflet | 0:bbe98578d4c0 | 231 | /* let the device make the shutdown using the defined timeout */ |
dflet | 0:bbe98578d4c0 | 232 | Msg.Cmd.Timeout = timeout; |
dflet | 0:bbe98578d4c0 | 233 | /* Use Obj to issue the command, if not available try later */ |
dflet | 0:bbe98578d4c0 | 234 | ObjIdx = _SlDrvWaitForPoolObj(START_STOP_ID,SL_MAX_SOCKETS); |
dflet | 0:bbe98578d4c0 | 235 | if (MAX_CONCURRENT_ACTIONS == ObjIdx) |
dflet | 0:bbe98578d4c0 | 236 | { |
dflet | 0:bbe98578d4c0 | 237 | return SL_POOL_IS_EMPTY; |
dflet | 0:bbe98578d4c0 | 238 | } |
dflet | 0:bbe98578d4c0 | 239 | OSI_RET_OK_CHECK(sl_LockObjLock(&g_pCB->ProtectionLockObj, SL_OS_WAIT_FOREVER)); |
dflet | 0:bbe98578d4c0 | 240 | |
dflet | 0:bbe98578d4c0 | 241 | g_pCB->ObjPool[ObjIdx].pRespArgs = (_u8 *)&AsyncRsp; |
dflet | 0:bbe98578d4c0 | 242 | |
dflet | 0:bbe98578d4c0 | 243 | OSI_RET_OK_CHECK(sl_LockObjUnlock(&g_pCB->ProtectionLockObj)); |
dflet | 0:bbe98578d4c0 | 244 | |
dflet | 0:bbe98578d4c0 | 245 | VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlStopCmdCtrl, &Msg, NULL)); |
dflet | 0:bbe98578d4c0 | 246 | |
dflet | 0:bbe98578d4c0 | 247 | if(SL_OS_RET_CODE_OK == (_i16)Msg.Rsp.status) |
dflet | 0:bbe98578d4c0 | 248 | { |
dflet | 0:bbe98578d4c0 | 249 | OSI_RET_OK_CHECK(sl_SyncObjWait(&g_pCB->ObjPool[ObjIdx].SyncObj, SL_OS_WAIT_FOREVER)); |
dflet | 0:bbe98578d4c0 | 250 | Msg.Rsp.status = AsyncRsp.status; |
dflet | 0:bbe98578d4c0 | 251 | RetVal = Msg.Rsp.status; |
dflet | 0:bbe98578d4c0 | 252 | } |
dflet | 0:bbe98578d4c0 | 253 | |
dflet | 0:bbe98578d4c0 | 254 | _SlDrvReleasePoolObj((_u8)ObjIdx); |
dflet | 0:bbe98578d4c0 | 255 | |
dflet | 0:bbe98578d4c0 | 256 | sl_IfRegIntHdlr(NULL, NULL); |
dflet | 0:bbe98578d4c0 | 257 | sl_DeviceDisable(); |
dflet | 0:bbe98578d4c0 | 258 | sl_IfClose(g_pCB->FD); |
dflet | 0:bbe98578d4c0 | 259 | } |
dflet | 0:bbe98578d4c0 | 260 | _SlDrvDriverCBDeinit(); |
dflet | 0:bbe98578d4c0 | 261 | |
dflet | 0:bbe98578d4c0 | 262 | return RetVal; |
dflet | 0:bbe98578d4c0 | 263 | } |
dflet | 0:bbe98578d4c0 | 264 | #endif |
dflet | 0:bbe98578d4c0 | 265 | |
dflet | 0:bbe98578d4c0 | 266 | |
dflet | 0:bbe98578d4c0 | 267 | /***************************************************************************** |
dflet | 0:bbe98578d4c0 | 268 | sl_EventMaskSet |
dflet | 0:bbe98578d4c0 | 269 | *****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 270 | typedef union |
dflet | 0:bbe98578d4c0 | 271 | { |
dflet | 0:bbe98578d4c0 | 272 | _DevMaskEventSetCommand_t Cmd; |
dflet | 0:bbe98578d4c0 | 273 | _BasicResponse_t Rsp; |
dflet | 0:bbe98578d4c0 | 274 | }_SlEventMaskSetMsg_u; |
dflet | 0:bbe98578d4c0 | 275 | |
dflet | 0:bbe98578d4c0 | 276 | const _SlCmdCtrl_t _SlEventMaskSetCmdCtrl = |
dflet | 0:bbe98578d4c0 | 277 | { |
dflet | 0:bbe98578d4c0 | 278 | SL_OPCODE_DEVICE_EVENTMASKSET, |
dflet | 0:bbe98578d4c0 | 279 | sizeof(_DevMaskEventSetCommand_t), |
dflet | 0:bbe98578d4c0 | 280 | sizeof(_BasicResponse_t) |
dflet | 0:bbe98578d4c0 | 281 | }; |
dflet | 0:bbe98578d4c0 | 282 | |
dflet | 0:bbe98578d4c0 | 283 | #if _SL_INCLUDE_FUNC(sl_EventMaskSet) |
dflet | 0:bbe98578d4c0 | 284 | _i16 sl_EventMaskSet(_u8 EventClass , _u32 Mask) |
dflet | 0:bbe98578d4c0 | 285 | { |
dflet | 0:bbe98578d4c0 | 286 | _SlEventMaskSetMsg_u Msg; |
dflet | 0:bbe98578d4c0 | 287 | |
dflet | 0:bbe98578d4c0 | 288 | Msg.Cmd.group = EventClass; |
dflet | 0:bbe98578d4c0 | 289 | Msg.Cmd.mask = Mask; |
dflet | 0:bbe98578d4c0 | 290 | |
dflet | 0:bbe98578d4c0 | 291 | VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlEventMaskSetCmdCtrl, &Msg, NULL)); |
dflet | 0:bbe98578d4c0 | 292 | |
dflet | 0:bbe98578d4c0 | 293 | return (_i16)Msg.Rsp.status; |
dflet | 0:bbe98578d4c0 | 294 | } |
dflet | 0:bbe98578d4c0 | 295 | #endif |
dflet | 0:bbe98578d4c0 | 296 | |
dflet | 0:bbe98578d4c0 | 297 | /****************************************************************************** |
dflet | 0:bbe98578d4c0 | 298 | sl_EventMaskGet |
dflet | 0:bbe98578d4c0 | 299 | ******************************************************************************/ |
dflet | 0:bbe98578d4c0 | 300 | typedef union |
dflet | 0:bbe98578d4c0 | 301 | { |
dflet | 0:bbe98578d4c0 | 302 | _DevMaskEventGetCommand_t Cmd; |
dflet | 0:bbe98578d4c0 | 303 | _DevMaskEventGetResponse_t Rsp; |
dflet | 0:bbe98578d4c0 | 304 | }_SlEventMaskGetMsg_u; |
dflet | 0:bbe98578d4c0 | 305 | |
dflet | 0:bbe98578d4c0 | 306 | const _SlCmdCtrl_t _SlEventMaskGetCmdCtrl = |
dflet | 0:bbe98578d4c0 | 307 | { |
dflet | 0:bbe98578d4c0 | 308 | SL_OPCODE_DEVICE_EVENTMASKGET, |
dflet | 0:bbe98578d4c0 | 309 | sizeof(_DevMaskEventGetCommand_t), |
dflet | 0:bbe98578d4c0 | 310 | sizeof(_DevMaskEventGetResponse_t) |
dflet | 0:bbe98578d4c0 | 311 | }; |
dflet | 0:bbe98578d4c0 | 312 | |
dflet | 0:bbe98578d4c0 | 313 | #if _SL_INCLUDE_FUNC(sl_EventMaskGet) |
dflet | 0:bbe98578d4c0 | 314 | _i16 sl_EventMaskGet(_u8 EventClass, _u32 *pMask) |
dflet | 0:bbe98578d4c0 | 315 | { |
dflet | 0:bbe98578d4c0 | 316 | _SlEventMaskGetMsg_u Msg; |
dflet | 0:bbe98578d4c0 | 317 | |
dflet | 0:bbe98578d4c0 | 318 | Msg.Cmd.group = EventClass; |
dflet | 0:bbe98578d4c0 | 319 | |
dflet | 0:bbe98578d4c0 | 320 | VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlEventMaskGetCmdCtrl, &Msg, NULL)); |
dflet | 0:bbe98578d4c0 | 321 | |
dflet | 0:bbe98578d4c0 | 322 | *pMask = Msg.Rsp.mask; |
dflet | 0:bbe98578d4c0 | 323 | return SL_RET_CODE_OK; |
dflet | 0:bbe98578d4c0 | 324 | } |
dflet | 0:bbe98578d4c0 | 325 | #endif |
dflet | 0:bbe98578d4c0 | 326 | |
dflet | 0:bbe98578d4c0 | 327 | |
dflet | 0:bbe98578d4c0 | 328 | |
dflet | 0:bbe98578d4c0 | 329 | /****************************************************************************** |
dflet | 0:bbe98578d4c0 | 330 | sl_DevGet |
dflet | 0:bbe98578d4c0 | 331 | ******************************************************************************/ |
dflet | 0:bbe98578d4c0 | 332 | |
dflet | 0:bbe98578d4c0 | 333 | typedef union |
dflet | 0:bbe98578d4c0 | 334 | { |
dflet | 0:bbe98578d4c0 | 335 | _DeviceSetGet_t Cmd; |
dflet | 0:bbe98578d4c0 | 336 | _DeviceSetGet_t Rsp; |
dflet | 0:bbe98578d4c0 | 337 | }_SlDeviceMsgGet_u; |
dflet | 0:bbe98578d4c0 | 338 | |
dflet | 0:bbe98578d4c0 | 339 | const _SlCmdCtrl_t _SlDeviceGetCmdCtrl = |
dflet | 0:bbe98578d4c0 | 340 | { |
dflet | 0:bbe98578d4c0 | 341 | SL_OPCODE_DEVICE_DEVICEGET, |
dflet | 0:bbe98578d4c0 | 342 | sizeof(_DeviceSetGet_t), |
dflet | 0:bbe98578d4c0 | 343 | sizeof(_DeviceSetGet_t) |
dflet | 0:bbe98578d4c0 | 344 | }; |
dflet | 0:bbe98578d4c0 | 345 | |
dflet | 0:bbe98578d4c0 | 346 | #if _SL_INCLUDE_FUNC(sl_DevGet) |
dflet | 0:bbe98578d4c0 | 347 | _i32 sl_DevGet(_u8 DeviceGetId, _u8 *pOption,_u8 *pConfigLen, _u8 *pValues) |
dflet | 0:bbe98578d4c0 | 348 | { |
dflet | 0:bbe98578d4c0 | 349 | _SlDeviceMsgGet_u Msg; |
dflet | 0:bbe98578d4c0 | 350 | _SlCmdExt_t CmdExt; |
dflet | 0:bbe98578d4c0 | 351 | |
dflet | 0:bbe98578d4c0 | 352 | if (*pConfigLen == 0) |
dflet | 0:bbe98578d4c0 | 353 | { |
dflet | 0:bbe98578d4c0 | 354 | return SL_EZEROLEN; |
dflet | 0:bbe98578d4c0 | 355 | } |
dflet | 0:bbe98578d4c0 | 356 | |
dflet | 0:bbe98578d4c0 | 357 | if( pOption ) |
dflet | 0:bbe98578d4c0 | 358 | { |
dflet | 0:bbe98578d4c0 | 359 | CmdExt.TxPayloadLen = 0; |
dflet | 0:bbe98578d4c0 | 360 | CmdExt.RxPayloadLen = *pConfigLen; |
dflet | 0:bbe98578d4c0 | 361 | CmdExt.pTxPayload = NULL; |
dflet | 0:bbe98578d4c0 | 362 | CmdExt.pRxPayload = (_u8 *)pValues; |
dflet | 0:bbe98578d4c0 | 363 | CmdExt.ActualRxPayloadLen = 0; |
dflet | 0:bbe98578d4c0 | 364 | |
dflet | 0:bbe98578d4c0 | 365 | Msg.Cmd.DeviceSetId = DeviceGetId; |
dflet | 0:bbe98578d4c0 | 366 | |
dflet | 0:bbe98578d4c0 | 367 | Msg.Cmd.Option = (_u16)*pOption; |
dflet | 0:bbe98578d4c0 | 368 | |
dflet | 0:bbe98578d4c0 | 369 | VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlDeviceGetCmdCtrl, &Msg, &CmdExt)); |
dflet | 0:bbe98578d4c0 | 370 | |
dflet | 0:bbe98578d4c0 | 371 | if( pOption ) |
dflet | 0:bbe98578d4c0 | 372 | { |
dflet | 0:bbe98578d4c0 | 373 | *pOption = (_u8)Msg.Rsp.Option; |
dflet | 0:bbe98578d4c0 | 374 | } |
dflet | 0:bbe98578d4c0 | 375 | |
dflet | 0:bbe98578d4c0 | 376 | if (CmdExt.RxPayloadLen < CmdExt.ActualRxPayloadLen) |
dflet | 0:bbe98578d4c0 | 377 | { |
dflet | 0:bbe98578d4c0 | 378 | *pConfigLen = (_u8)CmdExt.RxPayloadLen; |
dflet | 0:bbe98578d4c0 | 379 | return SL_ESMALLBUF; |
dflet | 0:bbe98578d4c0 | 380 | } |
dflet | 0:bbe98578d4c0 | 381 | else |
dflet | 0:bbe98578d4c0 | 382 | { |
dflet | 0:bbe98578d4c0 | 383 | *pConfigLen = (_u8)CmdExt.ActualRxPayloadLen; |
dflet | 0:bbe98578d4c0 | 384 | } |
dflet | 0:bbe98578d4c0 | 385 | |
dflet | 0:bbe98578d4c0 | 386 | return (_i16)Msg.Rsp.Status; |
dflet | 0:bbe98578d4c0 | 387 | } |
dflet | 0:bbe98578d4c0 | 388 | else |
dflet | 0:bbe98578d4c0 | 389 | { |
dflet | 0:bbe98578d4c0 | 390 | return -1; |
dflet | 0:bbe98578d4c0 | 391 | } |
dflet | 0:bbe98578d4c0 | 392 | } |
dflet | 0:bbe98578d4c0 | 393 | #endif |
dflet | 0:bbe98578d4c0 | 394 | |
dflet | 0:bbe98578d4c0 | 395 | /****************************************************************************** |
dflet | 0:bbe98578d4c0 | 396 | sl_DevSet |
dflet | 0:bbe98578d4c0 | 397 | ******************************************************************************/ |
dflet | 0:bbe98578d4c0 | 398 | typedef union |
dflet | 0:bbe98578d4c0 | 399 | { |
dflet | 0:bbe98578d4c0 | 400 | _DeviceSetGet_t Cmd; |
dflet | 0:bbe98578d4c0 | 401 | _BasicResponse_t Rsp; |
dflet | 0:bbe98578d4c0 | 402 | }_SlDeviceMsgSet_u; |
dflet | 0:bbe98578d4c0 | 403 | |
dflet | 0:bbe98578d4c0 | 404 | const _SlCmdCtrl_t _SlDeviceSetCmdCtrl = |
dflet | 0:bbe98578d4c0 | 405 | { |
dflet | 0:bbe98578d4c0 | 406 | SL_OPCODE_DEVICE_DEVICESET, |
dflet | 0:bbe98578d4c0 | 407 | sizeof(_DeviceSetGet_t), |
dflet | 0:bbe98578d4c0 | 408 | sizeof(_BasicResponse_t) |
dflet | 0:bbe98578d4c0 | 409 | }; |
dflet | 0:bbe98578d4c0 | 410 | |
dflet | 0:bbe98578d4c0 | 411 | #if _SL_INCLUDE_FUNC(sl_DevSet) |
dflet | 0:bbe98578d4c0 | 412 | _i32 sl_DevSet(_u8 DeviceSetId ,_u8 Option,_u8 ConfigLen, _u8 *pValues) |
dflet | 0:bbe98578d4c0 | 413 | { |
dflet | 0:bbe98578d4c0 | 414 | _SlDeviceMsgSet_u Msg; |
dflet | 0:bbe98578d4c0 | 415 | _SlCmdExt_t CmdExt; |
dflet | 0:bbe98578d4c0 | 416 | |
dflet | 0:bbe98578d4c0 | 417 | CmdExt.TxPayloadLen = (ConfigLen+3) & (~3); |
dflet | 0:bbe98578d4c0 | 418 | CmdExt.RxPayloadLen = 0; |
dflet | 0:bbe98578d4c0 | 419 | CmdExt.pTxPayload = (_u8 *)pValues; |
dflet | 0:bbe98578d4c0 | 420 | CmdExt.pRxPayload = NULL; |
dflet | 0:bbe98578d4c0 | 421 | |
dflet | 0:bbe98578d4c0 | 422 | |
dflet | 0:bbe98578d4c0 | 423 | Msg.Cmd.DeviceSetId = DeviceSetId; |
dflet | 0:bbe98578d4c0 | 424 | Msg.Cmd.ConfigLen = ConfigLen; |
dflet | 0:bbe98578d4c0 | 425 | Msg.Cmd.Option = Option; |
dflet | 0:bbe98578d4c0 | 426 | |
dflet | 0:bbe98578d4c0 | 427 | VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlDeviceSetCmdCtrl, &Msg, &CmdExt)); |
dflet | 0:bbe98578d4c0 | 428 | |
dflet | 0:bbe98578d4c0 | 429 | return (_i16)Msg.Rsp.status; |
dflet | 0:bbe98578d4c0 | 430 | } |
dflet | 0:bbe98578d4c0 | 431 | #endif |
dflet | 0:bbe98578d4c0 | 432 | |
dflet | 0:bbe98578d4c0 | 433 | |
dflet | 0:bbe98578d4c0 | 434 | /****************************************************************************** |
dflet | 0:bbe98578d4c0 | 435 | _SlDrvDeviceEventHandler - handles internally device async events |
dflet | 0:bbe98578d4c0 | 436 | ******************************************************************************/ |
dflet | 0:bbe98578d4c0 | 437 | void _SlDrvDeviceEventHandler(void *pArgs) |
dflet | 0:bbe98578d4c0 | 438 | { |
dflet | 0:bbe98578d4c0 | 439 | _SlResponseHeader_t *pHdr = (_SlResponseHeader_t *)pArgs; |
dflet | 0:bbe98578d4c0 | 440 | |
dflet | 0:bbe98578d4c0 | 441 | switch(pHdr->GenHeader.Opcode) |
dflet | 0:bbe98578d4c0 | 442 | { |
dflet | 0:bbe98578d4c0 | 443 | case SL_OPCODE_DEVICE_INITCOMPLETE: |
dflet | 0:bbe98578d4c0 | 444 | _sl_HandleAsync_InitComplete(pHdr); |
dflet | 0:bbe98578d4c0 | 445 | break; |
dflet | 0:bbe98578d4c0 | 446 | case SL_OPCODE_DEVICE_STOP_ASYNC_RESPONSE: |
dflet | 0:bbe98578d4c0 | 447 | _sl_HandleAsync_Stop(pHdr); |
dflet | 0:bbe98578d4c0 | 448 | break; |
dflet | 0:bbe98578d4c0 | 449 | case SL_OPCODE_DEVICE_DEVICEASYNCFATALERROR: |
dflet | 0:bbe98578d4c0 | 450 | #ifdef sl_GeneralEvtHdlr |
dflet | 0:bbe98578d4c0 | 451 | { |
dflet | 0:bbe98578d4c0 | 452 | _BasicResponse_t *pMsgArgs = (_BasicResponse_t *)_SL_RESP_ARGS_START(pHdr); |
dflet | 0:bbe98578d4c0 | 453 | SlDeviceEvent_t devHandler; |
dflet | 0:bbe98578d4c0 | 454 | devHandler.Event = SL_DEVICE_FATAL_ERROR_EVENT; |
dflet | 0:bbe98578d4c0 | 455 | devHandler.EventData.deviceEvent.status = pMsgArgs->status & 0xFF; |
dflet | 0:bbe98578d4c0 | 456 | devHandler.EventData.deviceEvent.sender = (SlErrorSender_e)((pMsgArgs->status >> 8) & 0xFF); |
dflet | 0:bbe98578d4c0 | 457 | sl_GeneralEvtHdlr(&devHandler); |
dflet | 0:bbe98578d4c0 | 458 | } |
dflet | 0:bbe98578d4c0 | 459 | #endif |
dflet | 0:bbe98578d4c0 | 460 | break; |
dflet | 0:bbe98578d4c0 | 461 | default: |
dflet | 0:bbe98578d4c0 | 462 | SL_ERROR_TRACE2(MSG_306, "ASSERT: _SlDrvDeviceEventHandler : invalid opcode = 0x%x = %1", pHdr->GenHeader.Opcode, pHdr->GenHeader.Opcode); |
dflet | 0:bbe98578d4c0 | 463 | VERIFY_PROTOCOL(0); |
dflet | 0:bbe98578d4c0 | 464 | } |
dflet | 0:bbe98578d4c0 | 465 | } |
dflet | 0:bbe98578d4c0 | 466 | |
dflet | 0:bbe98578d4c0 | 467 | |
dflet | 0:bbe98578d4c0 | 468 | /****************************************************************************** |
dflet | 0:bbe98578d4c0 | 469 | sl_UartSetMode |
dflet | 0:bbe98578d4c0 | 470 | ******************************************************************************/ |
dflet | 0:bbe98578d4c0 | 471 | #ifdef SL_IF_TYPE_UART |
dflet | 0:bbe98578d4c0 | 472 | typedef union |
dflet | 0:bbe98578d4c0 | 473 | { |
dflet | 0:bbe98578d4c0 | 474 | _DevUartSetModeCommand_t Cmd; |
dflet | 0:bbe98578d4c0 | 475 | _DevUartSetModeResponse_t Rsp; |
dflet | 0:bbe98578d4c0 | 476 | }_SlUartSetModeMsg_u; |
dflet | 0:bbe98578d4c0 | 477 | |
dflet | 0:bbe98578d4c0 | 478 | const _SlCmdCtrl_t _SlUartSetModeCmdCtrl = |
dflet | 0:bbe98578d4c0 | 479 | { |
dflet | 0:bbe98578d4c0 | 480 | SL_OPCODE_DEVICE_SETUARTMODECOMMAND, |
dflet | 0:bbe98578d4c0 | 481 | sizeof(_DevUartSetModeCommand_t), |
dflet | 0:bbe98578d4c0 | 482 | sizeof(_DevUartSetModeResponse_t) |
dflet | 0:bbe98578d4c0 | 483 | }; |
dflet | 0:bbe98578d4c0 | 484 | |
dflet | 0:bbe98578d4c0 | 485 | |
dflet | 0:bbe98578d4c0 | 486 | #if _SL_INCLUDE_FUNC(sl_UartSetMode) |
dflet | 0:bbe98578d4c0 | 487 | _i16 sl_UartSetMode(const SlUartIfParams_t* pUartParams) |
dflet | 0:bbe98578d4c0 | 488 | { |
dflet | 0:bbe98578d4c0 | 489 | _SlUartSetModeMsg_u Msg; |
dflet | 0:bbe98578d4c0 | 490 | _u32 magicCode = 0xFFFFFFFF; |
dflet | 0:bbe98578d4c0 | 491 | |
dflet | 0:bbe98578d4c0 | 492 | Msg.Cmd.BaudRate = pUartParams->BaudRate; |
dflet | 0:bbe98578d4c0 | 493 | Msg.Cmd.FlowControlEnable = pUartParams->FlowControlEnable; |
dflet | 0:bbe98578d4c0 | 494 | |
dflet | 0:bbe98578d4c0 | 495 | |
dflet | 0:bbe98578d4c0 | 496 | VERIFY_RET_OK(_SlDrvCmdOp((_SlCmdCtrl_t *)&_SlUartSetModeCmdCtrl, &Msg, NULL)); |
dflet | 0:bbe98578d4c0 | 497 | |
dflet | 0:bbe98578d4c0 | 498 | /* cmd response OK, we can continue with the handshake */ |
dflet | 0:bbe98578d4c0 | 499 | if (SL_RET_CODE_OK == Msg.Rsp.status) |
dflet | 0:bbe98578d4c0 | 500 | { |
dflet | 0:bbe98578d4c0 | 501 | sl_IfMaskIntHdlr(); |
dflet | 0:bbe98578d4c0 | 502 | |
dflet | 0:bbe98578d4c0 | 503 | /* Close the comm port */ |
dflet | 0:bbe98578d4c0 | 504 | sl_IfClose(g_pCB->FD); |
dflet | 0:bbe98578d4c0 | 505 | |
dflet | 0:bbe98578d4c0 | 506 | /* Re-open the comm port */ |
dflet | 0:bbe98578d4c0 | 507 | sl_IfOpen((void * )pUartParams, UART_IF_OPEN_FLAG_RE_OPEN); |
dflet | 0:bbe98578d4c0 | 508 | |
dflet | 0:bbe98578d4c0 | 509 | sl_IfUnMaskIntHdlr(); |
dflet | 0:bbe98578d4c0 | 510 | |
dflet | 0:bbe98578d4c0 | 511 | /* send the magic code and wait for the response */ |
dflet | 0:bbe98578d4c0 | 512 | sl_IfWrite(g_pCB->FD, (_u8* )&magicCode, 4); |
dflet | 0:bbe98578d4c0 | 513 | |
dflet | 0:bbe98578d4c0 | 514 | magicCode = UART_SET_MODE_MAGIC_CODE; |
dflet | 0:bbe98578d4c0 | 515 | sl_IfWrite(g_pCB->FD, (_u8* )&magicCode, 4); |
dflet | 0:bbe98578d4c0 | 516 | |
dflet | 0:bbe98578d4c0 | 517 | /* clear magic code */ |
dflet | 0:bbe98578d4c0 | 518 | magicCode = 0; |
dflet | 0:bbe98578d4c0 | 519 | |
dflet | 0:bbe98578d4c0 | 520 | /* wait (blocking) till the magic code to be returned from device */ |
dflet | 0:bbe98578d4c0 | 521 | sl_IfRead(g_pCB->FD, (_u8* )&magicCode, 4); |
dflet | 0:bbe98578d4c0 | 522 | |
dflet | 0:bbe98578d4c0 | 523 | /* check for the received magic code matching */ |
dflet | 0:bbe98578d4c0 | 524 | if (UART_SET_MODE_MAGIC_CODE != magicCode) |
dflet | 0:bbe98578d4c0 | 525 | { |
dflet | 0:bbe98578d4c0 | 526 | _SL_ASSERT(0); |
dflet | 0:bbe98578d4c0 | 527 | } |
dflet | 0:bbe98578d4c0 | 528 | } |
dflet | 0:bbe98578d4c0 | 529 | |
dflet | 0:bbe98578d4c0 | 530 | return (_i16)Msg.Rsp.status; |
dflet | 0:bbe98578d4c0 | 531 | } |
dflet | 0:bbe98578d4c0 | 532 | #endif |
dflet | 0:bbe98578d4c0 | 533 | #endif |
dflet | 0:bbe98578d4c0 | 534 | |
dflet | 0:bbe98578d4c0 | 535 | /*! |
dflet | 0:bbe98578d4c0 | 536 | \brief This function handles general error events indication |
dflet | 0:bbe98578d4c0 | 537 | |
dflet | 0:bbe98578d4c0 | 538 | \param[in] pDevEvent is the event passed to the handler |
dflet | 0:bbe98578d4c0 | 539 | |
dflet | 0:bbe98578d4c0 | 540 | \return None |
dflet | 0:bbe98578d4c0 | 541 | */ |
dflet | 0:bbe98578d4c0 | 542 | void SimpleLinkGeneralEventHandler(SlDeviceEvent_t *pDevEvent) |
dflet | 0:bbe98578d4c0 | 543 | { |
dflet | 0:bbe98578d4c0 | 544 | /* |
dflet | 0:bbe98578d4c0 | 545 | * Most of the general errors are not FATAL are are to be handled |
dflet | 0:bbe98578d4c0 | 546 | * appropriately by the application |
dflet | 0:bbe98578d4c0 | 547 | */ |
dflet | 0:bbe98578d4c0 | 548 | // CLI_Write((_u8 *)" [GENERAL EVENT] \n\r"); |
dflet | 0:bbe98578d4c0 | 549 | printf(" [GENERAL EVENT] \n\r"); |
dflet | 0:bbe98578d4c0 | 550 | } |