321 lines
11 KiB
C
321 lines
11 KiB
C
|
/***************************************************************************
|
||
|
*
|
||
|
* Copyright 2015-2019 BES.
|
||
|
* All rights reserved. All unpublished rights reserved.
|
||
|
*
|
||
|
* No part of this work may be used or reproduced in any form or by any
|
||
|
* means, or stored in a database or retrieval system, without prior written
|
||
|
* permission of BES.
|
||
|
*
|
||
|
* Use of this work is governed by a license granted by BES.
|
||
|
* This work contains confidential and proprietary information of
|
||
|
* BES. which is protected by copyright, trade secret,
|
||
|
* trademark and other intellectual property rights.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
|
||
|
#ifndef __BTLIB_TYPE_H__
|
||
|
#define __BTLIB_TYPE_H__
|
||
|
|
||
|
#ifndef NULL
|
||
|
#define NULL 0
|
||
|
#endif
|
||
|
|
||
|
#ifndef SUCCESS
|
||
|
#define SUCCESS 0
|
||
|
#endif
|
||
|
|
||
|
#ifndef FAILURE
|
||
|
#define FAILURE 1
|
||
|
#endif
|
||
|
|
||
|
#ifndef INPROGRESS
|
||
|
#define INPROGRESS 2
|
||
|
#endif
|
||
|
|
||
|
#ifndef L2C_DISCONNECT_ITSELF
|
||
|
#define L2C_DISCONNECT_ITSELF (0x5E)
|
||
|
#endif
|
||
|
|
||
|
#ifndef TRUE
|
||
|
#define TRUE 1
|
||
|
#endif
|
||
|
|
||
|
#ifndef FALSE
|
||
|
#define FALSE 0
|
||
|
#endif
|
||
|
|
||
|
|
||
|
typedef unsigned char BtStatus;
|
||
|
|
||
|
#define BT_STATUS_SUCCESS 0 /* Successful and complete */
|
||
|
#define BT_STATUS_FAILED 1 /* Operation failed */
|
||
|
#define BT_STATUS_PENDING 2 /* Successfully started but pending */
|
||
|
#define BT_STATUS_DISCONNECT 3 /* Link disconnected */
|
||
|
#define BT_STATUS_NO_LINK 4 /* No Link layer Connection exists */
|
||
|
#define BT_STATUS_IN_USE 5 /* Operation failed - already in use. */
|
||
|
/* IrDA specific return codes */
|
||
|
#define BT_STATUS_MEDIA_BUSY 6 /* IRDA: Media is busy */
|
||
|
#define BT_STATUS_MEDIA_NOT_BUSY 7 /* IRDA: Media is not busy */
|
||
|
#define BT_STATUS_NO_PROGRESS 8 /* IRDA: IrLAP not making progress */
|
||
|
#define BT_STATUS_LINK_OK 9 /* IRDA: No progress condition cleared */
|
||
|
#define BT_STATUS_SDU_OVERRUN 10 /* IRDA: Sent more data than current SDU size */
|
||
|
/* Bluetooth specific return codes */
|
||
|
#define BT_STATUS_BUSY 11
|
||
|
#define BT_STATUS_NO_RESOURCES 12
|
||
|
#define BT_STATUS_NOT_FOUND 13
|
||
|
#define BT_STATUS_DEVICE_NOT_FOUND 14
|
||
|
#define BT_STATUS_CONNECTION_FAILED 15
|
||
|
#define BT_STATUS_TIMEOUT 16
|
||
|
#define BT_STATUS_NO_CONNECTION 17
|
||
|
#define BT_STATUS_INVALID_PARM 18
|
||
|
#define BT_STATUS_IN_PROGRESS 19
|
||
|
#define BT_STATUS_RESTRICTED 20
|
||
|
#define BT_STATUS_INVALID_TYPE 21
|
||
|
#define BT_STATUS_HCI_INIT_ERR 22
|
||
|
#define BT_STATUS_NOT_SUPPORTED 23
|
||
|
#define BT_STATUS_CONTINUE 24
|
||
|
#define BT_STATUS_CANCELLED 25
|
||
|
|
||
|
/* The last defined status code */
|
||
|
#define BT_STATUS_LAST_CODE 25
|
||
|
|
||
|
#define BIT0 0x00000001
|
||
|
#define BIT1 0x00000002
|
||
|
#define BIT2 0x00000004
|
||
|
#define BIT3 0x00000008
|
||
|
#define BIT4 0x00000010
|
||
|
#define BIT5 0x00000020
|
||
|
#define BIT6 0x00000040
|
||
|
#define BIT7 0x00000080
|
||
|
#define BIT8 0x00000100
|
||
|
#define BIT9 0x00000200
|
||
|
#define BIT10 0x00000400
|
||
|
#define BIT11 0x00000800
|
||
|
#define BIT12 0x00001000
|
||
|
#define BIT13 0x00002000
|
||
|
#define BIT14 0x00004000
|
||
|
#define BIT15 0x00008000
|
||
|
#define BIT16 0x00010000
|
||
|
#define BIT17 0x00020000
|
||
|
#define BIT18 0x00040000
|
||
|
#define BIT19 0x00080000
|
||
|
#define BIT20 0x00100000
|
||
|
#define BIT21 0x00200000
|
||
|
#define BIT22 0x00400000
|
||
|
#define BIT23 0x00800000
|
||
|
#define BIT24 0x01000000
|
||
|
#define BIT25 0x02000000
|
||
|
#define BIT26 0x04000000
|
||
|
#define BIT27 0x08000000
|
||
|
#define BIT28 0x10000000
|
||
|
#define BIT29 0x20000000
|
||
|
#define BIT30 0x40000000
|
||
|
#define BIT31 0x80000000
|
||
|
|
||
|
|
||
|
typedef unsigned char byte; /* Unsigned 8 bit quantity */
|
||
|
typedef unsigned char uint8; /* Unsigned 8 bit quantity */
|
||
|
typedef unsigned char uint8_t; /* Unsigned 8 bit quantity */
|
||
|
typedef signed char int8; /* Signed 8 bit quantity */
|
||
|
typedef unsigned short uint16; /* Unsigned 16 bit quantity */
|
||
|
typedef signed short int16; /* Signed 16 bit quantity */
|
||
|
typedef unsigned int uint32; /* Unsigned 32 bit quantity */
|
||
|
typedef signed int int32; /* Signed 32 bit quantity */
|
||
|
|
||
|
typedef unsigned char BOOLEAN;
|
||
|
typedef unsigned char INT8U; /* Unsigned 8 bit quantity */
|
||
|
typedef signed char INT8S; /* Signed 8 bit quantity */
|
||
|
typedef unsigned short INT16U; /* Unsigned 16 bit quantity */
|
||
|
typedef signed short INT16S; /* Signed 16 bit quantity */
|
||
|
typedef unsigned int INT32U; /* Unsigned 32 bit quantity */
|
||
|
typedef signed int INT32S; /* Signed 32 bit quantity */
|
||
|
typedef float FP32; /* Single precision floating point */
|
||
|
typedef double FP64; /* Double precision floating point */
|
||
|
|
||
|
|
||
|
typedef unsigned char u8;
|
||
|
#if 0
|
||
|
typedef signed char s8;
|
||
|
typedef unsigned short u16;
|
||
|
typedef signed short s16;
|
||
|
typedef unsigned int u32;
|
||
|
typedef signed int s32;
|
||
|
typedef unsigned long long u64;
|
||
|
typedef signed long long s64;
|
||
|
#endif
|
||
|
|
||
|
typedef uint16 CNH;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[6];
|
||
|
} __attribute__ ((packed)) BD_ADDR;
|
||
|
|
||
|
typedef struct{
|
||
|
uint8 A[10];
|
||
|
} __attribute__ ((packed)) CHANMAP;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[3];
|
||
|
} __attribute__ ((packed)) LAP;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[3];
|
||
|
} __attribute__ ((packed)) CLASS;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[16];
|
||
|
} __attribute__ ((packed)) PIN_CODE;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[16];
|
||
|
} __attribute__ ((packed)) LINK_KEY;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[4];
|
||
|
} __attribute__ ((packed)) SRES;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[12];
|
||
|
} __attribute__ ((packed)) ACO;
|
||
|
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[8];
|
||
|
} __attribute__ ((packed)) FEATURES;
|
||
|
|
||
|
|
||
|
typedef struct {
|
||
|
uint8 A[14];
|
||
|
} __attribute__ ((packed)) NAME_VEC;
|
||
|
|
||
|
|
||
|
|
||
|
struct bdaddr_t {
|
||
|
uint8 addr[6];
|
||
|
}__attribute__ ((packed));
|
||
|
|
||
|
struct class_of_device_t {
|
||
|
uint8 A[3];
|
||
|
}__attribute__ ((packed));
|
||
|
|
||
|
struct link_key_t{
|
||
|
uint8 A[16];
|
||
|
}__attribute__ ((packed));
|
||
|
|
||
|
#define STR_BE32(buff,num) ( (((U8*)buff)[0] = (U8) ((num)>>24)), \
|
||
|
(((U8*)buff)[1] = (U8) ((num)>>16)), \
|
||
|
(((U8*)buff)[2] = (U8) ((num)>>8)), \
|
||
|
(((U8*)buff)[3] = (U8) (num)) )
|
||
|
|
||
|
#define STR_BE16(buff,num) ( (((U8*)buff)[0] = (U8) ((num)>>8)), \
|
||
|
(((U8*)buff)[1] = (U8) (num)) )
|
||
|
|
||
|
#define BEtoHost16(ptr) (U16)( ((U16) *((U8*)(ptr)) << 8) | \
|
||
|
((U16) *((U8*)(ptr)+1)) )
|
||
|
|
||
|
#define BEtoHost32(ptr) (U32)( ((U32) *((U8*)(ptr)) << 24) | \
|
||
|
((U32) *((U8*)(ptr)+1) << 16) | \
|
||
|
((U32) *((U8*)(ptr)+2) << 8) | \
|
||
|
((U32) *((U8*)(ptr)+3)) )
|
||
|
|
||
|
/* Store value into a buffer in Little Endian format */
|
||
|
#define StoreLE16(buff,num) ( ((buff)[1] = (U8) ((num)>>8)), \
|
||
|
((buff)[0] = (U8) (num)) )
|
||
|
|
||
|
#define StoreLE32(buff,num) ( ((buff)[3] = (U8) ((num)>>24)), \
|
||
|
((buff)[2] = (U8) ((num)>>16)), \
|
||
|
((buff)[1] = (U8) ((num)>>8)), \
|
||
|
((buff)[0] = (U8) (num)) )
|
||
|
|
||
|
/* Store value into a buffer in Big Endian format */
|
||
|
#define StoreBE16(buff,num) ( ((buff)[0] = (U8) ((num)>>8)), \
|
||
|
((buff)[1] = (U8) (num)) )
|
||
|
|
||
|
#define StoreBE32(buff,num) ( ((buff)[0] = (U8) ((num)>>24)), \
|
||
|
((buff)[1] = (U8) ((num)>>16)), \
|
||
|
((buff)[2] = (U8) ((num)>>8)), \
|
||
|
((buff)[3] = (U8) (num)) )
|
||
|
|
||
|
|
||
|
#define LEtoHost16(ptr) (U16)(((U16) *((U8*)(ptr)+1) << 8) | \
|
||
|
(U16) *((U8*)(ptr)))
|
||
|
|
||
|
#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
|
||
|
#define BDADDR_ALL (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
|
||
|
#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
|
||
|
|
||
|
#define CTX_INIT(buff) \
|
||
|
POSSIBLY_UNUSED unsigned int __offset = 2; \
|
||
|
POSSIBLY_UNUSED unsigned char *__buff = buff;
|
||
|
|
||
|
#define CTX_STR_BUF(buff,len) \
|
||
|
memcpy(__buff+__offset, buff, len); \
|
||
|
__offset += len;
|
||
|
|
||
|
#define CTX_LDR_BUF(buff,len) \
|
||
|
memcpy(buff, __buff+__offset, len); \
|
||
|
__offset += len;
|
||
|
|
||
|
#define CTX_STR_VAL8(v) \
|
||
|
__buff[__offset] = v&0xFF; \
|
||
|
__offset += 1;
|
||
|
|
||
|
#define CTX_LDR_VAL8(v) \
|
||
|
v = __buff[__offset]; \
|
||
|
__offset += 1;
|
||
|
|
||
|
#define CTX_STR_VAL16(v) \
|
||
|
__buff[__offset] = v&0xFF; \
|
||
|
__buff[__offset+1] = (v>>8)&0xFF; \
|
||
|
__offset += 2;
|
||
|
|
||
|
#define CTX_LDR_VAL16(v) \
|
||
|
v = __buff[__offset]; \
|
||
|
v |= __buff[__offset+1]<<8; \
|
||
|
__offset += 2;
|
||
|
|
||
|
#define CTX_STR_VAL32(v) \
|
||
|
__buff[__offset] = v&0xFF; \
|
||
|
__buff[__offset+1] = (v>>8)&0xFF; \
|
||
|
__buff[__offset+2] = (v>>16)&0xFF; \
|
||
|
__buff[__offset+3] = (v>>24)&0xFF; \
|
||
|
__offset += 4;
|
||
|
|
||
|
#define CTX_LDR_VAL32(v) \
|
||
|
v = __buff[__offset]; \
|
||
|
v |= __buff[__offset+1]<<8; \
|
||
|
v |= __buff[__offset+2]<<16; \
|
||
|
v |= __buff[__offset+3]<<24; \
|
||
|
__offset += 4;
|
||
|
|
||
|
#define CTX_GET_BUF_CURR() __buff
|
||
|
|
||
|
#define CTX_GET_BUF_HEAD() __buff
|
||
|
|
||
|
#define CTX_GET_OFFSET() __offset
|
||
|
|
||
|
#define CTX_GET_DATA_LEN() (__buff[0] | __buff[1]<<8)
|
||
|
|
||
|
#define CTX_GET_TOTAL_LEN() (CTX_GET_DATA_LEN()+2)
|
||
|
|
||
|
#define CTX_SAVE_UPDATE_DATA_LEN() \
|
||
|
__buff[0] = (__offset-2)&0xFF; \
|
||
|
__buff[1] = ((__offset-2)>>8)&0xFF;
|
||
|
|
||
|
struct ctx_content {
|
||
|
uint8 *buff;
|
||
|
uint32 buff_len;
|
||
|
};
|
||
|
|
||
|
#endif /* __BTLIB_TYPE_H__ */
|