Hi Thomas,
Am Mittwoch, den 10.05.2006, 07:46 +0200 schrieb Thomas Viehmann:
Joachim Breitner wrote:
You are probably right. What is upstreams' position on that? Maybe they
can implement that in the near future.
Well, last time something like this came up (with ttyusb detection), it
was patches accepted, which is why I tagged this bug accordingly.
I have hacked something up, based on your ttyusb code, and it seems to
work here. I have attached the pcmciascanner* files I created. I hope
you can use them and maybe forward them upstream.
Greetings,
Joachim
--
Joachim nomeata Breitner
Debian Developer
[EMAIL PROTECTED] | ICQ# 74513189 | GPG-Keyid: 4743206C
JID: [EMAIL PROTECTED] | http://people.debian.org/~nomeata
/***
$RCSfile$
---
cvs : $Id: usbttyscanner.c 178 2006-04-28 22:22:36Z martin $
begin : Mon Mar 01 2004
copyright : (C) 2004 by Martin Preuss
email : [EMAIL PROTECTED]
***
* Please see toplevel file COPYING for license details *
***/
#ifdef HAVE_CONFIG_H
# include config.h
#endif
#include pcmciascanner_p.h
#include gwenhywfar/debug.h
#include gwenhywfar/misc.h
#include gwenhywfar/directory.h
#include gwenhywfar/buffer.h
#include gwenhywfar/stringlist.h
#include stdlib.h
#include assert.h
#include string.h
#include errno.h
#ifdef USE_LIBSYSFS
# include sysfs/libsysfs.h
#endif
LC_DEVSCANNER *LC_PcmciaScanner_new() {
LC_DEVSCANNER *sc;
#ifdef USE_LIBSYSFS
char sysfspath[256];
#endif
sc=LC_DevScanner_new();
LC_DevScanner_SetReadDevsFn(sc, LC_PcmciaScanner_ReadDevs);
#ifdef USE_LIBSYSFS
if (! sysfs_get_mnt_path(sysfspath, sizeof(sysfspath))) {
DBG_NOTICE(0, Will use sysfs to scan for ttyUSB devices)
}
#endif
return sc;
}
/* this function has been submitted by Thomas Viehmann. Thanks ;-) */
int LC_PcmciaScanner_ScanSysFS_Pcmcia(LC_DEVICE_LIST *dl) {
#ifndef USE_LIBSYSFS
DBG_INFO(0, LibSysFS not supsknumed);
return -1;
#else
struct sysfs_bus *bus = NULL;
struct sysfs_device *curdev = NULL;
#ifndef HAVE_SYSFS2
struct sysfs_device *temp_device = NULL;
#endif
struct sysfs_attribute *cur = NULL;
struct dlist *devlist = NULL;
struct dlist *attributes = NULL;
int sknum=0, vendorId=0, productId=0;
LC_DEVICE *currentDevice;
bus = sysfs_open_bus(pcmcia);
if (bus == NULL) {
DBG_ERROR(0,Error accessing sysfs);
return -1;
}
devlist = sysfs_get_bus_devices(bus);
if (devlist != NULL) {
dlist_for_each_data(devlist, curdev,
struct sysfs_device) {
sknum = strtol(curdev-bus_id, NULL, 16);
attributes = sysfs_get_device_attributes(curdev);
dlist_for_each_data(attributes, cur,
struct sysfs_attribute) {
if (strcmp(cur-name,manf_id)==0) {
if (cur-value != NULL) {
vendorId = strtol(cur-value, NULL, 16);
}
else {
DBG_ERROR(0,manf_id empty);
}
}
if (strcmp(cur-name,card_id)==0) {
if (cur-value != NULL) {
productId = strtol(cur-value, NULL, 16);
}
else {
DBG_ERROR(0, card_id empty);
}
}
}
currentDevice=LC_Device_new(LC_Device_BusType_Pcmcia,
0,
sknum,
vendorId, productId);
DBG_DEBUG(0, Adding device %d (%04x/%04x),
sknum,
vendorId,
productId);
LC_Device_SetDevicePos(currentDevice, sknum);
LC_Device_List_Add(currentDevice, dl);
}
}
sysfs_close_bus(bus);
return 0;
#endif
}
int LC_PcmciaScanner_ReadDevs(LC_DEVSCANNER *sc, LC_DEVICE_LIST *dl) {
if ( LC_PcmciaScanner_ScanSysFS_Pcmcia(dl) ) {
DBG_DEBUG(0, here);
return -1;
}
return 0;
}
/***
$RCSfile$
---
cvs : $Id: pcmciascanner_l.h 123 2005-10-22 00:45:35Z aquamaniac $
begin : Mon Mar 01 2004
copyright : (C) 2004 by Martin Preuss
email : [EMAIL PROTECTED]
***
* Please see toplevel file COPYING for license details *
***/
#ifndef CHIPCARD_SERVER_PCMCIASCANNER_L_H
#define CHIPCARD_SERVER_PCMCIASCANNER_L_H
#include devmonitor.h
LC_DEVSCANNER *LC_PcmciaScanner();
#endif /* CHIPCARD_SERVER_PCMCIASCANNER_L_H */