FreeBSD και Bluetooth

Posted by superuser Sun, 23 Sep 2007 20:53:00 GMT

Επικοινωνία μεταξύ Bluetooth συσκευών και FreeBSD

Στις ακόλουθες παραγράφους περιγράφεται πως να ρυθμίσετε το FreeBSD σύστημα σας ώστε να επικοινωνεί με συσκευές που υποστηρίζουν το πρωτόκολλο επικοινωνίας Bluetooth

Το Bluetooth είναι μια ασύρματη τεχνολογία ραδιοσυχνοτήτων για την δημιουργία ατομικών δικτύων με εμβέλεια 1,10 ή 100 μέτρων που εκπέμπουν στην ελεύθερη ζώνη των 2,4GHz. Για να μπορεί να επιτευχθεί επικοινωνία κάθε συσκευή θα πρέπει να έχει μικροτσιπ πομποδέκτη που θα εκπέμπει και θα λαμβάνει ραδιοσυχνότητες. Κινητά τηλέφωνα, μερικοί φορητοί υπολογιστές και πολλές μικροσυσκευές έχουν ενσωματωμένο το τσιπ. Αν δεν υπάρχει το τσιπ, θα πρέπει να χρησιμοποιήσουμε usb αντάπτορα (Bluetooth USB dongle). Η εμβέλεια εξαρτάται από την κλάση του τσιπ. Κλάση1: 100μ., Κλαση 2:10μ. Κλάση3:1μ.

Κατ' αρχήν φορτώστε τους οδηγούς (drivers) στον πυρήνα (kernel).

#  kldload ng_ubt 

( ή προσθέστε την ακόλουθη γραμμή στο /boot/loader.conf
#  ng_ubt_load="YES"
και θα φορτωθούν κατά την εκκίνηση. )

Τοποθετήστε τον αντάπτορα bluetooth (usb-dongle) στον υπολογιστή σας και ελέξτε ότι αναγνωρίζεται ο αντάπτορας από το σύστημα:

# dmesg | grep ubt0 

Για την εκκίνηση της στοίβας Bluetooth (Bluetooth stack):

# cp /usr/share/examples/netgraph/bluetooth/rc.bluetooth  /etc/rc.bluetooth

και ξεκινήστε με:
# /etc/rc.bluetooth start ubt0

Αναζήτηση νέων συσκευών:

# hccontrol -n ubt0hci inquiry 
Inquiry result, num_responses=1 Inquiry result #0 BD_ADDR: 00:0e:6d:87:73:2a Page Scan Rep. Mode: 0x1 Page Scan Period Mode: 00 Page Scan Mode: 00 Class: 50:02:04 Clock offset: 0x5255 Inquiry complete. Status: No error [00]

Παρατηρήστε πως η διεύθυνση BD_ADDR είναι η διεύθυνση του απομακρυσμένου πομποδέκτη bluetooth. Είναι σαν την MAC διεύθυνση των καρτών δικτύου. Στην ουσία πρόκειται για ένα δίκτυο, αλλά η μόνη διαφορά έγκυται στο ότι το δίκτυο δημιουργείται στιγμιαία (AD HOC) από την παρουσία δύο ή περισσοτέρων συσκευών Bluetooth. Κάθε φορά που θα θέλουμε να αναφερθούμε από τον υπολογιστή μας στην συγκεκριμένη συσκευή θα χρησιμοποιούμε αυτήν την διεύθυνση (στην περίπτωση της δικής σας συσκευής, θα έχετε διαφορετικό BD_ADDR).

Όνομα συγκεκριμένης συσκευής Bluetooth: Στο κινητό σας τηλέφωνο , για παράδειγμα, θα πρέπει να έχετε θέσει κάποιο αναγνωριστικό όνομα για την επικοινωνία Bluetooth. Αυτό μπορούμε να το βρούμε με:

# hccontrol -n ubt0hci remote_name_request 00:0e:6d:87:73:2a 
BD_ADDR: 00:0e:6d:87:73:2a Name: Nokia6600

Επειδή θα πρέπει να αναφερόμαστε συχνά στη συσκευή Bluetooth για να μην αναφέρουμε συνέχεια την BD_ADDR καλό είναι να απομνημνεύσουμε το συμβατικό όνομα με αυτήν την διεύθυνση. Πηγαίνουμε στο /etc/bluetooth/hosts και προσθέτουμε την αντιστοιχία της BD_ADDR με το όνομα που επιθυμούμε.

