2 // C++ Interface: hcidriver
4 // Description: my idea , embeded system will be in waiting state. For this role it will be slave. Master it is a main computer or phone.
7 // Author: root <root@ubuntu>, (C) 2008
9 // Copyright: See COPYING file that comes with this distribution
16 #include<sys/socket.h>
17 #include<bluetooth/hci.h>
24 /* BT protocols(from bluetooth.h)*/
25 #define BTPROTO_L2CAP 0
28 #define BTPROTO_RFCOMM 3
29 #define BTPROTO_BNEP 4
30 #define BTPROTO_CMTP 5
31 #define BTPROTO_HIDP 6
32 #define BTPROTO_AVDTP 7
39 #define max(a, b) ((a) > (b) ? (a) : (b))
40 #define min(a, b) ((a) < (b) ? (a) : (b))
43 /* BD_ADDR (bluetooth.h)*/
46 } __attribute__((packed)) bt_address;
50 } __attribute__((packed)) bdaddr_t;
54 } __attribute__((packed)) dev_lap;
71 int event; //for setting event filter , some hci commands have own events
76 /* next function structures*/
79 extern int call_hci_inquiry_cmd(int dd, bt_address *p_addressarray,int timeout);
80 extern int call_hci_read_bd_addr_cmd(int dd,bt_address *p_address, int timeout);
81 extern int call_hci_create_connection_cmd(int dd, bt_address *p_address, int timeout);
82 extern int hci_open_device(int dev_id);
83 extern int hci_send_command(int dd, hci_request *p_req);
84 extern int hci_send_request(int dd, hci_request *p_req,int timeout);
85 extern void print_device_list(int ctl);
86 extern int hci_close_dev(int dd);
89 extern void assemble_hci_data(void *p_con_handle,void *p_data_size,void *p_data);
90 extern void assemble_ocf_ogf(__u8 ogf,__u8 ocf,__u16 *p_ocf_ogf);
91 extern __u8 swap8(__u8 byte1);
92 extern __u16 swap16(__u16 byte2);
93 //extern void bacpy(bt_address p_dest, bt_address p_source);
94 extern void fill_add(bt_address *addr,__u8 first, __u8 sec, __u8 third, __u8 forth, __u8 fifth, __u8 sixth);
95 extern void printba(bt_address *ba);
96 extern int compare_bda(bt_address *p_first, bt_address *p_second);
97 extern void fill_zero(bt_address *p_addr);
98 extern void swap_addrbytes(bt_address *p_addr);
101 static inline void hci_set_bit(int nr, void *addr)
103 *((uint32_t *) addr + (nr >> 5)) |= (1 << (nr & 31));
106 static inline void hci_clear_bit(int nr, void *addr)
108 *((uint32_t *) addr + (nr >> 5)) &= ~(1 << (nr & 31));
111 static inline int hci_test_bit(int nr, void *addr)
113 return *((uint32_t *) addr + (nr >> 5)) & (1 << (nr & 31));
116 /* HCI filter tools */
117 static inline void hci_filter_clear(struct hci_filter *f)
119 memset(f, 0, sizeof(*f));
121 static inline void hci_filter_set_ptype(int t, struct hci_filter *f)
123 hci_set_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask);
125 static inline void hci_filter_clear_ptype(int t, struct hci_filter *f)
127 hci_clear_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask);
129 static inline int hci_filter_test_ptype(int t, struct hci_filter *f)
131 return hci_test_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask);
133 static inline void hci_filter_all_ptypes(struct hci_filter *f)
135 memset((void *) &f->type_mask, 0xff, sizeof(f->type_mask));
137 static inline void hci_filter_set_event(int e, struct hci_filter *f)
139 hci_set_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask);
141 static inline void hci_filter_clear_event(int e, struct hci_filter *f)
143 hci_clear_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask);
145 static inline int hci_filter_test_event(int e, struct hci_filter *f)
147 return hci_test_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask);
149 static inline void hci_filter_all_events(struct hci_filter *f)
151 memset((void *) f->event_mask, 0xff, sizeof(f->event_mask));
153 static inline void hci_filter_set_opcode(int opcode, struct hci_filter *f)
157 static inline void hci_filter_clear_opcode(struct hci_filter *f)
161 static inline int hci_filter_test_opcode(int opcode, struct hci_filter *f)
163 return (f->opcode == opcode);
166 static inline int bacmp(const bt_address *ba1, const bt_address *ba2)
168 return memcmp(ba1, ba2, sizeof(bt_address));
170 static inline void bacpy(bt_address *dst, const bt_address *src)
172 memcpy(dst, src, sizeof(bt_address));
176 #endif /* __HCIDRIVER */