]> rtime.felk.cvut.cz Git - tiny-bt.git/blob - src/hcidriver.h
5a1704fb98615e6eaef6cde5e94359375e0d3e1e
[tiny-bt.git] / src / hcidriver.h
1 //
2 // C++ Interface: hcidriver
3 //
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. 
5 //
6 //
7 // Author: root <root@ubuntu>, (C) 2008
8 //
9 // Copyright: See COPYING file that comes with this distribution
10 //
11 //
12 #ifndef __HCIDRIVER
13 #define __HCIDRIVER
14
15 #include<asm/types.h>
16 #include<sys/socket.h>
17 #include<string.h>
18 #include "hciembeded.h"
19
20
21
22
23
24 /* BT protocols(from bluetooth.h)*/
25 #define BTPROTO_L2CAP   0
26 #define BTPROTO_HCI     1
27 #define BTPROTO_SCO     2
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
33
34 #define SOL_HCI         0
35 #define SOL_L2CAP       6
36 #define SOL_SCO         17
37 #define SOL_RFCOMM      18
38
39 #define max(a, b)       ((a) > (b) ? (a) : (b))
40 #define min(a, b)       ((a) < (b) ? (a) : (b))
41
42
43 /* BD_ADDR  (bluetooth.h)*/
44
45
46 typedef struct{
47         __u8 byte[3];
48 } __attribute__((packed)) dev_lap;
49
50
51
52 /* Class of device*/
53
54 typedef struct{
55         __u8 byte[3];
56 }cl_device;
57
58
59 typedef struct{
60         __u16 *p_OCF_OGF;
61         void *p_cmdp;
62         void *p_retcmdp;
63         __u16 cmdp_len;
64         __u16 retcmdp_len;
65         int event;      //for setting event filter , some hci commands have own events
66 }hci_request;
67
68
69
70 /* next function structures*/
71
72
73 extern int call_hci_inquiry_cmd(int dd, bt_address *p_addressarray,int timeout);
74 extern int call_hci_read_bd_addr_cmd(int dd,bt_address *p_address,__u16 *p_ocf_ogf);
75 extern int call_hci_read_local_name_cmd(int dd, void *p_name,__u16 *p_ocf_ogf);
76 extern int call_hci_create_connection_cmd(int dd, bt_address *p_address, int timeout);
77 extern int hci_open_device(int dev_id);
78 extern int hci_send_command(int dd, hci_request *p_req);
79 extern int hci_send_request(int dd, hci_request *p_req,int timeout);
80 //extern void print_device_list(int ctl);
81 extern int hci_close_dev(int dd);
82
83
84 extern void assemble_hci_data(void *p_con_handle,void *p_data_size,void *p_data);
85 extern void assemble_ocf_ogf(__u8 ogf,__u8 ocf,__u16 *p_ocf_ogf);
86 extern __u16 swap_2_bytes(__u16 twobytes);
87 extern __u8 swap8(__u8 byte1);
88 extern __u16 swap16(__u16 byte2);
89 //extern void bacpy(bt_address p_dest, bt_address p_source);
90 extern void fill_add(bt_address *addr,__u8 first, __u8 sec, __u8 third, __u8 forth, __u8 fifth, __u8 sixth);
91 extern void printba(bt_address *ba);
92 extern int compare_bda(bt_address *p_first, bt_address *p_second);
93 extern void fill_zero(bt_address *p_addr);
94 extern void swap_addrbytes(bt_address *p_addr);
95
96
97 static inline void hci_set_bit(int nr, void *addr)
98 {
99         *((uint32_t *) addr + (nr >> 5)) |= (1 << (nr & 31));
100 }
101
102 static inline void hci_clear_bit(int nr, void *addr)
103 {
104         *((uint32_t *) addr + (nr >> 5)) &= ~(1 << (nr & 31));
105 }
106
107 static inline int hci_test_bit(int nr, void *addr)
108 {
109         return *((uint32_t *) addr + (nr >> 5)) & (1 << (nr & 31));
110 }
111
112 /* HCI filter tools */
113 static inline void hci_filter_clear(struct hci_filter *f)
114 {
115         memset(f, 0, sizeof(*f));
116 }
117 static inline void hci_filter_set_ptype(int t, struct hci_filter *f)
118 {
119         hci_set_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask);
120 }
121 static inline void hci_filter_clear_ptype(int t, struct hci_filter *f)
122 {
123         hci_clear_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask);
124 }
125 static inline int hci_filter_test_ptype(int t, struct hci_filter *f)
126 {
127         return hci_test_bit((t == HCI_VENDOR_PKT) ? 0 : (t & HCI_FLT_TYPE_BITS), &f->type_mask);
128 }
129 static inline void hci_filter_all_ptypes(struct hci_filter *f)
130 {
131         memset((void *) &f->type_mask, 0xff, sizeof(f->type_mask));
132 }
133 static inline void hci_filter_set_event(int e, struct hci_filter *f)
134 {
135         hci_set_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask);
136 }
137 static inline void hci_filter_clear_event(int e, struct hci_filter *f)
138 {
139         hci_clear_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask);
140 }
141 static inline int hci_filter_test_event(int e, struct hci_filter *f)
142 {
143         return hci_test_bit((e & HCI_FLT_EVENT_BITS), &f->event_mask);
144 }
145 static inline void hci_filter_all_events(struct hci_filter *f)
146 {
147         memset((void *) f->event_mask, 0xff, sizeof(f->event_mask));
148 }
149 static inline void hci_filter_set_opcode(int opcode, struct hci_filter *f)
150 {
151         f->opcode = opcode;
152 }
153 static inline void hci_filter_clear_opcode(struct hci_filter *f)
154 {
155         f->opcode = 0;
156 }
157 static inline int hci_filter_test_opcode(int opcode, struct hci_filter *f)
158 {
159         return (f->opcode == opcode);
160 }
161
162 static inline int bacmp(const bt_address *ba1, const bt_address *ba2)
163 {
164         return memcmp(ba1, ba2, sizeof(bt_address));
165 }
166 static inline void bacpy(bt_address *dst, const bt_address *src)
167 {
168         memcpy(dst, src, sizeof(bt_address));
169 }
170
171
172 #endif  /* __HCIDRIVER */