123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260 |
- #ifndef ATT_H
- #define ATT_H
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- #include "bcomdef.h"
- #include "OSAL.h"
- #include "l2cap.h"
- #define ATT_MTU_SIZE L2CAP_MTU_SIZE
- #define ATT_MAX_MTU_SIZE 517
- #define ATT_MTU_SIZE_MIN 23
- #define ATT_ERROR_RSP 0x01
- #define ATT_EXCHANGE_MTU_REQ 0x02
- #define ATT_EXCHANGE_MTU_RSP 0x03
- #define ATT_FIND_INFO_REQ 0x04
- #define ATT_FIND_INFO_RSP 0x05
- #define ATT_FIND_BY_TYPE_VALUE_REQ 0x06
- #define ATT_FIND_BY_TYPE_VALUE_RSP 0x07
- #define ATT_READ_BY_TYPE_REQ 0x08
- #define ATT_READ_BY_TYPE_RSP 0x09
- #define ATT_READ_REQ 0x0a
- #define ATT_READ_RSP 0x0b
- #define ATT_READ_BLOB_REQ 0x0c
- #define ATT_READ_BLOB_RSP 0x0d
- #define ATT_READ_MULTI_REQ 0x0e
- #define ATT_READ_MULTI_RSP 0x0f
- #define ATT_READ_BY_GRP_TYPE_REQ 0x10
- #define ATT_READ_BY_GRP_TYPE_RSP 0x11
- #define ATT_WRITE_REQ 0x12
- #define ATT_WRITE_RSP 0x13
- #define ATT_PREPARE_WRITE_REQ 0x16
- #define ATT_PREPARE_WRITE_RSP 0x17
- #define ATT_EXECUTE_WRITE_REQ 0x18
- #define ATT_EXECUTE_WRITE_RSP 0x19
- #define ATT_HANDLE_VALUE_NOTI 0x1b
- #define ATT_HANDLE_VALUE_IND 0x1d
- #define ATT_HANDLE_VALUE_CFM 0x1e
- #define ATT_WRITE_CMD 0x52
- #define ATT_SIGNED_WRITE_CMD 0xD2
- #define ATT_METHOD_BITS 0x3f
- #define ATT_CMD_FLAG_BIT 0x40
- #define ATT_AUTHEN_SIG_FLAG_BIT 0x80
- #define ATT_BT_UUID_SIZE 2
-
- #define ATT_UUID_SIZE 16
-
- #define ATT_MSG_TIMEOUT 30
- #define ATT_SIG_NOT_INCLUDED 0x00
- #define ATT_SIG_VALID 0x01
- #define ATT_SIG_INVALID 0x02
- #define ATT_ERR_INVALID_HANDLE 0x01
- #define ATT_ERR_READ_NOT_PERMITTED 0x02
- #define ATT_ERR_WRITE_NOT_PERMITTED 0x03
- #define ATT_ERR_INVALID_PDU 0x04
- #define ATT_ERR_INSUFFICIENT_AUTHEN 0x05
- #define ATT_ERR_UNSUPPORTED_REQ 0x06
- #define ATT_ERR_INVALID_OFFSET 0x07
- #define ATT_ERR_INSUFFICIENT_AUTHOR 0x08
- #define ATT_ERR_PREPARE_QUEUE_FULL 0x09
- #define ATT_ERR_ATTR_NOT_FOUND 0x0a
- #define ATT_ERR_ATTR_NOT_LONG 0x0b
- #define ATT_ERR_INSUFFICIENT_KEY_SIZE 0x0c
- #define ATT_ERR_INVALID_VALUE_SIZE 0x0d
- #define ATT_ERR_UNLIKELY 0x0e
- #define ATT_ERR_INSUFFICIENT_ENCRYPT 0x0f
- #define ATT_ERR_UNSUPPORTED_GRP_TYPE 0x10
- #define ATT_ERR_INSUFFICIENT_RESOURCES 0x11
- #define ATT_ERR_INVALID_VALUE 0x80
-
-
- #define ATT_HANDLE_BT_UUID_TYPE 0x01
-
-
- #define ATT_HANDLE_UUID_TYPE 0x02
-
- #define ATT_MAX_NUM_HANDLE_BT_UUID ( ( ATT_MTU_SIZE_MIN - 2 ) / ( 2 + ATT_BT_UUID_SIZE ) )
- #define ATT_MAX_NUM_HANDLE_UUID ( ( ATT_MTU_SIZE_MIN - 2 ) / ( 2 + ATT_UUID_SIZE ) )
-
- #define ATT_MAX_NUM_HANDLES_INFO ( ( ATT_MTU_SIZE_MIN - 1 ) / 4 )
-
- #define ATT_MAX_NUM_HANDLES ( ( ATT_MTU_SIZE_MIN - 1 ) / 2 )
-
- #define ATT_MIN_NUM_HANDLES 2
-
- #define ATT_CANCEL_PREPARED_WRITES 0x00
-
-
- #define ATT_WRITE_PREPARED_VALUES 0x01
- #if defined ( TESTMODES )
-
- #define ATT_TESTMODE_OFF 0
- #define ATT_TESTMODE_UNAUTHEN_SIG 1
- #endif
- #define READ_BY_TYPE_REQ_FIXED_SIZE 4
- #define PREPARE_WRITE_REQ_FIXED_SIZE 4
- extern CONST uint8 btBaseUUID[ATT_UUID_SIZE];
- typedef struct
- {
- uint8 sig;
- uint8 cmd;
- uint8 method;
- uint16 len;
- uint8 *pParams;
- } attPacket_t;
- typedef struct
- {
- uint8 len;
- uint8 uuid[ATT_UUID_SIZE];
- } attAttrType_t;
- typedef struct
- {
- uint8 len;
- uint8 uuid[ATT_BT_UUID_SIZE];
- } attAttrBtType_t;
- typedef struct
- {
- uint8 reqOpcode;
- uint16 handle;
- uint8 errCode;
- } attErrorRsp_t;
- typedef struct
- {
- uint16 clientRxMTU;
- } attExchangeMTUReq_t;
- typedef struct
- {
- uint16 serverRxMTU;
- } attExchangeMTURsp_t;
- typedef struct
- {
- uint16 clientMTU;
- uint16 serverMTU;
- }attMTU_t;
- typedef struct
- {
- uint16 startHandle;
- uint16 endHandle;
- } attFindInfoReq_t;
- typedef struct
- {
- uint16 handle;
- uint8 uuid[ATT_BT_UUID_SIZE];
- } attHandleBtUUID_t;
- typedef struct
- {
- uint16 handle;
- uint8 uuid[ATT_UUID_SIZE];
- } attHandleUUID_t;
- typedef union
- {
- attHandleBtUUID_t btPair[ATT_MAX_NUM_HANDLE_BT_UUID];
- attHandleUUID_t pair[ATT_MAX_NUM_HANDLE_UUID];
- } attFindInfo_t;
- typedef struct
- {
- uint8 numInfo;
- uint8 format;
- attFindInfo_t info;
- } attFindInfoRsp_t;
- typedef struct
- {
- uint16 startHandle;
- uint16 endHandle;
- attAttrBtType_t type;
- uint8 len;
- uint8 value[ATT_MTU_SIZE-7];
- } attFindByTypeValueReq_t;
- typedef struct
- {
- uint16 handle;
- uint16 grpEndHandle;
- } attHandlesInfo_t;
- typedef struct
- {
- uint8 numInfo;
- attHandlesInfo_t handlesInfo[ATT_MAX_NUM_HANDLES_INFO];
- } attFindByTypeValueRsp_t;
- typedef struct
- {
- uint16 startHandle;
- uint16 endHandle;
- attAttrType_t type;
- } attReadByTypeReq_t;
- typedef struct
- {
- uint8 numPairs;
- uint8 len;
- uint8 dataList[ATT_MTU_SIZE-2];
- } attReadByTypeRsp_t;
- typedef struct
- {
- uint16 handle;
- } attReadReq_t;
- typedef struct
- {
- uint8 len;
- uint8 value[ATT_MTU_SIZE-1];
- } attReadRsp_t;
- typedef struct
- {
- uint16 handle;
- uint16 offset;
- } attReadBlobReq_t;
- typedef struct
- {
- uint8 len;
- uint8 value[ATT_MTU_SIZE-1];
- } attReadBlobRsp_t;
- typedef struct
- {
- uint16 handle[ATT_MAX_NUM_HANDLES];
- uint8 numHandles;
- } attReadMultiReq_t;
- typedef struct
- {
- uint8 len;
- uint8 values[ATT_MTU_SIZE-1];
- } attReadMultiRsp_t;
- typedef struct
- {
- uint16 startHandle;
- uint16 endHandle;
- attAttrType_t type;
- } attReadByGrpTypeReq_t;
- typedef struct
- {
- uint8 numGrps;
- uint8 len;
- uint8 dataList[ATT_MTU_SIZE-2];
- } attReadByGrpTypeRsp_t;
- typedef struct
- {
- uint16 handle;
- uint8 len;
- uint8 value[ATT_MTU_SIZE-3];
- uint8 sig;
- uint8 cmd;
- } attWriteReq_t;
- typedef struct
- {
- uint16 handle;
- uint16 offset;
- uint8 len;
- uint8 value[ATT_MTU_SIZE-5];
- } attPrepareWriteReq_t;
- typedef struct
- {
- uint16 handle;
- uint16 offset;
- uint8 len;
- uint8 value[ATT_MTU_SIZE-5];
- } attPrepareWriteRsp_t;
- typedef struct
- {
- uint8 flags;
-
- } attExecuteWriteReq_t;
- typedef struct
- {
- uint16 handle;
- uint8 len;
- uint8 value[ATT_MTU_SIZE-3];
- } attHandleValueNoti_t;
- typedef struct
- {
- uint16 handle;
- uint8 len;
- uint8 value[ATT_MTU_SIZE-3];
- } attHandleValueInd_t;
- typedef union
- {
-
- attExchangeMTUReq_t exchangeMTUReq;
- attFindInfoReq_t findInfoReq;
- attFindByTypeValueReq_t findByTypeValueReq;
- attReadByTypeReq_t readByTypeReq;
- attReadReq_t readReq;
- attReadBlobReq_t readBlobReq;
- attReadMultiReq_t readMultiReq;
- attReadByGrpTypeReq_t readByGrpTypeReq;
- attWriteReq_t writeReq;
- attPrepareWriteReq_t prepareWriteReq;
- attExecuteWriteReq_t executeWriteReq;
-
- attErrorRsp_t errorRsp;
- attExchangeMTURsp_t exchangeMTURsp;
- attFindInfoRsp_t findInfoRsp;
- attFindByTypeValueRsp_t findByTypeValueRsp;
- attReadByTypeRsp_t readByTypeRsp;
- attReadRsp_t readRsp;
- attReadBlobRsp_t readBlobRsp;
- attReadMultiRsp_t readMultiRsp;
- attReadByGrpTypeRsp_t readByGrpTypeRsp;
- attPrepareWriteRsp_t prepareWriteRsp;
-
- attHandleValueNoti_t handleValueNoti;
- attHandleValueInd_t handleValueInd;
- } attMsg_t;
- extern uint8 ATT_ParsePacket( l2capDataEvent_t *pL2capMsg, attPacket_t *pPkt );
- extern uint8 ATT_CompareUUID( const uint8 *pUUID1, uint16 len1,
- const uint8 *pUUID2, uint16 len2 );
- extern uint8 ATT_ConvertUUIDto128( const uint8 *pUUID16, uint8 *pUUID128 );
- extern uint8 ATT_ConvertUUIDto16( const uint8 *pUUID128, uint8 *pUUID16 );
- extern uint16 ATT_BuildErrorRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseErrorRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildExchangeMTUReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildExchangeMTURsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseExchangeMTURsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildFindInfoReq( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseFindInfoRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildFindInfoRsp( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildFindByTypeValueReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildFindByTypeValueRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseFindByTypeValueRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildReadByTypeReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildReadByTypeRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseReadByTypeRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildReadReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildReadRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseReadRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildReadBlobReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildReadBlobRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseReadBlobRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildReadMultiReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildReadMultiRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseReadMultiRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildReadByGrpTypeRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseReadByGrpTypeRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildWriteReq( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseWriteRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildPrepareWriteReq( uint8 *pBuf, uint8 *pMsg );
- extern uint16 ATT_BuildPrepareWriteRsp( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParsePrepareWriteRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildExecuteWriteReq( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseExecuteWriteRsp( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern uint16 ATT_BuildHandleValueInd( uint8 *pBuf, uint8 *pMsg );
- extern bStatus_t ATT_ParseHandleValueInd( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseExchangeMTUReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseFindInfoReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseFindByTypeValueReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseReadByTypeReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseReadReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseReadBlobReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseReadMultiReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseWriteReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseExecuteWriteReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParsePrepareWriteReq( uint8 sig, uint8 cmd, uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ParseHandleValueCfm( uint8 *pParams, uint16 len, attMsg_t *pMsg );
- extern bStatus_t ATT_ExchangeMTUReq( uint16 connHandle, attExchangeMTUReq_t *pReq );
- extern bStatus_t ATT_FindInfoReq( uint16 connHandle, attFindInfoReq_t *pReq );
- extern bStatus_t ATT_FindByTypeValueReq( uint16 connHandle, attFindByTypeValueReq_t *pReq );
- extern bStatus_t ATT_ReadByTypeReq( uint16 connHandle, attReadByTypeReq_t *pReq );
- extern bStatus_t ATT_ReadReq( uint16 connHandle, attReadReq_t *pReq );
- extern bStatus_t ATT_ReadBlobReq( uint16 connHandle, attReadBlobReq_t *pReq );
- extern bStatus_t ATT_ReadMultiReq( uint16 connHandle, attReadMultiReq_t *pReq );
- extern bStatus_t ATT_ReadByGrpTypeReq( uint16 connHandle, attReadByGrpTypeReq_t *pReq );
- extern bStatus_t ATT_WriteReq( uint16 connHandle, attWriteReq_t *pReq );
- extern bStatus_t ATT_PrepareWriteReq( uint16 connHandle, attPrepareWriteReq_t *pReq );
- extern bStatus_t ATT_ExecuteWriteReq( uint16 connHandle, attExecuteWriteReq_t *pReq );
- extern bStatus_t ATT_HandleValueCfm( uint16 connHandle );
- extern bStatus_t ATT_ErrorRsp( uint16 connHandle, attErrorRsp_t *pRsp );
- extern bStatus_t ATT_ExchangeMTURsp( uint16 connHandle, attExchangeMTURsp_t *pRsp );
- extern bStatus_t ATT_FindInfoRsp( uint16 connHandle, attFindInfoRsp_t *pRsp );
- extern bStatus_t ATT_FindByTypeValueRsp( uint16 connHandle, attFindByTypeValueRsp_t *pRsp );
- extern bStatus_t ATT_ReadByTypeRsp( uint16 connHandle, attReadByTypeRsp_t *pRsp );
- extern bStatus_t ATT_ReadRsp( uint16 connHandle, attReadRsp_t *pRsp );
- extern bStatus_t ATT_ReadBlobRsp( uint16 connHandle, attReadBlobRsp_t *pRsp );
- extern bStatus_t ATT_ReadMultiRsp( uint16 connHandle, attReadMultiRsp_t *pRsp ) ;
- extern bStatus_t ATT_ReadByGrpTypeRsp( uint16 connHandle, attReadByGrpTypeRsp_t *pRsp );
- extern bStatus_t ATT_WriteRsp( uint16 connHandle );
- extern bStatus_t ATT_PrepareWriteRsp( uint16 connHandle, attPrepareWriteRsp_t *pRsp );
- extern bStatus_t ATT_ExecuteWriteRsp( uint16 connHandle );
- extern bStatus_t ATT_HandleValueNoti( uint16 connHandle, attHandleValueNoti_t *pNoti );
- extern bStatus_t ATT_HandleValueInd( uint16 connHandle, attHandleValueInd_t *pInd );
- extern void ATT_SetParamValue( uint16 value );
- extern uint16 ATT_GetParamValue( void );
- extern uint16 ATT_GetCurrentMTUSize( void );
- extern void ATT_SetMTUSizeMax(uint16 mtuSize);
- extern void ATT_MTU_SIZE_UPDATE(uint8 mtuSize);
- extern uint16 g_ATT_MTU_SIZE;
- extern uint16 g_ATT_MTU_SIZE_MAX;
- extern uint16 g_ATT_MAX_NUM_HANDLES;
- extern uint16 g_ATT_MAX_NUM_HANDLES_INFO;
- extern uint16 g_ATT_MAX_NUM_HANDLE_BT_UUID;
- extern attMTU_t g_attMtuClientServer;
- #ifdef __cplusplus
- }
- #endif
- #endif
|