New feature: search in a directory for devices configuration files.

This commit is contained in:
Romuald Conty 2012-12-02 18:49:51 +01:00
parent 84dc268781
commit 03e5611d14
10 changed files with 49 additions and 26 deletions

2
NEWS
View file

@ -11,6 +11,8 @@ Configuration:
- "device.name" and "device.connstring" to define a user device,
this is the recommended method if user have a not-easily detectable
device (ie. serial ones).
Its also possible to define devices using dedicated configuration files and
put them into device search directory (/etc/nfc/devices.d under GNU/Linux).
API Changes:

View file

@ -147,6 +147,7 @@ AC_CONFIG_FILES([
cmake/modules/Makefile
contrib/Makefile
contrib/devd/Makefile
contrib/libnfc/Makefile
contrib/linux/Makefile
contrib/udev/Makefile
contrib/win32/Makefile

View file

@ -1,5 +1,6 @@
SUBDIRS = \
devd \
libnfc \
linux \
udev \
win32

View file

@ -0,0 +1,4 @@
EXTRA_DIST = \
pn532_via_uart2usb.conf.sample \
arygon.conf.sample \
pn532_uart_on_rpi.conf.sample

View file

@ -0,0 +1,3 @@
## Typical configuration file for Arygon/IDentive device (with Arygon-MCU on board)
name = "IDentive"
connstring = arygon:/dev/ttyS0

View file

@ -0,0 +1,5 @@
## Typical configuration file for PN532 device on R-Pi connected using UART
## Note: to use UART port on R-Pi, you have to disable linux serial console:
## http://learn.adafruit.com/adafruit-nfc-rfid-on-raspberry-pi/freeing-uart-on-the-pi
name = "PN532 board"
connstring = pn532_uart:/dev/ttyAMA0

View file

@ -0,0 +1,3 @@
## Typical configuration file for PN532 board (ie. microbuilder.eu / Adafruit) device
name = "Adafruit PN532 board"
connstring = pn532_uart:/dev/ttyUSB0

View file

@ -1,10 +1,11 @@
# Allow device auto-detection (default: true)
# Note: if this auto-detection is disable, user have to set manually a device
# Note: if this auto-detection is disabled, user have to set manually a device
# configuration using file or environnement variable
#allow_autoscan = true
# Allow intrusive auto-detection (default: false)
# Warning: intrusive auto-detection can seriously disturb other devices
# This option is not recommended, user should prefers to add manually its device.
#allow_intrusive_autoscan = false
# Set log level (default: error)

View file

@ -119,36 +119,39 @@ conf_keyvalue_device(void *data, const char* key, const char* value)
conf_keyvalue_context(data, newkey, value);
}
void
conf_load(nfc_context *context)
static void
conf_devices_load(const char *dirname, nfc_context *context)
{
conf_parse_file(LIBNFC_CONFFILE, conf_keyvalue_context, context);
}
/*
int
main(int argc, char *argv[])
{
DIR *d = opendir(LIBNFC_DEVICECONFDIR);
DIR *d = opendir(dirname);
if (!d) {
perror ("opendir");
} else {
struct dirent* de;
while (de = readdir(d)) {
while ((de = readdir(d))) {
if (de->d_name[0]!='.') {
printf ("\t%s\n", de->d_name);
char filename[BUFSIZ] = LIBNFC_DEVICECONFDIR"/";
strcat (filename, de->d_name);
struct stat s;
if (stat(filename, &s) == -1) {
perror("stat");
continue;
}
if(S_ISREG(s.st_mode)) {
nfc_open_from_file (filename);
const size_t filename_len = strlen(de->d_name);
const size_t extension_len = strlen(".conf");
if ((filename_len > extension_len) && (strncmp(".conf", de->d_name + (filename_len-extension_len), extension_len) == 0)) {
char filename[BUFSIZ] = LIBNFC_DEVICECONFDIR"/";
strcat (filename, de->d_name);
struct stat s;
if (stat(filename, &s) == -1) {
perror("stat");
continue;
}
if(S_ISREG(s.st_mode)) {
conf_parse_file (filename, conf_keyvalue_device, context);
}
}
}
}
}
}
*/
void
conf_load(nfc_context *context)
{
conf_parse_file(LIBNFC_CONFFILE, conf_keyvalue_context, context);
conf_devices_load(LIBNFC_DEVICECONFDIR, context);
}

View file

@ -19,9 +19,9 @@
*/
/**
* @file nfc-device.c
* @brief Provide internal function to manipulate nfc_device type
*/
* @file nfc-device.c
* @brief Provide internal function to manipulate nfc_device type
*/
#include <stdlib.h>
#include <string.h>