# Informações para Programadores

## KBluetoothD

Esta secção descreve como utilizar o kbluetoothd da sua própria aplicação ou como o aceder através de 'scripts' para obter nomes de dispositivos ou outras informações.

### A 'cache' de nomes

A 'cache' de nomes regista todos os pedidos de nomes e grava os resultados. Com ela, as outras aplicações e o próprio 'kbluetoothd' podem obter o nomes de outro dispositivo Bluetooth a partir do seu endereço de dispositivo único do 'bluetoothd', mesmo que este não esteja ao alcance de momento. Isto é usado em grande parte para tornar a interface para o utilizador mais agradável, dado que endereços de Bluetooth do tipo 00:60:AB:13:83:3D são um pouco complicados de recordar.

É possível que seja tornado obsoleto assim que o BlueZ venha com a sua própria 'cache' persistente de nomes.

Você poderá aceder à 'cache' de nomes através de DCOP. Para procurar um nome na 'cache' de nomes a partir da linha de comandos, escreva `dcop kbluetoothd DeviceNameCache getCachedDeviceName <endereço>`. Para descobrir qual o dispositivo que estava a usar um nome pela última vez, você poderá executar `dcop kbluetoothd DeviceNameCache resolveCachedDeviceName <nome>`. Este comando não distingue maiúsculas de minúsculas. Também é preciso ter cuidado, porque vários dispositivos poderão estar configurados para usar o mesmo nome.

### O meta-servidor

Se desejar implementar uma aplicação servidor para um novo protocolo bluetooth pode integrá-la facilmente com o kbluetoothd, de modo a que o seu servidor seja iniciado automaticamente.

Você terá de fornecer um ficheiro XML que descreva o registo do SDP e um ficheiro 'desktop' correspondente. O 'kbluetoothd' irá então configurar automaticamente um registo de SDP, atribuir um canal de RFCOMM e começar a atender pedidos no canal seleccionado. Quando alguém se ligar ao seu serviço, o 'kbluetoothd' irá iniciá-lo e passar um 'socket' para a ligação já aceite para ele. O número da referência é passado como um argumento da linha de comandos.

O pacote 'kdebluetooth' contém o `kbtserialchat`, que pretende ser (para além de se usado para depuração e até mesmo algumas conversas), um programa de exemplo simples para ensinar como integrar uma aplicação na plataforma do 'kdebluetooth'. Dado que o 'kbtserialchat' é um cliente e um servidor ao mesmo tempo, não precisa de ter em consideração todos os argumentos da linha de comandos como o 'kbtserialchat' faz, especialmente os URLs de SDP.

O formato dos ficheiros XML do SDP deverão ser auto-explicativos, se souber como os registos de SDP são estruturados. Um ponto importante é como o parâmetro para os canais RFCOMM seleccionados descobre o caminho para o registo de SDP no servidor. Dado que o canal é seleccionado pelo 'kbluetoothd' automaticamente, você não o poderá colocar forçadamente no ficheiro de registo do SDP. Em vez disso, você usa o <uint valref='rfcommchannel' size='8'/> como substituto. Os canais de RFCOMM que serão experimentados estão definidos no ficheiro 'desktop' correspondente. O `X-KDE-KBLUETOOTHD-port` é o primeiro canal, seguido do `X-KDE-KBLUETOOTHD-autoPortRange` dá o número dos canais seguintes que serão experimentados por ordem ascendente, se um canal já estiver em uso por outro serviço.

O kbluetoothd apenas suporta de momento o rfcomm, mas quando for necessário também suportará l2cap ou semelhante.

### O Serviço de Descoberta de Dispositivos

O kbluetoothd pode procurar activamente por outros dispositivos e executar comandos assim que um dispositivo for detectado ou desapareça. Pode configurar este serviço no módulo de centro de controlo do kbluetoothd na página "Descoberta de Dispositivos".

A lista de trabalhos de descoberta activos tal como mostrada no módulo do centro de controlo é apenas a lista de executáveis encontrada na pasta `$HOME/.kde/share/apps/kbluetoothd/discovery_jobs/`. Também pode adicionar novos 'scripts' para a pasta global de modelos em `$PREFIX/share/apps/kdebluetooth/job-templates/`. Os 'scripts' nesta pasta que terminam em ".template" serão mostrados quando o utilizador carrega em "Adicionar novo trabalho..." e serão compilados para a pasta de trabalhos activos na pasta pessoal do utilizador.

Os programas incluídos estão divididos em dois para ser mais fácil actualizá-los sem ter de reinstalar tudo. A parte ".template" contém apenas as configurações que podem ser alteradas pelo utilizador e que são copiadas para a pasta pessoal dele. Este programa chama então a parte ".real" que fica na directoria de modelos.

Para começar a escrever o seu próprio trabalho de descoberta, carregue em "Adicionar novo trabalho..." e seleccione Trabalho_Personalizado. Isto copia o `Trabalho_Personalizado.template` para a sua pasta de trabalhos. Agora carregue em "Configurar..." para mudar o 'script'. Este 'script' lista toda as opções possíveis de linha de comando e variáveis de ambiente a que você tem acesso.

Atenção: quando você edita este 'script' personalizado todas as alterações são perdidas se o remover da lista de trabalhos activo. Se o deseja distribuir, é recomendado que o separe numa parte modelo para as configurações e uma parte que faz o verdadeiro trabalho.

Para transferir ou apagar ficheiros destes trabalhos de descoberta pode utilizar o kioclient.

Se escreveu algum 'script' porreiro para o serviço de descoberta de dispositivo que poderá ser útil a outras pessoas, ficaremos satisfeitos em o incluir na distribuição :)=