Acessar o Celular Android via Bluetooth no FreeBSD
Posted by Otacílio | Posted in Dicas, FreeBSD | Posted on 30-09-2012
Tags:Android, Bluetooth, FreeBSD
4
Este pequeno roteiro eu realizei utilizando o adaptador Bluetooth bem Xing-Ling da imagem abaixo.
O primeiro passo é verificar se os drivers necessários estão presentes no kernel. O meu sistema é este aqui:
FreeBSD squitch 8.3-RELEASE-p4 FreeBSD 8.3-RELEASE-p4 #22: Mon Sep 24 17:16:29 BRT 2012 ota@squitch:/usr/obj/usr/src/sys/SQUITCH i386
Nele, apenas ao plugar o adaptador na entrada USB os seguintes drivers são carregados automaticamente:
ng_ubt.ko
ng_hci.ko
ng_bluetooth.ko
ng_l2cap.ko
ng_btsocket.ko
ng_socket.ko
Verifique no seu sistema se os drivers aparecem ao plugar o adaptador USB. Você pode fazer isso utilizando o comando kldstat
. Ex:
[ota@squitch ota]$ kldstat
Se não for o caso do seu sistema, você pode carregar os módulos utilizando o comando kldload <nome do módulo>
. Por exemplo:
squitch# kldload ng_ubt
Caso deseje você pode também adicionar a seguinte linha
ng_ubt_load="YES"
no arquivo
/boot/loader.conf
e os seguintes drivers serão carregados no momento do boot:
ng_ubt.ko
ng_hci.ko
ng_bluetooth.ko
e os seguintes (na minha máquina) quando plugo o adaptador bluetooth:
ng_l2cap.ko
ng_btsocket.ko
ng_socket.ko
Verifique na sua máquina se os drivers estão sendo carregados. Você obviamente pode fazer uma comparação com os drivers que listei aqui. Caso esteja tendo problemas você pode dar uma olhada no handbook sobre o assunto. Note também que outros dispositivos necessitam de outros drivers como, por exemplo, os que usam o chip Broadcom BCM2033. Neste caso o handbook cobre com mais detalhes.
Após checar os drivers, ao plugar o seu dispositivo você deve ver no terminal do sistema (ou em algum terminal gráfico se digitar dmesg
) algo semelhante a isso:
ugen1.2: <vendor 0x0a12> at usbus1
ubt0: <vendor 0x0a12 product 0x0001, class 224/1, rev 2.00/19.15, addr 2> on usbus1
WARNING: attempt to domain_add(bluetooth) after domainfinalize()
WARNING: attempt to domain_add(netgraph) after domainfinalize()
A mensagem contendo ubt0 é especialmente animadora, pois indica que o driver bluetooth reconheceu o seu dispositivo.
Descubra então os dispositivos bluetooth nas proximidades com o comando hccontrol
:
[ota@squitch ota]$ hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 94:51:03:ed:dd:f6
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 0x2
Page Scan Mode: 00
Class: 5a:02:0c
Clock offset: 0x67ec
Inquiry complete. Status: No error [00]
Note que alguns dispositivos podem estar configurados para não aparecer quando uma busca é feita. Então, verifique se o seu Android está com a configuração “Detectável” habilitada.
O meu sistema responde com a seguinte para o meu celular:
[ota@squitch ota]$ hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: 94:51:03:ed:dd:f6
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 0x2
Page Scan Mode: 00
Class: 5a:02:0c
Clock offset: 0x4106
Inquiry complete. Status: No error [00]
De posse do BD_ADDR você deve criar uma entrada no arquivo /etc/bluetooth/hcsecd.conf
para que o dispositivo Android consiga parear com o computador. A entrada no meu caso tem:
device {
bdaddr 94:51:03:ed:dd:f6;
name "GT-S5300B";
pin "3295";
}
Onde bdaddr
foi obtido na busca de dispositivos, name
é um nome dado por você, e pin
é o pin que você deverá digitar no Android no momento do pareamento.
Agora como root rode os daemons que vão responder a comunicação bluetooth:
squitch# /etc/rc.d/hcsecd onestart ubt0
Starting hcsecd.
squitch# /etc/rc.d/sdpd onestart
Starting sdpd.
squitch#
Vamos então acessar o servidor de arquivos do dispositivo Android. Instale o port comms/obexapp e então execute (modificando o endereço para o seu caso, óbvio):
[ota@squitch ota]$ obexapp -a 94:51:03:ed:dd:f6 -C FTRN
Uma tela solicitando o pin deve ter sido aberta no dispositivo Android. Digite o pin do campo pin da entrada device do arquivo /etc/bluetooth/hcsecd.conf
correspondente ao seu dispositivo.
Pronto, agora é só aceitar o pedido para transferência de arquivos do computador e um terminal será aberto. Você pode digitar help
para abrir a ajuda dos comandos. Por exemplo:
obex> help
CApability, CD, DElete, DIsconnect, Empty, GET, GETDefault, Ls, Mkdir, Put?
obex> Ls
Access Owner Group Size Modified Name
n/a n/a n/a n/a LOST.DIR/
n/a n/a n/a n/a external_sd/
n/a n/a n/a n/a DCIM/
n/a n/a n/a n/a Android/
n/a n/a n/a n/a Notifications/
n/a n/a n/a n/a samsungapps/
n/a n/a n/a n/a Mercury/
n/a n/a n/a n/a media/
n/a n/a n/a n/a bluetooth/
n/a n/a n/a n/a .polarisViewer/
n/a n/a n/a n/a Sounds/
n/a n/a n/a n/a burstlyImageCache/
n/a n/a n/a n/a Ringtones/
n/a n/a n/a n/a social_cache/
n/a n/a n/a n/a Pictures/
n/a n/a n/a n/a WhatsApp/
n/a n/a n/a n/a .temp/
Success, response: OK, Success (0x20)
obex>
Lista os arquivos e diretórios do aparelho. Sendo que existe um porém. Por default os arquivos não aparecem na listagem. Por exemplo:
obex> cd DCIM
Success, response: OK, Success (0x20)
obex> ls
Access Owner Group Size Modified Name
..
n/a n/a n/a n/a Camera/
n/a n/a n/a n/a .thumbnails/
Success, response: OK, Success (0x20)
obex> cd Camera
Success, response: OK, Success (0x20)
obex> ls
Access Owner Group Size Modified Name
..
Success, response: OK, Success (0x20)
obex>
Não mostra nenhum arquivo embora eles estejam lá. Para que você possa visualizá-los você deve ir no aplicativo do Android “Meus arquivos“, ir até a pasta, tocar no botão à esquerda do botão central do celular, clicar na combo “Mais” e escolher “Visibilidade do Bluetooth“. Então é só marcar os arquivos que você quer que apareçam na listagem e depois em “Conc.“. A listagem agora exibe:
obex> ls
Access Owner Group Size Modified Name
..
R n/a n/a 238658 n/a 2012-09-27 22.55.16.jpg
Success, response: OK, Success (0x20)
obex>
Para baixar o arquivo é só rodar (para o arquivo do exemplo):
obex> GET 2012-09-27\ 22.55.16.jpg
238658 bytes streamed in 3 seconds (79552 bytes/sec)
Success, response: OK, Success (0x20)
obex>
Caso deseje ter um terminal no dispositivo Android execute o comando (novamente substituído o endereço, óbvio):
squitch# rfcomm_sppd -a 94:51:03:ed:dd:f6 -c 1 -t /dev/ttyp1
Aceite o pedido de conexão no Android. Abra um outro terminal e execute
squitch# chgrp users /dev/ttyp1
Em seguida (como usuário comum mesmo) execute um terminal no dispositivo criado:
[ota@squitch ota]$ cu -l ttyp1
Pronto, você pode agora digitar comandos AT. Se tiver a lista de comandos AT que o Galaxy suporta por favor me envie para eu disponibilizar aqui.
Para enviar arquivos do Android para o FreeBSD diretamente pelos comandos Bluetooth do Android sem precisar conectar via terminal você deve rodar um servidor no FreeBSD na pasta que você quer que receba os arquivos. Ex:
[ota@squitch ota]$ cd Downloads/
[ota@squitch Downloads]$ obexapp -s
[ota@squitch Downloads]$
E enviar os arquivos pelo Bluetooth do Android. Os arquivos deverão aparecer na pasta onde você rodou o servidor.
Muito mais detalhes você pode encontrar em: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-bluetooth.html.
Se esta página foi útil para você, por favor, deixe um comentário.