Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: simplelink/cc3100_driver.h
- Revision:
- 5:d3b320ebd469
- Parent:
- 4:5af740da0a59
- Child:
- 6:778b081f6a13
--- a/simplelink/cc3100_driver.h Mon Feb 23 21:10:13 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/*
- * driver.h - CC31xx/CC32xx Host Driver Implementation
- *
- * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the
- * distribution.
- *
- * Neither the name of Texas Instruments Incorporated nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
-*/
-
-#ifndef DRIVER_INT_H_
-#define DRIVER_INT_H_
-
-#include "cc3100_simplelink.h"
-
-#include "cc3100_protocol.h"
-#include "cc3100_nonos.h"
-#include "cc3100_spi.h"
-#include "cc3100_netapp.h"
-#include "cc3100.h"
-
-
-/*****************************************************************************/
-/* Macro declarations */
-/*****************************************************************************/
-
-/* 2 LSB of the N2H_SYNC_PATTERN are for sequence number
-only in SPI interface
-support backward sync pattern */
-#define N2H_SYNC_PATTERN_SEQ_NUM_BITS ((uint32_t)0x00000003) /* Bits 0..1 - use the 2 LBS for seq num */
-#define N2H_SYNC_PATTERN_SEQ_NUM_EXISTS ((uint32_t)0x00000004) /* Bit 2 - sign that sequence number exists in the sync pattern */
-#define N2H_SYNC_PATTERN_MASK ((uint32_t)0xFFFFFFF8) /* Bits 3..31 - constant SYNC PATTERN */
-#define N2H_SYNC_SPI_BUGS_MASK ((uint32_t)0x7FFF7F7F) /* Bits 7,15,31 - ignore the SPI (8,16,32 bites bus) error bits */
-#define BUF_SYNC_SPIM(pBuf) ((*(uint32_t *)(pBuf)) & N2H_SYNC_SPI_BUGS_MASK)
-#define N2H_SYNC_SPIM (N2H_SYNC_PATTERN & N2H_SYNC_SPI_BUGS_MASK)
-#define N2H_SYNC_SPIM_WITH_SEQ(TxSeqNum) ((N2H_SYNC_SPIM & N2H_SYNC_PATTERN_MASK) | N2H_SYNC_PATTERN_SEQ_NUM_EXISTS | ((TxSeqNum) & (N2H_SYNC_PATTERN_SEQ_NUM_BITS)))
-#define MATCH_WOUT_SEQ_NUM(pBuf) ( BUF_SYNC_SPIM(pBuf) == N2H_SYNC_SPIM )
-#define MATCH_WITH_SEQ_NUM(pBuf, TxSeqNum) ( BUF_SYNC_SPIM(pBuf) == (N2H_SYNC_SPIM_WITH_SEQ(TxSeqNum)) )
-#define N2H_SYNC_PATTERN_MATCH(pBuf, TxSeqNum) \
- ( \
- ( (*((uint32_t *)pBuf) & N2H_SYNC_PATTERN_SEQ_NUM_EXISTS) && ( MATCH_WITH_SEQ_NUM(pBuf, TxSeqNum) ) ) || \
- ( !(*((uint32_t *)pBuf) & N2H_SYNC_PATTERN_SEQ_NUM_EXISTS) && ( MATCH_WOUT_SEQ_NUM(pBuf ) ) ) \
- )
-
-#define OPCODE(_ptr) (((_SlResponseHeader_t *)(_ptr))->GenHeader.Opcode)
-#define RSP_PAYLOAD_LEN(_ptr) (((_SlResponseHeader_t *)(_ptr))->GenHeader.Len - _SL_RESP_SPEC_HDR_SIZE)
-#define SD(_ptr) (((_SocketAddrResponse_u *)(_ptr))->IpV4.sd)
-/* Actual size of Recv/Recvfrom response data */
-#define ACT_DATA_SIZE(_ptr) (((_SocketAddrResponse_u *)(_ptr))->IpV4.statusOrLen)
-
-#define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3))
-#define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3))
-#define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \
- (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayloadLen)) : \
- (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen)))
-
-
-namespace mbed_cc3100 {
-
-class cc3100;
-
-/*****************************************************************************/
-/* Structure/Enum declarations */
-/*****************************************************************************/
-//typedef void(*_SlSpawnEntryFunc_t)(void* pValue);
-
-typedef struct {
- _SlOpcode_t Opcode;
- _SlArgSize_t TxDescLen;
- _SlArgSize_t RxDescLen;
-} _SlCmdCtrl_t;
-
-typedef struct {
- uint16_t TxPayloadLen;
- uint16_t RxPayloadLen;
- uint16_t ActualRxPayloadLen;
- uint8_t *pTxPayload;
- uint8_t *pRxPayload;
-} _SlCmdExt_t;
-
-
-typedef struct _SlArgsData_t {
- uint8_t *pArgs;
- uint8_t *pData;
-} _SlArgsData_t;
-
-
-typedef struct _SlPoolObj_t {
- _SlSyncObj_t SyncObj;
- uint8_t *pRespArgs;
- uint8_t ActionID;
- uint8_t AdditionalData; /* use for socketID and one bit which indicate supprt IPV6 or not (1=support, 0 otherwise) */
- uint8_t NextIndex;
-
-} _SlPoolObj_t;
-
-
-typedef enum {
- SOCKET_0,
- SOCKET_1,
- SOCKET_2,
- SOCKET_3,
- SOCKET_4,
- SOCKET_5,
- SOCKET_6,
- SOCKET_7,
- MAX_SOCKET_ENUM_IDX,
- ACCEPT_ID = MAX_SOCKET_ENUM_IDX,
- CONNECT_ID,
- SELECT_ID,
- GETHOSYBYNAME_ID,
- GETHOSYBYSERVICE_ID,
- PING_ID,
- START_STOP_ID,
- RECV_ID
-} _SlActionID_e;
-
-typedef struct _SlActionLookup_t {
- uint8_t ActionID;
- uint16_t ActionAsyncOpcode;
- _SlSpawnEntryFunc_t AsyncEventHandler;
-
-} _SlActionLookup_t;
-
-
-typedef struct {
- uint8_t TxPoolCnt;
- _SlLockObj_t TxLockObj;
- _SlSyncObj_t TxSyncObj;
-} _SlFlowContCB_t;
-
-typedef enum {
- RECV_RESP_CLASS,
- CMD_RESP_CLASS,
- ASYNC_EVT_CLASS,
- DUMMY_MSG_CLASS
-} _SlRxMsgClass_e;
-
-typedef struct {
- uint8_t *pAsyncBuf; /* place to write pointer to buffer with CmdResp's Header + Arguments */
- uint8_t ActionIndex;
- _SlSpawnEntryFunc_t AsyncEvtHandler; /* place to write pointer to AsyncEvent handler (calc-ed by Opcode) */
- _SlRxMsgClass_e RxMsgClass; /* type of Rx message */
-} AsyncExt_t;
-
-typedef struct {
- _SlCmdCtrl_t *pCmdCtrl;
- uint8_t *pTxRxDescBuff;
- _SlCmdExt_t *pCmdExt;
- AsyncExt_t AsyncExt;
-} _SlFunctionParams_t;
-
-typedef void (*P_INIT_CALLBACK)(uint32_t Status);
-
-typedef struct {
- _SlFd_t FD;
- _SlLockObj_t GlobalLockObj;
- _SlCommandHeader_t TempProtocolHeader;
- P_INIT_CALLBACK pInitCallback;
-
- _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS];
- uint8_t FreePoolIdx;
- uint8_t PendingPoolIdx;
- uint8_t ActivePoolIdx;
- uint32_t ActiveActionsBitmap;
- _SlLockObj_t ProtectionLockObj;
-
- _SlSyncObj_t CmdSyncObj;
- uint8_t IsCmdRespWaited;
-
- _SlFlowContCB_t FlowContCB;
-
- uint8_t TxSeqNum;
- volatile uint8_t RxIrqCnt;
- uint8_t RxDoneCnt;
- uint8_t SocketNonBlocking;
- uint8_t SocketTXFailure;
- uint8_t RelayFlagsViaRxPayload;
- /* for stack reduction the parameters are globals */
- _SlFunctionParams_t FunctionParams;
-
-} _SlDriverCb_t;
-
-extern _SlDriverCb_t* g_pCB;
-typedef uint8_t _SlSd_t;
-
-class cc3100_driver
-{
-
-public:
-
- cc3100_driver(cc3100_nonos &nonos, cc3100_netapp &netapp, cc3100_flowcont &flowcont, cc3100_spi &spi);
-
- ~cc3100_driver();
-
-
- /*****************************************************************************/
- /* Function prototypes */
- /*****************************************************************************/
- typedef _SlDriverCb_t pDriver;
-
- bool _SL_PENDING_RX_MSG(pDriver* pDriverCB);
-
- void _SlDrvDriverCBInit(void);
-
- void _SlDrvDriverCBDeinit(void);
-
- void _SlDrvRxIrqHandler(void *pValue);
-
- _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
-
- _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
-
- _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
-
- _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
-
- int16_t _SlDrvBasicCmd(_SlOpcode_t Opcode);
-
- int16_t _SlDrvWaitForPoolObj(uint32_t ActionID, uint8_t SocketID);
-
- void _SlDrvReleasePoolObj(uint8_t pObj);
-
- void _SlDrvObjInit(void);
-
- _SlReturnVal_t _SlDrvMsgRead(void);
-
- _SlReturnVal_t _SlDrvMsgWrite(void);
-
- _SlReturnVal_t _SlDrvMsgReadCmdCtx(void);
-
- _SlReturnVal_t _SlDrvMsgReadSpawnCtx_(void *pValue);
-
- void _SlDrvClassifyRxMsg(_SlOpcode_t Opcode );
-
- _SlReturnVal_t _SlDrvRxHdrRead(uint8_t *pBuf, uint8_t *pAlignSize);
-
- void _SlDrvShiftDWord(uint8_t *pBuf);
-
- void _SlAsyncEventGenericHandler(void);
-
- void _SlDrvObjDeInit(void);
-
- void _SlRemoveFromList(uint8_t* ListIndex, uint8_t ItemIndex);
-
- _SlReturnVal_t _SlFindAndSetActiveObj(_SlOpcode_t Opcode, uint8_t Sd);
-
-private:
-
- cc3100_nonos &_nonos;
- cc3100_netapp &_netapp;
- cc3100_flowcont &_flowcont;
- cc3100_spi &_spi;
-
-};//class
-
-}//namespace mbed_cc3100
-
-#endif /* __DRIVER_INT_H__ */
-