--- /dev/null
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+ @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
--- /dev/null
+SUBDIRS = bluetooth testapp
\ No newline at end of file
--- /dev/null
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+ @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
--- /dev/null
+# -*- makefile -*-
+
+#bin_PROGRAMS = bth_comp2 bth_comp1
+
+#bth_comp1_SOURCES = main.c bth_main.c bth_command.c bth_event_acc.c bth_error.c bth_cmd_complete_ev.c l2cap.c bth_inface.c h2638_pkt_controll.c
+#bth_comp1_LIBS = boot_fn arch_drivers excptvec misc pxmc m sci_channels
+#bth_comp1_MOREOBJS = $(USER_LIB_DIR)/system_stub.o
+
+#bth_comp2_SOURCES = main.c
+#bth_comp2_LIBS = boot_fn arch_drivers excptvec misc pxmc m sci_channels bluetooth
+#bth_comp2_MOREOBJS = $(USER_LIB_DIR)/system_stub.o
+
+lib_LIBRARIES = bluetooth
+
+bluetooth_SOURCES = bth_command.c bth_event_acc.c bth_error.c bth_cmd_complete_ev.c l2cap.c bth_inface.c bth_main.c h2638_pkt_controll.c
+include_HEADERS = bth_inface.h bth_fce_out.h bth_h8s2638.h
+
--- /dev/null
+# Project: bluetooth\r
+# Makefile created by Dev-C++ 4.9.9.2\r
+\r
+CPP = g++.exe -D__DEBUG__\r
+CC = gcc.exe -D__DEBUG__\r
+WINDRES = windres.exe\r
+RES = \r
+OBJ = Main.o bth_command.o bth_event_acc.o bth_error.o bth_cmd_complete_ev.o l2cap.o bth_inface.o bth_main.o $(RES)\r
+LINKOBJ = Main.o bth_command.o bth_event_acc.o bth_error.o bth_cmd_complete_ev.o l2cap.o bth_inface.o bth_main.o $(RES)\r
+LIBS = -L"C:/Dev-Cpp/lib" -g3 \r
+INCS = -I"C:/Dev-Cpp/include" \r
+CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" \r
+BIN = bluetooth.exe\r
+CXXFLAGS = $(CXXINCS) -g3\r
+CFLAGS = $(INCS) -g3\r
+RM = rm -f\r
+\r
+.PHONY: all all-before all-after clean clean-custom\r
+\r
+all: all-before bluetooth.exe all-after\r
+\r
+\r
+clean: clean-custom\r
+ ${RM} $(OBJ) $(BIN)\r
+\r
+$(BIN): $(OBJ)\r
+ $(CC) $(LINKOBJ) -o "bluetooth.exe" $(LIBS)\r
+\r
+Main.o: Main.c\r
+ $(CC) -c Main.c -o Main.o $(CFLAGS)\r
+\r
+bth_command.o: bth_command.c\r
+ $(CC) -c bth_command.c -o bth_command.o $(CFLAGS)\r
+\r
+bth_event_acc.o: bth_event_acc.c\r
+ $(CC) -c bth_event_acc.c -o bth_event_acc.o $(CFLAGS)\r
+\r
+bth_error.o: bth_error.c\r
+ $(CC) -c bth_error.c -o bth_error.o $(CFLAGS)\r
+\r
+bth_cmd_complete_ev.o: bth_cmd_complete_ev.c\r
+ $(CC) -c bth_cmd_complete_ev.c -o bth_cmd_complete_ev.o $(CFLAGS)\r
+\r
+l2cap.o: l2cap.c\r
+ $(CC) -c l2cap.c -o l2cap.o $(CFLAGS)\r
+\r
+bth_inface.o: bth_inface.c\r
+ $(CC) -c bth_inface.c -o bth_inface.o $(CFLAGS)\r
+\r
+bth_main.o: bth_main.c\r
+ $(CC) -c bth_main.c -o bth_main.o $(CFLAGS)\r
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ bth_cmd_complete_ev.c - fce for reading packet event command complet \r
+ \r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#ifdef BTH_LX\r
+#include <periph/sci_rs232.h>\r
+#include <types.h>\r
+//#include <assert.h>\r
+#endif\r
+#include "types.h"\r
+#include "hci.h"\r
+#include "inline_fce.h"\r
+#include "hci_event.h"\r
+#include "hci_command.h"\r
+\r
+\r
+\r
+int cmd_ev_none(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x01 ****************************/\r
+/*-------------------LINK CONTROL COMMANDS--------------------------*/\r
+/********************************************************************/\r
+/*--- OCF = 0x0001 --- Inquiry */\r
+//NONE\r
+\r
+/*--- OCF = 0x0002 --- Inquiry_Cancel ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0003 --- Periodic_Inquiry_Mode ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0004 --- Exit_Periodic_Inquiry_Mode ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0005 --- Create_Connection ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0006 --- Disconnect ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0007 --- Add_SCO_Connection ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0009 --- Accept_Connection_Request ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x000A --- Reject_Connection_Request ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x000B --- Link_Key_Request_Reply ---*/\r
+//STATUS, BD_ADDR\r
+int cmd_ev_01x000b(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x000D --- PIN_Code_Request_Reply ---*/\r
+//STATUS, BD_ADDR\r
+int cmd_ev_01x000d(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x000E --- PIN_Code_Request_Negative_Reply ---*/\r
+//STATUS, BD_ADDR\r
+int cmd_ev_01x000e(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x000F --- Change_Connection_Packet_Type ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0011 --- Authentication_Requested ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0013 --- Set_Connection_Encryption ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0015 --- Change_Connection_Link_Key ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0017 --- Master_Link_Key ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0019 --- Remote_Name_Request ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x001B --- Read_Remote_Supported_Features ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x001F --- Read_Clock_Offset ---*/\r
+//NONE\r
+\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x02 ****************************/\r
+/*-------------------LINK POLICY COMMANDS--------------------------*/\r
+/********************************************************************/\r
+/*--- OCF = 0x0001 --- Hold_Mode ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0003 --- Sniff_Mode ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0004 --- Exit_Sniff_Mode ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0005 --- Park_Mode ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0006 --- Exit_Park_Mode ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0007 --- QoS_Setup ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x0009 --- Role_Discovery ---*/\r
+//Status, Connection_Handle, Current_Role\r
+int cmd_ev_02x0009(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x000b --- Switch_Role ---*/\r
+//NONE\r
+\r
+/*--- OCF = 0x000C --- Read_Link_Policy_Settings ---*/\r
+//Status, Connection_Handle, Link_Policy_Settings/\r
+int cmd_ev_02x000C(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x000D --- Write_Link_Policy_Settings ---*/\r
+//Link_Policy_Settings, Status, Connection_Handle\r
+int cmd_ev_02x000D(uint8_t *bth_p, uint8_t size)\r
+{\r
+ write_link_policy_rp bth_q;\r
+ int i;\r
+// store16(bth_q.status,*((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____status));\r
+ __bthtomc16((uint8_t*)&bth_q.status,((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____status));\r
+ __bthtomc16((uint8_t*)&bth_q.handle,((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____handle));\r
+// store_le16(&bth_q.handle,*((uint16_t*)((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____handle)));\r
+/*prohledam vsechna zarizeni, se kterymi mam uzavrenou komunikaci*/\r
+ for(i=0;i<8;i++)\r
+ {\r
+ if(bth_connected[i]!=NULL)\r
+ {\r
+ if(bth_connected[i]->handle==bth_q.handle)\r
+ {\r
+ if(bth_q.status!=0)\r
+ {\r
+ //problehla chyba, u domluvi s timto zarizenim - tj.\r
+ return (bth_q.status);\r
+ }else\r
+ {\r
+ change_connection_packet_type(bth_q.handle,btohs(0xcc18));\r
+ return 0;\r
+// return ((int)*((uint8_t*)bth_p+WRITE_LINK_POLICY_RP____status));\r
+ };\r
+ };\r
+ };\r
+ };\r
+ return(-1);\r
+};\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x03 ****************************/\r
+/*--------------HOST CONTROLLER & BASEBAND COMMANDS-----------------*/\r
+/********************************************************************/\r
+/*--- OCF = 0x0001 --- Set_Event_Mask ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0003 --- Reset ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0005 --- Set_Event_Filter ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0008 --- Flush ---*/\r
+//STATUS, Connection_Handle\r
+int cmd_ev_03x0008(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0009 --- Read_PIN_Type ---*/\r
+//STATUS, PIN_Type\r
+int cmd_ev_03x0009(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x000a --- Write_PIN_Type ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x000b --- Create_New_Unit_Key ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x000d --- Read_Stored_Link_Key ---*/\r
+//STATUS, Max_Num_Keys, Num_Keys_Read\r
+int cmd_ev_03x000d(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0011 --- Write_Stored_Link_Key ---*/\r
+//STATUS, Num_Keys_Written\r
+int cmd_ev_03x0011(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0012 --- Delete_Stored_Link_Key ---*/\r
+//STATUS, Num_Keys_Deleted\r
+int cmd_ev_03x0012(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0013 --- Change_Local_Name ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0014 --- Read_Local_Name ---*/\r
+//Status, Name\r
+int cmd_ev_03x0014(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0015 --- Read_Connection_Accept_Timeout ---*/\r
+//STATUS,Conn_Accept_Timeout\r
+int cmd_ev_03x0015(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0016 --- Write_Connection_Accept_Timeout ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0017 --- Read_Page_Timeout ---*/\r
+//STATUS,Page_Timeout\r
+int cmd_ev_03x0017(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0018 --- Write_Page_Timeout ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0019 --- Read_Scan_Enable ---*/\r
+//STATUS, Scan_Enable\r
+int cmd_ev_03x0019(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x001a --- Write_Scan_Enable ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x001b --- Read_Page_Scan_Activity ---*/\r
+//STATUS, Page_Scan_Interval, Page_Scan_Window\r
+int cmd_ev_03x001b(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x001c --- Write_Page_Scan_Activity ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x001d --- Read_Inquiry_Scan_Activity ---*/\r
+//STATUS,Inquiry_Scan_Interval, Inquiry_Scan_Window\r
+int cmd_ev_03x001d(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x001e --- Write_Inquiry_Scan_Activity ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x001f --- Read_Authentication_Enable ---*/\r
+//STATUS, Authentication_Enable\r
+int cmd_ev_03x001f(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0020 --- Write_Authentication_Enable ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0021 --- Read_Encryption_Mode ---*/\r
+//STATUS,Encryption_Mode\r
+int cmd_ev_03x0021(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0022 --- Write_Encryption_Mode ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x0023 --- Read_Class_of_Device ---*/\r
+//STATUS,Class_of_Device\r
+int cmd_ev_03x0023(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0024 --- Write_Class_of_Device ---*/\r
+//STATUS\r
+\r
+\r
+/*--- OCF = 0x0025 --- Read_Voice_Setting ---*/\r
+//STATUS,Voice_Setting\r
+int cmd_ev_03x0025(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0026 --- Write_Voice_Setting ---*/\r
+//STATUS\r
+\r
+\r
+/*--- OCF = 0x0027 --- Read_Automatic_Flush_Timeout ---*/\r
+//STATUS, Connection_Handle, Flush_Timeout\r
+int cmd_ev_03x0027(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0028 --- Write_Automatic_Flush_Timeout ---*/\r
+//STATUS,Connection_Handle\r
+int cmd_ev_03x0028(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0029 --- Read_Num_Broadcast_Retransmissions ---*/\r
+//STATUS,Num_Broadcast_Retran\r
+int cmd_ev_03x0029(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x002a --- Write_Num_Broadcast_Retransmissions ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x002b --- Read_Hold_Mode_Activity ---*/\r
+//STATUS, Hold_Mode_Activity\r
+int cmd_ev_03x002b(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x002c --- Write_Hold_Mode_Activity ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x002d --- Read_Transmit_Power_Level ---*/\r
+//STATUS,Connection_Handle,Transmit_Power_Level\r
+int cmd_ev_03x002d(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x002e --- Read_SCO_Flow_Control_Enable ---*/\r
+//STATUS, SCO_Flow_Control_Enable\r
+int cmd_ev_03x002e(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x002f --- Write_SCO_Flow_Control_Enable ---*/\r
+/*STATUS*/\r
+\r
+/*--- OCF = 0x0031 --- Set_Host_Controller_To_Host_Flow_Control*/\r
+/*STATUS*/\r
+\r
+/*--- OCF = 0x0033 --- Host_Buffer_Size ---*/\r
+/*STATUS*/\r
+\r
+/*--- OCF = 0x0035 --- Host_Number_Of_Completed_Packets ---*/\r
+/*NONE*/\r
+\r
+/*--- OCF = 0x0036 --- Read_Link_Supervision_Timeout ---*/\r
+/*STATUS,Connection_Handle, Link_Supervision_Timeout*/\r
+int cmd_ev_03x0036(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0037 --- Write_Link_Supervision_Timeout ---*/\r
+//STATUS,Connection_Handle\r
+int cmd_ev_03x0037(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0038 --- Read_Number_Of_Supported_IAC ---*/\r
+//STATUS,Num_Support_IAC\r
+int cmd_ev_03x0038(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0039 --- Read_Current_IAC_LAP ---*/\r
+//STATUS,Num_Current_IAC, IAC_LAP[i]\r
+int cmd_ev_03x0039(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x003a --- Write_Current_IAC_LAP*/\r
+/*STATUS*/\r
+\r
+/*--- OCF = 0x003b --- Read_Page_Scan_Period_Mode ---*/\r
+/*STATUS,Page_Scan_Period_Mode*/\r
+int cmd_ev_03x003b(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x003c --- Write_Page_Scan_Period_Mode ---*/\r
+//STATUS\r
+\r
+/*--- OCF = 0x003d --- Read_Page_Scan_Mode ---*/\r
+//STATUS,Page_Scan_Mode\r
+int cmd_ev_03x003d(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x04 ****************************/\r
+/*-------------------INFORMATIONAL PARAMETERS-----------------------*/\r
+/********************************************************************/\r
+\r
+/*--- OCF = 0x0001 --- Read_Local_Version_Information ---*/\r
+//STATUS, HCI Version, HCI Revision, LMP Version, Manufacturer_Name, LMP Subversion\r
+int cmd_ev_04x0001(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0003 --- Read_Local_Supported_Features ---*/\r
+//STATUS, LMP_Features\r
+int cmd_ev_04x0003(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0005 --- Read_Buffer_Size ---*/\r
+//STATUS, HC_ACL_Data_Packet_Length, HC_SCO_Data_Packet_Length, HC_Total_Num_ACL_Data_Packets,\r
+//HC_Total_Num_SCO_Data_Packets\r
+int cmd_ev_04x0005(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+\r
+/*--- OCF = 0x0007 --- Read_Country_Code ---*/\r
+//STATUS, Country_Code\r
+int cmd_ev_04x0007(uint8_t *bth_p, uint8_t size)\r
+{\r
+ return -1;\r
+};\r
+\r
+/*--- OCF = 0x0009 --- Read_BD_ADDR ---*/\r
+//STATUS, BD_ADDR\r
+int cmd_ev_04x0009(uint8_t *bth_p, uint8_t size)\r
+{\r
+ read_bd_addr_rp bth_q;\r
+\r
+ int index;\r
+ store16(bth_q.status,*((uint8_t*)bth_p+READ_BD_ADDR_RP____status));\r
+ memcpy(&bth_local_info.bdaddr,((uint8_t*)bth_p+READ_BD_ADDR_RP____bdaddr),6);\r
+ index=bth_del_event(btohs(0x0910)); //obcode read_bd_addr\r
+ if(index==-1)\r
+ { \r
+ return -1;\r
+ }\r
+\r
+ else\r
+ {\r
+// assert(index >= 0 && index < LANCOMMAND);\r
+ if(*((uint8_t*)bth_p+READ_BD_ADDR_RP____status)==0)\r
+ {\r
+ free(bth_pole_adrr_check_packet[index]);\r
+ bth_pole_adrr_check_packet[index]=NULL;\r
+ return 0; //prikaz probehl bez komplikaci\r
+ }\r
+ else\r
+ {\r
+ /*status neni OK */\r
+ free(bth_pole_adrr_check_packet[index]);\r
+ bth_pole_adrr_check_packet[index]=NULL;\r
+ return((int)*((uint8_t*)bth_p+READ_BD_ADDR_RP____status)); //NOTE asi jsem tam pripisoval hvezdicku, uz nevim jiste, bylo to vcera >-]\r
+ };\r
+ };\r
+};\r
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ bth_command.c - command fce (bth specification) - build command\r
+ packet\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#ifdef BTH_LX\r
+#include <types.h>\r
+#include <cpu_def.h>\r
+#include <h8s2638h.h>\r
+#include <periph/sci_rs232.h>\r
+#include <system_def.h>\r
+\r
+#else\r
+#include "types.h"\r
+#endif\r
+\r
+#include "hci.h"\r
+#include "hci_event.h"\r
+#include "hci_command.h"\r
+#include "inline_fce.h"\r
+\r
+\r
+bths_check_command *bth_find_end(bths_check_command *dyn_chan)\r
+{\r
+ bths_check_command *Pomocna;\r
+ if(dyn_chan!=NULL)\r
+ {\r
+ Pomocna=dyn_chan;\r
+ while (Pomocna->next!=NULL)\r
+ {\r
+ Pomocna=Pomocna->next; /*dam command prikaz do fronty*/\r
+ };\r
+ return Pomocna;\r
+ }\r
+ else\r
+ {\r
+ return NULL;\r
+ };\r
+};\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x01 ****************************/\r
+/*-------------------LINK CONTROL COMMANDS--------------------------*/\r
+/********************************************************************/\r
+\r
+int bth_cmd_inqury(uint8_t length, uint8_t rsp, uint8_t *lap)\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ inquiry_cp *bth_cmd_packet;\r
+ uint16_t i; //pocitani v cyklu\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+INQUIRY_CP_SIZE);\r
+\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(inquiry_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_CTL, OCF_INQUIRY)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),INQUIRY_CP_SIZE);\r
+\r
+ /*pokud neni uvedeno lap zvoli se univerzlni*/\r
+ store_le16((uint8_t*)bth_cmd_packet+INQUIRY_CP____length,length);\r
+ store_le16((uint8_t*)bth_cmd_packet+INQUIRY_CP____num_rsp,rsp);\r
+\r
+ if(lap==NULL)\r
+ {\r
+ uint8_t lap_univ[]={0x33,0x8b,0x9e};\r
+ memcpy(((uint8_t*)bth_cmd_packet+INQUIRY_CP____lap),&lap_univ,3);\r
+ }\r
+ else{\r
+ for(i=0; i<3; i++) {store_le16((uint8_t*)bth_cmd_packet+INQUIRY_CP____lap+i,*(lap+2-i));};\r
+ };\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
+/*--- 0x01 - 0x000F --- Change_Connection_Packet_Type ---*/\r
+int change_connection_packet_type(uint16_t handle, uint16_t ptype)\r
+{\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ set_conn_ptype_cp *bth_cmd_packet;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+SET_CONN_PTYPE_CP_SIZE);\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(set_conn_ptype_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_CTL, OCF_SET_CONN_PTYPE)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),SET_CONN_PTYPE_CP_SIZE);\r
+ store_le16((uint8_t*)bth_cmd_packet+SET_CONN_PTYPE_CP____handle,handle);\r
+ store_le16((uint8_t*)bth_cmd_packet+SET_CONN_PTYPE_CP____pkt_type,ptype);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return(-1);\r
+};\r
+\r
+\r
+\r
+int bth_cmd_disconnect(uint16_t handle, uint8_t reason)\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ disconnect_cp *bth_cmd_packet;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE+DISCONNECT_CP_SIZE;\r
+\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(disconnect_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_POLICY, OCF_DISCONNECT)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+ store_le16((uint16_t*)((uint8_t*)bth_cmd_packet+DISCONNECT_CP____handle),handle);\r
+ store16(*((uint8_t*)bth_cmd_packet+DISCONNECT_CP____reason),reason);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
+//--------------------------------------------------------------------------------------------\r
+//--------------------------------------------------------------------------------------------\r
+\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x02 ****************************/\r
+/*-------------------LINK POLICY COMMANDS--------------------------*/\r
+/********************************************************************/\r
+int bth_cmd_write_link_policy_settings(uint16_t handle, uint16_t policy) /*obcode=0x0D08; 0x02--0x000D*/\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ write_link_policy_cp *bth_cmd_packet;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE+WRITE_LINK_POLICY_CP_SIZE;\r
+\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(write_link_policy_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+ store_le16((uint16_t*)((uint8_t*)bth_cmd_packet+WRITE_LINK_POLICY_CP____handle),handle);\r
+ store_le16((uint16_t*)((uint8_t*)bth_cmd_packet+WRITE_LINK_POLICY_CP____policy),policy);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
+\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x03 ****************************/\r
+/*--------------HOST CONTROLLER & BASEBAND COMMANDS-----------------*/\r
+/********************************************************************/\r
+int bth_cmd_reset(void) /*opcode=0x0C03 OCF = 0x0003, OGF = 0x03*/\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE;\r
+\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16(((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode),htobs(cmd_opcode_pack(OGF_HOST_CTL,OCF_RESET )));\r
+\r
+\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),0);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
+\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x04 ****************************/\r
+/*-------------------INFORMATIONAL PARAMETERS-----------------------*/\r
+/********************************************************************/\r
+\r
+\r
+\r
+int bth_accept_conn_req_cp(bdaddr_t *bdaddr) /*0x01 - 0x0009*/\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ accept_conn_req_cp *bth_cmd_packet;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+ACCEPT_CONN_REQ_CP_SIZE);\r
+\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(accept_conn_req_cp*)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),ACCEPT_CONN_REQ_CP_SIZE);\r
+ memcpy((uint8_t*)bth_cmd_packet+ACCEPT_CONN_REQ_CP____bdaddr,bdaddr,sizeof(bdaddr_t));\r
+ store16(*((uint8_t*)bth_cmd_packet+ACCEPT_CONN_REQ_CP____role), 0x01); //ACL\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return 0;\r
+};\r
+\r
+int bth_cmd_write_page_scan(uint16_t interval, uint16_t window) /*obcode=1C0C OGF = 0x001C OCF=0x03*/\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ write_page_activity_cp *bth_cmd_packet;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(write_page_activity_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_PAGE_ACTIVITY)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+ store_le16((uint8_t*)bth_cmd_packet+WRITE_PAGE_ACTIVITY_CP____interval,interval);\r
+ store_le16((uint8_t*)bth_cmd_packet+WRITE_PAGE_ACTIVITY_CP____window,window);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
+\r
+\r
+//--------------------------------------------------------------------------------------------\r
+//--------------------------------------------------------------------------------------------\r
+//--------------------------------------------------------------------------------------------\r
+int bth_cmd_write_inquiry_scan_activity(uint16_t interval, uint16_t window) //0x001E\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ write_inq_activity_cp *bth_cmd_packet;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(write_inq_activity_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_INQ_ACTIVITY)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_INQ_ACTIVITY_CP_SIZE);\r
+ store_le16((uint8_t*)bth_cmd_packet+WRITE_INQ_ACTIVITY_CP____interval,interval);\r
+ store_le16((uint8_t*)bth_cmd_packet+WRITE_INQ_ACTIVITY_CP____window,window);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return(-1);\r
+};\r
+\r
+int bth_cmd_read_bd_addr(void) /*opcode=0x0910 OCF = 0x0009, OGF = 0x04*/\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE);\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_INFO_PARAM, OCF_READ_BD_ADDR)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),0);\r
+\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
+int bth_cmd_write_scan_enable(uint8_t set_ing_scan) //0x001A\r
+{\r
+/*------------------------ parts of packet-----------------------*/\r
+ uint8_t *typ_hci_paket;\r
+ hci_command_hdr *hci_headr;\r
+ uint8_t *bth_cmd_packet;\r
+\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+/*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_SCAN_ENABLE_SIZE);\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+ typ_hci_paket=(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ bth_cmd_packet=(uint8_t *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE); //pointer on parametrs\r
+\r
+\r
+ store16(*typ_hci_paket, HCI_COMMAND_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_COMMAND_HDR____opcode,htobs(cmd_opcode_pack(OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE)));\r
+ store16(*((uint8_t*)hci_headr+HCI_COMMAND_HDR____plen),WRITE_SCAN_ENABLE_SIZE);\r
+ store16(*bth_cmd_packet,set_ing_scan);\r
+/*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return -1;\r
+};\r
+\r
--- /dev/null
+#ifdef BTH_LX\r
+#include <types.h>\r
+#include <cpu_def.h>\r
+#include <h8s2638h.h>\r
+#include <system_def.h>\r
+#include <periph/sci_rs232.h>\r
+#else\r
+#include "types.h"\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include "hci.h"\r
+#include "hci_error.h"\r
+\r
+\r
+/**\r
+ * chyby generovane bth zarizenim\r
+*/\r
+\r
+static struct {\r
+ uint8_t error_code;\r
+ char *error_doc;\r
+} status_command[] = {\r
+ { 0x00, "Status OK" },\r
+ { 0x01, "Unknown HCI Command" },\r
+ { 0x02, "No Connection" },\r
+ { 0x03, "Hardware Failure" },\r
+ { 0x04, "Page Timeout" },\r
+ { 0x05, "Authentication Failure" },\r
+ { 0x06, "Key Missing" },\r
+ { 0x07, "Memory Full" },\r
+ { 0x08, "Connection Timeout" },\r
+ { 0x09, "Max Number Of Connections" },\r
+ { 0x0A, "Max Number Of SCO Connections To A Device"},\r
+ { 0x0B, "ACL connection already exists" },\r
+ { 0x0C, "Command Disallowed" },\r
+ { 0x0D, "Host Rejected due to limited resources" },\r
+ { 0x0E, "Host Rejected due to security reasons" },\r
+ { 0x0F, "Host Rejected due to remote device is only a personal device" },\r
+ { 0x10, "Host Timeout" },\r
+ { 0x11, "Unsupported Feature or Parameter Value" },\r
+ { 0x12, "Invalid HCI Command Parameters" },\r
+ { 0x13, "Other End Terminated Connection: User Ended Connection" },\r
+ { 0x14, "Other End Terminated Connection: Low Resources" },\r
+ { 0x15, "Other End Terminated Connection: About to Power Off" },\r
+ { 0x16, "Connection Terminated by Local Host" },\r
+ { 0x17, "Repeated Attempts" },\r
+};\r
+\r
+/**\r
+* vypis chyby na terminal pres RS232\r
+*/\r
+void bth_error_detect_status(uint8_t status_num)\r
+{\r
+ uint8_t *message;\r
+ int i=0;\r
+ if(status_num<sizeof(status_command));\r
+ {\r
+ message=status_command[status_num].error_doc;\r
+ while(*(message+i)!=0)\r
+ {\r
+ #ifdef BTH_LX\r
+ sci_rs232_sendch(*(message+i),sci_rs232_chan_default); //do PC\r
+ #endif\r
+ i++;\r
+ };\r
+ };\r
+ return;\r
+};\r
+\r
+/**\r
+ * chyby programu - nutno upravit navratove parametry - sedi jenom 0 a 3\r
+*/\r
+static struct {\r
+ uint8_t error_code;\r
+ char *error_doc;\r
+ }event_command[] = {\r
+ { 0x00, "Status OK" },\r
+ { 0x01, "nespecifikovana chyba" },\r
+ { 0x02, "potvrzovaci fronta prazdna" },\r
+ { 0x03, "fce nenapsana" },\r
+ };\r
+\r
+\r
+\r
+ /**\r
+ * vypis chyby na terminal pres RS232\r
+ */\r
+ void bth_error_detect_event(uint8_t status_num)\r
+{\r
+ uint8_t *message;\r
+ int i=0;\r
+ if(status_num<sizeof(event_command));\r
+ {\r
+ message=event_command[status_num].error_doc;\r
+ while(*(message+i)!=0)\r
+ {\r
+ #ifdef BTH_LX\r
+ sci_rs232_sendch(*(message+i),sci_rs232_chan_default); //do PC\r
+ #endif\r
+ i++;\r
+ };\r
+ };\r
+ return;\r
+};\r
--- /dev/null
+\r
+\r
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ hci_event_acc.c - Event fce (bth specification) - build event\r
+ packet\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#include "types.h"\r
+#include "hci.h"\r
+#include "l2cap.h"\r
+#include "hci_event.h"\r
+#include "hci_command.h"\r
+\r
+#ifdef BTH_LX\r
+#include <periph/sci_rs232.h>\r
+#endif\r
+#include "inline_fce.h"\r
+\r
+\r
+\r
+typedef int (*bth_info_fce_def)(uint8_t *bth_p, uint8_t size);\r
+\r
+bth_info_fce_def bth_info_fce_ogf_01[]={\r
+ cmd_ev_none, cmd_ev_none,cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none,\r
+ cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_01x000b, cmd_ev_none, cmd_ev_01x000d, cmd_ev_01x000e,\r
+ cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none,\r
+ cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none,\r
+ cmd_ev_none};\r
+#define BTH_OGF_01_FC (sizeof(bth_info_fce_ogf_01)/sizeof(bth_info_fce_ogf_01[0]))\r
+\r
+\r
+bth_info_fce_def bth_info_fce_ogf_02[]={\r
+ cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none,\r
+ cmd_ev_none, cmd_ev_02x0009, cmd_ev_none, cmd_ev_none, cmd_ev_02x000C, cmd_ev_02x000D};\r
+#define BTH_OGF_02_FC (sizeof(bth_info_fce_ogf_02)/sizeof(bth_info_fce_ogf_02[0]))\r
+\r
+\r
+bth_info_fce_def bth_info_fce_ogf_03[]={\r
+ cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none,\r
+ cmd_ev_03x0008, cmd_ev_03x0009, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_03x000d, cmd_ev_none, cmd_ev_none,\r
+ cmd_ev_none, cmd_ev_03x0011, cmd_ev_03x0012, cmd_ev_none, cmd_ev_03x0014, cmd_ev_03x0015,\r
+ cmd_ev_none, cmd_ev_03x0017, cmd_ev_none, cmd_ev_03x0019, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_03x001d,\r
+ cmd_ev_none, cmd_ev_03x001f, cmd_ev_none, cmd_ev_03x0021, cmd_ev_none, cmd_ev_03x0023, cmd_ev_none, cmd_ev_03x0025,\r
+ cmd_ev_none, cmd_ev_03x0027, cmd_ev_03x0028, cmd_ev_03x0029, cmd_ev_none, cmd_ev_03x002b, cmd_ev_none, cmd_ev_03x002d,\r
+ cmd_ev_03x002e, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_none, cmd_ev_03x0036,\r
+ cmd_ev_none, cmd_ev_03x0038, cmd_ev_03x0039, cmd_ev_none, cmd_ev_03x003b,\r
+ cmd_ev_none, cmd_ev_03x003d};\r
+#define BTH_OGF_03_FC (sizeof(bth_info_fce_ogf_03)/sizeof(bth_info_fce_ogf_03[0]))\r
+\r
+\r
+bth_info_fce_def bth_info_fce_ogf_04[]={\r
+ cmd_ev_none, cmd_ev_04x0001, cmd_ev_none, cmd_ev_04x0003, cmd_ev_none, cmd_ev_04x0005, cmd_ev_none, cmd_ev_04x0007,\r
+ cmd_ev_none, cmd_ev_04x0009};\r
+#define BTH_OGF_04_FC (sizeof(bth_info_fce_ogf_04)/sizeof(bth_info_fce_ogf_04[0]))\r
+\r
+\r
+\r
+/*********************************************************************************/\r
+\r
+/*navratove hodnoty\r
+ 0 = OK - prikaz odstranen z fronty\r
+ -1 = fronta prohledana, ale nebyl tam nalezen hledany OBCOD\r
+ +num = index overovane polozky v poli "bth_pole_adrr_check_packet" s hledanym obcodem\r
+*/\r
+int bth_del_event(uint16_t opcode)\r
+{\r
+ int i;\r
+ uint16_t opcode_pkt;\r
+ for(i=0;i<LENCOMMAND;i++)\r
+ {\r
+ if(bth_pole_adrr_check_packet[i]!=NULL)\r
+ {\r
+ __bthtomc16(&opcode_pkt,((uint8_t*)bth_pole_adrr_check_packet[i]+HCI_PKT_SIZE));\r
+ if(opcode_pkt==opcode)\r
+ {return i;};\r
+ };\r
+ };\r
+ return(-1);\r
+};\r
+\r
+/****************************************************************************/\r
+/*------------------------ JEDNOTLIVE EVENT FUNKCE -------------------------*/\r
+/****************************************************************************/\r
+/****************************************************************************/\r
+/*navratovo hodnoty\r
+ 0 = vse OK\r
+ 1 = polozka nenalezena\r
+ 2 = v potvrzovaci fronte nebyly zadne prikazy k potvrzeni\r
+ 3 = status vykazuje chybu prikazu\r
+*/\r
+int bth_evt_none(uint8_t *bth_p, uint8_t size) //fce s neex. indexem evt codu\r
+{\r
+ return -4;\r
+};\r
+\r
+\r
+int bth_evt_inquiry_complete(uint8_t *bth_p, uint8_t size) //0x01 - EVT_INQUIRY_COMPLETE\r
+{\r
+ \r
+ return (*((uint8_t*)bth_p));\r
+};\r
+int bth_evt_inquiry_result(uint8_t *bth_p, uint8_t size) //0x02\r
+{\r
+ return (-3);\r
+\r
+};\r
+\r
+int bth_evt_conn_complete(uint8_t *bth_p, uint8_t size) //0x03\r
+{\r
+ bths_connect_bluet *bth_q;\r
+ int j;\r
+\r
+ for(j=0; j<=8;j++) //8 moznych zarizeni, se kterymi lze komunikovat\r
+ {\r
+ if(bth_connected[j]==NULL)\r
+ {break;};\r
+ }\r
+ if(j==9){return (-1);}; //je mozno komunikovat pouze s 8-mi zarizenimi, toto je devate\r
+ /*uvedu zarizeni do seznamu pripojenych zarizeni*/\r
+ bth_connected[j]=(bths_connect_bluet*)calloc(1,sizeof(bths_connect_bluet));\r
+ bth_q=(bths_connect_bluet*)bth_connected[j];\r
+ /*naplnim strukturu pripojeneho zarizeni informacemi o vzdalenem bth*/\r
+ memcpy(&(bth_q->bdaddr),(uint8_t*)bth_p+EVT_CONN_COMPLETE____bdaddr,sizeof(bdaddr_t));\r
+// store_le16(&(bth_q->handle),(uint16_t)*(uint16_t*)((uint8_t*)bth_p+EVT_CONN_COMPLETE____handle));\r
+ __bthtomc16((uint8_t*)&(bth_q->handle),((uint8_t*)bth_p+EVT_CONN_COMPLETE____handle));\r
+/* sci_rs232_sendch('c',sci_rs232_chan_default); //do PC\r
+ VypisHexa((void*)&(((bths_connect_bluet*)bth_connected[j])->handle),2);\r
+ sci_rs232_sendch('c',sci_rs232_chan_default); //do PC*/\r
+ \r
+ store16(bth_q->link_type,*((uint8_t*)bth_p+EVT_CONN_COMPLETE____link_type));\r
+ store16(bth_q->encr_mode,*((uint8_t*)bth_p+EVT_CONN_COMPLETE____encr_mode));\r
+\r
+ bth_cmd_write_link_policy_settings(bth_q->handle,htobs(0x000f)); //odpoved\r
+ return (*((uint8_t*)bth_p+EVT_CONN_COMPLETE____status));\r
+};\r
+\r
+int bth_evt_conn_request(uint8_t *bth_p, uint8_t size) //0x04\r
+{\r
+ bdaddr_t bdaddr;\r
+// evt_conn_request bth_q;\r
+ /*BD adresa zadajiciho zarizeni*/\r
+ memcpy(&bdaddr,(uint8_t*)bth_p+EVT_CONN_REQUEST____bdaddr,sizeof(bdaddr_t));\r
+// if(bth_seach_bdaddr(&bdaddr,&(bth_accept_bd_addr[0]),1));\r
+ bth_accept_conn_req_cp(&bdaddr);\r
+ return 0;\r
+};\r
+\r
+\r
+\r
+int bth_evt_disconn_complete(uint8_t *bth_p, uint8_t size) //0x05\r
+{\r
+ int i;\r
+ evt_disconn_complete bth_q;\r
+// store_le16(&bth_q.handle,*((uint16_t*)((uint8_t*)bth_p+EVT_DISCONN_COMPLETE____status)));\r
+ __bthtomc16((uint8_t*)&(bth_q.handle),((uint8_t*)bth_p+EVT_DISCONN_COMPLETE____status));\r
+ i=bth_find_conected_dev(bth_q.handle);\r
+ free(bth_connected[i]); bth_connected[i]=NULL;\r
+// bth_local_info.busy=0;\r
+ if(*((uint8_t*)bth_p+EVT_DISCONN_COMPLETE____reason)==0)\r
+ return (*((uint8_t*)bth_p+EVT_DISCONN_COMPLETE____status));\r
+ else\r
+ return (*((uint8_t*)bth_p+EVT_DISCONN_COMPLETE____reason));\r
+};\r
+\r
+int bth_evt_auth_complete(uint8_t *bth_p, uint8_t size) //0x06\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_remote_name_req_complete(uint8_t *bth_p, uint8_t size) //0x07\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_encrypt_cahnge(uint8_t *bth_p, uint8_t size) //0x08\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_change_conn_link_key_complete(uint8_t *bth_p, uint8_t size) //0x09\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_master_link_key_complete(uint8_t *bth_p, uint8_t size) //0x0A\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_read_remote_features_complete(uint8_t *bth_p, uint8_t size) //0x0B\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_read_remote_version_complete(uint8_t *bth_p, uint8_t size) //0x0C\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_qos_setup_complete(uint8_t *bth_p, uint8_t size) //0x0D\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_cmd_complete(uint8_t *bth_p, uint8_t size) //0x0E\r
+{\r
+ evt_cmd_complete bth_q;\r
+ uint16_t opcode,ogf,ocf;\r
+ int index=-1;\r
+ \r
+ store16(bth_q.ncmd,*((uint8_t*)bth_p+EVT_CMD_COMPLETE____ncmd));\r
+// store_le16(&bth_q.opcode,*((uint16_t*)((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode)));\r
+ __bthtomc16(&bth_q.opcode,(((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode)));\r
+ index=bth_del_event(bth_q.opcode);\r
+ if(index==-1)\r
+ {\r
+ return -1;\r
+ }\r
+ else\r
+ {\r
+ if(size-EVT_CMD_COMPLETE_SIZE==1) /*jedna se pouze o potvrzeni - status*/\r
+ {\r
+ if(*((uint8_t*)bth_p+3)==0)\r
+ {\r
+ free(bth_pole_adrr_check_packet[index]);\r
+ bth_pole_adrr_check_packet[index]=NULL;\r
+ bth_local_info.busy=0;\r
+ return 0; //prikaz probehl bez komplikaci\r
+ }\r
+ else\r
+ {\r
+ /*status neni OK - nastala chyba - odeslany comand prikaz je stale ve fronte k potvrzeni*/\r
+ free(bth_pole_adrr_check_packet[index]);\r
+ bth_pole_adrr_check_packet[index]=NULL;\r
+ bth_local_info.busy=0;\r
+ return((int)*((uint8_t*)bth_p+EVT_CMD_COMPLETE_SIZE));\r
+ };\r
+ }\r
+ else\r
+ {\r
+ /*rozdelim obcode na OGF a OCF a prevedu na jednobytovou promenou*/\r
+// store_le16(&opcode,*(uint16_t*)((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode));\r
+ __bthtomc16((uint8_t*)&(opcode),((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode));\r
+\r
+ ogf=(uint8_t)cmd_opcode_ogf(opcode);\r
+ ocf=(uint8_t)cmd_opcode_ocf(opcode);\r
+ \r
+ switch(ogf)\r
+ {\r
+ case 0x01 :\r
+ bth_local_info.busy=0;\r
+ if(ocf<BTH_OGF_01_FC)\r
+ return (bth_info_fce_ogf_01[ocf](((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode+2),EVT_CMD_COMPLETE_SIZE));\r
+ else return (-4);\r
+ case 0x02 :\r
+ bth_local_info.busy=0;\r
+ if(ocf<BTH_OGF_02_FC)\r
+ return (bth_info_fce_ogf_02[ocf](((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode+2),size-EVT_CMD_COMPLETE_SIZE)); //cislo 0x00 je smysleno\r
+ else return (-4);\r
+ case 0x03 :\r
+ bth_local_info.busy=0;\r
+ if(ocf<BTH_OGF_03_FC)\r
+ return (bth_info_fce_ogf_03[ocf](((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode+2),size-EVT_CMD_COMPLETE_SIZE)); //cislo 0x00 je smysleno\r
+ else return (-4);\r
+ \r
+ case 0x04 :\r
+ bth_local_info.busy=0;\r
+ if(ocf<BTH_OGF_04_FC)\r
+ return (bth_info_fce_ogf_04[ocf](((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode+2),size-EVT_CMD_COMPLETE_SIZE)); //cislo 0x00 je smysleno\r
+ else return (-4);\r
+\r
+ };\r
+ };\r
+ };\r
+ return (-1);\r
+};\r
+\r
+\r
+int bth_evt_cmd_status(uint8_t *bth_p, uint8_t size) //0x0F\r
+{\r
+ evt_cmd_status bth_q;\r
+ store16(bth_q.status,*((uint8_t*)bth_p+EVT_CMD_STATUS____status));\r
+ store16(bth_q.ncmd,*((uint8_t*)bth_p+EVT_CMD_STATUS____ncmd));\r
+// store_le16(&bth_q.opcode,*((uint16_t*)((uint8_t*)bth_p+EVT_CMD_STATUS____opcode)));\r
+ __bthtomc16(&bth_q.opcode,(((uint8_t*)bth_p+EVT_CMD_STATUS____opcode)));\r
+// memcpy(&bth_q.opcode,(((uint8_t*)bth_p+EVT_CMD_STATUS____opcode)),2);\r
+ uint8_t ogf, ocf;\r
+ int index;\r
+\r
+ index=bth_del_event(bth_q.opcode);\r
+ if(index==-1)\r
+ {\r
+ bth_local_info.busy=0;\r
+ return -1;\r
+ }\r
+ else\r
+ {\r
+ if(size-EVT_CMD_STATUS_SIZE==0) /*jedna se pouze o potvrzeni - status*/\r
+ {\r
+ if(bth_q.status==0)\r
+ {\r
+ free(bth_pole_adrr_check_packet[index]);\r
+ bth_pole_adrr_check_packet[index]=NULL;\r
+ }\r
+ else\r
+ {\r
+ /*status neni OK - nastala chyba - odeslany comand prikaz je stale ve fronte k potvrzeni*/\r
+ free(bth_pole_adrr_check_packet[index]);\r
+ bth_pole_adrr_check_packet[index]=NULL;\r
+ };\r
+ }\r
+ else\r
+ {\r
+ /*rozdelim obcode na OGF a OCF a prevedu na jednobytovou promenou*/\r
+ ogf=(uint8_t)cmd_opcode_ogf((uint16_t)*(uint16_t*)((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode));\r
+ ocf=(uint8_t)cmd_opcode_ocf((uint16_t)*(uint16_t*)((uint8_t*)bth_p+EVT_CMD_COMPLETE____opcode));\r
+/*jedna se o slozitejsi cmd_status, ktery sebou nese i data, nikoliv zaver, dalsi fce jsou deleny podle\r
+obcodu. Fce nejsou napsany, je udelany pouze rozcestnik*/\r
+ switch(ogf) \r
+ {\r
+ case 0x01 : break;\r
+ case 0x02 : break;\r
+ case 0x03 : break;\r
+ case 0x04 : break;\r
+ };\r
+ };\r
+ bth_local_info.busy=0; //NOTE predelat, neni vzdycky pravda\r
+\r
+ };\r
+ return(bth_q.status);\r
+};\r
+\r
+int bth_evt_hardware_error(uint8_t *bth_p, uint8_t size) //0x10\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_flush_occurred(uint8_t *bth_p, uint8_t size) //0x11\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_role_cahage(uint8_t *bth_p, uint8_t size) //0x12\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_num_comp_pkts(uint8_t *bth_p, uint8_t size) //0x13\r
+{\r
+ evt_num_comp_pkts bth_q;\r
+ uint16_t handle,num_pkt;\r
+ int i,j;\r
+ store16(bth_q.num_hndl,*((uint8_t*)bth_p+EVT_NUM_COMP_PKTS____num_hndl));\r
+/*prohledam vsechna zarizeni, se kterymi mam uzavrenou komunikaci*/\r
+ for(j=0; j<(bth_q.num_hndl);j++)\r
+ {\r
+ __bthtomc16((uint8_t*)&(handle),((uint8_t*)bth_p+1+(j*4)));\r
+\r
+ __bthtomc16((uint8_t*)&(num_pkt),((uint8_t*)bth_p+3+(j*4)));\r
+\r
+ for(i=0;i<8;i++)\r
+ {\r
+ if(bth_connected[i]!=NULL)\r
+ {\r
+ if(bth_connected[i]->handle==handle)\r
+ {\r
+// sci_rs232_sendch(';',sci_rs232_chan_default); //do PC\r
+// VypisHexa((void*)&(handle),2);\r
+// sci_rs232_sendch(';',sci_rs232_chan_default); //do PC\r
+ break;\r
+ };\r
+ };\r
+ };\r
+ };\r
+ bth_local_info.busy=0;\r
+ return(0);\r
+};\r
+\r
+int bth_evt_mode_change(uint8_t *bth_p, uint8_t size) //0x14\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_return_link_keys(uint8_t *bth_p, uint8_t size) //0x15\r
+{\r
+ return(-3);\r
+};\r
+\r
+int bth_evt_pin_code_req(uint8_t *bth_p, uint8_t size) //0x16\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_link_key_req(uint8_t *bth_p, uint8_t size) //0x17\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_link_key_notify(uint8_t *bth_p, uint8_t size) //0x18\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_loopback_command(uint8_t *bth_p, uint8_t size) //0x19\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_data_buffer_overflow(uint8_t *bth_p, uint8_t size) //0x1A\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_max_slots_change(uint8_t *bth_p, uint8_t size) //0x1B\r
+{\r
+ evt_max_slots_change bth_q;\r
+ int i;\r
+// store_le16(&bth_q.handle,*((uint16_t*)((uint8_t*)bth_p+EVT_MAX_SLOTS_CHANGE____handle)));\r
+ __bthtomc16((uint8_t*)&(bth_q.handle),(uint8_t*)bth_p+EVT_MAX_SLOTS_CHANGE____handle);\r
+ \r
+// store_le16(&bth_q.max_slots,*((uint16_t*)((uint8_t*)bth_p+EVT_MAX_SLOTS_CHANGE____max_slots)));\r
+ __bthtomc16((uint8_t*)&(bth_q.max_slots),(uint8_t*)bth_p+EVT_MAX_SLOTS_CHANGE____max_slots);\r
+\r
+ /*prohledam vsechna zarizeni, se kterymi mam uzavrenou komunikaci*/\r
+ for(i=0;i<8;i++)\r
+ {\r
+/* sci_rs232_sendch('j',sci_rs232_chan_default); //do PC\r
+ VypisHexa((void*)&(((bths_connect_bluet*)bth_connected[i])->handle),2);\r
+ sci_rs232_sendch('j',sci_rs232_chan_default); //do PC*/\r
+ if(bth_connected[i]!=NULL)\r
+ {\r
+ \r
+/* sci_rs232_sendch('k',sci_rs232_chan_default); //do PC\r
+ VypisHexa((void*)&(bth_q.handle),2);\r
+ sci_rs232_sendch('k',sci_rs232_chan_default); //do PC*/\r
+ \r
+ if(bth_connected[i]->handle==bth_q.handle)\r
+ {\r
+\r
+ bth_connected[i]->max_slots=bth_q.max_slots;\r
+ return (0);\r
+ };\r
+ };\r
+ };\r
+ return(-1);\r
+};\r
+\r
+int bth_evt_read_clock_offset_complete(uint8_t *bth_p, uint8_t size) //0x1C\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_conn_ptype_changed(uint8_t *bth_p, uint8_t size) //0x1D\r
+{\r
+ evt_conn_ptype_changed bth_q;\r
+// uint16_t local_ptype;\r
+ int dev_num;\r
+ store16(bth_q.status,*((uint8_t*)bth_p+EVT_CONN_PTYPE_CHANGED____status));\r
+// store_le16(&bth_q.handle,*((uint16_t*)((uint8_t*)bth_p+EVT_CONN_PTYPE_CHANGED____handle)));\r
+ __bthtomc16((uint8_t*)&(bth_q.handle),(uint8_t*)bth_p+EVT_CONN_PTYPE_CHANGED____handle);\r
+\r
+// store_le16(&bth_q.ptype,*((uint16_t*)((uint8_t*)bth_p+EVT_CONN_PTYPE_CHANGED____ptype)));\r
+ __bthtomc16((uint8_t*)&(bth_q.ptype),(uint8_t*)bth_p+EVT_CONN_PTYPE_CHANGED____ptype);\r
+\r
+ dev_num=bth_find_conected_dev(bth_q.handle);\r
+//bth_local_info.pkt_type; - localni info o paketech\r
+// Change_Connection_Packet_Type - cmd prikaz, kterym se pripadne daji nastavit svoje packety\r
+ if(dev_num>-1);\r
+ {\r
+ bth_connected[dev_num]->ptype=bth_q.ptype;\r
+ return(bth_q.status);\r
+ };\r
+ return(-1);\r
+\r
+};\r
+\r
+int bth_evt_qos_violation(uint8_t *bth_p, uint8_t size) //0x1E\r
+{\r
+ return (-3);\r
+\r
+};\r
+\r
+int bth_evt_page_scan_mode_change(uint8_t *bth_p, uint8_t size) //0x1F\r
+{\r
+ return (-3);\r
+\r
+\r
+};\r
+\r
+int bth_evt_pscan_rep_mode_change(uint8_t *bth_p, uint8_t size) //0x20\r
+{\r
+ evt_pscan_rep_mode_change bth_q;\r
+ memcpy(&(bth_q.bdaddr),(uint8_t*)bth_p+EVT_PSCAN_REP_MODE_CHANGE____bdaddr,sizeof(bdaddr_t));\r
+ store16(bth_q.pscan_rep_mode,*((uint8_t*)bth_p+EVT_PSCAN_REP_MODE_CHANGE____pscan_rep_mode));\r
+ \r
+ /*prohledam vsechna zarizeni dle BDADDR, se kterymi mam uzavrenou komunikaci -NUTNO DOPSAT NOTE*/\r
+ //memcpy\r
+ \r
+ return(-1);\r
+};\r
+\r
+int bth_evt_flow_spec_complete(uint8_t *bth_p, uint8_t size) //0x21\r
+{\r
+ return (-3);\r
+};\r
+\r
+int bth_evt_inquiry_result_with_rssi(uint8_t *bth_p, uint8_t size) //0x22\r
+{\r
+ return (-3);\r
+\r
+};\r
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ bth_fce_out.h - list of fce for using in aplication
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+
+
+int bth_send_queue(void);
+void bth_parametr_slave(void);
+void bth_init(void);
+void bth_start(void);
+int l2cap_send_data(int inx_handle, int inx_chanal);
+int bth_recieve_packet(int c);
+void bth_conv_char_text(uint8_t zn);
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ bth_h8s2638.h - list of function for TPU direction
+ fce are using for h8s2638
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+
+
+#ifndef BTH_H82638H_H
+#define BTH_H82638H_H
+
+void bth_init_pkt_controll(void);
+void bth_inruppt_pkt_controll(void);
+void bth_clear_TPU_counter(void);
+void bth_stop_TPU_counter(void);
+void bth_start_TPU_counter(void);
+long int bth_get_timer(void);
+void bth_nul_timer(void);
+#endif
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ bth_inface.c - fce for reading and getting and putting chars to a data queue
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+#ifdef BTH_LX
+#include <types.h>
+
+#else
+#include "types.h"
+#include <stdio.h>
+#endif
+
+#include <stdlib.h>
+#include "bth_inface.h"
+#include "bth_inface.h"
+
+#include <periph/sci_rs232.h>
+
+/*pocet komunikacnich struktur - tj. pres kolik kanalu je mozno komunikovat,
+ to zaroven znamena, kolik je nezavislych dvojic I/O bufferu*/
+ bth_inface_info_t bth_inface_chan_array[BTH_INFACE_CHANAL];
+
+//-- --- ----- ----- ---- ------ ----- -- ---- --
+//-- --- ----- ----- ---- ------ ----- -- ---- --
+
+/**
+ * fce write one char to in-buffer. Fce return a code of char. If a value is -1 its signal for error
+*/
+int bth_inface_r_isr(int chan, int val)
+{
+ if(bth_inface_que_put(&(bth_inface_chan_array[chan].bth_inface_que_in),val)<0)
+ {return (-1);};
+ return (val);
+}
+
+/**
+ * fce read one char of out-buffer. Fce return a code of char. If is a value -1 than is not new char
+*/
+int bth_inface_t_isr(int chan)
+{
+ short val;
+ if((val=bth_inface_que_get(&(bth_inface_chan_array[chan].bth_inface_que_out)))>=0)
+ {
+ return val;
+ }
+ return (-1);
+}
+
+/**
+ * fce write one char to out-buffer. Fce return a code of char. If a value is -1 its signal for error
+*/
+int bth_inface_sendch(int val, int chan)
+{
+ if(bth_inface_que_put(&(bth_inface_chan_array[chan].bth_inface_que_out),val)<0)
+ {return (-1);};
+ return (val);
+};
+
+
+/**
+ * fce read one char of in-buffer. Fce return a code of char. If is a value -1 than is not new char
+*/
+int bth_inface_recch(int chan)
+{
+ short val;
+ if((val=bth_inface_que_get(&(bth_inface_chan_array[chan].bth_inface_que_in)))>=0)
+ {
+ sci_rs232_sendch(val,sci_rs232_chan_default);
+ return val;
+ }
+ return (-1);
+};
+
+
+/**
+ * init buffer for first chanal - 0 (nm. is index of array)
+*/
+int bth_inface_setup(int chan)
+{
+ bth_inface_info_t *bth_inface;
+ bth_inface = &(bth_inface_chan_array[chan]); //mnozstvi komunikacnich rozhranni bth - PC
+ bth_inface->bth_inface_que_in.buf_beg = bth_inface->bth_inface_buff_in;
+ bth_inface->bth_inface_que_in.buf_end = bth_inface->bth_inface_que_in.buf_beg+BTH_INFACE_BUF_LEN;
+ bth_inface->bth_inface_que_in.ip = bth_inface->bth_inface_que_in.buf_beg;
+ bth_inface->bth_inface_que_in.op = bth_inface->bth_inface_que_in.buf_beg;
+
+ bth_inface->bth_inface_que_out.buf_beg = bth_inface->bth_inface_buff_out;
+ bth_inface->bth_inface_que_out.buf_end = bth_inface->bth_inface_que_out.buf_beg+BTH_INFACE_BUF_LEN;
+ bth_inface->bth_inface_que_out.ip = bth_inface->bth_inface_que_out.buf_beg;
+ bth_inface->bth_inface_que_out.op = bth_inface->bth_inface_que_out.buf_beg;
+
+ return 1;
+}
+
+
+/****************************************************************************/
+/****************************************************************************/
+
+
+/**
+ * init using in your program
+*/
+/*
+int main()
+{
+ bth_inface_setup(0);
+ bth_inface_r_isr(&bth_inface_chan_array[0],'c'); //internal-fce
+ bth_inface_recch(0); //read one char of buffer
+ bth_inface_sendch('a', 0); //write one char to out buffer for chanal 0
+ bth_inface_t_isr(&bth_inface_chan_array[0]); //internal-fce
+
+ return 0;
+};
+*/
+
--- /dev/null
+
+/*******************************************************************
+ bluetooth library
+
+ bth_inface.h - inline fce for data queue operation + list of fce
+ bth_inface.c
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+#ifndef _ID_BTH_INFACE_H_
+#define _ID_BTH_INFACE_H_
+
+#define BTH_INFACE_CHANAL (1)
+#define BTH_INFACE_BUF_LEN (70)
+
+typedef struct{
+ uint8_t *buf_beg; //start of adress structur
+ uint8_t *buf_end; //end of adress structur - beg+sizeof(struct)
+ uint8_t *ip; //actual position at queue
+ uint8_t *op; //position first unread char of queue
+} bth_inface_que_t;
+
+typedef struct bth_inface_info {
+ /* Queues */
+ bth_inface_que_t bth_inface_que_in;
+ bth_inface_que_t bth_inface_que_out;
+
+ uint8_t bth_inface_buff_in[BTH_INFACE_BUF_LEN];
+ uint8_t bth_inface_buff_out[BTH_INFACE_BUF_LEN];
+} bth_inface_info_t;
+
+
+static inline int bth_inface_que_put(bth_inface_que_t *q, int c)
+{
+ __u8 *p;
+ p=q->ip;
+ *(p++)=c;
+ if(p==q->buf_end) p=q->buf_beg;
+ if(p==q->op) return -1;
+ q->ip=p;
+ return c;
+}
+
+/* get character from queue, if empty return -1 */
+static inline int bth_inface_que_get(bth_inface_que_t *q)
+{
+ __u8 *p;
+ int c;
+ p=q->op;
+ if(p==q->ip) return -1;
+ c=*(p++);
+ if(p==q->buf_end) p=q->buf_beg;
+ q->op=p;
+ return c;
+}
+
+bth_inface_info_t bth_inface_chan_array[BTH_INFACE_CHANAL];
+
+int bth_inface_setup(int chan);
+int bth_inface_sendch(int c, int chan);
+int bth_inface_recch(int chan);
+int bth_inface_sendstr(const char *s, int chan);
+
+//int bth_inface_que_out_free(int chan);
+//int bth_inface_que_in_ready(int chan);
+//int bth_inface_setup(int chan);
+
+int bth_inface_r_isr(int chan, int val);
+int bth_inface_t_isr(int chan);
+/* HACK: Include machine specific definitions */
+
+#endif /* _ID_BTH_INFACE_H_ */
+
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ bth_main.c - API bth library (recieve, send ...)
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+#ifdef BTH_LX
+#include <types.h>
+#include <cpu_def.h>
+#include <h8s2638h.h>
+#include <periph/sci_rs232.h>
+#include <system_def.h>
+#include <string.h>
+#else
+#include "types.h"
+#include <stdio.h>
+#endif
+
+#include <stdlib.h>
+
+#include "hci.h"
+#include "l2cap.h"
+#include "hci_event.h"
+#include "hci_command.h"
+#include "hci_error.h"
+
+//#include "hci_lib.h"
+#include "bth_receive.h"
+#include "inline_fce.h"
+#include "bth_inface.h"
+#include "bth_fce_out.h"
+#include "bth_h8s2638.h"
+#include <periph/sci_rs232.h>
+
+/*--------BD address whitch are accept for connection-------------*/
+bdaddr_t bth_accept_bd_addr[]={};
+
+/*----------------local device info (master) -----------------------*/
+bths_dev_info bth_local_info;//={0,{0,0,0,0,0,0,0,0},{0,0,0},0,{0,0,0},0};
+
+/*----------------conect device info (slave) -----------------------*/
+bths_connect_bluet* bth_connected[8];
+
+/*-------------------------------- recieve data buffer -----------------------------*/
+uint8_t bth_pole_char_in[SCI_BTH_BUF_LEN];
+bth_que_t bth_rs232_que_in;
+uint8_t bth_rs232_buf_in[SCI_BTH_BUF_LEN];
+//-- --- ----- ----- ---- ------ ----- -- ---- --
+//-- --- ----- ----- ---- ------ ----- -- ---- --
+bth_que_t bth_inface_que_in;
+bth_que_t bth_inface_que_out;
+
+
+
+void *bth_pole_adrr_comm_packet[LENCOMMAND]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+bths_command_buf_info bth_com_buf_info={LENCOMMAND,0,0};
+/***********************************************************************************/
+void *bth_pole_adrr_check_packet[LENCOMMAND]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
+bths_command_buf_info bth_check_buf_info={LENCOMMAND,0,0};
+/***********************************************************************************/
+
+/*kontroluje synchoronizaci prijimanych dat pomoci TPU jednotky*/
+uint8_t bth_controll_flag=0;
+
+
+/**-------------------------------------------------------------------------------*/
+/*----- odeslani command prikazu, pokud je local bluetooth volny k odeslani------*/
+/* 0 = data presunuta do SCI bufferu = budou odeslana, bluetooth zarizeni je volne
+ 1 = prikaz se nepovedlo presunout do SCI bufferu, ale bluet device je volne
+ 2 = bluetooth zarizeni je zamestnane, tj. data se nepresunula do bufferu
+ 3 = v potvrzovacim zasobniku neni uz misto*/
+
+/**
+ * Po zavolani funkce, se odesle paket, ktery je zarazen ve fronte paketu k odeslani (bth zazizeni je
+ * volne), pokud neni novy paket nebo zazizeni neni volne, nic se nevykona
+*/
+int bth_send_queue(void)
+{
+ int i;
+ int hp_size;
+ if(bth_local_info.busy!=0)
+ {return 1;}; //zarizeni neni volne
+ if(bth_com_buf_info.aktual==bth_com_buf_info.sent) //PRAVDEPODOBNE neni co odesilat
+ {
+ if(bth_com_buf_info.sent<(LENCOMMAND-2))
+ {
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.sent+1]==NULL)
+ {return 1;}; //URCITE neni co odesilat
+ }
+ else
+ {
+ if(bth_pole_adrr_comm_packet[0]==NULL)
+ {return 1;}; //URCITE neni co odesilat
+ };
+ };
+
+ /*bth_send_packet(AdrOdkud,kolikBytu;)*/
+ switch(*(uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.sent])
+ {
+ case HCI_ACLDATA_PKT:
+ __bthtomc16((uint8_t*)&(hp_size),((uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.sent])+HCI_PKT_SIZE+HCI_ACL_HDR____dlen);
+ hp_size=hp_size+HCI_ACL_HDR_SIZE+HCI_PKT_SIZE;
+ if(!(bth_send_packet(bth_pole_adrr_comm_packet[bth_com_buf_info.sent],hp_size)))
+ {
+ free(bth_pole_adrr_comm_packet[bth_com_buf_info.sent]);
+ bth_pole_adrr_comm_packet[bth_com_buf_info.sent]=NULL;
+ if(bth_com_buf_info.sent<(LENCOMMAND-2)){bth_com_buf_info.sent++;}
+ else{ bth_com_buf_info.sent=0;};
+ return(0);
+ };
+ free(bth_pole_adrr_comm_packet[bth_com_buf_info.sent]);
+ bth_pole_adrr_comm_packet[bth_com_buf_info.sent]=NULL;
+ return (-6);
+ case HCI_COMMAND_PKT:
+ hp_size=((uint16_t)*(((uint8_t*)bth_pole_adrr_comm_packet[bth_com_buf_info.sent])+HCI_PKT_SIZE+2)+HCI_COMMAND_HDR_SIZE+HCI_PKT_SIZE);
+ if(!(bth_send_packet(bth_pole_adrr_comm_packet[bth_com_buf_info.sent],hp_size)))
+ {/*odeslano - zaradim prikaz k moznosti potvrzeni*/
+ for(i=0; i<LENCOMMAND; i++)
+ {
+ if(bth_pole_adrr_check_packet[i]==NULL)
+ {
+ bth_pole_adrr_check_packet[i]=bth_pole_adrr_comm_packet[bth_com_buf_info.sent];
+ bth_pole_adrr_comm_packet[bth_com_buf_info.sent]=NULL;
+ /*nastavim adresu pro pristi command prikaz - princip kruhove zasobniku*/
+ if(bth_com_buf_info.sent<(LENCOMMAND-2)){bth_com_buf_info.sent++;}
+ else{ bth_com_buf_info.sent=0;};
+ return 0;
+ }
+ };
+ return(-7);
+ };
+ return(-6);
+ };
+ return (1);
+};
+
+
+/**
+ * Pomocna funkce
+ * Prevod hexa znaku do tisknutelne podoby. V tomto tvaru se odesle po seriov. rozhranni do PC
+ */
+
+void bth_conv_char_text(uint8_t zn)
+{ uint8_t map_leters[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+ uint8_t val;
+ val=(zn&0xf0)>>4;
+#ifdef BTH_LX
+ sci_rs232_sendch(map_leters[val],sci_rs232_chan_default);
+ val=(zn&0x0f);
+ sci_rs232_sendch(map_leters[val],sci_rs232_chan_default);
+#endif
+ return;
+};
+
+
+
+/**
+ *Funkce odesle data o velikosti hp_size od adresy hp do bth (UART)
+ */
+int bth_send_packet(uint8_t *hp, uint16_t hp_size)
+{
+ int zn,i;
+ /*je bluetooth zarizeni volne, nebo zamestnano predchozim prikazem?*/
+ if(bth_local_info.busy==0)
+ {
+#ifndef BTH_LX
+ VypisHexa(hp,hp_size);
+#else
+
+ for(i=0; i<hp_size;i++)
+ {
+ zn=*(hp+i);
+ sci_rs232_sendch(zn,2); //bth
+// VypisHexa((hp+i),1);
+ };
+#endif
+ bth_local_info.busy=1;
+ return(0); //vsechno odeslano ==== OK =====
+ }
+ else
+ {
+ return 2; //zamestnane
+ };
+};
+
+/**
+ *Funkce vlozi znak do fronty
+ */
+
+inline int bth_que_put(bth_que_t *q, int c)
+{
+ uint8_t *p;
+ p=q->ip; //nastav se na aktual pozici v souboru
+ *(p++)=c; //na nasledujici pam. bunku uloz znak
+ if(p==q->buf_end) return -1;//buffer neni kruhovy p=q->buf_beg;
+// if(p==q->op) return -1;
+ q->ip=p;
+ return 0; //pokud nejsou problemy, vrat znak, jinak -1
+}
+
+
+/**
+ *prijaty HCI datovy paket je zaslan jako point to point
+*/
+
+int bth_pkt_type_pointopoint(uint16_t handle, uint8_t bound_flag, uint8_t *bth_p, uint16_t size)
+{
+ l2cap_hdr bth_l2cap_packet;
+ int bth_dev_num;
+ int bth_size_data;
+ uint8_t *bth_data;
+ int flag;
+
+ switch(bound_flag)
+ {
+ case 0x20:/*first data packet L2CAP*/
+ bth_dev_num=bth_find_conected_dev(handle);
+ __bthtomc16((uint8_t*)&(bth_l2cap_packet.len),(uint8_t*)bth_p+L2CAP_HDR____len);
+ __bthtomc16((uint8_t*)&(bth_l2cap_packet.cid),(uint8_t*)bth_p+L2CAP_HDR____cid);
+
+
+ if(bth_dev_num>-1)
+ {
+ switch((uint8_t)(bth_l2cap_packet.cid))
+ {
+ case 0x00:
+ return(-3);
+ case 0x01:
+ l2cap_signaling(((uint8_t*)bth_p+L2CAP_CMD_HDR_SIZE),(size+L2CAP_HDR____len),bth_dev_num);
+ return(0);
+ case 0x02:
+ return(0);
+ };
+ /*skutecna nefalcovana data ...*/
+ /*musim najit kanal s cislem cid pro zarizeni bth_dev_num*/
+ if(bth_find_chanal(bth_dev_num, bth_l2cap_packet.cid)>-1)
+ {
+ /*TADY JSOU DOSLA DATA, KTERA UZ NEJSOU KONFIGURACNI*/
+
+
+ bth_data=(uint8_t*)bth_p+L2CAP_HDR_SIZE;
+ bth_size_data=size-L2CAP_HDR_SIZE;
+ int i;
+// uint8_t odesli[]={'a','h','o','j'};
+ for(i=0; i<bth_size_data;i++)
+ {
+ flag=bth_inface_r_isr(0, *((uint8_t*)bth_data+i));
+
+ if(flag>=0){
+// sci_rs232_sendch(*((uint8_t*)bth_data+i),sci_rs232_chan_default); //do PC
+// VypisHexa((void*)((uint8_t*)bth_data+i),1);
+ }else
+ {
+ /*zasobnik plny, neni schopen prijmout dalsi znaky*/
+// sci_rs232_sendch('.',sci_rs232_chan_default); //do PC
+ };
+ };
+
+// VypisHexa(bth_data,bth_size_data);
+ return (0);
+ };
+ return(-5);
+ };
+ return(-1);
+ case 0x40: return(-3); /*next data packet L2CAP*/ /*funkce neni rozepsana, prijmam jen 1pkt zpravy*/
+ case 0x30: return (-4); /*Reserved for future use*/
+ case 0x00: return (-4); /*Reserved for future use*/
+ };
+ return(-1);
+};
+
+
+/**
+ *prijaty HCI datovy paket je zaslan jako broadcast (nedopsana funkce)
+ */
+int bth_pkt_type_broadcast(uint16_t handle, uint8_t bound_flag, uint8_t *bth_p, uint16_t size)
+{
+ switch(bound_flag)
+ {
+ case 0x20:/*first data packet L2CAP*/
+ return(-3); /*neni napsano pro prijem znaku broadcast cestou*/
+ case 0x40: return(-3); /*next data packet L2CAP*/ /*funkce neni rozepsana, prijmam jen 1pkt zpravy*/
+ case 0x30: return (-4); /*Reserved for future use*/
+ case 0x00: return (-4); /*Reserved for future use*/
+ };
+ return(-1);
+};
+
+
+
+/**
+ *prijaty HCI datovy paket je zaslan vramci picosite (nedopsana funkce)
+ */
+int bth_pkt_type_piconet(uint16_t handle, uint8_t bound_flag, uint8_t *bth_p, uint16_t size)
+{
+ switch(bound_flag)
+ {
+ case 0x20:/*first data packet L2CAP*/
+ return(-3); /*neni napsano pro prijem znaku piconet cestou*/
+ case 0x40: return(-3); /*next data packet L2CAP*/ /*funkce neni rozepsana, prijmam jen 1pkt zpravy*/
+ case 0x30: return (-4); /*Reserved for future use*/
+ case 0x00: return (-4); /*Reserved for future use*/
+ };
+ return(-1);
+};
+
+
+
+/**
+ *budouci vyuziti (nedopsana funkce)
+ */
+int bth_pkt_type_reserved(uint16_t handle, uint8_t bound_flag, uint8_t *bth_p, uint16_t size)
+{
+ return(-3);
+};
+
+
+/****************************************************************************/
+/****************************************************************************/
+
+/**
+ *pointry na funkce. Funkce jsou volany podle prijateho datoveho HCI peketu
+ */
+typedef int (*bth_kind_pkt)(uint16_t handle, uint8_t bound_flag, uint8_t *bth_p, uint16_t size);
+bth_kind_pkt bth_char_pkt_fce[]={
+ bth_pkt_type_pointopoint, bth_pkt_type_broadcast, bth_pkt_type_piconet, bth_pkt_type_reserved};
+#define COM_PROT_SUM_FC (sizeof(bth_char_pkt_fce)/sizeof(bth_char_pkt_fce[0]))
+
+
+/**
+ *pointry na funkce. Funkce jsou volany podle event codu, dekodovaneho z prijateho event HCI peketu
+ */
+typedef int (*bth_p_ivent_fce)(uint8_t *bth_p, uint8_t size);
+bth_p_ivent_fce bth_event_array_fce[]={bth_evt_none,bth_evt_inquiry_complete, bth_evt_inquiry_result,
+ bth_evt_conn_complete, bth_evt_conn_request, bth_evt_disconn_complete,
+ bth_evt_auth_complete, bth_remote_name_req_complete,
+ bth_evt_encrypt_cahnge, bth_evt_change_conn_link_key_complete,
+ bth_evt_master_link_key_complete, bth_evt_read_remote_features_complete,
+ bth_evt_read_remote_version_complete, bth_evt_qos_setup_complete,
+ bth_evt_cmd_complete, bth_evt_cmd_status, bth_evt_hardware_error,
+ bth_evt_flush_occurred, bth_evt_role_cahage, bth_evt_num_comp_pkts,
+ bth_evt_mode_change, bth_evt_return_link_keys, bth_evt_pin_code_req,
+ bth_evt_link_key_req, bth_evt_link_key_notify, bth_evt_loopback_command,
+ bth_evt_data_buffer_overflow, bth_evt_max_slots_change,
+ bth_evt_read_clock_offset_complete, bth_evt_conn_ptype_changed,
+ bth_evt_qos_violation, bth_evt_page_scan_mode_change,
+ bth_evt_pscan_rep_mode_change, bth_evt_flow_spec_complete,
+ bth_evt_inquiry_result_with_rssi};
+
+#define EV_SUM_FC (sizeof(bth_event_array_fce)/sizeof(bth_event_array_fce[0]))
+
+
+/**
+ *Hlavni funkce, ktera ulozi prijaty znak "c" (od bth) ulozi ho do vstupni fronty, zkontroluje zda-li
+ * je paekt cely a pokud ano, tak zavola funkce pro jeho zpracovani (pro ACL HCI a pro Event HCI)
+ */
+int bth_recieve_packet(int c)
+{
+ hci_event_hdr bth_event_packet;
+ hci_acl_hdr bth_acl_packet;
+ uint8_t *typ_paket;
+ int error_code;
+ uint8_t char_acl_pkt;
+ uint8_t *data_ad;
+ uint8_t com_pr;
+
+ if(bth_controll_flag!=0)
+ {
+ bth_stop_TPU_counter();
+ bth_clear_TPU_counter();
+ bth_start_TPU_counter();
+ if(bth_get_timer()>0)
+ {
+ bth_rs232_que_in.ip=bth_rs232_que_in.buf_beg;
+ bth_nul_timer();
+ };
+ };
+
+
+#ifndef BTH_LX
+ VypisHexa((uint8_t*)&c,1);
+#endif
+ //VypisHexa((uint8_t*)&c,1);
+ bth_que_put(&bth_rs232_que_in, c); //ulozim prijaty znak do zasobniku
+ typ_paket=((uint8_t*)bth_rs232_que_in.buf_beg); //zjistim tzp paketu ACL, Even, SCO ...
+ switch(*typ_paket)
+ {
+ case HCI_EVENT_PKT:
+ /*naplnim strukturu "hci_event_hdr" ze zasobniku - po bytech*/
+ store16(bth_event_packet.evt, *(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE));
+ store16(bth_event_packet.plen, *(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE+1));
+
+ if(bth_rs232_que_in.ip-bth_rs232_que_in.buf_beg>3)
+ {
+ if((bth_rs232_que_in.ip-bth_rs232_que_in.buf_beg) == (bth_event_packet.plen+HCI_EVENT_HDR_SIZE+HCI_PKT_SIZE))
+ {
+ /*****/
+ if(bth_controll_flag!=0)
+ {
+ bth_stop_TPU_counter();
+ };
+ /*******/
+
+ /*pointer na fci prislusenijici even codu*/
+ if(bth_event_packet.evt<EV_SUM_FC) //overeni existence fce
+ {
+ data_ad=(uint8_t*)(bth_rs232_que_in.buf_beg+HCI_EVENT_HDR_SIZE+HCI_PKT_SIZE);
+ error_code=(*bth_event_array_fce[bth_event_packet.evt])(data_ad,bth_event_packet.plen);
+ bth_rs232_que_in.ip=bth_rs232_que_in.buf_beg; //nastav se na zacatek, pro pristi event
+ }else{
+ bth_rs232_que_in.ip=bth_rs232_que_in.buf_beg; //nastav se na zacatek, pro pristi event
+ return (-1);
+ };
+ if(error_code>=0)
+ {
+ // bth_error_detect_status((uint8_t)error_code); //error vypisy
+ }
+ else
+ {//bth_error_detect_event((uint8_t)(-error_code)); //error vypisy
+ };
+ };
+ };
+ return 0;
+ case HCI_ACLDATA_PKT:
+ if(bth_rs232_que_in.ip-bth_rs232_que_in.buf_beg>5)
+ {
+ __bthtomc16((uint8_t*)&(bth_acl_packet.dlen),(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE+HCI_ACL_HDR____dlen));
+
+
+ if((bth_rs232_que_in.ip-bth_rs232_que_in.buf_beg) == ((bth_acl_packet.dlen)+HCI_ACL_HDR_SIZE+HCI_PKT_SIZE))
+ {
+
+ /* **** kontrola sousednosti dvou znaku TPU3 **** */
+ if(bth_controll_flag!=0)
+ {
+ bth_stop_TPU_counter();
+ };
+ /*****************************************************/
+
+ __bthtomc16((uint8_t*)&(bth_acl_packet.handle),(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE+HCI_ACL_HDR____handle));
+ bth_acl_packet.handle=bth_acl_packet.handle & 0x0fff;
+
+ /*prom 'char_acl_pkt' vyjadruje vlastnosti paketu, if point to point nebo broadcast, or char. L2CAP*/
+ store16(char_acl_pkt, (0xf0&*(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE+HCI_ACL_HDR____handle+1)));
+
+ /*rozhodnuti o jaky paket se jedna (PtP,Piconet,broat...) a o jaky typ komunikace se zarizenim (L2CAP, HCI)*/
+ data_ad=(uint8_t*)bth_rs232_que_in.buf_beg+HCI_PKT_SIZE+HCI_ACL_HDR_SIZE;
+ com_pr=char_acl_pkt&0xc0;
+ if(com_pr<COM_PROT_SUM_FC) //fce existuje
+ {
+ bth_char_pkt_fce[com_pr]
+ (bth_acl_packet.handle, char_acl_pkt&0x30, data_ad,bth_acl_packet.dlen);
+ }
+ else
+ {
+ /*HCI data - nikoliv L2CAP - obsluha ani nahravani do
+ datoveho zas. neni napsano - predpoklada se zasilani dat pres L2CAP
+ viz. if pred timto else */
+ };
+ bth_rs232_que_in.ip=bth_rs232_que_in.buf_beg;
+// sci_rs232_sendch('\n',sci_rs232_chan_default); //do PC
+ };
+
+ };
+ };
+ return -1;
+};
+
+
+/**
+ * Funkce vola funkce, ktere jsou potrebne pro nastaveni zarizeni do slave rezimu
+*/
+void bth_parametr_slave(void)
+{
+ bth_local_info.busy=1;
+ bth_cmd_write_page_scan(0x0040, 0x0020);
+ bth_cmd_write_inquiry_scan_activity(0x0040, 0x0020);
+ bth_cmd_write_scan_enable(0x03);
+// bth_cmd_read_bd_addr(); //funguje command event neni
+};
+
+
+/**
+ * Funkce nastavi MC, aby mohl zasilat HCI pakety do bth zarizeni
+ * Pokud jsou inicializovany TPU kanal, tak ho vynuluje a zastavi
+*/
+void bth_start(void)
+{
+ if(bth_controll_flag>0)
+ {
+
+ bth_controll_flag=10;
+ bth_stop_TPU_counter();
+ bth_clear_TPU_counter();
+ bth_nul_timer();
+ };
+
+ bth_local_info.busy=0;
+};
+
+
+/**
+ * nastaveni zasobniku - inicializacni funkce
+*/
+void bth_init(void)
+{
+// bth_check_command_for_send=NULL;
+
+ bth_rs232_que_in.buf_end=(uint8_t*)bth_pole_char_in+SCI_RS232_BUF_LEN;
+ bth_rs232_que_in.buf_beg=bth_pole_char_in;
+ bth_rs232_que_in.ip=bth_pole_char_in;
+};
+
+/****************************************************************************/
+/****************************************************************************/
+
+/**
+ * Pomocna funce, ktera slouzi k prevodum znaku an tisknutelne znaky
+*/
+int VypisHexa(uint8_t *s, int delka)
+{
+
+ uint8_t tisk[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+ uint8_t i,zn;
+ for(i=0; i<delka; i++)
+ {
+ zn=*(s+i);
+#ifndef BTH_LX
+ printf("%c",tisk[((zn>>4)&0x000F)]);
+ printf("%c",tisk[zn & 0x000F]);
+#else
+ sci_rs232_sendch(tisk[(zn&0xf0)>>4],sci_rs232_chan_default); //do PC
+ sci_rs232_sendch(tisk[(zn&0x0f)],sci_rs232_chan_default); //do PC
+#endif
+ };
+
+ return 0;
+};
+
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ bth_receive.h - definition of a check structur for enter queue.\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+#ifndef BTH_RECEIVE_H\r
+#define BTH_RECEIVE_H\r
+\r
+#define SCI_BTH_BUF_LEN 70 \r
+typedef struct{\r
+ uint8_t *buf_beg; //start of adress structur\r
+ uint8_t *buf_end; //end of adress structur - beg+sizeof(struct)\r
+ uint8_t *ip; //actual position at queue\r
+ uint8_t *op; // not use\r
+} bth_que_t;\r
+\r
+\r
+#endif\r
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ h2638_pkt_control.c - fce for TPU operation
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+#include <types.h>
+#include <cpu_def.h>
+#include <h8s2638h.h>
+#include <system_def.h>
+#include <stdlib.h>
+#include "hci.h"
+#include "bth_h8s2638.h"
+
+
+long int timer;
+
+/**
+ * obsluha preruseni, inkrementuje promennou timer a blika diodami
+ */
+void bth_inruppt_pkt_controll(void) __attribute__ ((interrupt_handler));
+
+void bth_inruppt_pkt_controll(void)
+{
+ static char count = 0;
+ count++;
+ if (count%2) DEB_LED_ON(0);
+ else DEB_LED_OFF(0);
+
+
+ //*TPU_TSR1 &= ~TSR1_TCFVm ; //reset overflow flag (clear interrupt)
+ *TPU_TSR1 &= ~TSR1_TGFAm;
+ timer++;
+// *TPU_TSR1 &= ~TSR1_TCFVm ; //reset overflow flag (clear interrupt)
+};
+
+
+/**
+ * spusteni TPU casovace kanalu 1
+*/
+void bth_start_TPU_counter(void)
+{
+ *TPU_TSTR|=(1<<1); /* Start channel 1 */
+};
+
+
+/**
+ * zastaveni TPU casovace kanalu 1
+ */
+void bth_stop_TPU_counter(void)
+{
+ *TPU_TSTR&=~(1<<1); /* Stop channel 1 */
+};
+
+
+/**
+ * vynulovani TPU casovace kanalu 1
+ */
+void bth_clear_TPU_counter(void)
+{
+ *TPU_TCNT1=0;
+};
+
+
+/**
+ * funkce vraci pocet presuseni casovace
+ */
+long int bth_get_timer(void)
+{
+ return timer;
+};
+
+/**
+ * nulovani poctu preruseni casovace
+ */
+void bth_nul_timer(void)
+{
+ timer=0;
+};
+
+
+/**
+ * inicializace casovace - HW 1-preteceni citace; 2-Dosazeni citace hodnoty TIER1_TGIEAm
+ */
+void bth_init_pkt_controll(void)
+{
+
+#if 0
+ *SYS_MSTPCRA &= ~MSTPCRA_TPUm; // power TPU unit
+
+ *TPU_TCR1 =0x00 | 0x06; //rising edge, f divided by 256
+ *TPU_TMDR1 =0x00; // normal mode
+ *TPU_TSR1 &= ~TSR1_TCFVm ; //reset overflow flag
+ *TPU_TIER1 |=TIER1_TCIEVm; //enable overflow interrupt
+
+ excptvec_set(42,bth_inruppt_pkt_controll);
+
+ *TPU_TSTR |=TSTR_CST1m; //start timer
+#endif
+
+#if 1
+ /* TPU initialization */
+ *SYS_MSTPCRA&=~MSTPCRA_TPUm;
+ // *TPU_TSTR&=~(1<<1); /* Stop channel 4 */
+ /* system clock/1 ,rising edge, clearing source TGRA */
+ *TPU_TCR1=(TPCR_TPSC_F64 | TPCR_CKEG_RIS | TPCR_CCLR_TGRA);
+ /* normal mode */
+ *TPU_TMDR1=TPMDR_MD_NORMAL;
+ /* TGRA initiates interrupt */
+ *TPU_TIER1|=TIER1_TGIEAm;
+ excptvec_set(EXCPTVEC_TGI1A,bth_inruppt_pkt_controll);
+
+ *TPU_TGR1A=(10000);
+ *TPU_TSTR |=TSTR_CST1m; //start timer
+#endif
+ bth_controll_flag=10;
+};
+
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ hci.h - main structures for keeping an information about a queie, definition of global val,
+ and any macros and inline fce
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+
+
+
+#ifndef HCI_H_H
+#define HCI_H_H
+
+/* Byte order conversions */
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define htobs(d) (d)
+#define htobl(d) (d)
+#define btohs(d) (d)
+#define btohl(d) (d)
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define htobs(d) bswap_16(d)
+#define htobl(d) bswap_32(d)
+#define btohs(d) bswap_16(d)
+#define btohl(d) bswap_32(d)
+#else
+#error "Unknown byte order"
+#endif
+
+
+/* BD Address */
+typedef struct {
+ uint8_t b[6];
+} bdaddr_t;
+
+
+#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}})
+
+/* Copy, swap, convert BD Address */
+// static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
+// {
+// return memcmp(ba1, ba2, sizeof(bdaddr_t));
+// }
+// static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
+// {
+// memcpy(dst, src, sizeof(bdaddr_t));
+// }
+
+/*pro typ char (nikoliv u16)*/
+#define store16(field, val) field=val;
+
+
+// Returns an offset of a field in a structure
+#define OFFSETOF(struct_type, field) \
+ ((int)&(((struct_type *)0)->field))
+
+/********************************************************************************/
+/*----------------------------- DEFINICE MAKER -----------------------------*/
+#define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10))
+#define cmd_opcode_ogf(op) (op >> 10)
+#define cmd_opcode_ocf(op) (op & 0x03ff)
+/********************************************************************************/
+
+#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}})
+
+/*pocet L2cap spojeni, ktere muze byt navazano s jednim BT zarizenim*/
+#define L2CAP_NUM_OF_CANAL 2
+
+
+/* HCI Packet types */
+#define HCI_PKT_SIZE 0x01
+
+#define HCI_COMMAND_PKT 0x01
+#define HCI_ACLDATA_PKT 0x02
+#define HCI_SCODATA_PKT 0x03
+#define HCI_EVENT_PKT 0x04
+#define HCI_VENDOR_PKT 0xff
+/*----------------------------- check command by event -----------------------------*/
+
+typedef struct bth_ch_com {
+ uint16_t obcod;
+ int len;
+ void *position;
+ struct bth_ch_com *next;
+} bths_check_command;
+
+/*-----------------------------buffer info -----------------------------*/
+typedef struct {
+ int len;
+ uint8_t aktual;
+ uint8_t sent;
+} bths_command_buf_info;
+/*------------------------- local device info -------------------------*/
+typedef struct {
+ char name[8];
+ bdaddr_t bdaddr;
+ uint32_t flags;
+ uint8_t type;
+ uint8_t features[8];
+ uint32_t pkt_type;
+ uint32_t link_policy;
+ uint32_t link_mode;
+ uint16_t acl_mtu;
+ uint16_t acl_pkts;
+ uint8_t sco_mtu;
+ uint16_t sco_pkts;
+ uint8_t busy;
+}bths_dev_info;
+
+/*------------------------- connect device info -------------------------*/
+typedef struct con_bluet {
+ bdaddr_t bdaddr;
+ uint8_t grupe[8];
+ uint16_t handle;
+ uint8_t link_type;
+ uint8_t encr_mode;
+ uint16_t max_slots;
+ uint16_t ptype;
+ uint16_t ident;
+ uint16_t scid[L2CAP_NUM_OF_CANAL];
+ uint16_t dcid[L2CAP_NUM_OF_CANAL];
+}bths_connect_bluet;
+
+
+
+/* -------- HCI Packet structures -------- */
+/*--------------------------------*/
+typedef struct {
+ uint16_t opcode; /* OCF & OGF */
+ uint8_t plen;
+} hci_command_hdr;
+ #define HCI_COMMAND_HDR____opcode 0
+ #define HCI_COMMAND_HDR____plen 2
+/*--------------------------------*/
+#define HCI_COMMAND_HDR_SIZE 3
+/****************************************************************/
+/****************************************************************/
+/*--------------------------------*/
+typedef struct{
+ uint8_t evt; //event kod
+ uint8_t plen; //delka dat
+} hci_event_hdr;
+ #define HCI_EVENT_HDR____evt 0
+ #define HCI_EVENT_HDR____plen 1
+/*--------------------------------*/
+#define HCI_EVENT_HDR_SIZE 2
+/****************************************************************/
+/****************************************************************/
+
+/*--------------------------------*/
+typedef struct {
+ uint16_t handle; /* Handle & Flags(PB, BC) */
+ uint16_t dlen;
+} hci_acl_hdr;
+ #define HCI_ACL_HDR____handle 0
+ #define HCI_ACL_HDR____dlen 2
+/*--------------------------------*/
+#define HCI_ACL_HDR_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+/*--------------------------------*/
+typedef struct {
+ uint16_t handle;
+ uint8_t dlen;
+} hci_sco_hdr;
+ #define HCI_SCO_HDR____handle 0
+ #define HCI_SCO_HDR____dlen 2
+/*--------------------------------*/
+#define HCI_SCO_HDR_SIZE 3
+/****************************************************************/
+/****************************************************************/
+
+/*--------------------------------*/
+typedef struct {
+ uint16_t device;
+ uint16_t type;
+ uint16_t plen;
+} hci_msg_hdr;
+ #define HCI_MSG_HDR____device 0
+ #define HCI_MSG_HDR____type 2
+ #define HCI_MSG_HDR____plen 4
+/*--------------------------------*/
+/****************************************************************/
+/****************************************************************/
+
+
+/*----------------local device info (master) -----------------------*/
+extern bths_dev_info bth_local_info;
+
+/*----------------conect device info (slave) -----------------------*/
+extern bths_connect_bluet *bth_connected[];
+//extern void *bth_for_connecting[];
+
+/*---------------- queue prikazova a potvrzovaci-----------------------*/
+#define LENCOMMAND 10
+extern void *bth_pole_adrr_comm_packet[LENCOMMAND];
+extern bths_command_buf_info bth_com_buf_info;
+
+extern void *bth_pole_adrr_check_packet[LENCOMMAND];
+extern bths_command_buf_info bth_check_buf_info;
+
+extern uint8_t bth_controll_flag;
+
+/*--------BD address whitch are accept for connection-------------*/
+extern bdaddr_t bth_accept_bd_addr[]; //for future use
+
+
+inline static int bth_find_conected_dev(uint16_t handle)
+{
+ int j;
+
+ for(j=0; j<8;j++) //8 moznych zarizeni, se kterymi lze komunikovat
+ {
+ if(bth_connected[j]!=NULL)
+ {
+ if(bth_connected[j]->handle==handle)
+ {return (j);};
+ };
+ }
+ return(-1);
+};
+
+inline static int bth_find_chanal(uint16_t num_dev, uint16_t chanal)
+{
+ int j;
+ for(j=0; j<L2CAP_NUM_OF_CANAL;j++) //8 moznych zarizeni, se kterymi lze komunikovat
+ {
+ if(bth_connected[num_dev]->scid[j]==chanal)
+ {
+ return(j);
+ };
+ }
+ return(-1);
+};
+
+inline static int bth_add_chanal_dcid(uint16_t num_dev, uint16_t chanal)
+{
+ int j;
+ for(j=0; j<L2CAP_NUM_OF_CANAL;j++) //8 moznych zarizeni, se kterymi lze komunikovat
+ {
+ if(bth_connected[num_dev]->dcid[j]==0)
+ {
+ (bth_connected[num_dev])->dcid[j]=chanal;
+ return(j);
+ };
+ }
+ return(-1);
+};
+
+inline static int bth_find_chanal_dcid(uint16_t num_dev, uint16_t chanal)
+{
+ int j;
+ for(j=0; j<L2CAP_NUM_OF_CANAL;j++) //8 moznych zarizeni, se kterymi lze komunikovat
+ {
+ if(bth_connected[num_dev]->dcid[j]==chanal)
+ {
+ return(j);
+ };
+ }
+ return(-1);
+};
+
+inline static int bth_find_chanal_scid(uint16_t num_dev, uint16_t chanal)
+{
+ int j;
+ for(j=0; j<L2CAP_NUM_OF_CANAL;j++) //8 moznych zarizeni, se kterymi lze komunikovat
+ {
+ if(bth_connected[num_dev]->scid[j]==chanal)
+ {
+ return(j);
+ };
+ }
+ return(-1);
+};
+
+/*-----------funkce ---------------*/
+int bth_send_packet(uint8_t *hp, uint16_t hp_size);
+int VypisHexa(uint8_t *s, int delka);
+void bth_conv_char_text(uint8_t zn);
+
+#endif
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ hci_command.h - list of Command packet structures +\r
+ list of Command fce\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+\r
+#ifndef HCI_COMMAND_H\r
+#define HCI_COMMAND_H\r
+\r
+/****************************************************************/\r
+/* --------------------- Link Control ------------------------ */\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+#define OGF_LINK_CTL 0x01\r
+\r
+\r
+/****************************************************************/\r
+#define OCF_INQUIRY 0x0001\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t lap[3];\r
+ uint8_t length; /* 1.28s units */\r
+ uint8_t num_rsp;\r
+} inquiry_cp;\r
+ #define INQUIRY_CP____lap 0\r
+ #define INQUIRY_CP____length 3\r
+ #define INQUIRY_CP____num_rsp 4\r
+/*--------------------------------*/\r
+#define INQUIRY_CP_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ bdaddr_t bdaddr;\r
+} status_bdaddr_rp;\r
+ #define STATUS_BDADDR_RP____status 0\r
+ #define STATUS_BDADDR_RP____bdaddr 1\r
+/*--------------------------------*/\r
+#define STATUS_BDADDR_RP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_INQUIRY_CANCEL 0x0002\r
+\r
+#define OCF_PERIODIC_INQUIRY 0x0003\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t max_period; /* 1.28s units */\r
+ uint16_t min_period; /* 1.28s units */\r
+ uint8_t lap[3];\r
+ uint8_t length; /* 1.28s units */\r
+ uint8_t num_rsp;\r
+} periodic_inquiry_cp;\r
+ #define PERIODIC_INQUIRY_CP____max_period 0\r
+ #define PERIODIC_INQUIRY_CP____min_period 2\r
+ #define PERIODIC_INQUIRY_CP____lap 4\r
+ #define PERIODIC_INQUIRY_CP____length 7\r
+#define PERIODIC_INQUIRY_CP____num_rsp 8\r
+/*--------------------------------*/\r
+#define PERIODIC_INQUIRY_CP_SIZE 9\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_EXIT_PERIODIC_INQUIRY 0x0004\r
+\r
+#define OCF_CREATE_CONN 0x0005\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint16_t pkt_type;\r
+ uint8_t pscan_rep_mode;\r
+ uint8_t pscan_mode;\r
+ uint16_t clock_offset;\r
+ uint8_t role_switch;\r
+} create_conn_cp;\r
+ #define CREATE_CONN_CP____bdaddr 0\r
+ #define CREATE_CONN_CP____pkt_type 6\r
+ #define CREATE_CONN_CP____pscan_rep_mode 8\r
+ #define CREATE_CONN_CP____pscan_mode 9\r
+ #define CREATE_CONN_CP____clock_offset 10\r
+ #define CREATE_CONN_CP____role_switch 12\r
+/*--------------------------------*/\r
+#define CREATE_CONN_CP_SIZE 13\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_DISCONNECT 0x0006\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t reason;\r
+} disconnect_cp;\r
+ #define DISCONNECT_CP____handle 0\r
+ #define DISCONNECT_CP____reason 2\r
+/*--------------------------------*/\r
+#define DISCONNECT_CP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_ADD_SCO 0x0007\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t pkt_type;\r
+} add_sco_cp;\r
+ #define ADD_SCO_CP____handle 0\r
+ #define ADD_SCO_CP____pkt_type 2\r
+/*--------------------------------*/\r
+#define ADD_SCO_CP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_CREATE_CONN_CANCEL 0x0008\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+} create_conn_cancel_cp;\r
+ #define CREATE_CONN_CANCEL_CP____bdaddr 0\r
+/*--------------------------------*/\r
+#define CREATE_CONN_CANCEL_CP_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_ACCEPT_CONN_REQ 0x0009\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t role;\r
+} accept_conn_req_cp;\r
+ #define ACCEPT_CONN_REQ_CP____bdaddr 0\r
+ #define ACCEPT_CONN_REQ_CP____role 6\r
+/*--------------------------------*/\r
+#define ACCEPT_CONN_REQ_CP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_REJECT_CONN_REQ 0x000A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t reason;\r
+} reject_conn_req_cp;\r
+ #define REJECT_CONN_REQ_CP____bdaddr 0\r
+ #define REJECT_CONN_REQ_CP____reason 6\r
+/*--------------------------------*/\r
+#define REJECT_CONN_REQ_CP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_LINK_KEY_REPLY 0x000B\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t link_key[16];\r
+} link_key_reply_cp;\r
+ #define LINK_KEY_REPLY_CP____bdaddr 0\r
+ #define LINK_KEY_REPLY_CP____link_key 6\r
+/*--------------------------------*/\r
+#define LINK_KEY_REPLY_CP_SIZE 22\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_LINK_KEY_NEG_REPLY 0x000C\r
+\r
+#define OCF_PIN_CODE_REPLY 0x000D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t pin_len;\r
+ uint8_t pin_code[16];\r
+} pin_code_reply_cp;\r
+ #define PIN_CODE_REPLY_CP____bdaddr 0\r
+ #define PIN_CODE_REPLY_CP____pin_len 6\r
+ #define PIN_CODE_REPLY_CP____pin_code 7\r
+/*--------------------------------*/\r
+#define PIN_CODE_REPLY_CP_SIZE 23\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_PIN_CODE_NEG_REPLY 0x000E\r
+\r
+#define OCF_SET_CONN_PTYPE 0x000F\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t pkt_type;\r
+} set_conn_ptype_cp;\r
+ #define SET_CONN_PTYPE_CP____handle 0\r
+ #define SET_CONN_PTYPE_CP____pkt_type 2\r
+/*--------------------------------*/\r
+#define SET_CONN_PTYPE_CP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_AUTH_REQUESTED 0x0011\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+} auth_requested_cp;\r
+ #define AUTH_REQUESTED_CP____handle 0\r
+/*--------------------------------*/\r
+#define AUTH_REQUESTED_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_SET_CONN_ENCRYPT 0x0013\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t encrypt;\r
+} set_conn_encrypt_cp;\r
+ #define SET_CONN_ENCRYPT_CP____handle 0\r
+ #define SET_CONN_ENCRYPT_CP____encrypt 2\r
+/*--------------------------------*/\r
+#define SET_CONN_ENCRYPT_CP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_CHANGE_CONN_LINK_KEY 0x0015\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}change_conn_link_key_cp;\r
+ #define CHANGE_CONN_LINK_KEY_CP____handle 0\r
+/*--------------------------------*/\r
+#define CHANGE_CONN_LINK_KEY_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_MASTER_LINK_KEY 0x0017\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t key_flag;\r
+}master_link_key_cp;\r
+ #define MASTER_LINK_KEY_CP____key_flag 0\r
+/*--------------------------------*/\r
+#define MASTER_LINK_KEY_CP_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_REMOTE_NAME_REQ 0x0019\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t pscan_rep_mode;\r
+ uint8_t pscan_mode;\r
+ uint16_t clock_offset;\r
+}remote_name_req_cp;\r
+ #define REMOTE_NAME_REQ_CP____bdaddr 0\r
+ #define REMOTE_NAME_REQ_CP____pscan_rep_mode 6\r
+ #define REMOTE_NAME_REQ_CP____pscan_mode 7\r
+ #define REMOTE_NAME_REQ_CP____clock_offset 8\r
+/*--------------------------------*/\r
+#define REMOTE_NAME_REQ_CP_SIZE 10\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_REMOTE_NAME_REQ_CANCEL 0x001A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+}remote_name_req_cancel_cp;\r
+ #define REMOTE_NAME_REQ_CANCEL_CP____bdaddr 0\r
+/*--------------------------------*/\r
+#define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_REMOTE_FEATURES 0x001B\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}read_remote_features_cp;\r
+ #define READ_REMOTE_FEATURES_CP____handle 0\r
+/*--------------------------------*/\r
+#define READ_REMOTE_FEATURES_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_REMOTE_EXT_FEATURES 0x001C\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t page_num;\r
+}read_remote_ext_features_cp;\r
+ #define READ_REMOTE_EXT_FEATURES_CP____handle 0\r
+ #define READ_REMOTE_EXT_FEATURES_CP____page_num 2\r
+/*--------------------------------*/\r
+#define READ_REMOTE_EXT_FEATURES_CP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_REMOTE_VERSION 0x001D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}read_remote_version_cp;\r
+ #define READ_REMOTE_VERSION_CP____handle 0\r
+/*--------------------------------*/\r
+#define READ_REMOTE_VERSION_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_CLOCK_OFFSET 0x001F\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}read_clock_offset_cp;\r
+ #define READ_CLOCK_OFFSET_CP____handle 0\r
+/*--------------------------------*/\r
+#define READ_CLOCK_OFFSET_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LMP_HANDLE 0x0020\r
+\r
+#define OCF_SETUP_SYNC_CONN 0x0028\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint32_t tx_bandwith;\r
+ uint32_t rx_bandwith;\r
+ uint16_t max_latency;\r
+ uint16_t voice_setting;\r
+ uint8_t retrans_effort;\r
+ uint16_t pkt_type;\r
+}setup_sync_conn_cp;\r
+ #define SETUP_SYNC_CONN_CP____handle 0\r
+ #define SETUP_SYNC_CONN_CP____tx_bandwith 2\r
+ #define SETUP_SYNC_CONN_CP____rx_bandwith 6\r
+ #define SETUP_SYNC_CONN_CP____max_latency 10\r
+ #define SETUP_SYNC_CONN_CP____voice_setting 12\r
+ #define SETUP_SYNC_CONN_CP____retrans_effort 14\r
+ #define SETUP_SYNC_CONN_CP____pkt_type 15\r
+/*--------------------------------*/\r
+#define SETUP_SYNC_CONN_CP_SIZE 17\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_ACCEPT_SYNC_CONN_REQ 0x0029\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint32_t tx_bandwith;\r
+ uint32_t rx_bandwith;\r
+ uint16_t max_latency;\r
+ uint16_t voice_setting;\r
+ uint8_t retrans_effort;\r
+ uint16_t pkt_type;\r
+}accept_sync_conn_req_cp;\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____bdaddr 0\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____tx_bandwith 6\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____rx_bandwith 10\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____max_latency 14\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____voice_setting 16\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____retrans_effort 18\r
+ #define ACCEPT_SYNC_CONN_REQ_CP____pkt_type 19\r
+/*--------------------------------*/\r
+#define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_REJECT_SYNC_CONN_REQ 0x002A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t reason;\r
+}reject_sync_conn_req_cp;\r
+ #define REJECT_SYNC_CONN_REQ_CP____bdaddr 0\r
+ #define REJECT_SYNC_CONN_REQ_CP____reason 6\r
+/*--------------------------------*/\r
+#define REJECT_SYNC_CONN_REQ_CP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+\r
+\r
+/****************************************************************/\r
+/* --------------------- Link Policy ------------------------ */\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+#define OGF_LINK_POLICY 0x02\r
+\r
+#define OCF_HOLD_MODE 0x0001\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t max_interval;\r
+ uint16_t min_interval;\r
+}hold_mode_cp;\r
+ #define HOLD_MODE_CP____handle 0\r
+ #define HOLD_MODE_CP____max_interval 2\r
+ #define HOLD_MODE_CP____min_interval 4\r
+/*--------------------------------*/\r
+#define HOLD_MODE_CP_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_SNIFF_MODE 0x0003\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t max_interval;\r
+ uint16_t min_interval;\r
+ uint16_t attempt;\r
+ uint16_t timeout;\r
+}sniff_mode_cp;\r
+ #define SNIFF_MODE_CP____handle 0\r
+ #define SNIFF_MODE_CP____max_interval 2\r
+ #define SNIFF_MODE_CP____min_interval 4\r
+ #define SNIFF_MODE_CP____attempt 6\r
+ #define SNIFF_MODE_CP____timeout 8\r
+/*--------------------------------*/\r
+#define SNIFF_MODE_CP_SIZE 10\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_EXIT_SNIFF_MODE 0x0004\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}exit_sniff_mode_cp;\r
+ #define EXIT_SNIFF_MODE_CP____handle 0\r
+/*--------------------------------*/\r
+#define EXIT_SNIFF_MODE_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_PARK_MODE 0x0005\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t max_interval;\r
+ uint16_t min_interval;\r
+}park_mode_cp;\r
+ #define PARK_MODE_CP____handle 0\r
+ #define PARK_MODE_CP____max_interval 2\r
+ #define PARK_MODE_CP____min_interval 4\r
+/*--------------------------------*/\r
+#define PARK_MODE_CP_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_EXIT_PARK_MODE 0x0006\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}exit_park_mode_cp;\r
+ #define EXIT_PARK_MODE_CP____handle 0\r
+/*--------------------------------*/\r
+#define EXIT_PARK_MODE_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_QOS_SETUP 0x0007\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t service_type; /* 1 = best effort */\r
+ uint32_t token_rate; /* Byte per seconds */\r
+ uint32_t peak_bandwidth; /* Byte per seconds */\r
+ uint32_t latency; /* Microseconds */\r
+ uint32_t delay_variation; /* Microseconds */\r
+}hci_qos;\r
+ #define DELAY_VARIATION____service_type 0\r
+ #define DELAY_VARIATION____token_rate 1\r
+ #define DELAY_VARIATION____peak_bandwidth 5\r
+ #define DELAY_VARIATION____latency 9\r
+ #define DELAY_VARIATION____delay_variation 13\r
+/*--------------------------------*/\r
+#define HCI_QOS_CP_SIZE 17\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t flags; /* Reserved */\r
+ hci_qos qos; /*POZOR POLOZKA MA TYP STRUKTURY!!!!!!!!!!*/\r
+}qos_setup_cp;\r
+ #define QOS_SETUP_CP____handle 0\r
+ #define QOS_SETUP_CP____flags 2\r
+ #define QOS_SETUP_CP____qos 3\r
+/*--------------------------------*/\r
+#define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_ROLE_DISCOVERY 0x0009\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}role_discovery_cp;\r
+#define ROLE_DISCOVERY_CP____handle 0\r
+/*--------------------------------*/\r
+#define ROLE_DISCOVERY_CP_SIZE 2\r
+\r
+/*--------------------------------*/ /*NAVRATOVE PARAMETRY*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t role;\r
+}role_discovery_rp;\r
+ #define ROLE_DISCOVERY_RP____status 0\r
+ #define ROLE_DISCOVERY_RP____handle 1\r
+ #define ROLE_DISCOVERY_RP____role 3\r
+/*--------------------------------*/\r
+#define ROLE_DISCOVERY_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_SWITCH_ROLE 0x000B\r
+\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t role;\r
+}switch_role_cp;\r
+ #define SWITCH_ROLE_CP____bdaddr 0\r
+ #define SWITCH_ROLE_CP____role 6\r
+/*--------------------------------*/\r
+#define SWITCH_ROLE_CP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LINK_POLICY 0x000C\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+}read_link_policy_cp;\r
+ #define READ_LINK_POLICY_CP____handle 0\r
+/*--------------------------------*/\r
+#define READ_LINK_POLICY_CP_SIZE 2\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint16_t policy;\r
+}read_link_policy_rp;\r
+ #define READ_LINK_POLICY_RP____status 0\r
+ #define READ_LINK_POLICY_RP____handle 1\r
+ #define READ_LINK_POLICY_RP____policy 3\r
+/*--------------------------------*/\r
+#define READ_LINK_POLICY_RP_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_LINK_POLICY 0x000D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t policy;\r
+}write_link_policy_cp;\r
+ #define WRITE_LINK_POLICY_CP____handle 0\r
+ #define WRITE_LINK_POLICY_CP____policy 2\r
+/*--------------------------------*/\r
+#define WRITE_LINK_POLICY_CP_SIZE 4\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+}write_link_policy_rp;\r
+ #define WRITE_LINK_POLICY_RP____status 0\r
+ #define WRITE_LINK_POLICY_RP____handle 1\r
+/*--------------------------------*/\r
+#define WRITE_LINK_POLICY_RP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+\r
+\r
+/****************************************************************/\r
+/*--------------- Host Controller and Baseband -----------------*/\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+#define OGF_HOST_CTL 0x03\r
+\r
+#define OCF_SET_EVENT_MASK 0x0001\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t mask[8];\r
+}set_event_mask_cp;\r
+ #define SET_EVENT_MASK_CP____mask 0\r
+/*--------------------------------*/\r
+#define SET_EVENT_MASK_CP_SIZE 8\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_RESET 0x0003\r
+\r
+#define OCF_SET_EVENT_FLT 0x0005\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t flt_type;\r
+ uint8_t cond_type;\r
+ uint8_t condition[0];\r
+}set_event_flt_cp;\r
+ #define SET_EVENT_FLT_CP____flt_type 0\r
+ #define SET_EVENT_FLT_CP____cond_type 1\r
+ #define SET_EVENT_FLT_CP____condition 2\r
+/*--------------------------------*/\r
+#define SET_EVENT_FLT_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+/* Filter types */\r
+#define FLT_CLEAR_ALL 0x00\r
+#define FLT_INQ_RESULT 0x01\r
+#define FLT_CONN_SETUP 0x02\r
+/* INQ_RESULT Condition types */\r
+#define INQ_RESULT_RETURN_ALL 0x00\r
+#define INQ_RESULT_RETURN_CLASS 0x01\r
+#define INQ_RESULT_RETURN_BDADDR 0x02\r
+/* CONN_SETUP Condition types */\r
+#define CONN_SETUP_ALLOW_ALL 0x00\r
+#define CONN_SETUP_ALLOW_CLASS 0x01\r
+#define CONN_SETUP_ALLOW_BDADDR 0x02\r
+/* CONN_SETUP Conditions */\r
+#define CONN_SETUP_AUTO_OFF 0x01\r
+#define CONN_SETUP_AUTO_ON 0x02\r
+\r
+#define OCF_FLUSH 0x0008\r
+\r
+#define OCF_READ_PIN_TYPE 0x0009\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t pin_type;\r
+}read_pin_type_rp;\r
+ #define READ_PIN_TYPE_RP____status 0\r
+ #define READ_PIN_TYPE_RP____pin_type 1\r
+/*--------------------------------*/\r
+#define READ_PIN_TYPE_RP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_PIN_TYPE 0x000A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t pin_type;\r
+}write_pin_type_cp;\r
+ #define WRITE_PIN_TYPE_CP____pin_type 0\r
+/*--------------------------------*/\r
+#define WRITE_PIN_TYPE_CP_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_CREATE_NEW_UNIT_KEY 0x000B\r
+\r
+#define OCF_READ_STORED_LINK_KEY 0x000D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t read_all;\r
+}read_stored_link_key_cp;\r
+ #define READ_STORED_LINK_KEY_CP____bdaddr 0\r
+ #define READ_STORED_LINK_KEY_CP____read_all 6\r
+/*--------------------------------*/\r
+#define READ_STORED_LINK_KEY_CP_SIZE 7\r
+\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t max_keys;\r
+ uint16_t num_keys;\r
+}read_stored_link_key_rp;\r
+ #define READ_STORED_LINK_KEY_RP____status 0\r
+ #define READ_STORED_LINK_KEY_RP____max_keys 1\r
+ #define READ_STORED_LINK_KEY_RP____num_keys 3\r
+/*--------------------------------*/\r
+#define READ_STORED_LINK_KEY_RP_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+\r
+#define OCF_WRITE_STORED_LINK_KEY 0x0011\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t num_keys;\r
+ /* variable length part */\r
+}write_stored_link_key_cp;\r
+ #define WRITE_STORED_LINK_KEY_CP____num_keys 0\r
+/*--------------------------------*/\r
+#define WRITE_STORED_LINK_KEY_CP_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t num_keys;\r
+}write_stored_link_key_rp;\r
+ #define WRITE_STORED_LINK_KEY_RP____status 0\r
+ #define WRITE_STORED_LINK_KEY_RP____num_keys 1\r
+/*--------------------------------*/\r
+#define READ_WRITE_LINK_KEY_RP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_DELETE_STORED_LINK_KEY 0x0012\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t delete_all;\r
+}delete_stored_link_key_cp;\r
+ #define DELETE_STORED_LINK_KEY_CP____bdaddr 0\r
+ #define DELETE_STORED_LINK_KEY_CP____delete_all 6\r
+/*--------------------------------*/\r
+#define DELETE_STORED_LINK_KEY_CP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t num_keys;\r
+}delete_stored_link_key_rp;\r
+ #define DELETE_STORED_LINK_KEY_RP____status 0\r
+ #define DELETE_STORED_LINK_KEY_RP____num_keys 1\r
+/*--------------------------------*/\r
+#define DELETE_STORED_LINK_KEY_RP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_CHANGE_LOCAL_NAME 0x0013\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t name[248];\r
+} change_local_name_cp;\r
+ #define CHANGE_LOCAL_NAME_CP____name 0\r
+/*--------------------------------*/\r
+#define CHANGE_LOCAL_NAME_CP_SIZE 248\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LOCAL_NAME 0x0014\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t name[248];\r
+}read_local_name_rp;\r
+ #define READ_LOCAL_NAME_RP____status 0\r
+ #define READ_LOCAL_NAME_RP____name 1\r
+/*--------------------------------*/\r
+#define READ_LOCAL_NAME_RP_SIZE 249\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t timeout;\r
+}read_conn_accept_timeout_rp;\r
+ #define READ_CONN_ACCEPT_TIMEOUT_RP____status 1\r
+ #define READ_CONN_ACCEPT_TIMEOUT_RP____timeout 0\r
+/*--------------------------------*/\r
+#define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t timeout;\r
+}write_conn_accept_timeout_cp;\r
+ #define WRITE_CONN_ACCEPT_TIMEOUT_CP____timeout 0\r
+/*--------------------------------*/\r
+#define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_PAGE_TIMEOUT 0x0017\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t timeout;\r
+}read_page_timeout_rp;\r
+ #define READ_PAGE_TIMEOUT_RP____status 0\r
+ #define READ_PAGE_TIMEOUT_RP____timeout 1\r
+/*--------------------------------*/\r
+#define READ_PAGE_TIMEOUT_RP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_PAGE_TIMEOUT 0x0018\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t timeout;\r
+}write_page_timeout_cp;\r
+ #define WRITE_PAGE_TIMEOUT_CP____timeout 0\r
+/*--------------------------------*/\r
+#define WRITE_PAGE_TIMEOUT_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_SCAN_ENABLE 0x0019\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t enable;\r
+}read_scan_enable_rp;\r
+ #define READ_SCAN_ENABLE_RP____status 1\r
+ #define READ_SCAN_ENABLE_RP____enable 0\r
+/*--------------------------------*/\r
+#define READ_SCAN_ENABLE_RP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_SCAN_ENABLE 0x001A\r
+ #define SCAN_DISABLED 0x00\r
+ #define SCAN_INQUIRY 0x01\r
+ #define SCAN_PAGE 0x02\r
+ #define SCAN_PAGE_INQ 0x03\r
+/*--------------------------------*/\r
+#define WRITE_SCAN_ENABLE_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_PAGE_ACTIVITY 0x001B\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t interval;\r
+ uint16_t window;\r
+}read_page_activity_rp;\r
+ #define READ_PAGE_ACTIVITY_RP____status 0\r
+ #define READ_PAGE_ACTIVITY_RP____interval 1\r
+ #define READ_PAGE_ACTIVITY_RP____window 3\r
+/*--------------------------------*/\r
+#define READ_PAGE_ACTIVITY_RP_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_PAGE_ACTIVITY 0x001C\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t interval;\r
+ uint16_t window;\r
+}write_page_activity_cp;\r
+ #define WRITE_PAGE_ACTIVITY_CP____interval 0\r
+ #define WRITE_PAGE_ACTIVITY_CP____window 2\r
+/*--------------------------------*/\r
+#define WRITE_PAGE_ACTIVITY_CP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_INQ_ACTIVITY 0x001D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t interval;\r
+ uint16_t window;\r
+}read_inq_activity_rp;\r
+ #define READ_INQ_ACTIVITY_RP____status 0\r
+ #define READ_INQ_ACTIVITY_RP____interval 1\r
+ #define READ_INQ_ACTIVITY_RP____window 3\r
+/*--------------------------------*/\r
+#define READ_INQ_ACTIVITY_RP_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_INQ_ACTIVITY 0x001E\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t interval;\r
+ uint16_t window;\r
+}write_inq_activity_cp;\r
+ #define WRITE_INQ_ACTIVITY_CP____interval 0\r
+ #define WRITE_INQ_ACTIVITY_CP____window 2\r
+/*--------------------------------*/\r
+#define WRITE_INQ_ACTIVITY_CP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_AUTH_ENABLE 0x001F\r
+\r
+#define OCF_WRITE_AUTH_ENABLE 0x0020\r
+ #define AUTH_DISABLED 0x00\r
+ #define AUTH_ENABLED 0x01\r
+\r
+#define OCF_READ_ENCRYPT_MODE 0x0021\r
+\r
+#define OCF_WRITE_ENCRYPT_MODE 0x0022\r
+ #define ENCRYPT_DISABLED 0x00\r
+ #define ENCRYPT_P2P 0x01\r
+ #define ENCRYPT_BOTH 0x02\r
+\r
+#define OCF_READ_CLASS_OF_DEV 0x0023\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t dev_class[3];\r
+}read_class_of_dev_rp;\r
+ #define READ_CLASS_OF_DEV_RP____status 0\r
+ #define READ_CLASS_OF_DEV_RP____dev_class 1\r
+/*--------------------------------*/\r
+#define READ_CLASS_OF_DEV_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_CLASS_OF_DEV 0x0024\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t dev_class[3];\r
+}write_class_of_dev_cp;\r
+ #define WRITE_CLASS_OF_DEV_CP____dev_class 0\r
+/*--------------------------------*/\r
+#define WRITE_CLASS_OF_DEV_CP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_VOICE_SETTING 0x0025\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t voice_setting;\r
+}read_voice_setting_rp;\r
+ #define READ_VOICE_SETTING_RP____status 0\r
+ #define READ_VOICE_SETTING_RP____voice_setting 1\r
+/*--------------------------------*/\r
+#define READ_VOICE_SETTING_RP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_VOICE_SETTING 0x0026\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t voice_setting;\r
+}write_voice_setting_cp;\r
+ #define WRITE_VOICE_SETTING_CP____voice_setting 0\r
+/*--------------------------------*/\r
+#define WRITE_VOICE_SETTING_CP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t type;\r
+}read_transmit_power_level_cp;\r
+ #define READ_TRANSMIT_POWER_LEVEL_CP____handle 0\r
+ #define READ_TRANSMIT_POWER_LEVEL_CP____type 2\r
+/*--------------------------------*/\r
+#define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3\r
+\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ int8_t level;\r
+}read_transmit_power_level_rp;\r
+ #define READ_TRANSMIT_POWER_LEVEL_RP____status 0\r
+ #define READ_TRANSMIT_POWER_LEVEL_RP____handle 1\r
+ #define READ_TRANSMIT_POWER_LEVEL_RP____level 3\r
+/*--------------------------------*/\r
+#define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_HOST_BUFFER_SIZE 0x0033\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t acl_mtu;\r
+ uint8_t sco_mtu;\r
+ uint16_t acl_max_pkt;\r
+ uint16_t sco_max_pkt;\r
+}host_buffer_size_cp;\r
+ #define HOST_BUFFER_SIZE_CP____acl_mtu 0\r
+ #define HOST_BUFFER_SIZE_CP____sco_mtu 2\r
+ #define HOST_BUFFER_SIZE_CP____acl_max_pkt 3\r
+ #define HOST_BUFFER_SIZE_CP____sco_max_pkt 5\r
+/*--------------------------------*/\r
+#define HOST_BUFFER_SIZE_CP_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint16_t link_sup_to;\r
+}read_link_supervision_timeout_rp;\r
+ #define READ_LINK_SUPERVISION_TIMEOUT_RP____status 0\r
+ #define READ_LINK_SUPERVISION_TIMEOUT_RP____handle 1\r
+ #define READ_LINK_SUPERVISION_TIMEOUT_RP____link_sup_to 3\r
+/*--------------------------------*/\r
+#define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint16_t link_sup_to;\r
+}write_link_supervision_timeout_cp;\r
+ #define WRITE_LINK_SUPERVISION_TIMEOUT_CP____handle 0\r
+ #define WRITE_LINK_SUPERVISION_TIMEOUT_CP____link_sup_to 2\r
+/*--------------------------------*/\r
+#define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+}write_link_supervision_timeout_rp;\r
+ #define WRITE_LINK_SUPERVISION_TIMEOUT_RP____status 0\r
+ #define WRITE_LINK_SUPERVISION_TIMEOUT_RP____handle 1\r
+/*--------------------------------*/\r
+#define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define MAX_IAC_LAP 0x40\r
+#define OCF_READ_CURRENT_IAC_LAP 0x0039\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t num_current_iac;\r
+ uint8_t lap[MAX_IAC_LAP][3];\r
+}read_current_iac_lap_rp;\r
+ #define READ_CURRENT_IAC_LAP_RP____status 0\r
+ #define READ_CURRENT_IAC_LAP_RP____num_current_iac 1\r
+ #define READ_CURRENT_IAC_LAP_RP____lap 2\r
+/*--------------------------------*/\r
+#define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_CURRENT_IAC_LAP 0x003A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t num_current_iac;\r
+ uint8_t lap[MAX_IAC_LAP][3];\r
+}write_current_iac_lap_cp;\r
+ #define WRITE_CURRENT_IAC_LAP_CP____num_current_iac 0\r
+ #define WRITE_CURRENT_IAC_LAP_CP____lap 1\r
+/*--------------------------------*/\r
+#define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_SET_AFH_CLASSIFICATION 0x003F\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t map[10];\r
+}set_afh_classification_cp;\r
+ #define SET_AFH_CLASSIFICATION_CP____map 0\r
+/*--------------------------------*/\r
+#define SET_AFH_CLASSIFICATION_CP_SIZE 10\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+}set_afh_classification_rp;\r
+ #define SET_AFH_CLASSIFICATION_RP____status 0\r
+/*--------------------------------*/\r
+#define SET_AFH_CLASSIFICATION_RP_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_INQUIRY_SCAN_TYPE 0x0042\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t type;\r
+}read_inquiry_scan_type_rp;\r
+ #define READ_INQUIRY_SCAN_TYPE_RP____status 0\r
+ #define READ_INQUIRY_SCAN_TYPE_RP____type 1\r
+/*--------------------------------*/\r
+#define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t type;\r
+}write_inquiry_scan_type_cp;\r
+ #define WRITE_INQUIRY_SCAN_TYPE_CP____type 0\r
+/*--------------------------------*/\r
+#define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+}write_inquiry_scan_type_rp;\r
+ #define WRITE_INQUIRY_SCAN_TYPE_RP____status 0\r
+/*--------------------------------*/\r
+#define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_INQUIRY_MODE 0x0044\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t mode;\r
+}read_inquiry_mode_rp;\r
+ #define READ_INQUIRY_MODE_RP____status 0\r
+ #define READ_INQUIRY_MODE_RP____mode 1\r
+/*--------------------------------*/\r
+#define READ_INQUIRY_MODE_RP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_INQUIRY_MODE 0x0045\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t mode;\r
+}write_inquiry_mode_cp;\r
+ #define WRITE_INQUIRY_MODE_CP____mode 0\r
+/*--------------------------------*/\r
+#define WRITE_INQUIRY_MODE_CP_SIZE 1\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+}write_inquiry_mode_rp;\r
+ #define WRITE_INQUIRY_MODE_RP____status 0\r
+/*--------------------------------*/\r
+#define WRITE_INQUIRY_MODE_RP_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_AFH_MODE 0x0048\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t mode;\r
+}read_afh_mode_rp;\r
+ #define READ_AFH_MODE_RP____status 0\r
+ #define READ_AFH_MODE_RP____mode 1\r
+/*--------------------------------*/\r
+#define READ_AFH_MODE_RP_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_WRITE_AFH_MODE 0x0049\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t mode;\r
+}write_afh_mode_cp;\r
+ #define WRITE_AFH_MODE_CP____mode 0\r
+/*--------------------------------*/\r
+#define WRITE_AFH_MODE_CP_SIZE 1\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+}write_afh_mode_rp;\r
+ #define WRITE_AFH_MODE_RP____status 0\r
+/*--------------------------------*/\r
+#define WRITE_AFH_MODE_RP_SIZE 1\r
+/****************************************************************/\r
+/*---------------------funkce------------------------------*/\r
+//bths_check_command *bth_find_end(bths_check_command *dyn_chan);\r
+\r
+\r
+/*********************** OGF = 0x01 ****************************/\r
+/*-------------------LINK CONTROL COMMANDS--------------------------*/\r
+int bth_cmd_inqury(uint8_t length, uint8_t rsp, uint8_t *lap); //0x0001\r
+int bth_cmd_Disconnect(uint16_t handle, uint8_t reason); //0x0006\r
+\r
+\r
+\r
+int change_connection_packet_type(uint16_t handle, uint16_t ptype);\r
+int bth_accept_conn_req_cp(bdaddr_t *bdaddr); /*0x01 - 0x0009*/\r
+int bth_cmd_write_page_scan(uint16_t interval, uint16_t window);\r
+int bth_cmd_write_inquiry_scan_activity(uint16_t interval, uint16_t window); //0x001E\r
+int bth_cmd_read_bd_addr(void);\r
+int bth_cmd_write_scan_enable(uint8_t set_ing_scan); //0x001A\r
+int bth_cmd_write_link_policy_settings(uint16_t handle, uint16_t policy);\r
+int bth_cmd_reset(void);\r
+\r
+#endif\r
+\r
+\r
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ error.h - list of error fce\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+\r
+#ifndef HCI_ERROR_H\r
+#define HCI_ERROR_H\r
+void bth_error_detect_status(uint8_t status_num);\r
+void bth_error_detect_event(uint8_t status_num);\r
+\r
+\r
+\r
+#endif\r
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ hci_event.h - list of Event packet structures + list of event fce\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+#ifndef HCI_EVENT_H\r
+#define HCI_EVENT_H\r
+\r
+/* ---- HCI Events ---- */\r
+\r
+#define EVT_INQUIRY_COMPLETE 0x01\r
+\r
+#define EVT_INQUIRY_RESULT 0x02\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t pscan_rep_mode;\r
+ uint8_t pscan_period_mode;\r
+ uint8_t pscan_mode;\r
+ uint8_t dev_class[3];\r
+ uint16_t clock_offset;\r
+}inquiry_info;\r
+ #define INQUIRY_INFO____bdaddr 0\r
+ #define INQUIRY_INFO____pscan_rep_mode 6\r
+ #define INQUIRY_INFO____pscan_period_mode 7\r
+ #define INQUIRY_INFO____pscan_mode 8\r
+ #define INQUIRY_INFO____dev_class 9\r
+ #define INQUIRY_INFO____clock_offset 10\r
+/*--------------------------------*/\r
+#define INQUIRY_INFO_SIZE 14\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+\r
+#define EVT_CONN_COMPLETE 0x03\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ bdaddr_t bdaddr;\r
+ uint8_t link_type;\r
+ uint8_t encr_mode;\r
+} evt_conn_complete;\r
+ #define EVT_CONN_COMPLETE____status 0\r
+ #define EVT_CONN_COMPLETE____handle 1\r
+ #define EVT_CONN_COMPLETE____bdaddr 3\r
+ #define EVT_CONN_COMPLETE____link_type 9\r
+ #define EVT_CONN_COMPLETE____encr_mode 10\r
+/*--------------------------------*/\r
+#define EVT_CONN_COMPLETE_SIZE 11 //puvodne 13 asi jejich chyba\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_CONN_REQUEST 0x04\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t dev_class[3];\r
+ uint8_t link_type;\r
+} evt_conn_request;\r
+ #define EVT_CONN_REQUEST____bdaddr 0\r
+ #define EVT_CONN_REQUEST____dev_class 6\r
+ #define EVT_CONN_REQUEST____link_type 9\r
+/*--------------------------------*/\r
+#define EVT_CONN_REQUEST_SIZE 10\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_DISCONN_COMPLETE 0x05\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t reason;\r
+} evt_disconn_complete;\r
+ #define EVT_DISCONN_COMPLETE____status 0\r
+ #define EVT_DISCONN_COMPLETE____handle 1\r
+ #define EVT_DISCONN_COMPLETE____reason 3\r
+/*--------------------------------*/\r
+#define EVT_DISCONN_COMPLETE_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_AUTH_COMPLETE 0x06\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+} evt_auth_complete;\r
+ #define EVT_AUTH_COMPLETE____status 0\r
+ #define EVT_AUTH_COMPLETE____handle 1\r
+/*--------------------------------*/\r
+#define EVT_AUTH_COMPLETE_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+\r
+#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ bdaddr_t bdaddr;\r
+ uint8_t name[248];\r
+} evt_remote_name_req_complete;\r
+ #define EVT_REMOTE_NAME_REQ_COMPLETE____status 0\r
+ #define EVT_REMOTE_NAME_REQ_COMPLETE____bdaddr 1\r
+ #define EVT_REMOTE_NAME_REQ_COMPLETE____name 7\r
+/*--------------------------------*/\r
+#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_ENCRYPT_CHANGE 0x08\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t encrypt;\r
+} evt_encrypt_change;\r
+ #define EVT_ENCRYPT_CHANGE____status 0\r
+ #define EVT_ENCRYPT_CHANGE____handle 1\r
+ #define EVT_ENCRYPT_CHANGE____encrypt 3\r
+/*--------------------------------*/\r
+#define EVT_ENCRYPT_CHANGE_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+} evt_change_conn_link_key_complete;\r
+ #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE____status 0\r
+ #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE____handle 1\r
+/*--------------------------------*/\r
+#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_MASTER_LINK_KEY_COMPLETE 0x0A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t key_flag;\r
+} evt_master_link_key_complete;\r
+ #define EVT_MASTER_LINK_KEY_COMPLETE____status 0\r
+ #define EVT_MASTER_LINK_KEY_COMPLETE____handle 1\r
+ #define EVT_MASTER_LINK_KEY_COMPLETE____key_flag 3\r
+/*--------------------------------*/\r
+#define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t features[8];\r
+} evt_read_remote_features_complete;\r
+ #define EVT_READ_REMOTE_FEATURES_COMPLETE____status 0\r
+ #define EVT_READ_REMOTE_FEATURES_COMPLETE____handle 1\r
+ #define EVT_READ_REMOTE_FEATURES_COMPLETE____features 3\r
+/*--------------------------------*/\r
+#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t lmp_ver;\r
+ uint16_t manufacturer;\r
+ uint16_t lmp_subver;\r
+} evt_read_remote_version_complete;\r
+ #define EVT_READ_REMOTE_VERSION_COMPLETE____status 0\r
+ #define EVT_READ_REMOTE_VERSION_COMPLETE____handle 1\r
+ #define EVT_READ_REMOTE_VERSION_COMPLETE____lmp_ver 3\r
+ #define EVT_READ_REMOTE_VERSION_COMPLETE____manufacturer 4\r
+ #define EVT_READ_REMOTE_VERSION_COMPLETE____lmp_subver 6\r
+/*--------------------------------*/\r
+#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8\r
+\r
+//#define EVT_QOS_SETUP_COMPLETE 0x0D\r
+//typedef struct {\r
+// uint8_t status;\r
+// uint16_t handle;\r
+// uint8_t flags; /* Reserved */\r
+// hci_qos qos;\r
+//}evt_qos_setup_complete;\r
+ #define EVT_QOS_SETUP_COMPLETE____status 0\r
+ #define EVT_QOS_SETUP_COMPLETE____handle 1\r
+ #define EVT_QOS_SETUP_COMPLETE____flags 3\r
+ #define EVT_QOS_SETUP_COMPLETE____qos 4\r
+/*--------------------------------*/\r
+//#define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_CMD_COMPLETE 0x0E\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t ncmd;\r
+ uint16_t opcode;\r
+} evt_cmd_complete;\r
+ #define EVT_CMD_COMPLETE____ncmd 0\r
+ #define EVT_CMD_COMPLETE____opcode 1\r
+/*--------------------------------*/\r
+/*--------------------------------*/\r
+#define EVT_CMD_COMPLETE_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_CMD_STATUS 0x0F\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t ncmd;\r
+ uint16_t opcode;\r
+} evt_cmd_status;\r
+ #define EVT_CMD_STATUS____status 0\r
+ #define EVT_CMD_STATUS____ncmd 1\r
+ #define EVT_CMD_STATUS____opcode 2\r
+/*--------------------------------*/\r
+#define EVT_CMD_STATUS_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_HARDWARE_ERROR 0x10\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t code;\r
+} evt_hardware_error;\r
+ #define EVT_HARDWARE_ERROR____code 0\r
+/*--------------------------------*/\r
+#define EVT_HARDWARE_ERROR_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_FLUSH_OCCURRED 0x11\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+} evt_flush_occured;\r
+ #define EVT_FLUSH_OCCURED____handle 0\r
+/*--------------------------------*/\r
+#define EVT_FLUSH_OCCURRED_SIZE 2\r
+\r
+#define EVT_ROLE_CHANGE 0x12\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ bdaddr_t bdaddr;\r
+ uint8_t role;\r
+} evt_role_change;\r
+ #define EVT_ROLE_CHANGE____status 0\r
+ #define EVT_ROLE_CHANGE____bdaddr 1\r
+ #define EVT_ROLE_CHANGE____role 7\r
+/*--------------------------------*/\r
+#define EVT_ROLE_CHANGE_SIZE 8\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_NUM_COMP_PKTS 0x13\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t num_hndl;\r
+ /* variable length part */\r
+} evt_num_comp_pkts;\r
+ #define EVT_NUM_COMP_PKTS____num_hndl 0\r
+/*--------------------------------*/\r
+#define EVT_NUM_COMP_PKTS_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_MODE_CHANGE 0x14\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t mode;\r
+ uint16_t interval;\r
+} evt_mode_change;\r
+ #define EVT_MODE_CHANGE____status 0\r
+ #define EVT_MODE_CHANGE____handle 1\r
+ #define EVT_MODE_CHANGE____mode 3\r
+ #define EVT_MODE_CHANGE____interval 4\r
+/*--------------------------------*/\r
+#define EVT_MODE_CHANGE_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_RETURN_LINK_KEYS 0x15\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t num_keys;\r
+ /* variable length part */\r
+} evt_return_link_keys;\r
+ #define EVT_RETURN_LINK_KEYS____num_keys 0\r
+/*--------------------------------*/\r
+#define EVT_RETURN_LINK_KEYS_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_PIN_CODE_REQ 0x16\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+} evt_pin_code_req;\r
+ #define EVT_PIN_CODE_REQ____bdaddr 0\r
+/*--------------------------------*/\r
+#define EVT_PIN_CODE_REQ_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_LINK_KEY_REQ 0x17\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+} evt_link_key_req;\r
+ #define EVT_LINK_KEY_REQ____bdaddr 0\r
+/*--------------------------------*/\r
+#define EVT_LINK_KEY_REQ_SIZE 6\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_LINK_KEY_NOTIFY 0x18\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t link_key[16];\r
+ uint8_t key_type;\r
+} evt_link_key_notify;\r
+ #define EVT_LINK_KEY_NOTIFY____bdaddr 0\r
+ #define EVT_LINK_KEY_NOTIFY____link_key 6\r
+ #define EVT_LINK_KEY_NOTIFY____key_type 22\r
+/*--------------------------------*/\r
+#define EVT_LINK_KEY_NOTIFY_SIZE 23\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_LOOPBACK_COMMAND 0x19\r
+\r
+#define EVT_DATA_BUFFER_OVERFLOW 0x1A\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t link_type;\r
+} evt_data_buffer_overflow;\r
+ #define EVT_DATA_BUFFER_OVERFLOW____link_type 0\r
+/*--------------------------------*/\r
+#define EVT_DATA_BUFFER_OVERFLOW_SIZE 1\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_MAX_SLOTS_CHANGE 0x1B\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t max_slots;\r
+} evt_max_slots_change;\r
+ #define EVT_MAX_SLOTS_CHANGE____handle 0\r
+ #define EVT_MAX_SLOTS_CHANGE____max_slots 2\r
+/*--------------------------------*/\r
+#define EVT_MAX_SLOTS_CHANGE_SIZE 3\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint16_t clock_offset;\r
+} evt_read_clock_offset_complete;\r
+ #define EVT_READ_CLOCK_OFFSET_COMPLETE____status 0\r
+ #define EVT_READ_CLOCK_OFFSET_COMPLETE____handle 1\r
+ #define EVT_READ_CLOCK_OFFSET_COMPLETE____clock_offset 3\r
+/*--------------------------------*/\r
+#define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_CONN_PTYPE_CHANGED 0x1D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint16_t ptype;\r
+} evt_conn_ptype_changed;\r
+ #define EVT_CONN_PTYPE_CHANGED____status 0\r
+ #define EVT_CONN_PTYPE_CHANGED____handle 1\r
+ #define EVT_CONN_PTYPE_CHANGED____ptype 3\r
+/*--------------------------------*/\r
+#define EVT_CONN_PTYPE_CHANGED_SIZE 5\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_QOS_VIOLATION 0x1E\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+} evt_qos_violation;\r
+ #define EVT_QOS_VIOLATION____handle 0\r
+/*--------------------------------*/\r
+#define EVT_QOS_VIOLATION_SIZE 2\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_PSCAN_REP_MODE_CHANGE 0x20\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t pscan_rep_mode;\r
+} evt_pscan_rep_mode_change;\r
+ #define EVT_PSCAN_REP_MODE_CHANGE____bdaddr 0\r
+ #define EVT_PSCAN_REP_MODE_CHANGE____pscan_rep_mode 6\r
+/*--------------------------------*/\r
+#define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_FLOW_SPEC_COMPLETE 0x21\r
+/*--------------------------------*/\r
+//typedef struct {\r
+// uint8_t status;\r
+// uint16_t handle;\r
+// uint8_t flags;\r
+// uint8_t direction;\r
+// hci_qos qos; /*PREDELAT NESMI BYT TYP PROMENNE STRUKTURA!!!!!!*/\r
+//} evt_flow_spec_complete;\r
+ #define EVT_FLOW_SPEC_COMPLETE____status 0\r
+ #define EVT_FLOW_SPEC_COMPLETE____handle 1\r
+ #define EVT_FLOW_SPEC_COMPLETE____flags 3\r
+ #define EVT_FLOW_SPEC_COMPLETE____direction 4\r
+ #define EVT_FLOW_SPEC_COMPLETE____qos 5\r
+/*--------------------------------*/\r
+#define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)\r
+\r
+/****************************************************************************/\r
+/****************************************************************************/\r
+/*------------------------------- RSSI -------------------------------------*/\r
+#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t pscan_rep_mode;\r
+ uint8_t pscan_period_mode;\r
+ uint8_t dev_class[3];\r
+ uint16_t clock_offset;\r
+ int8_t rssi;\r
+} inquiry_info_with_rssi;\r
+ #define INQUIRY_INFO_WITH_RSSI____bdaddr 0\r
+ #define INQUIRY_INFO_WITH_RSSI____pscan_rep_mode 6\r
+ #define INQUIRY_INFO_WITH_RSSI____pscan_period_mode 7\r
+ #define INQUIRY_INFO_WITH_RSSI____dev_class 8\r
+ #define INQUIRY_INFO_WITH_RSSI____clock_offset 11\r
+ #define INQUIRY_INFO_WITH_RSSI____rssi 13\r
+/*--------------------------------*/\r
+#define INQUIRY_INFO_WITH_RSSI_SIZE 14\r
+/*--------------------------------*/\r
+typedef struct {\r
+ bdaddr_t bdaddr;\r
+ uint8_t pscan_rep_mode;\r
+ uint8_t pscan_period_mode;\r
+ uint8_t pscan_mode;\r
+ uint8_t dev_class[3];\r
+ uint16_t clock_offset;\r
+ int8_t rssi;\r
+} inquiry_info_with_rssi_and_pscan_mode;\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____bdaddr 0\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____pscan_rep_mode 6\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____pscan_period_mode 7\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____pscan_mode 8\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____dev_class 9\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____clock_offset 12\r
+ #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE____rssi 14 \r
+/*--------------------------------*/\r
+#define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t page_num;\r
+ uint8_t max_page_num;\r
+ uint8_t features[8];\r
+} evt_read_remote_ext_features_complete;\r
+ #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE____status 0\r
+ #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE____handle 1\r
+ #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE____page_num 3\r
+ #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE____max_page_num 4\r
+ #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE____features 5\r
+/*--------------------------------*/\r
+#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_SYNC_CONN_COMPLETE 0x2C\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ bdaddr_t bdaddr;\r
+ uint8_t link_type;\r
+ uint8_t trans_interval;\r
+ uint8_t retrans_window;\r
+ uint16_t rx_pkt_len;\r
+ uint16_t tx_pkt_len;\r
+ uint8_t air_mode;\r
+} evt_sync_conn_complete;\r
+ #define EVT_SYNC_CONN_COMPLETE____status 0\r
+ #define EVT_SYNC_CONN_COMPLETE____handle 1\r
+ #define EVT_SYNC_CONN_COMPLETE____bdaddr 3\r
+ #define EVT_SYNC_CONN_COMPLETE____link_type 9\r
+ #define EVT_SYNC_CONN_COMPLETE____trans_interval 10\r
+ #define EVT_SYNC_CONN_COMPLETE____retrans_window 11\r
+ #define EVT_SYNC_CONN_COMPLETE____rx_pkt_len 12\r
+ #define EVT_SYNC_CONN_COMPLETE____tx_pkt_len 14\r
+ #define EVT_SYNC_CONN_COMPLETE____air_mode 16\r
+/*--------------------------------*/\r
+#define EVT_SYNC_CONN_COMPLETE_SIZE 17\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_SYNC_CONN_CHANGED 0x2D\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t trans_interval;\r
+ uint8_t retrans_window;\r
+ uint16_t rx_pkt_len;\r
+ uint16_t tx_pkt_len;\r
+} evt_sync_conn_changed;\r
+ #define EVT_SYNC_CONN_CHANGED____status 0\r
+ #define EVT_SYNC_CONN_CHANGED____handle 1\r
+ #define EVT_SYNC_CONN_CHANGED____trans_interval 3\r
+ #define EVT_SYNC_CONN_CHANGED____retrans_window 4\r
+ #define EVT_SYNC_CONN_CHANGED____rx_pkt_len 5\r
+ #define EVT_SYNC_CONN_CHANGED____tx_pkt_len 7\r
+/*--------------------------------*/\r
+#define EVT_SYNC_CONN_CHANGED_SIZE 9\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define EVT_TESTING 0xFE\r
+\r
+#define EVT_VENDOR 0xFF\r
+\r
+/********************************************************************************/\r
+/********************************************************************************/\r
+/* Informational Parameters */\r
+#define OGF_INFO_PARAM 0x04\r
+\r
+#define OCF_READ_LOCAL_VERSION 0x0001\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t hci_ver;\r
+ uint16_t hci_rev;\r
+ uint8_t lmp_ver;\r
+ uint16_t manufacturer;\r
+ uint16_t lmp_subver;\r
+}read_local_version_rp;\r
+ #define READ_LOCAL_VERSION_RP____status 0\r
+ #define READ_LOCAL_VERSION_RP____hci_ver 1\r
+ #define READ_LOCAL_VERSION_RP____hci_rev 2\r
+ #define READ_LOCAL_VERSION_RP____lmp_ver 4\r
+ #define READ_LOCAL_VERSION_RP____manufacturer 5\r
+ #define READ_LOCAL_VERSION_RP____lmp_subver 7\r
+/*--------------------------------*/\r
+#define READ_LOCAL_VERSION_RP_SIZE 9\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LOCAL_COMMANDS 0x0002\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t commands[64];\r
+}read_local_commands_rp;\r
+ #define READ_LOCAL_COMMANDS_RP____status 0\r
+ #define READ_LOCAL_COMMANDS_RP____commands 1\r
+/*--------------------------------*/\r
+#define READ_LOCAL_COMMANDS_RP_SIZE 65\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LOCAL_FEATURES 0x0003\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t features[8];\r
+}read_local_features_rp;\r
+ #define READ_LOCAL_FEATURES_RP____status 0\r
+ #define READ_LOCAL_FEATURES_RP____features 1\r
+/*--------------------------------*/\r
+#define READ_LOCAL_FEATURES_RP_SIZE 9\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LOCAL_EXT_FEATURES 0x0004\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t page_num;\r
+}read_local_ext_features_cp;\r
+ #define READ_LOCAL_EXT_FEATURES_CP____page_num 0\r
+/*--------------------------------*/\r
+#define READ_LOCAL_EXT_FEATURES_CP_SIZE 1\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint8_t page_num;\r
+ uint8_t max_page_num;\r
+ uint8_t features[8];\r
+}read_local_ext_features_rp;\r
+ #define READ_LOCAL_EXT_FEATURES_RP____status 0\r
+ #define READ_LOCAL_EXT_FEATURES_RP____page_num 1\r
+ #define READ_LOCAL_EXT_FEATURES_RP____max_page_num 2\r
+ #define READ_LOCAL_EXT_FEATURES_RP____features 3\r
+/*--------------------------------*/\r
+#define READ_LOCAL_EXT_FEATURES_RP_SIZE 11\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_BUFFER_SIZE 0x0005\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t acl_mtu;\r
+ uint8_t sco_mtu;\r
+ uint16_t acl_max_pkt;\r
+ uint16_t sco_max_pkt;\r
+}read_buffer_size_rp;\r
+ #define READ_BUFFER_SIZE_RP____status 0\r
+ #define READ_BUFFER_SIZE_RP____acl_mtu 1\r
+ #define READ_BUFFER_SIZE_RP____sco_mtu 3\r
+ #define READ_BUFFER_SIZE_RP____acl_max_pkt 4\r
+ #define READ_BUFFER_SIZE_RP____sco_max_pkt 6\r
+/*--------------------------------*/\r
+#define READ_BUFFER_SIZE_RP_SIZE 8\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_BD_ADDR 0x0009\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ bdaddr_t bdaddr;\r
+}read_bd_addr_rp;\r
+ #define READ_BD_ADDR_RP____status 0\r
+ #define READ_BD_ADDR_RP____bdaddr 1\r
+/*--------------------------------*/\r
+#define READ_BD_ADDR_RP_SIZE 7\r
+\r
+\r
+/********************************************************************************/\r
+/********************************************************************************/\r
+/********************************************************************************/\r
+/* Status params */\r
+#define OGF_STATUS_PARAM 0x05\r
+\r
+#define OCF_READ_FAILED_CONTACT_COUNTER 0x0001\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t counter;\r
+} read_failed_contact_counter_rp;\r
+ #define READ_FAILED_CONTACT_COUNTER_RP____status 0\r
+ #define READ_FAILED_CONTACT_COUNTER_RP____handle 1\r
+ #define READ_FAILED_CONTACT_COUNTER_RP____counter 3\r
+/*--------------------------------*/\r
+#define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_RESET_FAILED_CONTACT_COUNTER 0x0002\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+} reset_failed_contact_counter_rp;\r
+ #define RESET_FAILED_CONTACT_COUNTER_RP____status 0\r
+ #define RESET_FAILED_CONTACT_COUNTER_RP____handle 1\r
+/*--------------------------------*/\r
+#define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_LINK_QUALITY 0x0003\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t link_quality;\r
+} read_link_quality_rp;\r
+ #define READ_LINK_QUALITY_RP____status 0\r
+ #define READ_LINK_QUALITY_RP____handle 1\r
+ #define READ_LINK_QUALITY_RP____link_quality 3\r
+/*--------------------------------*/\r
+#define READ_LINK_QUALITY_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_RSSI 0x0005\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ int8_t rssi;\r
+} read_rssi_rp;\r
+ #define READ_RSSI_RP____status 0\r
+ #define READ_RSSI_RP____handle 1\r
+ #define READ_RSSI_RP____rssi 3\r
+/*--------------------------------*/\r
+#define READ_RSSI_RP_SIZE 4\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_AFH_MAP 0x0006\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint8_t mode;\r
+ uint8_t map[10];\r
+} read_afh_map_rp;\r
+ #define READ_AFH_MAP_RP____status 0\r
+ #define READ_AFH_MAP_RP____handle 2\r
+ #define READ_AFH_MAP_RP____mode 3\r
+ #define READ_AFH_MAP_RP____map 4\r
+/*--------------------------------*/\r
+#define READ_AFH_MAP_RP_SIZE 14\r
+/****************************************************************/\r
+/****************************************************************/\r
+\r
+\r
+#define OCF_READ_CLOCK 0x0007\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint16_t handle;\r
+ uint8_t which_clock;\r
+} read_clock_cp;\r
+ #define READ_CLOCK_CP____handle 0\r
+ #define READ_CLOCK_CP____which_clock 2\r
+/*--------------------------------*/\r
+#define READ_CLOCK_CP_SIZE 3\r
+/*--------------------------------*/\r
+typedef struct {\r
+ uint8_t status;\r
+ uint16_t handle;\r
+ uint32_t clock;\r
+ uint16_t accuracy;\r
+}read_clock_rp;\r
+ #define READ_CLOCK_RP____status 0\r
+ #define READ_CLOCK_RP____handle 1\r
+ #define READ_CLOCK_RP____clock 3\r
+ #define READ_CLOCK_RP____accuracy 7\r
+/*--------------------------------*/\r
+#define READ_CLOCK_RP_SIZE 9\r
+\r
+/* Testing commands */\r
+#define OGF_TESTING_CMD 0x3e\r
+\r
+/* Vendor specific commands */\r
+#define OGF_VENDOR_CMD 0x3f\r
+\r
+\r
+\r
+//funkce\r
+int bth_del_event(uint16_t opcode);\r
+inline int bth_find_if_bdaddr_accept(bdaddr_t *bdaddr);\r
+/**********/\r
+int bth_evt_none(uint8_t *bth_p, uint8_t size); //fce s neex. indexem evt codu\r
+int bth_evt_inquiry_complete(uint8_t *bth_p, uint8_t size); //0x01\r
+int bth_evt_inquiry_result(uint8_t *bth_p, uint8_t size); //0x02\r
+int bth_evt_conn_complete(uint8_t *bth_p, uint8_t size); //0x03\r
+int bth_evt_conn_request(uint8_t *bth_p, uint8_t size); //0x04\r
+int bth_evt_disconn_complete(uint8_t *bth_p, uint8_t size); //0x05\r
+int bth_evt_auth_complete(uint8_t *bth_p, uint8_t size); //0x06\r
+int bth_remote_name_req_complete(uint8_t *bth_p, uint8_t size); //0x07\r
+int bth_evt_encrypt_cahnge(uint8_t *bth_p, uint8_t size); //0x08\r
+int bth_evt_change_conn_link_key_complete(uint8_t *bth_p, uint8_t size); //0x09\r
+int bth_evt_master_link_key_complete(uint8_t *bth_p, uint8_t size); //0x0A\r
+int bth_evt_read_remote_features_complete(uint8_t *bth_p, uint8_t size); //0x0B\r
+int bth_evt_read_remote_version_complete(uint8_t *bth_p, uint8_t size); //0x0C\r
+int bth_evt_qos_setup_complete(uint8_t *bth_p, uint8_t size); //0x0D\r
+int bth_evt_cmd_complete(uint8_t *bth_p, uint8_t size); //0x0E\r
+int bth_evt_cmd_status(uint8_t *bth_p, uint8_t size); //0x0F\r
+int bth_evt_hardware_error(uint8_t *bth_p, uint8_t size); //0x10\r
+int bth_evt_flush_occurred(uint8_t *bth_p, uint8_t size); //0x11\r
+int bth_evt_role_cahage(uint8_t *bth_p, uint8_t size); //0x12\r
+int bth_evt_num_comp_pkts(uint8_t *bth_p, uint8_t size); //0x13\r
+int bth_evt_mode_change(uint8_t *bth_p, uint8_t size); //0x14\r
+int bth_evt_return_link_keys(uint8_t *bth_p, uint8_t size); //0x15\r
+int bth_evt_pin_code_req(uint8_t *bth_p, uint8_t size); //0x16\r
+int bth_evt_link_key_req(uint8_t *bth_p, uint8_t size); //0x17\r
+int bth_evt_link_key_notify(uint8_t *bth_p, uint8_t size); //0x18\r
+int bth_evt_loopback_command(uint8_t *bth_p, uint8_t size); //0x19\r
+int bth_evt_data_buffer_overflow(uint8_t *bth_p, uint8_t size); //0x1A\r
+int bth_evt_max_slots_change(uint8_t *bth_p, uint8_t size); //0x1B\r
+int bth_evt_read_clock_offset_complete(uint8_t *bth_p, uint8_t size); //0x1C\r
+int bth_evt_conn_ptype_changed(uint8_t *bth_p, uint8_t size); //0x1D\r
+int bth_evt_qos_violation(uint8_t *bth_p, uint8_t size); //0x1E\r
+int bth_evt_page_scan_mode_change(uint8_t *bth_p, uint8_t size); //0x1F\r
+int bth_evt_pscan_rep_mode_change(uint8_t *bth_p, uint8_t size); //0x20\r
+int bth_evt_flow_spec_complete(uint8_t *bth_p, uint8_t size); //0x21\r
+int bth_evt_inquiry_result_with_rssi(uint8_t *bth_p, uint8_t size);; //0x22\r
+\r
+\r
+#endif\r
+\r
+\r
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ inface_bth.h - list of fce inface_bth.c and definition structurs for keeping information
+ about data queue
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+#ifndef _ID_RS232_H_
+#define _ID_RS232_H_
+
+#include <periph/sci_regs.h>
+//*************************************************************
+#define BTH_INFACE_BUF_LEN (70)
+#define BTH_INFACE_BUF_FULLTG (50)
+
+
+typedef struct{
+ __u8 *buf_beg; //start of adress structur
+ __u8 *buf_end; //end of adress structur - beg+sizeof(struct)
+ __u8 *ip; //actual position at queue
+ __u8 *op; //position first unread char of queue
+} bth_inface_que_t;
+
+
+ /* Queues */
+typedef struct bth_inface_info {
+ bth_inface_que_t bth_inface_que_in;
+ bth_inface_que_t bth_inface_que_out;
+
+ __u8 bth_inface_buf_in[BTH_INFACE_BUF_LEN];
+ __u8 bth_inface_buf_out[BTH_INFACE_BUF_LEN];
+} bth_inface_info_t;
+
+int bth_inface_sendch(int c);
+int bth_inface_bth_recch(void);
+int bth_inface_sendstr(const char *s);
+
+int bth_inface_que_out_free(int chan);
+int bth_inface_que_in_ready(int chan);
+int bth_inface_setmode(long int baud, int mode, int flowc, int chan);
+
+
+#endif /* _ID_RS232_H_ */
+
+/* Local variables: */
+/* c-basic-offset:2 */
+/* End: */
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ l2cap.c - any inline fce for bth library and list of fce calling\r
+ from event complete\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+#ifndef INLINE_FCE_H\r
+#define INLINE_FCE_H\r
+ #include <string.h>\r
+\r
+/**/\r
+/*funkce hlada v seznamu bdadres ba2 velikosti num bdadresu ba1, pokud ji najde, vrati jeji poradi*/\r
+\r
+static inline int bth_seach_bdaddr(bdaddr_t *ba1, const bdaddr_t *ba2, int num)\r
+{\r
+ int i;\r
+ for(i=0; i<num; i++)\r
+ { if(memcmp(ba1,ba2+i,sizeof(bdaddr_t))==0){\r
+ return(i);\r
+ };\r
+ };\r
+ return(-1);\r
+};\r
+\r
+\r
+\r
+\r
+#ifdef BTH_LX\r
+\r
+\r
+static inline uint16_t __cpu_to_le16(uint16_t value)\r
+{\r
+ uint16_t pomoc=0;\r
+ pomoc=(value<<8)&0xff00;\r
+ value=(value>>8)&0x00ff;\r
+ return(value|pomoc);\r
+};\r
+\r
+static inline uint16_t __cpu_to_be16(uint16_t value)\r
+{\r
+ uint16_t pomoc=0;\r
+ pomoc=(value<<8)&0xff00;\r
+ value=(value>>8)&0x00ff;\r
+ return(value|pomoc);\r
+};\r
+\r
+static inline void store_le16(void *address, uint16_t value) //pro u16 s vyuzitim bigindianu\r
+{\r
+ uint16_t be;\r
+ be = __cpu_to_le16(value);\r
+// be = htobs(value);\r
+ memcpy(address, &be, sizeof(uint16_t));\r
+}\r
+\r
+static inline void store_be16(void *address, uint16_t value) //pro u16 s vyuzitim bigindianu\r
+ {\r
+ uint16_t be;\r
+ be = __cpu_to_be16(value);\r
+ memcpy(address, &be, sizeof(uint16_t));\r
+ }\r
+\r
+ \r
+ static inline void __bthtomc16(void *address, void *value)\r
+ {\r
+ memcpy(address, value+1, 1);\r
+ memcpy((uint8_t*)address+1, (uint8_t*)value, 1);\r
+ };\r
+\r
+\r
+#else\r
+static inline uint16_t __cpu_to_le16(uint16_t value)\r
+{\r
+ uint16_t pomoc=0;\r
+ return(value|pomoc);\r
+};\r
+\r
+\r
+static inline uint16_t __cpu_to_be16(uint16_t value)\r
+{\r
+ uint16_t pomoc=0;\r
+ pomoc=(value<<8)&0xff00;\r
+ value=(value>>8)&0x00ff;\r
+ return(value|pomoc);\r
+};\r
+\r
+static inline void store_le16(void *address, uint16_t value) //pro u16 s vyuzitim bigindianu\r
+{\r
+ uint16_t be;\r
+ be = __cpu_to_le16(value);\r
+// be = htobs(value);\r
+ memcpy(address, &be, sizeof(uint16_t));\r
+}\r
+\r
+static inline void store_be16(void *address, uint16_t value) //pro u16 s vyuzitim bigindianu\r
+ {\r
+ uint16_t be;\r
+ be = __cpu_to_le16(value);\r
+ memcpy(address, &be, sizeof(uint16_t));\r
+ }\r
+\r
+ static inline void __bthtomc16(void *address, void *value)\r
+ {\r
+// (uint16_t*)address=(uint16_t)*(uint16_t*)value;\r
+ memcpy(address, value, 2);\r
+// memcpy((uint8_t*)address+1, (uint8_t*)value, 1);\r
+ };\r
+\r
+\r
+#endif\r
+\r
+/********************************************************************/\r
+/********************************************************************/\r
+/********************************************************************/\r
+/********************************************************************/\r
+/********************************************************************/\r
+/********************************************************************/\r
+/********************************************************************/\r
+// ------------- COMMAND COMPLETE EVENT ---------------------------/\r
+\r
+int cmd_ev_none(uint8_t *bth_p, uint8_t size);\r
+/********************************************************************/\r
+/*********************** OGF = 0x01 ****************************/\r
+/*-------------------LINK CONTROL COMMANDS--------------------------*/\r
+/********************************************************************/\r
+int cmd_ev_01x000b(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_01x000d(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_01x000e(uint8_t *bth_p, uint8_t size);\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x02 ****************************/\r
+/*-------------------LINK POLICY COMMANDS--------------------------*/\r
+/********************************************************************/\r
+int cmd_ev_02x0009(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_02x000C(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_02x000D(uint8_t *bth_p, uint8_t size);\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x03 ****************************/\r
+/*--------------HOST CONTROLLER & BASEBAND COMMANDS-----------------*/\r
+/********************************************************************/\r
+int cmd_ev_03x0008(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0009(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x000d(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0011(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0012(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0014(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0015(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0017(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0019(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x001b(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x001d(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x001f(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0021(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0023(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0025(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0027(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0028(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0029(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x002b(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x002d(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x002e(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0036(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0037(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0038(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x0039(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x003b(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_03x003d(uint8_t *bth_p, uint8_t size);\r
+\r
+/********************************************************************/\r
+/*********************** OGF = 0x04 ****************************/\r
+/*-------------------INFORMATIONAL PARAMETERS-----------------------*/\r
+/********************************************************************/\r
+int cmd_ev_04x0001(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_04x0003(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_04x0005(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_04x0007(uint8_t *bth_p, uint8_t size);\r
+int cmd_ev_04x0009(uint8_t *bth_p, uint8_t size);\r
+\r
+\r
+#endif\r
--- /dev/null
+/*******************************************************************\r
+ bluetooth library\r
+\r
+ l2cap.c - fce for operation L2CAP protocol (build L2CAP packet)\r
+ and for saving data to data queue\r
+\r
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com\r
+\r
+ *******************************************************************/\r
+\r
+\r
+\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#ifdef BTH_LX\r
+#include <types.h>\r
+#include <cpu_def.h>\r
+#include <h8s2638h.h>\r
+#include <periph/sci_rs232.h>\r
+#include <system_def.h>\r
+\r
+#else\r
+#include "types.h"\r
+#endif\r
+\r
+#include "hci.h"\r
+#include "l2cap.h"\r
+\r
+#include "inline_fce.h"\r
+#include "bth_inface.h"\r
+#include "bth_fce_out.h"\r
+\r
+\r
+/**\r
+ * pointery na funkce, ktere se vykonavaji v zavislosti na parametru\r
+ */\r
+typedef int (*l2cap_code_fce_def)(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan);\r
+l2cap_code_fce_def l2cap_code_fce[]={\r
+ l2cap_none,l2cap_cod_command_rej,l2cap_cod_conn_req, l2cap_cod_conn_rsp, l2cap_cod_conf_req, l2cap_cod_conf_rsp,\r
+ l2cap_cod_disconn_req, l2cap_cod_disconn_rsp, l2cap_cod_echo_req, l2cap_cod_echo_rsp, l2cap_cod_info_req,\r
+ l2cap_cod_info_rsp};\r
+#define L2CAP_SUM_FC (sizeof(l2cap_code_fce)/sizeof(l2cap_code_fce[0]))\r
+\r
+\r
+/*----------------------- funkce zavisle na code -----------------------------------*/\r
+\r
+/**\r
+* funkce prohledava kanaly pripoj. zazizeni dev_num a hleda zadany kanal\r
+*/\r
+inline int l2cap_find_dcid(int dcid, int dev_num )\r
+{\r
+ int i;\r
+ for(i=1;i<L2CAP_NUM_OF_CANAL;i++)\r
+ {\r
+ if(bth_connected[dev_num]->dcid[i]==dcid)\r
+ {\r
+ return(-3);\r
+ };\r
+ };\r
+ return (0);\r
+};\r
+\r
+\r
+/*------------------------------ pomocne funkce --------------------------------*/\r
+\r
+int l2cap_add_to_send_buffer(uint8_t *bth_p)\r
+{\r
+ if(bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+ {return 1;};\r
+ bth_pole_adrr_comm_packet[bth_com_buf_info.aktual]=bth_p;\r
+\r
+ /*nastaveni pozice v poli command prikazu pro pristi prikaz. Moznost zapisu (adresa v poli = NULL)\r
+ se overuje, az pri samotnem ukladani */\r
+ if(bth_com_buf_info.aktual<(LENCOMMAND-2)){bth_com_buf_info.aktual++;}\r
+ else{ bth_com_buf_info.aktual=0;};\r
+ return 0;\r
+\r
+};\r
+/**\r
+* neexistujici funkce - nemeli by nikdy nastat \r
+*/\r
+int l2cap_none(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan)\r
+{\r
+ return (-3);\r
+};\r
+\r
+\r
+\r
+/**\r
+ * dekodovani signaling paketu a volani vyse napsanych fci (pointery na fce)\r
+ */\r
+int l2cap_signaling(uint8_t *bth_p, uint16_t size,int dev_num)\r
+{\r
+ l2cap_cmd_hdr bth_q;\r
+\r
+ store16(bth_q.code,*((uint8_t*)bth_p+L2CAP_CMD_HDR____code));\r
+ store16(bth_connected[dev_num]->ident,*((uint8_t*)bth_p+L2CAP_CMD_HDR____ident));\r
+ __bthtomc16((uint8_t*)&(bth_q.len),((uint8_t*)bth_p+L2CAP_CMD_HDR____len));\r
+ \r
+ if(bth_q.code<L2CAP_SUM_FC)\r
+ { /*odskok na obsluznou fci*/\r
+ l2cap_code_fce[bth_q.code]((uint8_t*)bth_p+L2CAP_CMD_HDR_SIZE, bth_q.len,dev_num, 0);\r
+ return 0;\r
+ }\r
+ else {return -1;};\r
+};\r
+\r
+/*----------------------- funkce zavisle na code -----------------------------------*/\r
+\r
+/**\r
+ * Command reject\r
+ */\r
+int l2cap_cod_command_rej(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x01\r
+{\r
+ \r
+ return (-3);\r
+};\r
+\r
+/**\r
+ * Connection request\r
+ */\r
+int l2cap_cod_conn_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x02\r
+{\r
+ l2cap_conn_req bth_q;\r
+ if(bth_p==NULL)\r
+ {\r
+ /*zde se paket sestavuje - tj. jedna se o zarizeni, ktere chce vytvorit novy kanal*/\r
+\r
+ }\r
+ else \r
+ {\r
+ /*lokalni zarizeni obdrzelo paket 0x02*/\r
+ __bthtomc16((uint8_t*)&(bth_q.psm),((uint8_t*)bth_p+L2CAP_CONN_REQ____psm));\r
+ __bthtomc16((uint8_t*)&(bth_q.scid),((uint8_t*)bth_p+L2CAP_CONN_REQ____scid));\r
+ /*SCID je v tomto pripade DCID, protoze vysilajici strana si tento kanal zvolila jako SCID. Uloha je brana z\r
+ pohledu daneho zarizeni (ktere paket prijalo) tudiz se jedna o DCID*/\r
+\r
+ pos_chan=bth_add_chanal_dcid(dev_num, bth_q.scid); //pridam DCID vzdaleneho zarizeni\r
+\r
+ /*sestavim paket, kterym odpovidam*/\r
+ l2cap_cod_conn_rsp(NULL,0,dev_num,pos_chan);\r
+ bth_local_info.busy=0;\r
+ };\r
+ return (-1);\r
+};\r
+\r
+/**\r
+ Connection response\r
+*/\r
+int l2cap_cod_conn_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x03\r
+{\r
+ l2cap_conn_req bth_q;\r
+ uint8_t *bth_r;\r
+ uint16_t result=L2CAP_CR_SUCCESS;\r
+ uint16_t status=0;\r
+ uint8_t *typ_hci_paket;\r
+ hci_acl_hdr *hci_headr;\r
+ l2cap_hdr *l2cap_headr;\r
+ l2cap_cmd_hdr *l2cap_cmd_headr;\r
+ l2cap_conn_rsp *l2cap_conn_response;\r
+ if(bth_p==NULL)\r
+ {\r
+ /*zarizeni obdrzelo od vzdaleneho zarizeni paket 0x03*/\r
+ int hp_size=(HCI_PKT_SIZE+HCI_ACL_HDR_SIZE+L2CAP_HDR_SIZE+L2CAP_CMD_HDR_SIZE+L2CAP_CONN_RSP_SIZE);\r
+ bth_r=malloc(hp_size);\r
+\r
+ typ_hci_paket=(uint8_t*)bth_r;\r
+ hci_headr=(hci_acl_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ l2cap_headr=(l2cap_hdr *)(((uint8_t*)hci_headr)+HCI_ACL_HDR_SIZE); //pointer on parametrs\r
+ l2cap_cmd_headr=(l2cap_cmd_hdr *)(((uint8_t*)l2cap_headr)+L2CAP_HDR_SIZE);\r
+ l2cap_conn_response=(l2cap_conn_rsp *)(((uint8_t*)l2cap_cmd_headr)+L2CAP_CMD_HDR_SIZE);\r
+ /*------*/\r
+ store16(*typ_hci_paket, HCI_ACLDATA_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____handle,(htobs(0x2000)|bth_connected[dev_num]->handle));\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____dlen,htobs(L2CAP_CMD_HDR_SIZE+L2CAP_CONN_RSP_SIZE+L2CAP_CMD_HDR_SIZE));\r
+\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____len), htobs(L2CAP_CONN_RSP_SIZE+L2CAP_CMD_HDR_SIZE));\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____cid),htobs(0x0001));\r
+ store16(*((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____code), L2CAP_CONN_RSP);\r
+\r
+\r
+ if(pos_chan>-1) //kanal daneho zarizeni, jeste neexistuje, tj. zalozim ho\r
+ {\r
+ (bth_connected[dev_num])->scid[pos_chan]=(0x0040+pos_chan+1);\r
+ /*dcin - vzdal. zarizeni, ktere */\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____dcid),(0x0040+pos_chan+1));\r
+ }\r
+ else{\r
+ result=htobs(L2CAP_CR_PEND); status=htobs(L2CAP_CS_NO_INFO);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____dcid),0);\r
+ };\r
+\r
+ store16(*((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____ident),((bths_connect_bluet*)bth_connected[dev_num])->ident);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____len),L2CAP_CONN_RSP_SIZE);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____scid),((bths_connect_bluet*)bth_connected[dev_num])->dcid[pos_chan]);\r
+\r
+ if(l2cap_find_dcid(bth_q.scid, dev_num)>=0) //prohledam vsechna DCID (SCID vzdaleneho zarizeni, jeslti uz ho nepouziva)\r
+ {\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____result),htobs(L2CAP_CR_SUCCESS));\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____status),htobs(L2CAP_CS_NO_INFO));\r
+ }\r
+ else//zarizeni uz kanal pouziva, tj. odrekni spojeni s prislusnzym chyb. kodem\r
+ {\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____result),result);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conn_response+L2CAP_CONN_RSP____status),status);\r
+ };\r
+ /*pripravim data do vysilaciho bufferu*/\r
+ return(l2cap_add_to_send_buffer(bth_r));\r
+ }\r
+ else\r
+ {\r
+ /*lok. zarizeni vysila vzdalenemu zarizeni paket 0x03 - zada o kanal*/\r
+ };\r
+ return (-1);\r
+};\r
+\r
+/**\r
+ Configure request\r
+ */\r
+int l2cap_cod_conf_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x04\r
+{\r
+ l2cap_conf_req bth_q;\r
+ uint8_t *bth_r;\r
+ uint8_t *typ_hci_paket;\r
+ hci_acl_hdr *hci_headr;\r
+ l2cap_hdr *l2cap_headr;\r
+ l2cap_cmd_hdr *l2cap_cmd_headr;\r
+ l2cap_conf_req *l2cap_conf_request;\r
+\r
+ if(bth_p==NULL)\r
+ {\r
+ }\r
+ else\r
+ {\r
+ __bthtomc16((uint8_t*)&(bth_q.dcid),((uint8_t*)bth_p+L2CAP_CONF_REQ____dcid));\r
+ __bthtomc16((uint8_t*)&(bth_q.flags),((uint8_t*)bth_p+L2CAP_CONF_REQ____flags));\r
+ //jeste nejaka data .... - v nasem pripade se zadna nezpracovavaji\r
+ /*------*/\r
+ pos_chan=bth_find_chanal_scid(dev_num, bth_q.dcid);\r
+ l2cap_cod_conf_rsp(NULL, 0, dev_num, pos_chan); //0x05\r
+ \r
+ /***************sestavim paket, kterym posilam responce kod = 0x04 masterovi*************/\r
+ /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(HCI_PKT_SIZE+HCI_ACL_HDR_SIZE+L2CAP_HDR_SIZE+L2CAP_CMD_HDR_SIZE+L2CAP_CONF_REQ_SIZE);\r
+ bth_r=malloc(hp_size);\r
+\r
+ typ_hci_paket=(uint8_t*)bth_r;\r
+ hci_headr=(hci_acl_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ l2cap_headr=(l2cap_hdr *)(((uint8_t*)hci_headr)+HCI_ACL_HDR_SIZE); //pointer on parametrs\r
+ l2cap_cmd_headr=(l2cap_cmd_hdr *)(((uint8_t*)l2cap_headr)+L2CAP_HDR_SIZE);\r
+ l2cap_conf_request=(l2cap_conf_req *)(((uint8_t*)l2cap_cmd_headr)+L2CAP_CMD_HDR_SIZE);\r
+ /*------*/\r
+\r
+ store16(*typ_hci_paket, HCI_ACLDATA_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____handle,(htobs(0x2000)|(bth_connected[dev_num])->handle));\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____dlen,htobs(L2CAP_CMD_HDR_SIZE+L2CAP_CONF_REQ_SIZE+L2CAP_CMD_HDR_SIZE));\r
+\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____len), htobs(L2CAP_CONF_REQ_SIZE+L2CAP_CMD_HDR_SIZE));\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____cid),htobs(0x0001));\r
+\r
+ store16(*((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____code), L2CAP_CONF_REQ);\r
+ store16(*((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____ident),(bth_connected[dev_num])->ident);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____len),htobs(L2CAP_CONF_REQ_SIZE));\r
+\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conf_request+L2CAP_CONF_REQ____dcid),(bth_connected[dev_num])->dcid[pos_chan]);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conf_request+L2CAP_CONF_REQ____flags),0);\r
+ //posledni polozka jsou data - nebubu posilat v tomto paketu\r
+\r
+ /******************* umisteni do vysilaciho bufferu **************************/\r
+ l2cap_add_to_send_buffer(bth_r);\r
+ return 0;\r
+ };\r
+ return (-1);\r
+};\r
+\r
+\r
+/**\r
+ Configure response\r
+ */\r
+int l2cap_cod_conf_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x05\r
+{\r
+ l2cap_conf_rsp bth_q;\r
+ uint8_t *bth_r;\r
+ uint8_t *typ_hci_paket;\r
+ hci_acl_hdr *hci_headr;\r
+ l2cap_hdr *l2cap_headr;\r
+ l2cap_cmd_hdr *l2cap_cmd_headr;\r
+ l2cap_conf_rsp *l2cap_conf_response;\r
+\r
+ if(bth_p==NULL)\r
+ {\r
+ /*sestavim paket, kterym odpovidam*/\r
+ /*nastaveni adres pro casti paketu + naplneni jednotlivych polozek*/\r
+ int hp_size=(HCI_PKT_SIZE+HCI_ACL_HDR_SIZE+L2CAP_HDR_SIZE+L2CAP_CMD_HDR_SIZE+L2CAP_CONF_RSP_SIZE);\r
+ bth_r=malloc(hp_size);\r
+\r
+ typ_hci_paket=(uint8_t*)bth_r;\r
+ hci_headr=(hci_acl_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ l2cap_headr=(l2cap_hdr *)(((uint8_t*)hci_headr)+HCI_ACL_HDR_SIZE); //pointer on parametrs\r
+ l2cap_cmd_headr=(l2cap_cmd_hdr *)(((uint8_t*)l2cap_headr)+L2CAP_HDR_SIZE);\r
+ l2cap_conf_response=(l2cap_conf_rsp *)(((uint8_t*)l2cap_cmd_headr)+L2CAP_CMD_HDR_SIZE);\r
+ /*------*/\r
+ store16(*typ_hci_paket, HCI_ACLDATA_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____handle,(htobs(0x2000)|(bth_connected[dev_num])->handle));\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____dlen,htobs(L2CAP_CMD_HDR_SIZE+L2CAP_CONF_RSP_SIZE+L2CAP_CMD_HDR_SIZE));\r
+\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____len), htobs(L2CAP_CONF_RSP_SIZE+L2CAP_CMD_HDR_SIZE));\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____cid),htobs(0x0001));\r
+\r
+ store16(*((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____code), L2CAP_CONF_RSP);\r
+ (bth_connected[dev_num])->ident++;\r
+ store16(*((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____ident),(bth_connected[dev_num])->ident);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_cmd_headr+L2CAP_CMD_HDR____len),htobs(L2CAP_CONF_RSP_SIZE));\r
+\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conf_response+L2CAP_CONF_RSP____scid),(bth_connected[dev_num])->dcid[pos_chan]);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conf_response+L2CAP_CONF_RSP____flags),0);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_conf_response+L2CAP_CONF_RSP____result),0);\r
+ //posledni polozka jsou data - nebubu posilat v tomto paketu\r
+\r
+\r
+ /******************* umisteni do vysilaciho bufferu **************************/\r
+ return(l2cap_add_to_send_buffer(bth_r));\r
+ }\r
+ else\r
+ {\r
+ __bthtomc16((uint8_t*)&(bth_q.scid),((uint8_t*)bth_p+L2CAP_CONF_RSP____scid));\r
+ __bthtomc16((uint8_t*)&(bth_q.flags),((uint8_t*)bth_p+L2CAP_CONF_RSP____flags));\r
+ __bthtomc16((uint8_t*)&(bth_q.result),((uint8_t*)bth_p+L2CAP_CONF_RSP____result));\r
+ return (bth_q.result);;\r
+ };\r
+};\r
+\r
+/**\r
+ Disconnection request \r
+ */\r
+int l2cap_cod_disconn_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x06\r
+{\r
+ return (-3);\r
+};\r
+\r
+/**\r
+ Disconnection response\r
+ */\r
+int l2cap_cod_disconn_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x07\r
+{\r
+ return (-3);\r
+};\r
+\r
+\r
+/**\r
+ Configure response\r
+ */\r
+int l2cap_cod_echo_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x08\r
+{\r
+ return (-3);\r
+};\r
+\r
+\r
+/**\r
+ Echo request\r
+ */\r
+int l2cap_cod_echo_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x09\r
+{\r
+ return (-3);\r
+};\r
+\r
+/**\r
+ Echo response\r
+ */\r
+int l2cap_cod_info_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x0a\r
+{\r
+ return (-3);\r
+};\r
+\r
+/**\r
+ Information request\r
+ */\r
+int l2cap_cod_info_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan) //0x0b\r
+{\r
+ return (-3);\r
+};\r
+\r
+/*----------------------- send data ----------------------------*/\r
+\r
+/**\r
+ * zabali data z dat. zasobniku do peketu a da k odeslani\r
+*/\r
+int l2cap_send_data(int inx_handle, int inx_chanal)\r
+\r
+{\r
+ uint8_t *typ_hci_paket;\r
+ hci_acl_hdr *hci_headr;\r
+ l2cap_hdr *l2cap_headr;\r
+ uint8_t *data;\r
+ uint8_t *bth_r;\r
+ int zn;\r
+ int hp_size,size=0;\r
+ uint16_t handle, chanal;\r
+\r
+ \r
+ if(bth_connected[inx_handle]==NULL) return (-1);\r
+ if((bth_connected[inx_handle])->dcid[inx_chanal]==0) return (-1);\r
+\r
+ /*cteni z vysilaciho zasobniku, skusmo 1 znak*/\r
+ zn=bth_inface_t_isr(0);\r
+ if(zn>=0)\r
+ {\r
+ handle = ((bths_connect_bluet*)bth_connected[inx_handle])->handle;\r
+ handle=(handle | htobs(0x2000));\r
+ chanal = (bth_connected[inx_handle])->dcid[inx_chanal];\r
+ \r
+ /*vytvoreni prostoru pro paket + prideleni adres pro jednotlive casti L2CAP paketu*/\r
+ hp_size=(HCI_PKT_SIZE+HCI_ACL_HDR_SIZE+L2CAP_HDR_SIZE+BTH_INFACE_BUF_LEN);\r
+ bth_r=malloc(hp_size);\r
+ \r
+ typ_hci_paket=bth_r; //pozice v buff, ktera je prirazena paketu\r
+ hci_headr=(hci_acl_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE); //pointer on head\r
+ l2cap_headr=(l2cap_hdr *)(((uint8_t*)hci_headr)+HCI_ACL_HDR_SIZE); //pointer on parametrs\r
+ data=((uint8_t*)l2cap_headr+L2CAP_HDR_SIZE); //pointer na data\r
+\r
+/*-----------------------------DATA FOR SENDING TO PC --------------------------*/\r
+ *((uint8_t*)data+size)=(uint8_t)zn;\r
+ size++;\r
+ /*cyklicke cteni dalsich znaku a skladani do paketu*/\r
+ while ((zn=bth_inface_t_isr(0))>=0)\r
+ {\r
+ *((uint8_t*)data+size)=(uint8_t)zn;\r
+ size++;\r
+ };\r
+ }\r
+ else {return (0);}; //data nejsou v zasobniku\r
+ \r
+/*sestavim zbytek paketu, kterym odpovidam tj. naplneni jednotlivych polozek*/\r
+ store16(*typ_hci_paket, HCI_ACLDATA_PKT);\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____handle,handle);\r
+ store_le16((uint8_t*)hci_headr+HCI_ACL_HDR____dlen,(htobs(L2CAP_CMD_HDR_SIZE)+size));\r
+\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____len),size);\r
+ store_le16((uint16_t*)((uint8_t*)l2cap_headr+L2CAP_HDR____cid),chanal);\r
+ \r
+// VypisHexa((void*)typ_hci_paket,16);\r
+// bth_local_info.busy=0;\r
+ return(l2cap_add_to_send_buffer(bth_r));\r
+};\r
--- /dev/null
+/*******************************************************************
+ bluetooth library
+
+ l2cap.h - list of fce for operation L2CAP protocol and
+ list of L2CAP structures
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+#ifndef __L2CAP_H
+#define __L2CAP_H
+
+
+/* L2CAP defaults */
+#define L2CAP_DEFAULT_MTU 672
+#define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
+
+#define L2CAP_CONN_TIMEOUT (HZ * 40)
+
+/* L2CAP socket address */
+//struct sockaddr_l2 {
+// sa_family_t l2_family;
+// unsigned short l2_psm;
+// bdaddr_t l2_bdaddr;
+//};
+
+/* L2CAP socket options */
+//#define L2CAP_OPTIONS 0x01
+//struct l2cap_options {
+// uint16_t omtu;
+// uint16_t imtu;
+// uint16_t flush_to;
+// uint8_t mode;
+//};
+
+
+//#define L2CAP_CONNINFO 0x02
+//struct l2cap_conninfo {
+// uint16_t hci_handle;
+// uint8_t dev_class[3];
+//};
+
+#define L2CAP_LM 0x03
+#define L2CAP_LM_MASTER 0x0001
+#define L2CAP_LM_AUTH 0x0002
+#define L2CAP_LM_ENCRYPT 0x0004
+#define L2CAP_LM_TRUSTED 0x0008
+#define L2CAP_LM_RELIABLE 0x0010
+#define L2CAP_LM_SECURE 0x0020
+
+/* L2CAP command codes */
+#define L2CAP_COMMAND_REJ 0x01
+#define L2CAP_CONN_REQ 0x02
+#define L2CAP_CONN_RSP 0x03
+#define L2CAP_CONF_REQ 0x04
+#define L2CAP_CONF_RSP 0x05
+#define L2CAP_DISCONN_REQ 0x06
+#define L2CAP_DISCONN_RSP 0x07
+#define L2CAP_ECHO_REQ 0x08
+#define L2CAP_ECHO_RSP 0x09
+#define L2CAP_INFO_REQ 0x0a
+#define L2CAP_INFO_RSP 0x0b
+
+/* L2CAP structures */
+typedef struct {
+ uint16_t len;
+ uint16_t cid;
+} l2cap_hdr;
+#define L2CAP_HDR____len 0
+#define L2CAP_HDR____cid 2
+/*--------------------------------*/
+#define L2CAP_HDR_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+typedef struct {
+ uint8_t code;
+ uint8_t ident;
+ uint16_t len;
+} l2cap_cmd_hdr;
+#define L2CAP_CMD_HDR____code 0
+#define L2CAP_CMD_HDR____ident 1
+#define L2CAP_CMD_HDR____len 2
+/*--------------------------------*/
+#define L2CAP_CMD_HDR_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+typedef struct {
+ uint16_t reason;
+}l2cap_cmd_rej;
+#define L2CAP_CMD_REJ____reason 0
+/*--------------------------------*/
+#define L2CAP_CMD_REJ_SIZE 2
+/****************************************************************/
+/****************************************************************/
+
+typedef struct { //0x02
+ uint16_t psm;
+ uint16_t scid;
+} l2cap_conn_req;
+
+#define L2CAP_CONN_REQ____psm 0
+#define L2CAP_CONN_REQ____scid 2
+/*--------------------------------*/
+#define L2CAP_CONN_REQ_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+typedef struct { //0x03
+ uint16_t dcid;
+ uint16_t scid;
+ uint16_t result;
+ uint16_t status;
+} l2cap_conn_rsp;
+#define L2CAP_CONN_RSP____dcid 0
+#define L2CAP_CONN_RSP____scid 2
+#define L2CAP_CONN_RSP____result 4
+#define L2CAP_CONN_RSP____status 6
+/*--------------------------------*/
+#define L2CAP_CONN_RSP_SIZE 8
+/****************************************************************/
+/****************************************************************/
+
+/* connect result */
+#define L2CAP_CR_SUCCESS 0x0000
+#define L2CAP_CR_PEND 0x0001
+#define L2CAP_CR_BAD_PSM 0x0002
+#define L2CAP_CR_SEC_BLOCK 0x0003
+#define L2CAP_CR_NO_MEM 0x0004
+
+/* connect status */
+#define L2CAP_CS_NO_INFO 0x0000
+#define L2CAP_CS_AUTHEN_PEND 0x0001
+#define L2CAP_CS_AUTHOR_PEND 0x0002
+
+typedef struct { //0x04
+ uint16_t dcid;
+ uint16_t flags;
+ uint8_t data[0];
+} l2cap_conf_req;
+#define L2CAP_CONF_REQ____dcid 0
+#define L2CAP_CONF_REQ____flags 2
+#define L2CAP_CONF_REQ____data 4
+/*--------------------------------*/
+#define L2CAP_CONF_REQ_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+typedef struct { //0x05
+ uint16_t scid;
+ uint16_t flags;
+ uint16_t result;
+ uint8_t data[0];
+} l2cap_conf_rsp;
+#define L2CAP_CONF_RSP____scid 0
+#define L2CAP_CONF_RSP____flags 2
+#define L2CAP_CONF_RSP____result 4
+#define L2CAP_CONF_RSP____data 6
+/*--------------------------------*/
+#define L2CAP_CONF_RSP_SIZE 6
+/****************************************************************/
+/****************************************************************/
+
+
+
+#define L2CAP_CONF_SUCCESS 0x0000
+#define L2CAP_CONF_UNACCEPT 0x0001
+#define L2CAP_CONF_REJECT 0x0002
+#define L2CAP_CONF_UNKNOWN 0x0003
+
+typedef struct {
+ uint8_t type;
+ uint8_t len;
+ uint8_t val[0];
+} l2cap_conf_opt;
+#define L2CAP_CONF_OPT____type 0
+#define L2CAP_CONF_OPT____len 1
+#define L2CAP_CONF_OPT____val 2
+/*--------------------------------*/
+#define L2CAP_CONF_OPT_SIZE 2
+/****************************************************************/
+/****************************************************************/
+
+
+#define L2CAP_CONF_MTU 0x01
+#define L2CAP_CONF_FLUSH_TO 0x02
+#define L2CAP_CONF_QOS 0x03
+#define L2CAP_CONF_RFC 0x04
+#define L2CAP_CONF_RFC_MODE 0x04
+
+#define L2CAP_CONF_MAX_SIZE 22
+
+typedef struct {
+ uint16_t dcid;
+ uint16_t scid;
+} l2cap_disconn_req;
+#define L2CAP_DISCONN_REQ____dcid 0
+#define L2CAP_DISCONN_REQ____scid 2
+/*--------------------------------*/
+#define L2CAP_DISCONN_REQ_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+typedef struct {
+ uint16_t dcid;
+ uint16_t scid;
+} l2cap_disconn_rsp;
+#define L2CAP_DISCONN_RSP____dcid 0
+#define L2CAP_DISCONN_RSP____scid 2
+/*--------------------------------*/
+#define L2CAP_DISCONN_RSP_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+typedef struct {
+ uint16_t type;
+ uint8_t data[0];
+} l2cap_info_req;
+#define L2CAP_INFO_REQ____type 0
+#define L2CAP_INFO_REQ____data 2
+/*--------------------------------*/
+#define L2CAP_INFO_REQ_SIZE 2
+/****************************************************************/
+/****************************************************************/
+
+typedef struct {
+ uint16_t type;
+ uint16_t result;
+ uint8_t data[0];
+} l2cap_info_rsp;
+#define L2CAP_INFO_RSP____type 0
+#define L2CAP_INFO_RSP____result 2
+#define L2CAP_INFO_RSP____data 4
+/*--------------------------------*/
+#define L2CAP_INFO_RSP_SIZE 4
+/****************************************************************/
+/****************************************************************/
+
+/* info type */
+#define L2CAP_IT_CL_MTU 0x0001
+#define L2CAP_IT_FEAT_MASK 0x0002
+
+/* info result */
+#define L2CAP_IR_SUCCESS 0x0000
+#define L2CAP_IR_NOTSUPP 0x0001
+
+
+
+
+
+
+
+/*----------------------- funkce zavisle na code -----------------------------------*/
+int l2cap_signaling(uint8_t *bth_p, uint16_t size, int dev_num);
+
+int l2cap_none(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan);
+int l2cap_cod_command_rej(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x01
+int l2cap_cod_conn_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x02
+int l2cap_cod_conn_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x03
+int l2cap_cod_conf_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x04
+int l2cap_cod_conf_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x05
+int l2cap_cod_disconn_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x06
+int l2cap_cod_disconn_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x07
+int l2cap_cod_echo_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x08
+int l2cap_cod_echo_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x09
+int l2cap_cod_info_req(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x0a
+int l2cap_cod_info_rsp(uint8_t *bth_p, uint16_t size, int dev_num, int pos_chan); //0x0b
+//int l2cap_send_data(int inx_handle, int inx_chanal);
+
+#endif /* __L2CAP_H */
--- /dev/null
+#ifndef _H8S_TYPES_H
+#define _H8S_TYPES_H
+
+
+typedef unsigned short umode_t;
+
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+#if __INT_MAX__ == 32767
+typedef __signed__ long __s32;
+typedef unsigned long __u32;
+#else
+typedef int __s32;
+typedef unsigned int __u32;
+#endif
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+#ifndef __BIT_TYPES_DEFINED__
+#define __BIT_TYPES_DEFINED__
+
+typedef __u8 uint8_t;
+typedef __s8 int8_t;
+typedef __u16 uint16_t;
+typedef __s16 int16_t;
+typedef __u32 uint32_t;
+typedef __s32 int32_t;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __s64 int64_t;
+typedef __u64 uint64_t;
+#endif
+
+#endif /* !(__BIT_TYPES_DEFINED__) */
+
+
+/*
+ * These aren't exported outside the kernel to avoid name space clashes
+ */
+#ifdef __KERNEL__
+
+typedef __s8 s8;
+typedef __u8 u8;
+
+typedef __s16 s16;
+typedef __u16 u16;
+
+typedef __s32 s32;
+typedef __u32 u32;
+
+typedef __s64 s64;
+typedef __s64 u64;
+
+#define BITS_PER_LONG 32
+
+#endif /* __KERNEL__ */
+
+#endif /* _H8S_TYPES_H */
--- /dev/null
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ; while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" == `pwd` ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+ @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
--- /dev/null
+# -*- makefile -*-
+
+bin_PROGRAMS = bth_comp2
+#bth_comp1
+
+
+#bth_comp1_SOURCES = main.c bth_main.c bth_command.c bth_event_acc.c bth_error.c bth_cmd_complete_ev.c l2cap.c bth_inface.c h2638_pkt_controll.c
+#bth_comp1_LIBS = boot_fn arch_drivers excptvec misc pxmc m sci_channels
+#bth_comp1_MOREOBJS = $(USER_LIB_DIR)/system_stub.o
+
+bth_comp2_SOURCES = main.c
+bth_comp2_LIBS = boot_fn arch_drivers excptvec misc pxmc m sci_channels bluetooth
+bth_comp2_MOREOBJS = $(USER_LIB_DIR)/system_stub.o
+
+#lib_LIBRARIES = bluetooth
+
+#bluetooth_SOURCES = bth_command.c bth_event_acc.c bth_error.c bth_cmd_complete_ev.c l2cap.c bth_inface.c bth_main.c h2638_pkt_controll.c
+#include_HEADERS = bth_inface.h bth_fce_out.h bth_h8s2638.h
+
--- /dev/null
+/*******************************************************************
+ bluetooth test aplication - bth chat
+
+ bth_h8s2638.h - bth chat - write a recieve data to RS232 link
+ as recieve data include char is 'a' aplication
+ send 'ahoj'
+
+ Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+#ifdef BTH_LX
+#include <types.h>
+#include <cpu_def.h>
+#include <h8s2638h.h>
+#include <periph/sci_channels.h>
+#include <periph/sci_rs232.h>
+#include <system_def.h>
+#include <assert.h>
+#include "bth_h8s2638.h"
+
+
+#else
+#include "types.h"
+#include <stdio.h>
+#endif
+
+#include "bth_inface.h"
+#include "bth_fce_out.h"
+
+#ifdef BTH_LX
+//*******************************************************
+
+void unhandled_exception(void) __attribute__ ((interrupt_handler));
+/**
+ * init - shaddow registers, outputs..
+ *
+ * Initializes P1 and P3 shaddow registers,
+ * sets PJ.1, PJ.2, PJ.3 LED as outputs,
+ * initialises interrupt vector.
+ */
+void init()
+{
+ /* initialises interrupt vector */
+ excptvec_initfill(unhandled_exception, 0);
+}
+
+/*Interrupt routines*/
+void unhandled_exception(void)
+{
+};
+//***************************************#define _USE_EXR_LEVELS 1*****************
+#endif
+
+
+
+int main()
+{
+ int zz,zn_bth;
+
+
+ /********************************************************************************/
+#ifdef BTH_LX
+// *SYS_SYSCR|=(SYSCR_INTM1m);
+// *INT_IPRH=0x34;
+// *INT_IPRK=0x67; /*highest priority SCI 1 and 2*/
+
+ *DIO_PEDDR=0xff; /*output gate*/
+ *DIO_PEDR=0x60; /*0x0-LED - light all; 0x6 -ENA,ENB=1, LE33CD=0*/
+
+ cli();
+ init();
+ sti();
+
+ sci_rs232_setmode(115200, 0, 0, 2); //bth
+ sci_rs232_setmode(19200, 0, 0, sci_rs232_chan_default); //PC
+
+#endif
+ bth_inface_setup(0); /*init I/O data buffer for bluetooth*/
+ bth_init(); /*init bth device*/
+
+
+ bth_init_pkt_controll();
+ bth_parametr_slave(); /* set up bluetooth device to slave*/
+ bth_start_TPU_counter();
+
+ do{
+ zn_bth=sci_rs232_recch(2);
+ }while(bth_get_timer()<3);
+ bth_start();
+
+ /*
+ do{
+ zn=sci_rs232_recch(sci_rs232_chan_default);
+ zn_bth=sci_rs232_recch(2);
+ }while (zn==-1);
+ */
+
+
+ do{
+ zn_bth=sci_rs232_recch(2);
+ if(zn_bth!=-1)
+ {
+ bth_conv_char_text(zn_bth);
+ bth_recieve_packet(zn_bth);
+ };
+
+ if((zz=bth_inface_recch(0))>-1)
+ {
+ if(zz=='a')
+ {
+ bth_inface_sendch('a',0); bth_inface_sendch('h',0); bth_inface_sendch('o',0);
+ bth_inface_sendch('j',0); bth_inface_sendch('\n',0);
+ };
+ l2cap_send_data(0, 0);
+ sci_rs232_sendch(zz,sci_rs232_chan_default);
+ };
+ bth_send_queue();
+// sci_rs232_sendch('.',sci_rs232_chan_default);
+ }while(1);
+ return 0;
+};