]> rtime.felk.cvut.cz Git - mirosot.git/blob - bluetooth/bth_command.c
c9b221c72fb61dddb7e57524b0ccf8c0eefeb31f
[mirosot.git] / bluetooth / bth_command.c
1 /*******************************************************************\r
2   bluetooth library\r
3 \r
4   bth_command.c - command fce (bth specification) - build command\r
5                   packet\r
6 \r
7   Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
8 \r
9  *******************************************************************/\r
10 \r
11 \r
12 #include <string.h>\r
13 #include <stdlib.h>\r
14 #ifdef BTH_LX\r
15 #include <types.h>\r
16 #include <cpu_def.h>\r
17 #include <h8s2638h.h>\r
18 #include <periph/sci_rs232.h>\r
19 #include <system_def.h>\r
20 \r
21 #else\r
22 #include "types.h"\r
23 #endif\r
24 \r
25 #include "hci.h"\r
26 #include "hci_event.h"\r
27 #include "hci_command.h"\r
28 #include "inline_fce.h"\r
29 \r
30 \r
31 bths_check_command *bth_find_end(bths_check_command *dyn_chan)\r
32 {\r
33    bths_check_command *Pomocna;\r
34    if(dyn_chan!=NULL)\r
35     {\r
36       Pomocna=dyn_chan;\r
37       while (Pomocna->next!=NULL)\r
38       {\r
39         Pomocna=Pomocna->next;             /*dam command prikaz do fronty*/\r
40       };\r
41       return Pomocna;\r
42     }\r
43     else\r
44     {\r
45     return NULL;\r
46     };\r
47 };\r
48 \r
49 \r
50 /********************************************************************/\r
51 /***********************   OGF = 0x01    ****************************/\r
52 /*-------------------LINK CONTROL COMMANDS--------------------------*/\r
53 /********************************************************************/\r
54 \r
55 int bth_cmd_inqury(uint8_t length, uint8_t rsp, uint8_t *lap)\r
56 {\r
57 /*------------------------ parts of packet-----------------------*/\r
58     uint8_t *typ_hci_paket;\r
59     hci_command_hdr *hci_headr;\r
60     inquiry_cp *bth_cmd_packet;\r
61     uint16_t i; //pocitani v cyklu\r
62 /*-------------------------------------------------------------------------------*/\r
63 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
64 \r
65     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
66     {return 1;};\r
67 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
68     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+INQUIRY_CP_SIZE);\r
69 \r
70     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
71     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
72     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
73     bth_cmd_packet=(inquiry_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
74 \r
75     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
76     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY)));\r
77     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),INQUIRY_CP_SIZE);\r
78 \r
79     /*pokud neni uvedeno lap zvoli se univerzlni*/\r
80       store_le16((uint8_t*)bth_cmd_packet+INQUIRY_CP____length,length);\r
81       store_le16((uint8_t*)bth_cmd_packet+INQUIRY_CP____num_rsp,rsp);\r
82 \r
83     if(lap==NULL)\r
84     {\r
85       uint8_t lap_univ[]={0x33,0x8b,0x9e};\r
86       memcpy(((uint8_t*)bth_cmd_packet+INQUIRY_CP____lap),&lap_univ,3);\r
87     }\r
88     else{\r
89       for(i=0; i<3; i++) {store_le16((uint8_t*)bth_cmd_packet+INQUIRY_CP____lap+i,*(lap+2-i));};\r
90     };\r
91 \r
92 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
93 se overuje, az pri samotnem ukladani */\r
94     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
95     else{ bth_com_buf_info.aktual=0;};\r
96  return -1;\r
97 };\r
98 \r
99 /*--- 0x01 - 0x000F --- Change_Connection_Packet_Type ---*/\r
100 int change_connection_packet_type(uint16_t handle, uint16_t ptype)\r
101 {\r
102     uint8_t *typ_hci_paket;\r
103     hci_command_hdr *hci_headr;\r
104     set_conn_ptype_cp *bth_cmd_packet;\r
105 /*-------------------------------------------------------------------------------*/\r
106 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
107 \r
108     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
109     {return 1;};\r
110 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
111     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+SET_CONN_PTYPE_CP_SIZE);\r
112     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
113     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
114     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
115     bth_cmd_packet=(set_conn_ptype_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
116 \r
117     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
118     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_PTYPE)));\r
119     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),SET_CONN_PTYPE_CP_SIZE);\r
120     store_le16((uint8_t*)bth_cmd_packet+SET_CONN_PTYPE_CP____handle,handle);\r
121     store_le16((uint8_t*)bth_cmd_packet+SET_CONN_PTYPE_CP____pkt_type,ptype);\r
122 \r
123 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
124 se overuje, az pri samotnem ukladani */\r
125     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
126     else{ bth_com_buf_info.aktual=0;};\r
127   return(-1);\r
128 };\r
129 \r
130 \r
131 \r
132 int bth_cmd_disconnect(uint16_t handle, uint8_t reason)\r
133 {\r
134 /*------------------------ parts of packet-----------------------*/\r
135     uint8_t *typ_hci_paket;\r
136     hci_command_hdr *hci_headr;\r
137     disconnect_cp *bth_cmd_packet;\r
138 /*-------------------------------------------------------------------------------*/\r
139 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
140 \r
141     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
142     {return 1;};\r
143 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
144     int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE+DISCONNECT_CP_SIZE;\r
145 \r
146     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
147     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
148     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
149     bth_cmd_packet=(disconnect_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
150 \r
151     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
152     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_POLICY, OCF_DISCONNECT)));\r
153     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_PAGE_ACTIVITY_CP_SIZE);\r
154     store_le16((uint16_t*)((uint8_t*)bth_cmd_packet+DISCONNECT_CP____handle),handle);\r
155     store16(*((uint8_t*)bth_cmd_packet+DISCONNECT_CP____reason),reason);\r
156 \r
157 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
158 se overuje, az pri samotnem ukladani */\r
159     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
160     else{ bth_com_buf_info.aktual=0;};\r
161  return -1;\r
162 };\r
163 \r
164 //--------------------------------------------------------------------------------------------\r
165 //--------------------------------------------------------------------------------------------\r
166 \r
167 \r
168 \r
169 /********************************************************************/\r
170 /***********************   OGF = 0x02    ****************************/\r
171 /*-------------------LINK POLICY COMMANDS--------------------------*/\r
172 /********************************************************************/\r
173 int bth_cmd_write_link_policy_settings(uint16_t handle, uint16_t policy) /*obcode=0x0D08; 0x02--0x000D*/\r
174 {\r
175 /*------------------------ parts of packet-----------------------*/\r
176     uint8_t *typ_hci_paket;\r
177     hci_command_hdr *hci_headr;\r
178     write_link_policy_cp *bth_cmd_packet;\r
179 /*-------------------------------------------------------------------------------*/\r
180 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
181 \r
182     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
183     {return 1;};\r
184 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
185     int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE+WRITE_LINK_POLICY_CP_SIZE;\r
186 \r
187     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
188     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
189     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
190     bth_cmd_packet=(write_link_policy_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
191 \r
192     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
193     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY)));\r
194     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_PAGE_ACTIVITY_CP_SIZE);\r
195     store_le16((uint16_t*)((uint8_t*)bth_cmd_packet+WRITE_LINK_POLICY_CP____handle),handle);\r
196     store_le16((uint16_t*)((uint8_t*)bth_cmd_packet+WRITE_LINK_POLICY_CP____policy),policy);\r
197 \r
198 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
199 se overuje, az pri samotnem ukladani */\r
200     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
201     else{ bth_com_buf_info.aktual=0;};\r
202  return -1;\r
203 };\r
204 \r
205 \r
206 \r
207 \r
208 /********************************************************************/\r
209 /***********************   OGF = 0x03    ****************************/\r
210 /*--------------HOST CONTROLLER & BASEBAND COMMANDS-----------------*/\r
211 /********************************************************************/\r
212 int bth_cmd_reset(void)         /*opcode=0x0C03 OCF = 0x0003, OGF = 0x03*/\r
213 {\r
214 /*------------------------ parts of packet-----------------------*/\r
215     uint8_t *typ_hci_paket;\r
216     hci_command_hdr *hci_headr;\r
217 /*-------------------------------------------------------------------------------*/\r
218 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
219 \r
220     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
221     {return 1;};\r
222 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
223     int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE;\r
224 \r
225     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
226     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
227     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
228 \r
229     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
230     store_le16(((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode),htobs(cmd_opcode_pack(OGF_HOST_CTL,OCF_RESET )));\r
231 \r
232 \r
233     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),0);\r
234 \r
235 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
236 se overuje, az pri samotnem ukladani */\r
237     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
238     else{ bth_com_buf_info.aktual=0;};\r
239  return -1;\r
240 };\r
241 \r
242 \r
243 \r
244 /********************************************************************/\r
245 /***********************   OGF = 0x04    ****************************/\r
246 /*-------------------INFORMATIONAL PARAMETERS-----------------------*/\r
247 /********************************************************************/\r
248 \r
249 \r
250 \r
251 int bth_accept_conn_req_cp(bdaddr_t *bdaddr)                 /*0x01 - 0x0009*/\r
252 {\r
253 /*------------------------ parts of packet-----------------------*/\r
254     uint8_t *typ_hci_paket;\r
255     hci_command_hdr *hci_headr;\r
256     accept_conn_req_cp *bth_cmd_packet;\r
257 /*-------------------------------------------------------------------------------*/\r
258 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
259 \r
260     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
261     {return 1;};\r
262 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
263     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+ACCEPT_CONN_REQ_CP_SIZE);\r
264 \r
265     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
266     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
267     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
268     bth_cmd_packet=(accept_conn_req_cp*)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
269 \r
270     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
271     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ)));\r
272     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),ACCEPT_CONN_REQ_CP_SIZE);\r
273     memcpy((uint8_t*)bth_cmd_packet+ACCEPT_CONN_REQ_CP____bdaddr,bdaddr,sizeof(bdaddr_t));\r
274     store16(*((uint8_t*)bth_cmd_packet+ACCEPT_CONN_REQ_CP____role), 0x01); //ACL\r
275 \r
276 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
277 se overuje, az pri samotnem ukladani */\r
278     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
279     else{ bth_com_buf_info.aktual=0;};\r
280  return 0;\r
281 };\r
282 \r
283 int bth_cmd_write_page_scan(uint16_t interval, uint16_t window)        /*obcode=1C0C OGF = 0x001C OCF=0x03*/\r
284 {\r
285 /*------------------------ parts of packet-----------------------*/\r
286     uint8_t *typ_hci_paket;\r
287     hci_command_hdr *hci_headr;\r
288     write_page_activity_cp *bth_cmd_packet;\r
289 /*-------------------------------------------------------------------------------*/\r
290 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
291 \r
292     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
293     {return 1;};\r
294 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
295     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_PAGE_ACTIVITY_CP_SIZE);\r
296 \r
297     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
298     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
299     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
300     bth_cmd_packet=(write_page_activity_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
301 \r
302     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
303     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_PAGE_ACTIVITY)));\r
304     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_PAGE_ACTIVITY_CP_SIZE);\r
305     store_le16((uint8_t*)bth_cmd_packet+WRITE_PAGE_ACTIVITY_CP____interval,interval);\r
306     store_le16((uint8_t*)bth_cmd_packet+WRITE_PAGE_ACTIVITY_CP____window,window);\r
307 \r
308 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
309 se overuje, az pri samotnem ukladani */\r
310     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
311     else{ bth_com_buf_info.aktual=0;};\r
312  return -1;\r
313 };\r
314 \r
315 \r
316 \r
317 //--------------------------------------------------------------------------------------------\r
318 //--------------------------------------------------------------------------------------------\r
319 //--------------------------------------------------------------------------------------------\r
320 int bth_cmd_write_inquiry_scan_activity(uint16_t interval, uint16_t window) //0x001E\r
321 {\r
322 /*------------------------ parts of packet-----------------------*/\r
323     uint8_t *typ_hci_paket;\r
324     hci_command_hdr *hci_headr;\r
325     write_inq_activity_cp *bth_cmd_packet;\r
326 /*-------------------------------------------------------------------------------*/\r
327 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
328 \r
329     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
330     {return 1;};\r
331 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
332     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_PAGE_ACTIVITY_CP_SIZE);\r
333     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
334     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
335     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
336     bth_cmd_packet=(write_inq_activity_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
337 \r
338     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
339     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQ_ACTIVITY)));\r
340     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_INQ_ACTIVITY_CP_SIZE);\r
341     store_le16((uint8_t*)bth_cmd_packet+WRITE_INQ_ACTIVITY_CP____interval,interval);\r
342     store_le16((uint8_t*)bth_cmd_packet+WRITE_INQ_ACTIVITY_CP____window,window);\r
343 \r
344 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
345 se overuje, az pri samotnem ukladani */\r
346     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
347     else{ bth_com_buf_info.aktual=0;};\r
348     return(-1);\r
349 };\r
350 \r
351 int bth_cmd_read_bd_addr(void) /*opcode=0x0910 OCF = 0x0009, OGF = 0x04*/\r
352 {\r
353 /*------------------------ parts of packet-----------------------*/\r
354     uint8_t *typ_hci_paket;\r
355     hci_command_hdr *hci_headr;\r
356 /*-------------------------------------------------------------------------------*/\r
357 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
358 \r
359     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
360     {return 1;};\r
361 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
362     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE);\r
363     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
364     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
365     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
366 \r
367     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
368     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR)));\r
369     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),0);\r
370 \r
371 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
372 se overuje, az pri samotnem ukladani */\r
373     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
374     else{ bth_com_buf_info.aktual=0;};\r
375   return -1;\r
376 };\r
377 \r
378 int bth_cmd_write_scan_enable(uint8_t set_ing_scan) //0x001A\r
379 {\r
380 /*------------------------ parts of packet-----------------------*/\r
381     uint8_t *typ_hci_paket;\r
382     hci_command_hdr *hci_headr;\r
383     uint8_t *bth_cmd_packet;\r
384 \r
385 /*-------------------------------------------------------------------------------*/\r
386 /*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
387 \r
388     if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
389     {return 1;};\r
390 /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
391     int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_SCAN_ENABLE_SIZE);\r
392     bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
393     typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
394     hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer on head\r
395     bth_cmd_packet=(uint8_t *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer on parametrs\r
396 \r
397 \r
398     store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
399     store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE)));\r
400     store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_SCAN_ENABLE_SIZE);\r
401     store16(*bth_cmd_packet,set_ing_scan);\r
402 /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
403 se overuje, az pri samotnem ukladani */\r
404     if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
405     else{ bth_com_buf_info.aktual=0;};\r
406   return -1;\r
407 };\r
408 \r