David Fletcher
/
cc3100_test
TI's CC3100 host driver and demo. Experimental and a work in progress.
Embed:
(wiki syntax)
Show/hide line numbers
cc3100_driver.h
00001 /* 00002 * driver.h - CC31xx/CC32xx Host Driver Implementation 00003 * 00004 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ 00005 * 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions 00009 * are met: 00010 * 00011 * Redistributions of source code must retain the above copyright 00012 * notice, this list of conditions and the following disclaimer. 00013 * 00014 * Redistributions in binary form must reproduce the above copyright 00015 * notice, this list of conditions and the following disclaimer in the 00016 * documentation and/or other materials provided with the 00017 * distribution. 00018 * 00019 * Neither the name of Texas Instruments Incorporated nor the names of 00020 * its contributors may be used to endorse or promote products derived 00021 * from this software without specific prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00024 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00025 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00026 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00027 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00028 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00029 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00030 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00031 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00032 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 */ 00036 00037 #ifndef __DRIVER_INT_H__ 00038 #define __DRIVER_INT_H__ 00039 00040 #include "cc3100_protocol.h"//added 00041 00042 #ifdef __cplusplus //added 00043 extern "C" { 00044 #endif 00045 00046 00047 /*****************************************************************************/ 00048 /* Macro declarations */ 00049 /*****************************************************************************/ 00050 00051 #ifndef CPU_FREQ_IN_MHZ 00052 #define CPU_FREQ_IN_MHZ (200) 00053 #endif 00054 #define USEC_DELAY (50) 00055 00056 /*****************************************************************************/ 00057 /* Structure/Enum declarations */ 00058 /*****************************************************************************/ 00059 00060 typedef struct 00061 { 00062 _SlOpcode_t Opcode; 00063 _SlArgSize_t TxDescLen; 00064 _SlArgSize_t RxDescLen; 00065 }_SlCmdCtrl_t; 00066 00067 typedef struct 00068 { 00069 _u16 TxPayloadLen; 00070 _u16 RxPayloadLen; 00071 _u16 ActualRxPayloadLen; 00072 _u8 *pTxPayload; 00073 _u8 *pRxPayload; 00074 }_SlCmdExt_t; 00075 00076 00077 typedef struct _SlArgsData_t 00078 { 00079 _u8 *pArgs; 00080 _u8 *pData; 00081 } _SlArgsData_t; 00082 00083 00084 typedef struct _SlPoolObj_t 00085 { 00086 _SlSyncObj_t SyncObj; 00087 _u8 *pRespArgs; 00088 _u8 ActionID; 00089 _u8 AdditionalData; /* use for socketID and one bit which indicate supprt IPV6 or not (1=support, 0 otherwise) */ 00090 _u8 NextIndex; 00091 00092 } _SlPoolObj_t; 00093 00094 00095 typedef enum 00096 { 00097 SOCKET_0, 00098 SOCKET_1, 00099 SOCKET_2, 00100 SOCKET_3, 00101 SOCKET_4, 00102 SOCKET_5, 00103 SOCKET_6, 00104 SOCKET_7, 00105 MAX_SOCKET_ENUM_IDX, 00106 ACCEPT_ID = MAX_SOCKET_ENUM_IDX, 00107 CONNECT_ID, 00108 SELECT_ID, 00109 GETHOSYBYNAME_ID, 00110 GETHOSYBYSERVICE_ID, 00111 PING_ID, 00112 START_STOP_ID, 00113 RECV_ID 00114 }_SlActionID_e; 00115 00116 typedef struct _SlActionLookup_t 00117 { 00118 _u8 ActionID; 00119 _u16 ActionAsyncOpcode; 00120 _SlSpawnEntryFunc_t AsyncEventHandler; 00121 00122 } _SlActionLookup_t; 00123 00124 00125 typedef struct 00126 { 00127 _u8 TxPoolCnt; 00128 _SlLockObj_t TxLockObj; 00129 _SlSyncObj_t TxSyncObj; 00130 }_SlFlowContCB_t; 00131 00132 typedef enum 00133 { 00134 RECV_RESP_CLASS, 00135 CMD_RESP_CLASS, 00136 ASYNC_EVT_CLASS, 00137 DUMMY_MSG_CLASS 00138 }_SlRxMsgClass_e; 00139 00140 typedef struct 00141 { 00142 _u8 *pAsyncBuf; /* place to write pointer to buffer with CmdResp's Header + Arguments */ 00143 _u8 ActionIndex; 00144 _SlSpawnEntryFunc_t AsyncEvtHandler; /* place to write pointer to AsyncEvent handler (calc-ed by Opcode) */ 00145 _SlRxMsgClass_e RxMsgClass; /* type of Rx message */ 00146 } AsyncExt_t; 00147 00148 typedef _u8 _SlSd_t; 00149 00150 typedef struct 00151 { 00152 _SlCmdCtrl_t *pCmdCtrl; 00153 _u8 *pTxRxDescBuff; 00154 _SlCmdExt_t *pCmdExt; 00155 AsyncExt_t AsyncExt; 00156 }_SlFunctionParams_t; 00157 00158 00159 typedef struct 00160 { 00161 _SlFd_t FD; 00162 _SlLockObj_t GlobalLockObj; 00163 _SlCommandHeader_t TempProtocolHeader; 00164 P_INIT_CALLBACK pInitCallback; 00165 00166 _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS]; 00167 _u8 FreePoolIdx; 00168 _u8 PendingPoolIdx; 00169 _u8 ActivePoolIdx; 00170 _u32 ActiveActionsBitmap; 00171 _SlLockObj_t ProtectionLockObj; 00172 00173 _SlSyncObj_t CmdSyncObj; 00174 _u8 IsCmdRespWaited; 00175 00176 _SlFlowContCB_t FlowContCB; 00177 00178 _u8 TxSeqNum; 00179 _volatile _u8 RxIrqCnt; 00180 _u8 RxDoneCnt; 00181 _u8 SocketNonBlocking; 00182 _u8 SocketTXFailure; 00183 _u8 RelayFlagsViaRxPayload; 00184 /* for stack reduction the parameters are globals */ 00185 _SlFunctionParams_t FunctionParams; 00186 00187 }_SlDriverCb_t; 00188 00189 00190 00191 extern _SlDriverCb_t* g_pCB; 00192 extern P_SL_DEV_PING_CALLBACK pPingCallBackFunc; 00193 00194 /*****************************************************************************/ 00195 /* Function prototypes */ 00196 /*****************************************************************************/ 00197 extern void _SlDrvDriverCBInit(void); 00198 extern void _SlDrvDriverCBDeinit(void); 00199 extern void _SlDrvRxIrqHandler(void *pValue); 00200 extern _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); 00201 extern _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); 00202 extern _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); 00203 extern _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt); 00204 extern _i16 _SlDrvBasicCmd(_SlOpcode_t Opcode); 00205 00206 extern void _sl_HandleAsync_InitComplete(void *pVoidBuf); 00207 extern void _sl_HandleAsync_Connect(void *pVoidBuf); 00208 extern void _sl_HandleAsync_Accept(void *pVoidBuf); 00209 extern void _sl_HandleAsync_Select(void *pVoidBuf); 00210 extern void _sl_HandleAsync_DnsGetHostByName(void *pVoidBuf); 00211 extern void _sl_HandleAsync_DnsGetHostByService(void *pVoidBuf); 00212 extern void _sl_HandleAsync_DnsGetHostByAddr(void *pVoidBuf); 00213 extern void _sl_HandleAsync_PingResponse(void *pVoidBuf); 00214 extern void _SlDrvNetAppEventHandler(void *pArgs); 00215 extern void _SlDrvDeviceEventHandler(void *pArgs); 00216 extern void _sl_HandleAsync_Stop(void *pVoidBuf); 00217 extern _i16 _SlDrvWaitForPoolObj(_u32 ActionID, _u8 SocketID); 00218 extern void _SlDrvReleasePoolObj(_u8 pObj); 00219 extern void _SlDrvObjInit(void); 00220 00221 00222 #define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3)) 00223 #define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3)) 00224 #define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \ 00225 (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayloadLen)) : \ 00226 (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen))) 00227 00228 #ifdef __cplusplus 00229 } 00230 #endif /* __cplusplus */ 00231 00232 #endif /* __DRIVER_INT_H__ */ 00233
Generated on Tue Jul 12 2022 22:55:20 by 1.7.2