1 /*******************************************************************
\r
4 bth_cmd_complete_ev.c - fce for reading packet event command complet
\r
6 Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
\r
8 *******************************************************************/
\r
13 #include <periph/sci_rs232.h>
\r
15 //#include <assert.h>
\r
19 #include "inline_fce.h"
\r
20 #include "hci_event.h"
\r
21 #include "hci_command.h"
\r
25 int cmd_ev_none(uint8_t *bth_p, uint8_t size)
\r
30 /********************************************************************/
\r
31 /*********************** OGF = 0x01 ****************************/
\r
32 /*-------------------LINK CONTROL COMMANDS--------------------------*/
\r
33 /********************************************************************/
\r
34 /*--- OCF = 0x0001 --- Inquiry */
\r
37 /*--- OCF = 0x0002 --- Inquiry_Cancel ---*/
\r
40 /*--- OCF = 0x0003 --- Periodic_Inquiry_Mode ---*/
\r
43 /*--- OCF = 0x0004 --- Exit_Periodic_Inquiry_Mode ---*/
\r
46 /*--- OCF = 0x0005 --- Create_Connection ---*/
\r
49 /*--- OCF = 0x0006 --- Disconnect ---*/
\r
52 /*--- OCF = 0x0007 --- Add_SCO_Connection ---*/
\r
55 /*--- OCF = 0x0009 --- Accept_Connection_Request ---*/
\r
58 /*--- OCF = 0x000A --- Reject_Connection_Request ---*/
\r
61 /*--- OCF = 0x000B --- Link_Key_Request_Reply ---*/
\r
63 int cmd_ev_01x000b(uint8_t *bth_p, uint8_t size)
\r
68 /*--- OCF = 0x000D --- PIN_Code_Request_Reply ---*/
\r
70 int cmd_ev_01x000d(uint8_t *bth_p, uint8_t size)
\r
75 /*--- OCF = 0x000E --- PIN_Code_Request_Negative_Reply ---*/
\r
77 int cmd_ev_01x000e(uint8_t *bth_p, uint8_t size)
\r
82 /*--- OCF = 0x000F --- Change_Connection_Packet_Type ---*/
\r
85 /*--- OCF = 0x0011 --- Authentication_Requested ---*/
\r
88 /*--- OCF = 0x0013 --- Set_Connection_Encryption ---*/
\r
91 /*--- OCF = 0x0015 --- Change_Connection_Link_Key ---*/
\r
94 /*--- OCF = 0x0017 --- Master_Link_Key ---*/
\r
97 /*--- OCF = 0x0019 --- Remote_Name_Request ---*/
\r
100 /*--- OCF = 0x001B --- Read_Remote_Supported_Features ---*/
\r
103 /*--- OCF = 0x001F --- Read_Clock_Offset ---*/
\r
108 /********************************************************************/
\r
109 /*********************** OGF = 0x02 ****************************/
\r
110 /*-------------------LINK POLICY COMMANDS--------------------------*/
\r
111 /********************************************************************/
\r
112 /*--- OCF = 0x0001 --- Hold_Mode ---*/
\r
115 /*--- OCF = 0x0003 --- Sniff_Mode ---*/
\r
118 /*--- OCF = 0x0004 --- Exit_Sniff_Mode ---*/
\r
121 /*--- OCF = 0x0005 --- Park_Mode ---*/
\r
124 /*--- OCF = 0x0006 --- Exit_Park_Mode ---*/
\r
127 /*--- OCF = 0x0007 --- QoS_Setup ---*/
\r
130 /*--- OCF = 0x0009 --- Role_Discovery ---*/
\r
131 //Status, Connection_Handle, Current_Role
\r
132 int cmd_ev_02x0009(uint8_t *bth_p, uint8_t size)
\r
137 /*--- OCF = 0x000b --- Switch_Role ---*/
\r
140 /*--- OCF = 0x000C --- Read_Link_Policy_Settings ---*/
\r
141 //Status, Connection_Handle, Link_Policy_Settings/
\r
142 int cmd_ev_02x000C(uint8_t *bth_p, uint8_t size)
\r
147 /*--- OCF = 0x000D --- Write_Link_Policy_Settings ---*/
\r
148 //Link_Policy_Settings, Status, Connection_Handle
\r
149 int cmd_ev_02x000D(uint8_t *bth_p, uint8_t size)
\r
151 write_link_policy_rp bth_q;
\r
153 // store16(bth_q.status,*((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____status));
\r
154 __bthtomc16((uint8_t*)&bth_q.status,((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____status));
\r
155 __bthtomc16((uint8_t*)&bth_q.handle,((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____handle));
\r
156 // store_le16(&bth_q.handle,*((uint16_t*)((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____handle)));
\r
157 /*prohledam vsechna zarizeni, se kterymi mam uzavrenou komunikaci*/
\r
160 if(bth_connected[i]!=NULL)
\r
162 if(bth_connected[i]->handle==bth_q.handle)
\r
164 if(bth_q.status!=0)
\r
166 //problehla chyba, u domluvi s timto zarizenim - tj.
\r
167 return (bth_q.status);
\r
170 change_connection_packet_type(bth_q.handle,btohs(0xcc18));
\r
172 // return ((int)*((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____status));
\r
181 /********************************************************************/
\r
182 /*********************** OGF = 0x03 ****************************/
\r
183 /*--------------HOST CONTROLLER & BASEBAND COMMANDS-----------------*/
\r
184 /********************************************************************/
\r
185 /*--- OCF = 0x0001 --- Set_Event_Mask ---*/
\r
188 /*--- OCF = 0x0003 --- Reset ---*/
\r
191 /*--- OCF = 0x0005 --- Set_Event_Filter ---*/
\r
194 /*--- OCF = 0x0008 --- Flush ---*/
\r
195 //STATUS, Connection_Handle
\r
196 int cmd_ev_03x0008(uint8_t *bth_p, uint8_t size)
\r
201 /*--- OCF = 0x0009 --- Read_PIN_Type ---*/
\r
203 int cmd_ev_03x0009(uint8_t *bth_p, uint8_t size)
\r
208 /*--- OCF = 0x000a --- Write_PIN_Type ---*/
\r
211 /*--- OCF = 0x000b --- Create_New_Unit_Key ---*/
\r
214 /*--- OCF = 0x000d --- Read_Stored_Link_Key ---*/
\r
215 //STATUS, Max_Num_Keys, Num_Keys_Read
\r
216 int cmd_ev_03x000d(uint8_t *bth_p, uint8_t size)
\r
221 /*--- OCF = 0x0011 --- Write_Stored_Link_Key ---*/
\r
222 //STATUS, Num_Keys_Written
\r
223 int cmd_ev_03x0011(uint8_t *bth_p, uint8_t size)
\r
228 /*--- OCF = 0x0012 --- Delete_Stored_Link_Key ---*/
\r
229 //STATUS, Num_Keys_Deleted
\r
230 int cmd_ev_03x0012(uint8_t *bth_p, uint8_t size)
\r
235 /*--- OCF = 0x0013 --- Change_Local_Name ---*/
\r
238 /*--- OCF = 0x0014 --- Read_Local_Name ---*/
\r
240 int cmd_ev_03x0014(uint8_t *bth_p, uint8_t size)
\r
245 /*--- OCF = 0x0015 --- Read_Connection_Accept_Timeout ---*/
\r
246 //STATUS,Conn_Accept_Timeout
\r
247 int cmd_ev_03x0015(uint8_t *bth_p, uint8_t size)
\r
252 /*--- OCF = 0x0016 --- Write_Connection_Accept_Timeout ---*/
\r
255 /*--- OCF = 0x0017 --- Read_Page_Timeout ---*/
\r
256 //STATUS,Page_Timeout
\r
257 int cmd_ev_03x0017(uint8_t *bth_p, uint8_t size)
\r
262 /*--- OCF = 0x0018 --- Write_Page_Timeout ---*/
\r
265 /*--- OCF = 0x0019 --- Read_Scan_Enable ---*/
\r
266 //STATUS, Scan_Enable
\r
267 int cmd_ev_03x0019(uint8_t *bth_p, uint8_t size)
\r
272 /*--- OCF = 0x001a --- Write_Scan_Enable ---*/
\r
275 /*--- OCF = 0x001b --- Read_Page_Scan_Activity ---*/
\r
276 //STATUS, Page_Scan_Interval, Page_Scan_Window
\r
277 int cmd_ev_03x001b(uint8_t *bth_p, uint8_t size)
\r
282 /*--- OCF = 0x001c --- Write_Page_Scan_Activity ---*/
\r
285 /*--- OCF = 0x001d --- Read_Inquiry_Scan_Activity ---*/
\r
286 //STATUS,Inquiry_Scan_Interval, Inquiry_Scan_Window
\r
287 int cmd_ev_03x001d(uint8_t *bth_p, uint8_t size)
\r
292 /*--- OCF = 0x001e --- Write_Inquiry_Scan_Activity ---*/
\r
295 /*--- OCF = 0x001f --- Read_Authentication_Enable ---*/
\r
296 //STATUS, Authentication_Enable
\r
297 int cmd_ev_03x001f(uint8_t *bth_p, uint8_t size)
\r
302 /*--- OCF = 0x0020 --- Write_Authentication_Enable ---*/
\r
305 /*--- OCF = 0x0021 --- Read_Encryption_Mode ---*/
\r
306 //STATUS,Encryption_Mode
\r
307 int cmd_ev_03x0021(uint8_t *bth_p, uint8_t size)
\r
312 /*--- OCF = 0x0022 --- Write_Encryption_Mode ---*/
\r
315 /*--- OCF = 0x0023 --- Read_Class_of_Device ---*/
\r
316 //STATUS,Class_of_Device
\r
317 int cmd_ev_03x0023(uint8_t *bth_p, uint8_t size)
\r
322 /*--- OCF = 0x0024 --- Write_Class_of_Device ---*/
\r
326 /*--- OCF = 0x0025 --- Read_Voice_Setting ---*/
\r
327 //STATUS,Voice_Setting
\r
328 int cmd_ev_03x0025(uint8_t *bth_p, uint8_t size)
\r
333 /*--- OCF = 0x0026 --- Write_Voice_Setting ---*/
\r
337 /*--- OCF = 0x0027 --- Read_Automatic_Flush_Timeout ---*/
\r
338 //STATUS, Connection_Handle, Flush_Timeout
\r
339 int cmd_ev_03x0027(uint8_t *bth_p, uint8_t size)
\r
344 /*--- OCF = 0x0028 --- Write_Automatic_Flush_Timeout ---*/
\r
345 //STATUS,Connection_Handle
\r
346 int cmd_ev_03x0028(uint8_t *bth_p, uint8_t size)
\r
351 /*--- OCF = 0x0029 --- Read_Num_Broadcast_Retransmissions ---*/
\r
352 //STATUS,Num_Broadcast_Retran
\r
353 int cmd_ev_03x0029(uint8_t *bth_p, uint8_t size)
\r
358 /*--- OCF = 0x002a --- Write_Num_Broadcast_Retransmissions ---*/
\r
361 /*--- OCF = 0x002b --- Read_Hold_Mode_Activity ---*/
\r
362 //STATUS, Hold_Mode_Activity
\r
363 int cmd_ev_03x002b(uint8_t *bth_p, uint8_t size)
\r
368 /*--- OCF = 0x002c --- Write_Hold_Mode_Activity ---*/
\r
371 /*--- OCF = 0x002d --- Read_Transmit_Power_Level ---*/
\r
372 //STATUS,Connection_Handle,Transmit_Power_Level
\r
373 int cmd_ev_03x002d(uint8_t *bth_p, uint8_t size)
\r
378 /*--- OCF = 0x002e --- Read_SCO_Flow_Control_Enable ---*/
\r
379 //STATUS, SCO_Flow_Control_Enable
\r
380 int cmd_ev_03x002e(uint8_t *bth_p, uint8_t size)
\r
385 /*--- OCF = 0x002f --- Write_SCO_Flow_Control_Enable ---*/
\r
388 /*--- OCF = 0x0031 --- Set_Host_Controller_To_Host_Flow_Control*/
\r
391 /*--- OCF = 0x0033 --- Host_Buffer_Size ---*/
\r
394 /*--- OCF = 0x0035 --- Host_Number_Of_Completed_Packets ---*/
\r
397 /*--- OCF = 0x0036 --- Read_Link_Supervision_Timeout ---*/
\r
398 /*STATUS,Connection_Handle, Link_Supervision_Timeout*/
\r
399 int cmd_ev_03x0036(uint8_t *bth_p, uint8_t size)
\r
404 /*--- OCF = 0x0037 --- Write_Link_Supervision_Timeout ---*/
\r
405 //STATUS,Connection_Handle
\r
406 int cmd_ev_03x0037(uint8_t *bth_p, uint8_t size)
\r
411 /*--- OCF = 0x0038 --- Read_Number_Of_Supported_IAC ---*/
\r
412 //STATUS,Num_Support_IAC
\r
413 int cmd_ev_03x0038(uint8_t *bth_p, uint8_t size)
\r
418 /*--- OCF = 0x0039 --- Read_Current_IAC_LAP ---*/
\r
419 //STATUS,Num_Current_IAC, IAC_LAP[i]
\r
420 int cmd_ev_03x0039(uint8_t *bth_p, uint8_t size)
\r
425 /*--- OCF = 0x003a --- Write_Current_IAC_LAP*/
\r
428 /*--- OCF = 0x003b --- Read_Page_Scan_Period_Mode ---*/
\r
429 /*STATUS,Page_Scan_Period_Mode*/
\r
430 int cmd_ev_03x003b(uint8_t *bth_p, uint8_t size)
\r
435 /*--- OCF = 0x003c --- Write_Page_Scan_Period_Mode ---*/
\r
438 /*--- OCF = 0x003d --- Read_Page_Scan_Mode ---*/
\r
439 //STATUS,Page_Scan_Mode
\r
440 int cmd_ev_03x003d(uint8_t *bth_p, uint8_t size)
\r
446 /********************************************************************/
\r
447 /*********************** OGF = 0x04 ****************************/
\r
448 /*-------------------INFORMATIONAL PARAMETERS-----------------------*/
\r
449 /********************************************************************/
\r
451 /*--- OCF = 0x0001 --- Read_Local_Version_Information ---*/
\r
452 //STATUS, HCI Version, HCI Revision, LMP Version, Manufacturer_Name, LMP Subversion
\r
453 int cmd_ev_04x0001(uint8_t *bth_p, uint8_t size)
\r
458 /*--- OCF = 0x0003 --- Read_Local_Supported_Features ---*/
\r
459 //STATUS, LMP_Features
\r
460 int cmd_ev_04x0003(uint8_t *bth_p, uint8_t size)
\r
465 /*--- OCF = 0x0005 --- Read_Buffer_Size ---*/
\r
466 //STATUS, HC_ACL_Data_Packet_Length, HC_SCO_Data_Packet_Length, HC_Total_Num_ACL_Data_Packets,
\r
467 //HC_Total_Num_SCO_Data_Packets
\r
468 int cmd_ev_04x0005(uint8_t *bth_p, uint8_t size)
\r
474 /*--- OCF = 0x0007 --- Read_Country_Code ---*/
\r
475 //STATUS, Country_Code
\r
476 int cmd_ev_04x0007(uint8_t *bth_p, uint8_t size)
\r
481 /*--- OCF = 0x0009 --- Read_BD_ADDR ---*/
\r
483 int cmd_ev_04x0009(uint8_t *bth_p, uint8_t size)
\r
485 read_bd_addr_rp bth_q;
\r
488 store16(bth_q.status,*((uint8_t*)bth_p+READ_BD_ADDR_RP____status));
\r
489 memcpy(&bth_local_info.bdaddr,((uint8_t*)bth_p+READ_BD_ADDR_RP____bdaddr),6);
\r
490 index=bth_del_event(btohs(0x0910)); //obcode read_bd_addr
\r
498 // assert(index >= 0 && index < LANCOMMAND);
\r
499 if(*((uint8_t*)bth_p+READ_BD_ADDR_RP____status)==0)
\r
501 free(bth_pole_adrr_check_packet[index]);
\r
502 bth_pole_adrr_check_packet[index]=NULL;
\r
503 return 0; //prikaz probehl bez komplikaci
\r
507 /*status neni OK */
\r
508 free(bth_pole_adrr_check_packet[index]);
\r
509 bth_pole_adrr_check_packet[index]=NULL;
\r
510 return((int)*((uint8_t*)bth_p+READ_BD_ADDR_RP____status)); //NOTE asi jsem tam pripisoval hvezdicku, uz nevim jiste, bylo to vcera >-]
\r