]> rtime.felk.cvut.cz Git - mirosot.git/commitdiff
Added bth_test application. Not finished.
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 13 Nov 2006 08:57:00 +0000 (08:57 +0000)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 13 Nov 2006 08:57:00 +0000 (08:57 +0000)
The aim of this app is to test (and find bugs in) mirobt library under Linux.

darcs-hash:20061113085737-f2ef6-4b7fc181518a742813566641ab312846f88cd79f.gz

26 files changed:
bth_tests/bluetooth/.emacs-dirvars [new file with mode: 0644]
bth_tests/bluetooth/Makefile [new file with mode: 0644]
bth_tests/bluetooth/Makefile.omk [new file with mode: 0644]
bth_tests/bluetooth/Makefile.win [new file with mode: 0644]
bth_tests/bluetooth/bth_cmd_complete_ev.c [new file with mode: 0644]
bth_tests/bluetooth/bth_command.c [new file with mode: 0644]
bth_tests/bluetooth/bth_error.c [new file with mode: 0644]
bth_tests/bluetooth/bth_event_acc.c [new file with mode: 0644]
bth_tests/bluetooth/bth_fce_out.h [new file with mode: 0644]
bth_tests/bluetooth/bth_h8s2638.h [new file with mode: 0644]
bth_tests/bluetooth/bth_inface.c [new file with mode: 0644]
bth_tests/bluetooth/bth_inface.h [new file with mode: 0644]
bth_tests/bluetooth/bth_main.c [new file with mode: 0644]
bth_tests/bluetooth/bth_receive.h [new file with mode: 0644]
bth_tests/bluetooth/fake_pkt_controll.c [new file with mode: 0644]
bth_tests/bluetooth/h2638_pkt_controll.c [new file with mode: 0644]
bth_tests/bluetooth/hci.h [new file with mode: 0644]
bth_tests/bluetooth/hci_bluez.c [new file with mode: 0644]
bth_tests/bluetooth/hci_command.h [new file with mode: 0644]
bth_tests/bluetooth/hci_error.h [new file with mode: 0644]
bth_tests/bluetooth/hci_event.h [new file with mode: 0644]
bth_tests/bluetooth/hci_sci.c [new file with mode: 0644]
bth_tests/bluetooth/inface_bth.h [new file with mode: 0644]
bth_tests/bluetooth/inline_fce.h [new file with mode: 0644]
bth_tests/bluetooth/l2cap.c [new file with mode: 0644]
bth_tests/bluetooth/l2cap.h [new file with mode: 0644]

