David Fletcher
/
cc3100_test
TI's CC3100 host driver and demo. Experimental and a work in progress.
simplelink/cc3100_driver.h@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 | * driver.h - 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 | #ifndef __DRIVER_INT_H__ |
dflet | 0:bbe98578d4c0 | 38 | #define __DRIVER_INT_H__ |
dflet | 0:bbe98578d4c0 | 39 | |
dflet | 0:bbe98578d4c0 | 40 | #include "cc3100_protocol.h"//added |
dflet | 0:bbe98578d4c0 | 41 | |
dflet | 0:bbe98578d4c0 | 42 | #ifdef __cplusplus //added |
dflet | 0:bbe98578d4c0 | 43 | extern "C" { |
dflet | 0:bbe98578d4c0 | 44 | #endif |
dflet | 0:bbe98578d4c0 | 45 | |
dflet | 0:bbe98578d4c0 | 46 | |
dflet | 0:bbe98578d4c0 | 47 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 48 | /* Macro declarations */ |
dflet | 0:bbe98578d4c0 | 49 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 50 | |
dflet | 0:bbe98578d4c0 | 51 | #ifndef CPU_FREQ_IN_MHZ |
dflet | 0:bbe98578d4c0 | 52 | #define CPU_FREQ_IN_MHZ (200) |
dflet | 0:bbe98578d4c0 | 53 | #endif |
dflet | 0:bbe98578d4c0 | 54 | #define USEC_DELAY (50) |
dflet | 0:bbe98578d4c0 | 55 | |
dflet | 0:bbe98578d4c0 | 56 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 57 | /* Structure/Enum declarations */ |
dflet | 0:bbe98578d4c0 | 58 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 59 | |
dflet | 0:bbe98578d4c0 | 60 | typedef struct |
dflet | 0:bbe98578d4c0 | 61 | { |
dflet | 0:bbe98578d4c0 | 62 | _SlOpcode_t Opcode; |
dflet | 0:bbe98578d4c0 | 63 | _SlArgSize_t TxDescLen; |
dflet | 0:bbe98578d4c0 | 64 | _SlArgSize_t RxDescLen; |
dflet | 0:bbe98578d4c0 | 65 | }_SlCmdCtrl_t; |
dflet | 0:bbe98578d4c0 | 66 | |
dflet | 0:bbe98578d4c0 | 67 | typedef struct |
dflet | 0:bbe98578d4c0 | 68 | { |
dflet | 0:bbe98578d4c0 | 69 | _u16 TxPayloadLen; |
dflet | 0:bbe98578d4c0 | 70 | _u16 RxPayloadLen; |
dflet | 0:bbe98578d4c0 | 71 | _u16 ActualRxPayloadLen; |
dflet | 0:bbe98578d4c0 | 72 | _u8 *pTxPayload; |
dflet | 0:bbe98578d4c0 | 73 | _u8 *pRxPayload; |
dflet | 0:bbe98578d4c0 | 74 | }_SlCmdExt_t; |
dflet | 0:bbe98578d4c0 | 75 | |
dflet | 0:bbe98578d4c0 | 76 | |
dflet | 0:bbe98578d4c0 | 77 | typedef struct _SlArgsData_t |
dflet | 0:bbe98578d4c0 | 78 | { |
dflet | 0:bbe98578d4c0 | 79 | _u8 *pArgs; |
dflet | 0:bbe98578d4c0 | 80 | _u8 *pData; |
dflet | 0:bbe98578d4c0 | 81 | } _SlArgsData_t; |
dflet | 0:bbe98578d4c0 | 82 | |
dflet | 0:bbe98578d4c0 | 83 | |
dflet | 0:bbe98578d4c0 | 84 | typedef struct _SlPoolObj_t |
dflet | 0:bbe98578d4c0 | 85 | { |
dflet | 0:bbe98578d4c0 | 86 | _SlSyncObj_t SyncObj; |
dflet | 0:bbe98578d4c0 | 87 | _u8 *pRespArgs; |
dflet | 0:bbe98578d4c0 | 88 | _u8 ActionID; |
dflet | 0:bbe98578d4c0 | 89 | _u8 AdditionalData; /* use for socketID and one bit which indicate supprt IPV6 or not (1=support, 0 otherwise) */ |
dflet | 0:bbe98578d4c0 | 90 | _u8 NextIndex; |
dflet | 0:bbe98578d4c0 | 91 | |
dflet | 0:bbe98578d4c0 | 92 | } _SlPoolObj_t; |
dflet | 0:bbe98578d4c0 | 93 | |
dflet | 0:bbe98578d4c0 | 94 | |
dflet | 0:bbe98578d4c0 | 95 | typedef enum |
dflet | 0:bbe98578d4c0 | 96 | { |
dflet | 0:bbe98578d4c0 | 97 | SOCKET_0, |
dflet | 0:bbe98578d4c0 | 98 | SOCKET_1, |
dflet | 0:bbe98578d4c0 | 99 | SOCKET_2, |
dflet | 0:bbe98578d4c0 | 100 | SOCKET_3, |
dflet | 0:bbe98578d4c0 | 101 | SOCKET_4, |
dflet | 0:bbe98578d4c0 | 102 | SOCKET_5, |
dflet | 0:bbe98578d4c0 | 103 | SOCKET_6, |
dflet | 0:bbe98578d4c0 | 104 | SOCKET_7, |
dflet | 0:bbe98578d4c0 | 105 | MAX_SOCKET_ENUM_IDX, |
dflet | 0:bbe98578d4c0 | 106 | ACCEPT_ID = MAX_SOCKET_ENUM_IDX, |
dflet | 0:bbe98578d4c0 | 107 | CONNECT_ID, |
dflet | 0:bbe98578d4c0 | 108 | SELECT_ID, |
dflet | 0:bbe98578d4c0 | 109 | GETHOSYBYNAME_ID, |
dflet | 0:bbe98578d4c0 | 110 | GETHOSYBYSERVICE_ID, |
dflet | 0:bbe98578d4c0 | 111 | PING_ID, |
dflet | 0:bbe98578d4c0 | 112 | START_STOP_ID, |
dflet | 0:bbe98578d4c0 | 113 | RECV_ID |
dflet | 0:bbe98578d4c0 | 114 | }_SlActionID_e; |
dflet | 0:bbe98578d4c0 | 115 | |
dflet | 0:bbe98578d4c0 | 116 | typedef struct _SlActionLookup_t |
dflet | 0:bbe98578d4c0 | 117 | { |
dflet | 0:bbe98578d4c0 | 118 | _u8 ActionID; |
dflet | 0:bbe98578d4c0 | 119 | _u16 ActionAsyncOpcode; |
dflet | 0:bbe98578d4c0 | 120 | _SlSpawnEntryFunc_t AsyncEventHandler; |
dflet | 0:bbe98578d4c0 | 121 | |
dflet | 0:bbe98578d4c0 | 122 | } _SlActionLookup_t; |
dflet | 0:bbe98578d4c0 | 123 | |
dflet | 0:bbe98578d4c0 | 124 | |
dflet | 0:bbe98578d4c0 | 125 | typedef struct |
dflet | 0:bbe98578d4c0 | 126 | { |
dflet | 0:bbe98578d4c0 | 127 | _u8 TxPoolCnt; |
dflet | 0:bbe98578d4c0 | 128 | _SlLockObj_t TxLockObj; |
dflet | 0:bbe98578d4c0 | 129 | _SlSyncObj_t TxSyncObj; |
dflet | 0:bbe98578d4c0 | 130 | }_SlFlowContCB_t; |
dflet | 0:bbe98578d4c0 | 131 | |
dflet | 0:bbe98578d4c0 | 132 | typedef enum |
dflet | 0:bbe98578d4c0 | 133 | { |
dflet | 0:bbe98578d4c0 | 134 | RECV_RESP_CLASS, |
dflet | 0:bbe98578d4c0 | 135 | CMD_RESP_CLASS, |
dflet | 0:bbe98578d4c0 | 136 | ASYNC_EVT_CLASS, |
dflet | 0:bbe98578d4c0 | 137 | DUMMY_MSG_CLASS |
dflet | 0:bbe98578d4c0 | 138 | }_SlRxMsgClass_e; |
dflet | 0:bbe98578d4c0 | 139 | |
dflet | 0:bbe98578d4c0 | 140 | typedef struct |
dflet | 0:bbe98578d4c0 | 141 | { |
dflet | 0:bbe98578d4c0 | 142 | _u8 *pAsyncBuf; /* place to write pointer to buffer with CmdResp's Header + Arguments */ |
dflet | 0:bbe98578d4c0 | 143 | _u8 ActionIndex; |
dflet | 0:bbe98578d4c0 | 144 | _SlSpawnEntryFunc_t AsyncEvtHandler; /* place to write pointer to AsyncEvent handler (calc-ed by Opcode) */ |
dflet | 0:bbe98578d4c0 | 145 | _SlRxMsgClass_e RxMsgClass; /* type of Rx message */ |
dflet | 0:bbe98578d4c0 | 146 | } AsyncExt_t; |
dflet | 0:bbe98578d4c0 | 147 | |
dflet | 0:bbe98578d4c0 | 148 | typedef _u8 _SlSd_t; |
dflet | 0:bbe98578d4c0 | 149 | |
dflet | 0:bbe98578d4c0 | 150 | typedef struct |
dflet | 0:bbe98578d4c0 | 151 | { |
dflet | 0:bbe98578d4c0 | 152 | _SlCmdCtrl_t *pCmdCtrl; |
dflet | 0:bbe98578d4c0 | 153 | _u8 *pTxRxDescBuff; |
dflet | 0:bbe98578d4c0 | 154 | _SlCmdExt_t *pCmdExt; |
dflet | 0:bbe98578d4c0 | 155 | AsyncExt_t AsyncExt; |
dflet | 0:bbe98578d4c0 | 156 | }_SlFunctionParams_t; |
dflet | 0:bbe98578d4c0 | 157 | |
dflet | 0:bbe98578d4c0 | 158 | |
dflet | 0:bbe98578d4c0 | 159 | typedef struct |
dflet | 0:bbe98578d4c0 | 160 | { |
dflet | 0:bbe98578d4c0 | 161 | _SlFd_t FD; |
dflet | 0:bbe98578d4c0 | 162 | _SlLockObj_t GlobalLockObj; |
dflet | 0:bbe98578d4c0 | 163 | _SlCommandHeader_t TempProtocolHeader; |
dflet | 0:bbe98578d4c0 | 164 | P_INIT_CALLBACK pInitCallback; |
dflet | 0:bbe98578d4c0 | 165 | |
dflet | 0:bbe98578d4c0 | 166 | _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS]; |
dflet | 0:bbe98578d4c0 | 167 | _u8 FreePoolIdx; |
dflet | 0:bbe98578d4c0 | 168 | _u8 PendingPoolIdx; |
dflet | 0:bbe98578d4c0 | 169 | _u8 ActivePoolIdx; |
dflet | 0:bbe98578d4c0 | 170 | _u32 ActiveActionsBitmap; |
dflet | 0:bbe98578d4c0 | 171 | _SlLockObj_t ProtectionLockObj; |
dflet | 0:bbe98578d4c0 | 172 | |
dflet | 0:bbe98578d4c0 | 173 | _SlSyncObj_t CmdSyncObj; |
dflet | 0:bbe98578d4c0 | 174 | _u8 IsCmdRespWaited; |
dflet | 0:bbe98578d4c0 | 175 | |
dflet | 0:bbe98578d4c0 | 176 | _SlFlowContCB_t FlowContCB; |
dflet | 0:bbe98578d4c0 | 177 | |
dflet | 0:bbe98578d4c0 | 178 | _u8 TxSeqNum; |
dflet | 0:bbe98578d4c0 | 179 | _volatile _u8 RxIrqCnt; |
dflet | 0:bbe98578d4c0 | 180 | _u8 RxDoneCnt; |
dflet | 0:bbe98578d4c0 | 181 | _u8 SocketNonBlocking; |
dflet | 0:bbe98578d4c0 | 182 | _u8 SocketTXFailure; |
dflet | 0:bbe98578d4c0 | 183 | _u8 RelayFlagsViaRxPayload; |
dflet | 0:bbe98578d4c0 | 184 | /* for stack reduction the parameters are globals */ |
dflet | 0:bbe98578d4c0 | 185 | _SlFunctionParams_t FunctionParams; |
dflet | 0:bbe98578d4c0 | 186 | |
dflet | 0:bbe98578d4c0 | 187 | }_SlDriverCb_t; |
dflet | 0:bbe98578d4c0 | 188 | |
dflet | 0:bbe98578d4c0 | 189 | |
dflet | 0:bbe98578d4c0 | 190 | |
dflet | 0:bbe98578d4c0 | 191 | extern _SlDriverCb_t* g_pCB; |
dflet | 0:bbe98578d4c0 | 192 | extern P_SL_DEV_PING_CALLBACK pPingCallBackFunc; |
dflet | 0:bbe98578d4c0 | 193 | |
dflet | 0:bbe98578d4c0 | 194 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 195 | /* Function prototypes */ |
dflet | 0:bbe98578d4c0 | 196 | /*****************************************************************************/ |
dflet | 0:bbe98578d4c0 | 197 | extern void _SlDrvDriverCBInit(void); |
dflet | 0:bbe98578d4c0 | 198 | extern void _SlDrvDriverCBDeinit(void); |
dflet | 0:bbe98578d4c0 | 199 | extern void _SlDrvRxIrqHandler(void *pValue); |
dflet | 0:bbe98578d4c0 | 200 | extern _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); |
dflet | 0:bbe98578d4c0 | 201 | extern _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); |
dflet | 0:bbe98578d4c0 | 202 | extern _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); |
dflet | 0:bbe98578d4c0 | 203 | extern _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); |
dflet | 0:bbe98578d4c0 | 204 | extern _i16 _SlDrvBasicCmd(_SlOpcode_t Opcode); |
dflet | 0:bbe98578d4c0 | 205 | |
dflet | 0:bbe98578d4c0 | 206 | extern void _sl_HandleAsync_InitComplete(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 207 | extern void _sl_HandleAsync_Connect(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 208 | extern void _sl_HandleAsync_Accept(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 209 | extern void _sl_HandleAsync_Select(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 210 | extern void _sl_HandleAsync_DnsGetHostByName(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 211 | extern void _sl_HandleAsync_DnsGetHostByService(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 212 | extern void _sl_HandleAsync_DnsGetHostByAddr(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 213 | extern void _sl_HandleAsync_PingResponse(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 214 | extern void _SlDrvNetAppEventHandler(void *pArgs); |
dflet | 0:bbe98578d4c0 | 215 | extern void _SlDrvDeviceEventHandler(void *pArgs); |
dflet | 0:bbe98578d4c0 | 216 | extern void _sl_HandleAsync_Stop(void *pVoidBuf); |
dflet | 0:bbe98578d4c0 | 217 | extern _i16 _SlDrvWaitForPoolObj(_u32 ActionID, _u8 SocketID); |
dflet | 0:bbe98578d4c0 | 218 | extern void _SlDrvReleasePoolObj(_u8 pObj); |
dflet | 0:bbe98578d4c0 | 219 | extern void _SlDrvObjInit(void); |
dflet | 0:bbe98578d4c0 | 220 | |
dflet | 0:bbe98578d4c0 | 221 | |
dflet | 0:bbe98578d4c0 | 222 | #define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3)) |
dflet | 0:bbe98578d4c0 | 223 | #define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3)) |
dflet | 0:bbe98578d4c0 | 224 | #define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \ |
dflet | 0:bbe98578d4c0 | 225 | (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayloadLen)) : \ |
dflet | 0:bbe98578d4c0 | 226 | (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen))) |
dflet | 0:bbe98578d4c0 | 227 | |
dflet | 0:bbe98578d4c0 | 228 | #ifdef __cplusplus |
dflet | 0:bbe98578d4c0 | 229 | } |
dflet | 0:bbe98578d4c0 | 230 | #endif /* __cplusplus */ |
dflet | 0:bbe98578d4c0 | 231 | |
dflet | 0:bbe98578d4c0 | 232 | #endif /* __DRIVER_INT_H__ */ |
dflet | 0:bbe98578d4c0 | 233 |