# $Id: hosts,v 1.1 2003/05/21 17:48:40 max Exp $
# $FreeBSD: src/etc/bluetooth/hosts,v 1.1.10.1 2005/11/23 18:03:32 emax Exp $
#
# Bluetooth Host Database
#
# This file should contain the Bluetooth addresses and aliases for hosts.
#
# BD_ADDR               Name [ alias0 alias1 ... ]

# 00:11:22:33:44:55     phone
00:0e:6d:87:73:2a  Nokia6600 

Έπειτα θα πρέπει να θέσουμε τον κωδικό αναγνώρισης (pair) μεταξύ των δύο συσκευών. Προσθέτουμε στο /etc/bluetooth/hcsecd.conf τη συσκευή μας. Το pin είναι της επιλογής σας.

device {
        bdaddr  00:0e:6d:87:73:2a;
        name    "Nokia6600";
        key     nokey;
        pin     "1234";
}

Μπορεί να επιτευχθεί σύνδεση σε επίπεδο πρωτοκόλλου μεταξύ του υπολογιστή και της απομακρυσμένης συσκευής bluetooth:

# hccontrol -n ubt0hci create_connection  00:0e:6d:87:73:2a

όπως επίσης να κάνετε PING στην απομακρυσμένη συσκευή:
# l2ping -a 00:0e:6d:87:73:2a
0 bytes from 00:0e:6d:87:73:2a seq_no=0 time=48.633 ms result=0 0 bytes from 00:0e:6d:87:73:2a seq_no=1 time=37.551 ms result=0 0 bytes from 00:0e:6d:87:73:2a seq_no=2 time=28.324 ms result=0 0 bytes from 00:0e:6d:87:73:2a seq_no=3 time=46.150 ms result=0
Όλα πλέον αρχίζουν να μοιάζουν με το κλασσικό ενσύρματο δίκτυο.

Ξεκινάμε τον δαίμονα Service Discovery Protocol (SDP). Στην ουσία ανιχνεύουμε τις υπηρεσίες που προσφέρει η απομακρυσμενη συσκευή Bluetooth:

# sdpd

Οι προσφερόμενες υπηρεσίες είναι:
# sdpcontrol -a 00:0e:6d:87:73:2a browse

Όταν απλά θέλουμε να μεταφέρουμε αρχεία, φωτογραφίες, μουσική, βίντεο ή επαφές, τότε χρειάζεται από τα παραπάνω να έχουμε απλά ξεκινήσει την στοίβα bluetooth και το sdpd. Για την μεταφορά των δεδομένων θα πρέπει να χρησιμοποιήσουμε την εφαρμογή obexapp (από τις πόρτες /usr/ports/comms/obexapp).
Για να ανεβάσουμε αρχεία στην απομακρυσμένη συσκευή Bluetooth δίνουμε:

# obexapp -a 6600 -C OPUSH
obex>
Για να ανεβάσουμε το αρχείο /home/user/test δίνουμε:
obex> put /home/user/test

Για να κατεβάσουμε ένα αρχείο από την απομακρυσμένη συσκευή στον υπολογιστή μας, φτιάχνουμε κατ'αρχήν έναν φάκελο bluetooth στον /home/user κατάλογο μας. Π.χ. φτιάχνω τον φάκελο /home/user/bluetooth και δίνω την εντολή:

#obexapp -s -S -C 10 -u user -r /home/user/bluetooth

Στην θέση του user πρέπει να βάλετε το username σας. Τώρα μπορείτε να μεταφέρετε τα αρχεία από το κινητό σαε επιλέγοντας ως προορισμό τον υπολογιστή σας (στην περίπτωση μου το κινητό Nokia 6660 βρίσκει τον υπολογιστή σαν localhost(ubt0).

Το κεφάλαιο Bluetooth είναι μια πολύ έξυπνη και νέα τεχνολογία που έχει ακόμη πολλές δυνατότητες. Νομίζω πως το Unix προσφέρει πολλούς τρόπους εξερεύνησης και πειραματισμών με την εν λόγω τεχνολογία.

Posted in  | Tags , , , , , , ,  | no comments