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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers cc3100_driver.h Source File

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