diff --git a/bth_tests/bluetooth/.emacs-dirvars b/bth_tests/bluetooth/.emacs-dirvars
new file mode 100644 (file)
index 0000000..346c0d8
--- /dev/null
@@ -0,0 +1,11 @@
+;; -*- emacs-lisp -*-
+;;
+;; This file is processed by the dirvars emacs package.  Each variable
+;; setting below is performed when this dirvars file is loaded.
+;;
+c-basic-offset: 2
+indent-tabs-mode: nil
+tab-width: 2
+;show-trailing-whitespace: t
+;indicate-empty-lines: t
+
diff --git a/bth_tests/bluetooth/Makefile b/bth_tests/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/bth_tests/bluetooth/Makefile.omk b/bth_tests/bluetooth/Makefile.omk
new file mode 100644 (file)
index 0000000..ae33731
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- 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 = mirobt
+
+mirobt_SOURCES = bth_command.c bth_event_acc.c bth_error.c \
+bth_cmd_complete_ev.c l2cap.c bth_inface.c bth_main.c 
+
+ifeq ($(CONFIG_BLUETOOTH_LINUX),y)
+mirobt_SOURCES += hci_bluez.c fake_pkt_controll.c
+else
+mirobt_SOURCES += hci_sci.c h2638_pkt_controll.c
+endif
+include_HEADERS = bth_inface.h bth_fce_out.h bth_h8s2638.h
+
+default_CONFIG += CONFIG_BLUETOOTH=y
+default_CONFIG += CONFIG_BLUETOOTH_LINUX=n
+
+config_include_HEADERS = bth_config.h
+bth_config_DEFINES = $(default_CONFIG)
diff --git a/bth_tests/bluetooth/Makefile.win b/bth_tests/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/bth_tests/bluetooth/bth_cmd_complete_ev.c b/bth_tests/bluetooth/bth_cmd_complete_ev.c
new file mode 100644 (file)
index 0000000..538edfd
--- /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 <bth_config.h>\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#ifdef BTH_LX\r
+#include <periph/sci_rs232.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
+  store8(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_array_adrr_check_packet[index]);\r
+      bth_array_adrr_check_packet[index]=NULL;\r
+      return 0; //prikaz probehl bez komplikaci\r
+    }\r
+    else\r
+    {\r
+        /*status is not OK */\r
+      free(bth_array_adrr_check_packet[index]);\r
+      bth_array_adrr_check_packet[index]=NULL;\r
+      return((int)*((uint8_t*)bth_p+READ_BD_ADDR_RP____status)); //NOTE probably I put * here, but I don't remember it. It was yesterday >-]\r
+    };\r
+  };\r
+};\r
diff --git a/bth_tests/bluetooth/bth_command.c b/bth_tests/bluetooth/bth_command.c
new file mode 100644 (file)
index 0000000..f275b10
--- /dev/null
@@ -0,0 +1,419 @@
+/*******************************************************************\r
+  bluetooth library\r
+\r
+  bth_command.c - command functions (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
+#include <types.h>\r
+#ifdef BTH_LX\r
+#include <cpu_def.h>\r
+#include <h8s2638h.h>\r
+#include <periph/sci_rs232.h>\r
+#include <system_def.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 *temp;\r
+   if(dyn_chan!=NULL)\r
+    {\r
+      temp=dyn_chan;\r
+      while (temp->next!=NULL)\r
+      {\r
+        temp=temp->next;             /*put the command to the queue*/\r
+      };\r
+      return temp;\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; //used in loops\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+INQUIRY_CP_SIZE);\r
+\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_adrr_comm_packet[bth_com_buf_info.aktual]; //possition in buff, which is assigned to the packet\r
+    hci_headr=(hci_command_hdr *)(((uint8_t*)typ_hci_paket)+HCI_PKT_SIZE);             //pointer to head\r
+    bth_cmd_packet=(inquiry_cp *)(((uint8_t*)hci_headr)+HCI_COMMAND_HDR_SIZE);   //pointer to 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
+    /*if lap is not specified, the universal one is chosen*/\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
+/*setup position in command array for the next command. Possibility of writing there (address in array = NULL) is checked when writing is realy done.*/\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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+SET_CONN_PTYPE_CP_SIZE);\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE+DISCONNECT_CP_SIZE;\r
+\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE+WRITE_LINK_POLICY_CP_SIZE;\r
+\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=HCI_PKT_SIZE+HCI_COMMAND_HDR_SIZE;\r
+\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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; //FIXME: hjkhjkh\r
+    hci_command_hdr *hci_headr;\r
+    accept_conn_req_cp *bth_cmd_packet;\r
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+ACCEPT_CONN_REQ_CP_SIZE);\r
+\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_PAGE_ACTIVITY_CP_SIZE);\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE);\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+/*-- determine the size of memory needed for command in buff and determine if it fit there */\r
+/*-------------------------------------------------------------------------------*/\r
+/*-- urceni potreb. velikostipro command prikaz v buff. a zjisteni zda se vejde--*/\r
+\r
+    if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+    {return 1;};\r
+/*setup adresses for packet parts + filling of inidividual fields*/\r
+    int hp_size=(sizeof(uint8_t)+HCI_COMMAND_HDR_SIZE+WRITE_SCAN_ENABLE_SIZE);\r
+    bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=malloc(hp_size);\r
+    typ_hci_paket=(uint8_t*)bth_array_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
+//FIXME: All the czech comments are the same as in the first function.\r
+\r
diff --git a/bth_tests/bluetooth/bth_error.c b/bth_tests/bluetooth/bth_error.c
new file mode 100644 (file)
index 0000000..2996a22
--- /dev/null
@@ -0,0 +1,103 @@
+#include <types.h>\r
+#ifdef BTH_LX\r
+#include <cpu_def.h>\r
+#include <h8s2638h.h>\r
+#include <system_def.h>\r
+#include <periph/sci_rs232.h>\r
+#endif\r
+\r
+#include <stdlib.h>\r
+#include "hci.h"\r
+#include "hci_error.h"\r
+\r
+\r
+/**\r
+ * Errors generated by a bluetooth device\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
+* Output an error to a terminal unsing rs232\r
+*/\r
+void bth_error_detect_status(uint8_t status_num)\r
+{\r
+  char *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); //to PC\r
+      #endif\r
+      i++;\r
+    };\r
+  };\r
+  return;\r
+};\r
+\r
+/**\r
+ * errors in program - it is necessary to modify return parameters - matches only 0 and 3\r
+*/\r
+static struct {\r
+       uint8_t error_code;\r
+       char *error_doc;\r
+ }event_command[] = {\r
+   { 0x00,   "Status OK"                                },\r
+   { 0x01,   "unspecified error"                        },\r
+   { 0x02,   "confirmation queue is empty"              },\r
+   { 0x03,   "function is not implemented"              },\r
+   };\r
+\r
+\r
+\r
+   /**\r
+    * Output an error to terminal through RS232\r
+ */\r
+   void bth_error_detect_event(uint8_t status_num)\r
+{\r
+  char *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/bth_tests/bluetooth/bth_event_acc.c b/bth_tests/bluetooth/bth_event_acc.c
new file mode 100644 (file)
index 0000000..fd14506
--- /dev/null
@@ -0,0 +1,524 @@
+\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
+/*return values\r
+  0 = OK - command removed from the queue\r
+  -1 = the queue was searched but the OPCODE was not found\r
+  +num = an index of verified item in array "bth_pole_adrr_check_packet" with the searched opcode\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_array_adrr_check_packet[i]!=NULL)\r
+    {\r
+      __bthtomc16(&opcode_pkt,((uint8_t*)bth_array_adrr_check_packet[i]+HCI_PKT_SIZE));\r
+      if(opcode_pkt==opcode)\r
+      {return i;};\r
+    };\r
+  };\r
+  return(-1);\r
+};\r
+\r
+/****************************************************************************/\r
+/*------------------------ INDIVIDUAL EVENT FUNCTIONS ----------------------*/\r
+/****************************************************************************/\r
+/****************************************************************************/\r
+/*returned values\r
+  0 = everything OK\r
+  1 = field not found\r
+  2 = there was no commands in the confirmation queue to confirm\r
+  3 = status embody an error of the command\r
+*/\r
+int bth_evt_none(uint8_t *bth_p, uint8_t size)  //func with nonexisting index of event code\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 possible devices, witch which we can comunicate\r
+  {\r
+    if(bth_connected[j]==NULL)\r
+    {break;};\r
+  }\r
+  if(j==9){return (-1);}; //it is possible to communicate with 8 devices at maximum. This one is the 9th one.\r
+  /* Add the device to the list od connected devices.*/\r
+  bth_connected[j]=(bths_connect_bluet*)calloc(1,sizeof(bths_connect_bluet));\r
+  bth_q=(bths_connect_bluet*)bth_connected[j];\r
+  /*Fill the structure of the connected device with information on remote device*/\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
+  store8(bth_q->link_type,*((uint8_t*)bth_p+EVT_CONN_COMPLETE____link_type));\r
+  store8(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)); //reply\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 address of requesting device*/\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
+  store8(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) /* this is just a confirmation - status*/\r
+    {\r
+      if(*((uint8_t*)bth_p+3)==0)\r
+      {\r
+        free(bth_array_adrr_check_packet[index]);\r
+        bth_array_adrr_check_packet[index]=NULL;\r
+        bth_local_info.busy=0;\r
+        return 0; //no complications was encountered during command execution\r
+      }\r
+      else\r
+      {\r
+        /*status is not OK - an error occured - the sent command is still in the confirmation queue */\r
+        free(bth_array_adrr_check_packet[index]);\r
+        bth_array_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
+      /*I split to obcode to OGF and OCF and convert it to an one-byte variable*/\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)); //the number 0x00 is a random guess\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)); //the number 0x00 is a random guess\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)); //the number 0x00 is a random guess\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
+  store8(bth_q.status,*((uint8_t*)bth_p+EVT_CMD_STATUS____status));\r
+  store8(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
+  __bthtomc8(&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) /*this is just a confirmation - status*/\r
+    {\r
+      if(bth_q.status==0)\r
+      {\r
+        free(bth_array_adrr_check_packet[index]);\r
+        bth_array_adrr_check_packet[index]=NULL;\r
+      }\r
+      else\r
+      {\r
+        /*status is not OK - an error occured - the sent command is still in the confirmation queue */\r
+        free(bth_array_adrr_check_packet[index]);\r
+        bth_array_adrr_check_packet[index]=NULL;\r
+      };\r
+    }\r
+    else\r
+    {\r
+      /*rozdelim obcode na OGF a OCF a prevedu na jednobytovou promenou*/ //same comment as in previous function\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
+/*This is a little more complicated cmd_status, which stores data inside and not the end. Other functions are split according to the obcode. Currently, functions are not implemented, only the "guidepost" is done.*/\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 do it differently, not always true\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
+/*Search through all devices with which the communications was started???*/\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
+/*Search through all devices with which the communications was started???*/\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; - local info on packets\r
+//  Change_Connection_Packet_Type - command, which can in case of need setup its packets\r
+//skterym 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
+  /*Search through all devices with which the communications was started, needs to be  written up */\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/bth_tests/bluetooth/bth_fce_out.h b/bth_tests/bluetooth/bth_fce_out.h
new file mode 100644 (file)
index 0000000..d03967d
--- /dev/null
@@ -0,0 +1,20 @@
+/*******************************************************************
+  bluetooth library
+
+  bth_fce_out.h - list of fce for using in aplication
+
+  Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+#include <types.h>
+
+
+
+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/bth_tests/bluetooth/bth_h8s2638.h b/bth_tests/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/bth_tests/bluetooth/bth_inface.c b/bth_tests/bluetooth/bth_inface.c
new file mode 100644 (file)
index 0000000..c3ce8df
--- /dev/null
@@ -0,0 +1,99 @@
+/*******************************************************************
+  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
+
+ *******************************************************************/
+
+#include <bth_config.h>
+#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"
+
+#ifndef CONFIG_BLUETOOTH_LINUX
+#include <periph/sci_rs232.h>
+#endif
+
+/* the number of communication structures i.e. how many channels can be used for communication. It alse specifies howmany
+   independent couples of I/O buffers is here.*/
+/*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);
+}
+
+/**
+  * 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]); // the number of communication interfaces 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/bth_tests/bluetooth/bth_inface.h b/bth_tests/bluetooth/bth_inface.h
new file mode 100644 (file)
index 0000000..02d1f58
--- /dev/null
@@ -0,0 +1,79 @@
+
+/*******************************************************************
+  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_
+
+#include <bth_config.h>
+#include <types.h>
+#ifdef CONFIG_BLUETOOTH_LINUX
+#endif
+
+#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);
+
+#endif /* _ID_BTH_INFACE_H_ */
+
diff --git a/bth_tests/bluetooth/bth_main.c b/bth_tests/bluetooth/bth_main.c
new file mode 100644 (file)
index 0000000..4a049ca
--- /dev/null
@@ -0,0 +1,518 @@
+/*******************************************************************
+  bluetooth library
+
+  bth_main.c -  API bth library (recieve, send ...)
+
+  Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+#include <bth_config.h>
+#include <types.h>
+#ifdef BTH_LX
+#include <cpu_def.h>
+#include <h8s2638h.h>
+#include <periph/sci_rs232.h>
+#include <system_def.h>
+#include <string.h>
+#else
+#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"
+
+
+#define BTH_BUF_LEN 300
+
+/*--------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 -----------------------------*/
+bth_que_t bth_rs232_que_in;
+//bth_que_t bth_inface_que_in;
+//bth_que_t bth_inface_que_out;
+
+
+
+void  *bth_array_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_array_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};
+/***********************************************************************************/
+
+/*FIXME this check synchronisation of received data using TPU unit of CPU*/
+uint8_t bth_controll_flag=0;
+
+
+/**-------------------------------------------------------------------------------*/
+/*FIXME ----- sending of command, if the local bluetooth is free (ready to send)------*/
+/*  0 = data moved to SCI buffer = they will be sent, bluetooth device is free
+    1 = it wasn't possible to move tha command to SCI bufferu, but bluet device is free
+    2 = bluetooth device is busy, ie. data were not moved to the bufferu
+    3 = there is no space left in confirmation queue*/
+
+/**
+ * After this function is called, the packet, which is in the command queue, is sent. If there is no new 
+ * packet or the device is busy, nothing is done.
+ *
+ * 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;}; //device is busy
+  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_array_adrr_comm_packet[bth_com_buf_info.sent+1]==NULL)
+      {return 1;}; //There is certainly nothing to send
+    }
+    else
+    {
+      if(bth_array_adrr_comm_packet[0]==NULL)
+      {return 1;}; //There is certainly nothing to send
+    };
+  };
+    
+  /*bth_send_packet(AdrFrom,howmanyBytes;)*/
+  switch(*(uint8_t*)bth_array_adrr_comm_packet[bth_com_buf_info.sent])
+  {
+    case HCI_ACLDATA_PKT:
+      __bthtomc16((uint8_t*)&(hp_size),((uint8_t*)bth_array_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_array_adrr_comm_packet[bth_com_buf_info.sent],hp_size)))
+      {
+        free(bth_array_adrr_comm_packet[bth_com_buf_info.sent]);
+        bth_array_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_array_adrr_comm_packet[bth_com_buf_info.sent]);
+      bth_array_adrr_comm_packet[bth_com_buf_info.sent]=NULL;
+      return (-6);
+    case HCI_COMMAND_PKT:
+      hp_size=((uint16_t)*(((uint8_t*)bth_array_adrr_comm_packet[bth_com_buf_info.sent])+HCI_PKT_SIZE+2)+HCI_COMMAND_HDR_SIZE+HCI_PKT_SIZE);
+      if(!(bth_send_packet(bth_array_adrr_comm_packet[bth_com_buf_info.sent],hp_size)))
+      {/*sent - add the command to allow confirmation*/
+        for(i=0; i<LENCOMMAND; i++)
+        {
+          if(bth_array_adrr_check_packet[i]==NULL)
+          {
+            bth_array_adrr_check_packet[i]=bth_array_adrr_comm_packet[bth_com_buf_info.sent];
+            bth_array_adrr_comm_packet[bth_com_buf_info.sent]=NULL;
+            /*set the address for the next command - principle of ring buffer*/
+            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);
+};
+
+
+/**
+ * Auxiliary function
+ * Convert hexadecimal character to ASCII. It is then sent to serial line
+ */
+//*************************** bth_conv_char_text *****************************
+// used to convers int into ascii letter and print it on serial
+// INPUT zn: interger to convert and print
+// OUTPUT :none
+//*************************************************************************** 
+void bth_conv_char_text(uint8_t zn)
+{
+  uint8_t val;
+  val=(zn&0xf0)>>4;
+#ifdef BTH_LX
+  uint8_t map_leters[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+  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;
+};
+
+
+
+/**
+ *Inserts a character to the queue
+ */
+
+static inline int bth_que_put(bth_que_t *q, int c)
+{
+  uint8_t *p;
+  p=q->ip;                       //FIXME set us to the actual position in the file
+  *(p++)=c;                      //store the character to the next byte
+  if(p==q->buf_end) return -1;//this is not the ring buffer p=q->buf_beg;
+//  if(p==q->op) return -1;
+  q->ip=p;
+  return 0;                      //in case of success return the character, otherwise -1
+}
+
+
+/**
+//FIXME
+ *received HCI data packet is sent as 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);
+        };
+        /*FIXME real data ...*/
+        /*We have to find the channel with the CID number for device bth_dev_num*/
+        if(bth_find_chanal(bth_dev_num, bth_l2cap_packet.cid)>-1)
+        {
+          /*here are the received data, which are not used for confguration */
+
+          
+          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
+            {
+              /*queue is full, 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*/ /*function is not written, I receive only one pakcet of the message*/
+    case 0x30: return (-4); /*Reserved for future use*/
+    case 0x00: return (-4); /*Reserved for future use*/
+  };
+  return(-1);
+};
+
+
+/**
+ *Received HCI data packet is sent as broadcast (not finished function)
+ */
+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);
+};
+
+
+
+/**
+ *Received HCI data packet is send to piconet (not finished function)
+ */
+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);
+};
+
+
+
+/**
+ *Reserved for future (not finished)
+ */
+int bth_pkt_type_reserved(uint16_t handle, uint8_t bound_flag, uint8_t *bth_p, uint16_t size)
+{
+  return(-3);
+};
+
+
+/****************************************************************************/
+/****************************************************************************/
+
+/**
+ *pointers to functions. Functions are called according to the received HCI pakcet
+ */
+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]))
+
+
+/**
+ *pointrs to functions. Functions are called according to the event code, decoded from the received HCI packet
+ */
+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]))
+
+
+/**
+ *The main function, which stores the received character "c" (from bth) to the input queue, checks if there is the whole pakcet in the queue and if so, it calls functions for processing the packet. (for ACL HCI and for 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); //store the received character to the queue
+  typ_paket=((uint8_t*)bth_rs232_que_in.buf_beg); //determine the type of the pakcet ACL, Even, SCO ...
+  switch(*typ_paket)
+  {
+  case HCI_EVENT_PKT:
+    /*fill in structure "hci_event_hdr" from the queue (bye by byte)*/
+    store8(bth_event_packet.evt,  *(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE));
+    store8(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 to the function matching the event code*/
+        if(bth_event_packet.evt<EV_SUM_FC) //check whether the function exists
+        {
+          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;  //set to the beginning for the next 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 msg
+        }
+        else
+        {//bth_error_detect_event((uint8_t)(-error_code)); //error msg
+        };
+      };
+    };
+    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))
+        {
+          
+          /*  **** check the adjacency of two characters 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;
+          
+          /*variable 'char_acl_pkt' stores the properties of the packet, if it is point to point or broadcast, or char. L2CAP*/
+          store8(char_acl_pkt, (0xf0&*(((uint8_t*)bth_rs232_que_in.buf_beg)+HCI_PKT_SIZE+HCI_ACL_HDR____handle+1)));
+          
+          /*decide which packet is this (PtP,Piconet,broat...) and the type of communication (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) //func exists
+          {
+            bth_char_pkt_fce[com_pr]
+                (bth_acl_packet.handle, char_acl_pkt&0x30, data_ad,bth_acl_packet.dlen);
+          }
+          else
+          {
+            /*HCI data - not L2CAP - neither handling nor loading to data queue is not implemented. It is assumed
+              sending of data using L2CAP. See if before this else. */
+          };
+          bth_rs232_que_in.ip=bth_rs232_que_in.buf_beg;
+//        sci_rs232_sendch('\n',sci_rs232_chan_default); //to PC
+        };
+
+      };
+    };
+  return -1;
+};
+
+
+/**
+ * Calls functions, which are necessary for setting the device to the slave mode.
+*/
+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
+};
+
+
+/**
+ * Sets the MCU up, so it can send HCI packets to bth device
+ * If TPU channels are initialized, it resets and stop it
+*/
+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;
+};
+
+
+/**
+ * Setting of the queue - initialization function
+*/
+void bth_init(void)
+{
+  static uint8_t  bth_array_char_in[70];
+//  bth_check_command_for_send=NULL;
+
+  bth_rs232_que_in.buf_end=(uint8_t*)bth_array_char_in+BTH_BUF_LEN;
+  bth_rs232_que_in.buf_beg=bth_array_char_in;
+  bth_rs232_que_in.ip=bth_array_char_in;
+};
+
+/****************************************************************************/
+/****************************************************************************/
+
+/**
+ * Auxiliary function, which converts characetrs to the printable form
+*/
+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); //to PC
+    sci_rs232_sendch(tisk[(zn&0x0f)],sci_rs232_chan_default); //to PC
+#endif
+  };
+
+  return 0;
+};
+
diff --git a/bth_tests/bluetooth/bth_receive.h b/bth_tests/bluetooth/bth_receive.h
new file mode 100644 (file)
index 0000000..0064dcc
--- /dev/null
@@ -0,0 +1,21 @@
+/*******************************************************************\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
+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/bth_tests/bluetooth/fake_pkt_controll.c b/bth_tests/bluetooth/fake_pkt_controll.c
new file mode 100644 (file)
index 0000000..05a80f1
--- /dev/null
@@ -0,0 +1,63 @@
+/*******************************************************************
+  bluetooth library
+
+  h2638_pkt_control.c - fce for TPU operation
+
+  Copyright (C) 2006 by Petr Kovacik petr_kovacik@gmail.com
+
+ *******************************************************************/
+
+#include <stdlib.h>
+#include "hci.h"
+#include "bth_h8s2638.h"
+
+
+long int timer;
+
+/**
+ * Starts TPU channel 1
+*/
+void bth_start_TPU_counter(void)
+{
+};
+
+
+/**
+ * Stop TPU 1
+ */
+void bth_stop_TPU_counter(void)
+{
+};
+
+
+/**
+ * Reset TPU 1
+ */
+void bth_clear_TPU_counter(void)
+{
+};
+
+/**
+ * Returns the number of timer interrupts
+ */
+long int bth_get_timer(void)
+{
+  return timer;
+};
+
+/**
+ * Zeroes the timer variable
+ */
+void bth_nul_timer(void)
+{
+  timer=0;
+};
+
+
+/**
+ * Timer initialization - HW 1-timer overflow; 2-???Dosazeni citace hodnoty TIER1_TGIEAm
+ */
+void bth_init_pkt_controll(void)
+{
+};
+
diff --git a/bth_tests/bluetooth/h2638_pkt_controll.c b/bth_tests/bluetooth/h2638_pkt_controll.c
new file mode 100644 (file)
index 0000000..2046382
--- /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;
+
+/**
+ * interrupt hanlder, increments the timer variable and blinks LEDs
+ */
+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)
+};
+
+
+/**
+ * Starts TPU channel 1
+*/
+void bth_start_TPU_counter(void)
+{
+    *TPU_TSTR|=(1<<1);         /* Start channel 1 */
+};
+
+
+/**
+ * Stop TPU 1
+ */
+void bth_stop_TPU_counter(void)
+{
+    *TPU_TSTR&=~(1<<1);                /* Stop channel 1 */
+};
+
+
+/**
+ * Reset TPU 1
+ */
+void bth_clear_TPU_counter(void)
+{
+  *TPU_TCNT1=0;
+};
+
+
+/**
+ * Returns the number of timer interrupts
+ */
+long int bth_get_timer(void)
+{
+  return timer;
+};
+
+/**
+ * Zeroes the timer variable
+ */
+void bth_nul_timer(void)
+{
+  timer=0;
+};
+
+
+/**
+ * Timer initialization - HW 1-timer overflow; 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/bth_tests/bluetooth/hci.h b/bth_tests/bluetooth/hci.h
new file mode 100644 (file)
index 0000000..70ce944
--- /dev/null
@@ -0,0 +1,294 @@
+/*******************************************************************
+  bluetooth library
+
+  hci.h - main structures for keeping an information about a queue,
+          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
+
+#include <bth_config.h>
+#include <types.h>
+#ifdef CONFIG_BLUETOOTH_LINUX
+#include <stddef.h>
+#endif
+
+/* 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 store8(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[];
+
+/*---------------- command and acknowledge queues -----------------------*/
+#define LENCOMMAND 10
+extern void  *bth_array_adrr_comm_packet[LENCOMMAND];
+extern bths_command_buf_info bth_com_buf_info;
+
+extern void  *bth_array_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/bth_tests/bluetooth/hci_bluez.c b/bth_tests/bluetooth/hci_bluez.c
new file mode 100644 (file)
index 0000000..e856c1c
--- /dev/null
@@ -0,0 +1,21 @@
+#include "hci.h"
+#include <unistd.h>
+int hci_socket;
+/**
+  //FIXME
+ *Sends data of the size hp_size from address hp to the bluetooth device (UART)
+ */
+int bth_send_packet(uint8_t *hp, uint16_t hp_size)
+{  
+  /*is bluetooth device free, or is it busy by the previous command?*/
+  if(bth_local_info.busy==0) {
+
+    write(hci_socket, hp, hp_size);
+
+    bth_local_info.busy=1;
+    return(0);    //everything sent ==== OK =====
+  } else {
+    return 2;    //busy
+  };
+};
+
diff --git a/bth_tests/bluetooth/hci_command.h b/bth_tests/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/bth_tests/bluetooth/hci_error.h b/bth_tests/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/bth_tests/bluetooth/hci_event.h b/bth_tests/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/bth_tests/bluetooth/hci_sci.c b/bth_tests/bluetooth/hci_sci.c
new file mode 100644 (file)
index 0000000..114b5e7
--- /dev/null
@@ -0,0 +1,28 @@
+#include <hci.h>
+
+/**
+  //FIXME
+ *Sends data of the size hp_size from address hp to the bluetooth device (UART)
+ */
+int bth_send_packet(uint8_t *hp, uint16_t hp_size)
+{  
+  /*is bluetooth device free, or is it busy by the previous command?*/
+  if(bth_local_info.busy==0) {
+#ifndef BTH_LX
+    VypisHexa(hp,hp_size);
+#else
+    int zn,i;
+
+    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);    //everything sent ==== OK =====
+  } else {
+    return 2;    //busy
+  };
+};
+
diff --git a/bth_tests/bluetooth/inface_bth.h b/bth_tests/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/bth_tests/bluetooth/inline_fce.h b/bth_tests/bluetooth/inline_fce.h
new file mode 100644 (file)
index 0000000..ee08505
--- /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
+/*Search the list ba1 of the size num for bdadres ba2, if it is found, it's index is returned*/\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) //for u16 big endian\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) //for u16 big endian\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/bth_tests/bluetooth/l2cap.c b/bth_tests/bluetooth/l2cap.c
new file mode 100644 (file)
index 0000000..1153006
--- /dev/null
@@ -0,0 +1,446 @@
+/*******************************************************************\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
+#include <types.h>\r
+#ifdef BTH_LX\r
+#include <cpu_def.h>\r
+#include <h8s2638h.h>\r
+#include <periph/sci_rs232.h>\r
+#include <system_def.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
+ * pointers to functions, which are executed depending on a parameter\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
+/*----------------------- function depending on code -----------------------------------*/\r
+\r
+/**\r
+* Search the cannels of the connected device dev_num and search the channel dcid\r
+*/\r
+static 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
+/*------------------------------ auxiliary functions --------------------------------*/\r
+\r
+int l2cap_add_to_send_buffer(uint8_t *bth_p)\r
+{\r
+  if(bth_array_adrr_comm_packet[bth_com_buf_info.aktual]!=NULL)\r
+  {return 1;};\r
+  bth_array_adrr_comm_packet[bth_com_buf_info.aktual]=bth_p;\r
+\r
+  /*set the position in command array for the next command. If it is possible to write there (if the pointer = NULL) is checked by the writer. .\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
+* Nonexisting function - should never happend \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
+ * decoding of the signaling packet and calling of the above functions\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
+  { /*jump to the handling functions*/\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
+/*----------------------- functions depending on 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
+    /*the packet is built here - ie. this is the device that wants to create a new channel*/\r
+    /*zde se paket sestavuje - tj. jedna se o zarizeni, ktere chce vytvorit novy kanal*/\r
+\r
+  }\r
+  else \r
+  {\r
+    /*local device receives packet 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 is in this case DCID, because sending side choosed thich channel as SCID. This is viewed from the point of view of \r
+      receiving device, so this is DCID. */\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); //add DCID of the remote device\r
+\r
+    /*build the response packet*/\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
+    /*the device received packet 0x03 from the remote device*/\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 to head\r
+    l2cap_headr=(l2cap_hdr *)(((uint8_t*)hci_headr)+HCI_ACL_HDR_SIZE);   //pointer to 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) //the channel of that device don't exists. We will create it\r
+    {\r
+      (bth_connected[dev_num])->scid[pos_chan]=(0x0040+pos_chan+1);\r
+      /*dcin - remote device, which    */\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) //search all the DCID (SCID of remote device, if it is not used)\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//the device uses the channel, se reply with an apropriate error code\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
+    /*prepare data to sending buffer*/\r
+    return(l2cap_add_to_send_buffer(bth_r));\r
+  }\r
+  else\r
+  {\r
+    /*local device sends to the remote device paket 0x03 - apply for a channel*/\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
+    //yet some data .... - in our case, nothing is processed\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
+  /***************build the packet, by which we send response code = 0x04 to the master*************/\r
+  /*setting of addresses for the parts of the packet + filling of inidividual fields*/\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 to head\r
+    l2cap_headr=(l2cap_hdr *)(((uint8_t*)hci_headr)+HCI_ACL_HDR_SIZE);   //pointer to 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
+  //the last item are data - they are not sent in this packet\r
+\r
+  /******************* put it to send buffer **************************/\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
+  /*build the response packet*/\r
+  /*setup the adresses for parts of the packet + filling of individual fields*/\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 //same as in previous func\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
+  /*reading from sending buffer, try 1 character*/\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
+    /*make space for the packer + assign adresses for individual parts of L2CAP packet*/\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
+    /*cyclic reading of the folowing characters and building of the packet*/\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 are not in the queue\r
+  \r
+/*build the rest of the response packet ie. fill the fields*/\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/bth_tests/bluetooth/l2cap.h b/bth_tests/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 */