Hace tiempo DeathMaster me comentテウ un problema para ejecutar BlueZScanner en Debian. Habテュa que cambiar la definiciテウn de la variable mac_code.
Hola Alberto.
He bajado y compilado tu programa bluezscanner desde tu blog, y tengo
problemas en su ejecuciテウn. Concretamente, una violaciテウn de segmento tras
obtener el primer resultado de la bテコsqueda.
En este caso, por ejemplo, hay tres dispositivos bluetooth que deberテュan
detectarse -y que con hcitool se detectan-, pero bluezscanner encuentra
sテウlo uno e imprime el error:
master@blingdenstone:~/bluezscanner$ ./bluezscanner
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 00:60:57:xx:xx:xx Nombre: ...2
Violaciテウn de segmento
master@blingdenstone:~/bluezscanner$ hcitool scan
Scanning ...
00:13:E0:xx:xx:xx ...1
00:60:57:xx:xx:xx ...2
00:02:EE:xx:xx:xx ...3
master@blingdenstone:~/bluezscanner$
Utilizo un sistema Debian SID GNU/Linux con los siguientes paquetes y
versiones relacionados con bluetooth instalados:
master@blingdenstone:~/bluezscanner$ dpkg -l | grep bluez
ii bluez-hcidump 1.32-1
Analyses Bluetooth HCI packets
ii bluez-passkey-gnome 0.5-2
Bluetooth passkey (PIN) agent for GNOME
ii bluez-utils 3.7-1
Bluetooth tools and daemons
master@blingdenstone:~/bluezscanner$ dpkg -l | grep bluetooth
ii bluetooth 3.7-1
Bluetooth stack utilities
ii kdebluetooth 0.99+1.0beta1-13 KDE
Bluetooth Framework
ii libbluetooth2 3.7-1
Library to use the BlueZ Linux Bluetooth sta
ii libbluetooth2-dev 3.7-1
Development files for using the BlueZ Linux
master@blingdenstone:~/bluezscanner$
ツソTienes alguna idea de cuテ。l puede ser el problema?
Muchas gracias por todo de antemano, y un saludo.
Hola de nuevo, Alberto.
Antes de nada, muchテュsimas gracias por contestarme, y por hacerlo tan rテ。pido.
En cuanto a la librerテュa, en Debian cambiaron el nombre de bluez-devel a
libbluetooth-dev (ahora libbluetooth2-dev por la versiテウn), pero se trata
de la misma librerテュa.
El fichero oui.h estテ。 en el directorio que contiene las fuentes de tu
programa y el ejecutable compilado, y parece estar completo:
master@blingdenstone:~/bluezscanner$ ll
total 680
- -rwxr-xr-x 1 master master 313220 2006-10-21 20:22 bluezscanner
- -rw-r--r-- 1 master master 20918 2006-04-17 00:40 bluezscanner.c
- -rw-r--r-- 1 master master 340272 2006-04-17 00:40 oui.h
- -rw-r--r-- 1 master master 1670 2006-04-17 00:41 parser.c
master@blingdenstone:~/bluezscanner$ tail -15 oui.h
{"08BBCC", "AK-NORD EDV VERTRIEBSGES. mbH"},
{"100000", "PRIVATE"},
{"10005A", "IBM CORPORATION"},
{"1000E8", "NATIONAL SEMICONDUCTOR"},
{"1100AA", "PRIVATE"},
{"800010", "ATT BELL LABORATORIES"},
{"A06A00", "Verilink Corporation"},
{"AA0000", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0001", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0002", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0003", "DIGITAL EQUIPMENT CORPORATION"},
{"AA0004", "DIGITAL EQUIPMENT CORPORATION"},
{"ACDE48", "PRIVATE"},
{"EOF", "Desconocido"}
};
master@blingdenstone:~/bluezscanner$
He comprobado asテュ mismo que mi dispositivo bluetooth USB estテゥ en dicha
lista de fabricantes:
master@blingdenstone:~/bluezscanner$ hcitool dev
Devices:
hci0 00:09:DD:xx:xx:xx
master@blingdenstone:~/bluezscanner$ cat oui.h | grep 0009DD
{"0009DD", "Mavin Technology Inc."},
master@blingdenstone:~/bluezscanner$
He probado, asテュ mismo, con otros dispositivos bluetooth para realizar el
escaneo, y en todos obtengo la citada violaciテウn de segmento, por lo que
descarto el problema de fabricante (de hecho, son telテゥfonos mテウviles de
fabricantes como Nokia, Sharp o Sony/Ericcson, por lo que serテュa raro):
master@blingdenstone:~/bluezscanner$ hcitool scan
Scanning ...
08:00:1F:xx:xx:xx DM
master@blingdenstone:~/bluezscanner$ ./bluezscanner
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Violaciテウn de segmento
master@blingdenstone:~/bluezscanner$
Respecto al cテウdigo... tienes toda la razテウn, pero me temo que mis
conocimientos de C no sean tan buenos como los tuyos, en otros lenguajes
me defiendo mejor.
Aテコn asテュ, he estado haciendo pruebas con lo que me has comentado y he
logrado acotar el error que produce la violaciテウn de segmento a la lテュnea
149, es decir テゥsta:
sprintf(mac_code, "%c%c%c%c%c%c",
MAC_dev[0],MAC_dev[1],MAC_dev[3],MAC_dev[4],MAC_dev[6],MAC_dev[7]);
Comentando dicha lテュnea, la salida del escaneo es:
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
テつキ Desconocido
Tipo de dispositivo:
テつキ Phone > Cellular
master@blingdenstone:~/bluezscanner$
Al menos finaliza, pero me llama la atenciテウn que me diga que el
fabricante es desconocido, cuando es un Sharp GX15 y los tres primeros
bytes se encuentran efectivamente en la lista de oui.h:
master@blingdenstone:~/bluezscanner$ cat oui.h | grep 08001F
{"08001F", "SHARP CORPORATION"},
master@blingdenstone:~/bluezscanner$
Sテュ ha mejorado en el sentido en que ahora no rompe la ejecuciテウn y
encuentra todos los dispositivos que hay:
master@blingdenstone:~/bluezscanner$ hcitool scan
Scanning ...
08:00:1F:xx:xx:xx 1
08:00:1F:xx:xx:xx 2
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 2
Fabricante del Chip Bluetooth:
テつキ Desconocido
Tipo de dispositivo:
テつキ Phone > Cellular
Dispositivo (2) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
テつキ Desconocido
Tipo de dispositivo:
テつキ Phone > Cellular
master@blingdenstone:~/bluezscanner$
En este caso se trata del mismo Sharp GX15 y un Sharp GX17 (ayer en las
pruebas, trabajテゥ con estos dos mテ。s un Nokia 7650, un Nokia nGage, y un
Nokia nGage QD... todos fabricantes en la lista).
He realizado una prueba, consistente en modificar la lテュnea 150 para, en
lugar de llamar a la funciテウn getFabricante, que imprima directamente el
contenido de mac_code, que segテコn tus comentarios estテ。 declarado para
contener los tres primeros bytes de la MAC.
La salida es la siguiente:
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
テつキ H
Tipo de dispositivo:
テつキ Phone > Cellular
master@blingdenstone:~/bluezscanner$
Por tanto, mac_code contiene la cadena H, y por eso no encuentra el
dispositivo en la lista mediante la funciテウn getFabricante. Deberテュa
contener, creo, 08001F, y no sテゥ de dテウnde sale la H.
*(Por si no se ha notado, estoy redactando esto sobre la marcha,
mientras realizo pruebas, asテュ que si hay incongruencias con lo de mテ。s
atrテ。s no es que estテゥ loco)*
Vale, ya lo pillo

