Erkennung der PCMCIA-Reader mit HAL

View: New views
1 Messages — Rating Filter:   Alert me  

Erkennung der PCMCIA-Reader mit HAL

by Micha Lenk :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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

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 */

------------------------------------------------------------------------------
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
Libchipcard-devel@...
https://lists.sourceforge.net/lists/listinfo/libchipcard-devel