Ignore:
Timestamp:
09/24/10 14:12:04 (10 years ago)
Author:
dingo35
Message:

ifd_phoenix.c threadsafe except for multiple GPIO devices

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/csctapi/ifd_phoenix.c

    r3181 r3217  
    1 //FIXME Not checked on threadsafety yet; after checking please remove this line
     1//FIXME Not threadsafe when using multiple GPIO devices
    22/*
    33        ifd_phoenix.c
     
    1515
    1616#ifdef USE_GPIO //felix: definition of gpio functions
     17#define pin (1<<(reader->detect-4))
    1718int gpio_outen,gpio_out,gpio_in;
    18 unsigned int pin,gpio;
    19 int gpio_detect=0;
    20 
    21 static void set_gpio(int level)
     19unsigned int gpio;
     20
     21static void set_gpio(struct s_reader * reader, int level)
    2222{       
    2323    read(gpio_outen, &gpio, sizeof(gpio));
     
    3333}
    3434
    35 static void set_gpio_input(void)
     35static void set_gpio_input(struct s_reader * reader)
    3636{
    3737    read(gpio_outen, &gpio, sizeof(gpio));         
     
    4040}
    4141
    42 static int get_gpio(void)
    43 {
    44     set_gpio_input();
     42static int get_gpio(struct s_reader * reader)
     43{
     44    set_gpio_input(reader);
    4545    read(gpio_in, &gpio, sizeof(gpio));
    4646    if (gpio&pin)
     
    6060    if (reader->detect>4)
    6161    {
    62         gpio_detect=reader->detect-4;
    63         pin = 1<<gpio_detect;
    6462        gpio_outen=open("/dev/gpio/outen",O_RDWR);
    6563        gpio_out=open("/dev/gpio/out",O_RDWR);
    6664        gpio_in=open("/dev/gpio/in",O_RDWR);
    67         set_gpio_input();
     65        set_gpio_input(reader);
    6866    }
    6967#endif
     
    8280{
    8381#ifdef USE_GPIO  //felix: detect card via defined gpio
    84     if (gpio_detect)
    85         *status=!get_gpio();
     82    if (reader->detect>4)
     83        *status=!get_gpio(reader);
    8684    else
    8785#endif
     
    129127            IO_Serial_Ioctl_Lock(reader, 1);
    130128#ifdef USE_GPIO
    131             if (gpio_detect)
    132                 set_gpio(0);
     129            if (reader->detect>4)
     130                set_gpio(reader, 0);
    133131            else
    134132#endif
     
    145143
    146144#ifdef USE_GPIO  //felix: set card reset hi (inactive)
    147             if (gpio_detect) {
    148                 set_gpio_input();
     145            if (reader->detect>4) {
     146                set_gpio_input(reader);
    149147            }
    150148            else
     
    244242    cs_debug_mask (D_IFD, "IFD: Closing phoenix device %s", reader->device);
    245243#ifdef USE_GPIO //felix: close dev if card detected
    246     if(gpio_detect)
     244    if(reader->detect>4)
    247245    {
    248246        close(gpio_outen);
     
    260258    IO_Serial_Ioctl_Lock(reader, 1);
    261259#ifdef USE_GPIO
    262     if (gpio_detect)
    263         set_gpio(0);
     260    if (reader->detect>4)
     261        set_gpio(reader, 0);
    264262    else
    265263#endif
     
    269267
    270268#ifdef USE_GPIO  //felix: set card reset hi (inactive)
    271     if (gpio_detect) {
    272         set_gpio_input();
     269    if (reader->detect>4) {
     270        set_gpio_input(reader);
    273271    }
    274272    else
Note: See TracChangeset for help on using the changeset viewer.