TI's CC3100 host driver and demo. Experimental and a work in progress.

Dependencies:   mbed

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?

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