]> rtime.felk.cvut.cz Git - mirosot.git/commitdiff
Initial import of Petr's work.
authorNguyen Hoang <nhttu82@yahoo.com>
Wed, 28 Jun 2006 13:20:00 +0000 (13:20 +0000)
committerNguyen Hoang <nhttu82@yahoo.com>
Wed, 28 Jun 2006 13:20:00 +0000 (13:20 +0000)
darcs-hash:20060628132006-5a954-7245443a2ba8d39662c9f6e830f96519c1d14e75.gz

28 files changed:
Makefile [new file with mode: 0644]
Makefile.omk [new file with mode: 0644]
bluetooth/Makefile [new file with mode: 0644]
bluetooth/Makefile.omk [new file with mode: 0644]
bluetooth/Makefile.win [new file with mode: 0644]
bluetooth/bth_cmd_complete_ev.c [new file with mode: 0644]
bluetooth/bth_command.c [new file with mode: 0644]
bluetooth/bth_error.c [new file with mode: 0644]
bluetooth/bth_event_acc.c [new file with mode: 0644]
bluetooth/bth_fce_out.h [new file with mode: 0644]
bluetooth/bth_h8s2638.h [new file with mode: 0644]
bluetooth/bth_inface.c [new file with mode: 0644]
bluetooth/bth_inface.h [new file with mode: 0644]
bluetooth/bth_main.c [new file with mode: 0644]
bluetooth/bth_receive.h [new file with mode: 0644]
bluetooth/h2638_pkt_controll.c [new file with mode: 0644]
bluetooth/hci.h [new file with mode: 0644]
bluetooth/hci_command.h [new file with mode: 0644]
bluetooth/hci_error.h [new file with mode: 0644]
bluetooth/hci_event.h [new file with mode: 0644]
bluetooth/inface_bth.h [new file with mode: 0644]
bluetooth/inline_fce.h [new file with mode: 0644]
bluetooth/l2cap.c [new file with mode: 0644]
bluetooth/l2cap.h [new file with mode: 0644]
bluetooth/types.h [new file with mode: 0644]
testapp/Makefile [new file with mode: 0644]
testapp/Makefile.omk [new file with mode: 0644]
testapp/main.c [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+# 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
+
diff --git a/Makefile.omk b/Makefile.omk
new file mode 100644 (file)
index 0000000..ec0f5ba
--- /dev/null
@@ -0,0 +1 @@
+SUBDIRS = bluetooth testapp
\ No newline at end of file
diff --git a/bluetooth/Makefile b/bluetooth/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# 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
+
diff --git a/bluetooth/Makefile.omk b/bluetooth/Makefile.omk
new file mode 100644 (file)
index 0000000..aac9b8e
--- /dev/null
@@ -0,0 +1,17 @@
+# -*- 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
+
diff --git a/bluetooth/Makefile.win b/bluetooth/Makefile.win
new file mode 100644 (file)
index 0000000..c9bd031
--- /dev/null
@@ -0,0 +1,51 @@
+# 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
diff --git a/bluetooth/bth_cmd_complete_ev.c b/bluetooth/bth_cmd_complete_ev.c
new file mode 100644 (file)
index 0000000..05ce701
--- /dev/null
@@ -0,0 +1,513 @@
+/*******************************************************************\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
diff --git a/bluetooth/bth_command.c b/bluetooth/bth_command.c
new file mode 100644 (file)
index 0000000..c9b221c
--- /dev/null
@@ -0,0 +1,408 @@
+/*******************************************************************\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
diff --git a/bluetooth/bth_error.c b/bluetooth/bth_error.c
new file mode 100644 (file)
index 0000000..99dfb25
--- /dev/null
@@ -0,0 +1,105 @@
+#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
diff --git a/bluetooth/bth_event_acc.c b/bluetooth/bth_event_acc.c
new file mode 100644 (file)
index 0000000..98032a6
--- /dev/null
@@ -0,0 +1,519 @@
+\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
diff --git a/bluetooth/bth_fce_out.h b/bluetooth/bth_fce_out.h
new file mode 100644 (file)
index 0000000..fe27d41
--- /dev/null
@@ -0,0 +1,18 @@
+/*******************************************************************
+  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);
diff --git a/bluetooth/bth_h8s2638.h b/bluetooth/bth_h8s2638.h
new file mode 100644 (file)
index 0000000..36061d1
--- /dev/null
@@ -0,0 +1,23 @@
+/*******************************************************************
+  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
diff --git a/bluetooth/bth_inface.c b/bluetooth/bth_inface.c
new file mode 100644 (file)
index 0000000..0167c26
--- /dev/null
@@ -0,0 +1,119 @@
+/*******************************************************************
+  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;
+};
+*/
+
diff --git a/bluetooth/bth_inface.h b/bluetooth/bth_inface.h
new file mode 100644 (file)
index 0000000..2ff1528
--- /dev/null
@@ -0,0 +1,75 @@
+
+/*******************************************************************
+  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_ */
+
diff --git a/bluetooth/bth_main.c b/bluetooth/bth_main.c
new file mode 100644 (file)
index 0000000..b48e8de
--- /dev/null
@@ -0,0 +1,541 @@
+/*******************************************************************
+  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;
+};
+
diff --git a/bluetooth/bth_receive.h b/bluetooth/bth_receive.h
new file mode 100644 (file)
index 0000000..cd30f36
--- /dev/null
@@ -0,0 +1,22 @@
+/*******************************************************************\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
diff --git a/bluetooth/h2638_pkt_controll.c b/bluetooth/h2638_pkt_controll.c
new file mode 100644 (file)
index 0000000..0793d34
--- /dev/null
@@ -0,0 +1,121 @@
+/*******************************************************************
+  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;
+};
+
diff --git a/bluetooth/hci.h b/bluetooth/hci.h
new file mode 100644 (file)
index 0000000..9cab25f
--- /dev/null
@@ -0,0 +1,288 @@
+/*******************************************************************
+  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
diff --git a/bluetooth/hci_command.h b/bluetooth/hci_command.h
new file mode 100644 (file)
index 0000000..340d7af
--- /dev/null
@@ -0,0 +1,1254 @@
+/*******************************************************************\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
diff --git a/bluetooth/hci_error.h b/bluetooth/hci_error.h
new file mode 100644 (file)
index 0000000..89ac29a
--- /dev/null
@@ -0,0 +1,18 @@
+/*******************************************************************\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
diff --git a/bluetooth/hci_event.h b/bluetooth/hci_event.h
new file mode 100644 (file)
index 0000000..c87d481
--- /dev/null
@@ -0,0 +1,864 @@
+/*******************************************************************\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
diff --git a/bluetooth/inface_bth.h b/bluetooth/inface_bth.h
new file mode 100644 (file)
index 0000000..bfbe05d
--- /dev/null
@@ -0,0 +1,50 @@
+/*******************************************************************
+  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: */
diff --git a/bluetooth/inline_fce.h b/bluetooth/inline_fce.h
new file mode 100644 (file)
index 0000000..c813b3e
--- /dev/null
@@ -0,0 +1,184 @@
+/*******************************************************************\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
diff --git a/bluetooth/l2cap.c b/bluetooth/l2cap.c
new file mode 100644 (file)
index 0000000..b2e2944
--- /dev/null
@@ -0,0 +1,444 @@
+/*******************************************************************\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
diff --git a/bluetooth/l2cap.h b/bluetooth/l2cap.h
new file mode 100644 (file)
index 0000000..b1a91bb
--- /dev/null
@@ -0,0 +1,272 @@
+/*******************************************************************
+  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 */
diff --git a/bluetooth/types.h b/bluetooth/types.h
new file mode 100644 (file)
index 0000000..6df3557
--- /dev/null
@@ -0,0 +1,70 @@
+#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 */
diff --git a/testapp/Makefile b/testapp/Makefile
new file mode 100644 (file)
index 0000000..f595272
--- /dev/null
@@ -0,0 +1,14 @@
+# 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
+
diff --git a/testapp/Makefile.omk b/testapp/Makefile.omk
new file mode 100644 (file)
index 0000000..b103163
--- /dev/null
@@ -0,0 +1,19 @@
+# -*- 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
+
diff --git a/testapp/main.c b/testapp/main.c
new file mode 100644 (file)
index 0000000..8b2a98e
--- /dev/null
@@ -0,0 +1,121 @@
+/*******************************************************************
+  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;
+};