• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gerätedatei für Bluetooth Maus wird nicht angelegt

Hallo zusammen, ....



...ich hab folgendes Problem: Ubuntu und Bluetooth.

Ich hab ein Programm in C/C++ geschrieben, um damit nach Bluetooth(BT) Geräten suchen und mich auch mit ihnen verbinden zu können. Das Programm greift dabei auf Teile von BlueZ zurück. Soweit funktioniert auch alles, ich kann Handys und Mäuse finden und deren Daten (Signalstärke, Geräteklassen und Namen) auslesen.

Will ich mich aber z.B. mit einer BT-Maus verbinden, so scheint auch dieses auf den ersten Blick zu funktionieren, jedoch erscheint unter "/dev/input" keine neue Gerätedatei (wie üblich: Mouse03 oder dergleichen). Erst nachdem ich mein Programm beende, taucht dort solch eine Datei auf.

Woran kann das liegen?
Fehlt etwas in meinem Programm-Code? Oder kann das Problem vielleicht durch eine UDEV-Regel gelöst werden?

Ich bedanke mich schon mal für eure Tipps !

Grüße
MrZ
 
Hi

Welche Ubuntu Version setzt du da ein in 32 oder 64 Bit?
Vielleicht wäre es nicht schlecht einen Blick auf den Code zu werfen um genaueres sagen zu können. ;)

cu
 
Ubuntu Version: 8.04.1
Kernel Version: Linux 2.6.24-22-generic (i686)
C-Library: GNU C Library 2.7 (stable)

Letztendlich wird beim Anklicken des Connect-Buttons folgende Methode (mit dev_id = 0 und der Bluetooth-Adresse des Geräts in str) ausgeführt:

Code:
void btcmd_connect(int dev_id, const char *str){

	bdaddr_t dst, src;
	int ctl, csk, isk, err;

	//Destination
	printf("%c", *str);
	str2ba(str, &dst);

	//Source
	if(dev_id<0){
		dev_id = hci_get_route(&dst);
		if(dev_id<0){
			printf("Device is not available");
		}
		hci_devba(dev_id, &src);
	}

	//Control Socket
	ctl = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HIDP);
	if(ctl<0){
		printf("Can't open HIDP controlsocket");
	}

	//Connect
	csk = l2cap_connect(&src, &dst, L2CAP_PSM_HIDP_CTRL);
	if(csk<0){
		//Cant create HIDP control channel
		printf("Cant create HIDP control channel");
		close(ctl);
	}

	isk = l2cap_connect(&src, &dst, L2CAP_PSM_HIDP_INTR);
	if(isk<0){
		//Cant create HIDP interrupt channel
		printf("Cant create HIDP interrupt channel");
		close(csk);
		close(ctl);
	}
}
 
Oben