La lテュnea que eliminテゥ es la que extrae mac_code y por eso da el fallo.
Falta saber porquテゥ sprintf da violaciテウn de segmento... he estado mirando
documentaciテウn sobre dicha funciテウn, y en teorテュa estテ。 todo correcto...
Mi C no da para mucho... ツソconoces alguna forma _distinta_ de realizar lo
mismo pero sin utilizar la funciテウn sprintf()?
- -- Un ratito despuテゥs... --
Vale, parece que despuテゥs de todo, mi C sテュ que da para mテ。s de lo que yo
creテュa...
En la lテュnea 73, he cambiado donde pone:
char *mac_code;
Por esto otro:
char mac_code[6];
Con lo cual, el programa parece funcionar, por fin, correctamente (he
aテアadido el 7650 a la fiesta):
master@blingdenstone:~/bluezscanner$ ./blues
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 00:02:EE:xx:xx:xx Nombre: 3
Fabricante del Chip Bluetooth:
テつキ Nokia Danmark A/S
Tipo de dispositivo:
テつキ Phone > Cellular
Dispositivo (2) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 2
Fabricante del Chip Bluetooth:
テつキ SHARP CORPORATION
Tipo de dispositivo:
テつキ Phone > Cellular
Dispositivo (3) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 1
Fabricante del Chip Bluetooth:
テつキ SHARP CORPORATION
Tipo de dispositivo:
テつキ Phone > Cellular
master@blingdenstone:~/bluezscanner$
Tambiテゥn con opciones:
master@blingdenstone:~/bluezscanner$ ./blues -c
+ BlueZScanner, por Gospel <gospel.endorasoft.es>
Detectando dispositivos ...
Dispositivo (1) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 2
Fabricante del Chip Bluetooth:
テつキ SHARP CORPORATION
Class: 0x500204 [010100000000001000000100]
- Servicios soportados (Service Classes):
テつキ Telephony (Cordless telephony, Modem, Headset
service, ...)
テつキ Object Transfer (v-Inbox, v-Folder, ...)
- Tipo de dispositivo (Device Class):
テつキ Phone > Cellular
Dispositivo (2) encontrado:
MAC: 00:02:EE:xx:xx:xx Nombre: 3
Fabricante del Chip Bluetooth:
テつキ Nokia Danmark A/S
Class: 0x502204 [010100000010001000000100]
- Servicios soportados (Service Classes):
テつキ Telephony (Cordless telephony, Modem, Headset
service, ...)
テつキ Object Transfer (v-Inbox, v-Folder, ...)
- Tipo de dispositivo (Device Class):
テつキ Phone > Cellular
Dispositivo (3) encontrado:
MAC: 08:00:1F:xx:xx:xx Nombre: 3
Fabricante del Chip Bluetooth:
テつキ SHARP CORPORATION
Class: 0x500204 [010100000000001000000100]
- Servicios soportados (Service Classes):
テつキ Telephony (Cordless telephony, Modem, Headset
service, ...)
テつキ Object Transfer (v-Inbox, v-Folder, ...)
- Tipo de dispositivo (Device Class):
テつキ Phone > Cellular
master@blingdenstone:~/bluezscanner$
Bueno, pues creo que eso soluciona el problema por fin

Aテコn asテュ, no voy a borrar el correo ya que estテ。 escrito, porque puede
haber algo que te interese.
Muchas gracias por la ayuda, por tu tiempo y por tu programa.
Un saludo.