Cosmote Internet On The Go
George Notaras
gnot at g-loaded.eu
Tue May 5 17:30:47 EEST 2009
anastasis wrote:
> Γεια σας,
> θα ήθελα να μου γράψει κάποιος έναν αναλυτικό οδηγό για το πως θα
> συνδεθώ με την παραπάνω συσκευή cosmote.
> Δεν θα βγάλω άκρη ποτέ.
> Ευχαριστώ προκαταβολικά!
Τα παρακάτω δεν είναι αναλυτικός οδηγός, αλλά κάτι που θα μπορούσες να
δοκιμάσεις εσύ ή κάποιος άλλος με τέτοια συσκευή. Έχω μία υποψία ότι
ίσως δουλέψει.
Έχω μια web camera/digital camera combo. Μόλις την συνδέσω στο USB, αντί
να λειτουργήσει ως web camera, γίνεται mount το εσωτερικό flash memory
μέσω κάποιου 'gphoto' πρωτοκόλλου ή κάτι τέτοιο. Αυτό που θα ήθελα είναι
να λειτουργεί άμεσα ώς webcam και να δημιουργούνται τα κατάλληλα device
nodes στο /dev.
Μέχρι και πριν από λίγες βδομάδες αυτό το έκανα με κάποια scripts, τα
οποία έκαναν unmount το internal flash memory, 'ξεφόρτωναν' και
'ξαναφόρτωναν' κάποια kernel modules και ως δια μαγείας η συσκευή
λειτουργούσε ως webcam.
Πριν από λίγο καιρό, σκεπτόμενος ότι όλα τα block devices τα κάνει
κουμάντο το hal (και επειδή είχα ξοδέψει το χρόνο μου παλιότερα και είχα
μια ιδέα) αποφάσισα να το ψάξω.
Κάνοντας ένα:
hal-device > zzz.log
πριν και κατόπιν της σύνδεσης της συσκευής στο USB, διαπίστωσα ψάχνοντας
το xxx.log, ότι δημιουργούνται 5 νέα devices σχετικά με τη συγκεκριμένη
συσκευή.
Μην μπορώντας να καταλάβω ποιο property θα έπρεπε να τροποποιήσω, να
προσθέσω ή να αφαιρέσω για να λειτουργεί από την αρχή μόνο ως webcam και
όχι ως block device, άρχισα να ψάχνω στο HAL specification:
http://people.freedesktop.org/~david/hal-spec/hal-spec.html
Εκεί λέει:
===
When a device is discovered, the preprobe device information files (e.g.
all files from /usr/share/hal/fdi/preprobe and /etc/hal/fdi/preprobe)
are processed.
Typically, this class of device information files is used to tell HAL to
leave the device alone by setting the bool property info.ignore to TRUE.
It can also be used to run programs, preprobe callouts, prior to normal
device investigation.
===
Μελετώντας με προσοχή τα properties των devices στο zzz.log και
ταυτόχρονα δοκιμάζοντας (trial&error) να φτιάξω κάποια custom policies,
πρόσεξα τα παρακάτω:
0:
info.product = 'USB Raw Device Access' (string)
info.category = 'usbraw' (string)
1:
info.product = 'Video Device' (string)
info.category = 'video4linux' (string)
2:
info.product = 'USB Vendor Specific Interface' (string)
info.category = 'camera' (string)
[...]
usb_device.product_id = 16403 (0x4013) (int)
usb_device.vendor_id = 1054 (0x41e) (int)
3:
info.product = 'USB Vendor Specific Interface' (string)
info.category = 'camera' (string)
[...]
usb_device.product_id = 16403 (0x4013) (int)
usb_device.vendor_id = 1054 (0x41e) (int)
4:
info.product = 'PC-Cam 750' (string)
[...]
usb_device.product_id = 16403 (0x4013) (int)
usb_device.vendor_id = 1054 (0x41e) (int)
Με βαση τη λογική θα έπρεπε να παραμείνουν ενεργά ta 'usbraw' και
'video4linux' ή μόνο το 'video4linux' για να λειτουργεί η συσκευή ως webcam.
Επίσης παρατήρησα (και γι αυτό εσκεμμένα φαίνονται παραπάνω) ότι στα
devices 2,3,4 υπήρχαν τα properties:
usb_device.product_id
usb_device.vendor_id
τα οποία έλειπαν από τα devices 0 και 1.
Έτσι με το παρακάτω απλό (λέω απλό γιατί είχα ξαναξοδέψει τον χρόνο μου
στο παρελθόν με το hal) απενεργοποίησα, όπως περιγραφόταν στο hal spec
με το info.ignore, με τη μία τα devices 2,3,4:
=======
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="usb.vendor_id" int="1054">
<match key="usb.product_id" int="16403">
<merge key="info.ignore" type="bool">true</merge>
</match>
</match>
</device>
</deviceinfo>
=======
Το παραπάνω αποθηκεύτηκε σε ένα αρχείο με όνομα 99-creative-pccam750.fdi
στο /etc/hal/fdi/preprobe/
Με το που ξανασυνδέθηκε η webcam στο usb, δεν εμφανίστηκε εκείνο το
dialog που με ρωτούσε αν θέλω να κάνω import τα photos!
Επίσης, κάνοντας ένα:
# ls -l /dev/video*
lrwxrwxrwx 1 root root 6 May 5 17:19 /dev/video -> video0
crw------- 1 gnot root 81, 0 May 5 17:19 /dev/video0
είδα ότι υπήρχε to v4l device!
Από τότε (μερικές εβδομάδες πριν) η συσκευή δουλεύει άμεσα ως webcam
όταν συνδέεται στο USB port.
Με βάση τα παραπάνω ίσως να μπορούσες να το ψάξεις λίγο μέσω του HAL και
να απενεργοποιήσεις κάποια devices/interfaces της συσκευής, ώστε μόλις
συνδέεται στο USB port να λειτουργεί ως μοντεμ και όχι ως block device.
Φυσικά τα vendor_id και product_id θα είναι διαφορετικά για κάθε συσκευή
και ίσως να χρειαστεί κάποιο διαφορετικό policy για να απομονώσεις τις
συσκευές/interfaces που σε ενδιαφέρουν.
Αν η παραπάνω λύση είναι ανορθόδοξη, please δώστε τα φώτα σας. Με
ενδιαφέρει αρκετά.
More information about the Linux-greek-users
mailing list