Erkennung der PCMCIA-Reader mit HAL
Micha Lenk <[email protected]> Sat, 14 Mar 2009 16:08:26 +0100
| Newsgroups | gmane.comp.lib.libchipcard.devel |
|---|---|
| Message-ID | <[email protected]> |
Hallo Martin,
anbei ein Patch, der dafÃŒr sorgt, dass die PCMCIA-Reader auch mit HAL
wieder funktionieren. Hier eine kurze ErklÀrung, wozu die Ãnderungen
nötig sind (Zeilennummern beziehen sich auf den Code ohne Patch):
1. Ãnderung: src/lib/server/common/halscanner.c, Zeilen 101ff
Diese Ãnderung ist nötig, weil das UDI-Attribut info.subsystem beim
PCMCIA-Reader auf "pcmcia" gesetzt ist. Der Code geht also davon aus,
dass ein busType gefunden wurde und verzweigt in Zeile 103 in den
IF-Teil. Der ELSE-Teil wird ÃŒbersprungen, d.h. insbesondere der Code von
Zeile 180 bis 299 wird fÃŒr meinen Reader gar nicht durchlaufen, obwohl
genau hier die PCMCIA-Reader erkannt werden sollen.
2. Ãnderung: src/lib/server/common/halscanner.c, Zeilen 274ff
Variablendeklaration, muss nicht erklÀrt werden, oder?
3. Ãnderung: src/lib/server/common/halscanner.c, Zeilen 287ff
Der Sysfs-Pfad des PCMCIA-Readers ist (bei mir) im UDI-Attribut
linux.sysfs_path untergebracht. Davon der Teil hinter dem letzten '/'
entspricht dem Devicename, wie er zum Beispiel auch bei den USB-GerÀten
ermittelt wird (vgl. z.B. halscanner.c Zeilen 160ff).
4. Ãnderung: src/lib/server/common/halscanner.c, Zeilen 294ff
Hier werden der neu ermittelte Sysfs-Pfad und Devicename im neuen
LC_DEVICE gesetzt. AnschlieÃend noch eine nette Debug-Ausgabe, was fÃŒr
ein Leser von HAL gefunden wurde.
Ich habe den Patch bei mir getestet, und seit dem funktioniert bei mir
wieder mein Kartenleser. Es wÀre schön, wenn der Patch seinen Weg ins
SVN findet.
Schöne GrÃŒÃe
Micha
P.S.: Den Patch hab ich auch an Ticket #11 im Tracker angehÀngt.
https://devel.aqbanking.de/trac/libchipcard/ticket/11
------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Libchipcard-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libchipcard-devel
halscanner-bugfix.patch
(text/x-patch, 1.6 KB)
Index: src/lib/server/common/halscanner.c
===================================================================
--- src/lib/server/common/halscanner.c (Revision 510)
+++ src/lib/server/common/halscanner.c (Arbeitskopie)
@@ -98,6 +98,9 @@
const char *busType;
busType=libhal_device_get_property_string(ctx, udi, "info.subsystem", NULL);
+ if (busType && (strcasecmp(busType, "usb")!=0))
+ busType=NULL; /* non-USB devices are handled below */
+
if (busType==NULL)
busType=libhal_device_get_property_string(ctx, udi, "info.bus", NULL);
if (busType) {
@@ -271,6 +274,8 @@
int busPos;
int vendorId;
int productId;
+ char *path;
+ char *name = NULL;
busPos=libhal_device_get_property_int(ctx,
udi,
@@ -284,6 +289,15 @@
udi,
"pcmcia.card_id",
NULL);
+ path=libhal_device_get_property_string(ctx,
+ udi,
+ "linux.sysfs_path",
+ NULL);
+ if (path) {
+ name=strrchr(path, '/');
+ if (name)
+ name++;
+ }
d=LC_Device_new(LC_Device_BusType_Pcmcia,
0, busPos,
@@ -291,8 +305,14 @@
LC_Device_SetDevicePos(d, count++);
LC_Device_SetHalPath(d, udi);
+ if (path)
+ LC_Device_SetPath(d, path);
+ if (name)
+ LC_Device_SetDeviceName(d, name);
/* all set, add device */
+ DBG_DEBUG(0, "Adding device %d (%04x/%04x) with path '%s' and name '%s' (UDI: '%s')",
+ busPos, vendorId, productId, path, name, udi);
LC_Device_List_Add(d, dl);
} /* if PCMCIA */
} /* if subsys */