require '_h2ph_pre.ph';

no warnings qw(redefine misc);

unless(defined(&_SYS_GPIO_H_)) {
    eval 'sub _SYS_GPIO_H_ () {1;}' unless defined(&_SYS_GPIO_H_);
    require 'sys/ioccom.ph';
    require 'sys/time.ph';
    eval 'sub GPIO_PIN_LOW () {0x;}' unless defined(&GPIO_PIN_LOW);
    eval 'sub GPIO_PIN_HIGH () {0x1;}' unless defined(&GPIO_PIN_HIGH);
    eval 'sub GPIOMAXNAME () {64;}' unless defined(&GPIOMAXNAME);
    eval 'sub GPIO_PIN_INPUT () {0x1;}' unless defined(&GPIO_PIN_INPUT);
    eval 'sub GPIO_PIN_OUTPUT () {0x2;}' unless defined(&GPIO_PIN_OUTPUT);
    eval 'sub GPIO_PIN_INOUT () {0x4;}' unless defined(&GPIO_PIN_INOUT);
    eval 'sub GPIO_PIN_OPENDRAIN () {0x8;}' unless defined(&GPIO_PIN_OPENDRAIN);
    eval 'sub GPIO_PIN_PUSHPULL () {0x10;}' unless defined(&GPIO_PIN_PUSHPULL);
    eval 'sub GPIO_PIN_TRISTATE () {0x20;}' unless defined(&GPIO_PIN_TRISTATE);
    eval 'sub GPIO_PIN_PULLUP () {0x40;}' unless defined(&GPIO_PIN_PULLUP);
    eval 'sub GPIO_PIN_PULLDOWN () {0x80;}' unless defined(&GPIO_PIN_PULLDOWN);
    eval 'sub GPIO_PIN_INVIN () {0x100;}' unless defined(&GPIO_PIN_INVIN);
    eval 'sub GPIO_PIN_INVOUT () {0x200;}' unless defined(&GPIO_PIN_INVOUT);
    eval 'sub GPIO_PIN_USER () {0x400;}' unless defined(&GPIO_PIN_USER);
    eval 'sub GPIO_PIN_PULSATE () {0x800;}' unless defined(&GPIO_PIN_PULSATE);
    eval 'sub GPIO_PIN_SET () {0x8000;}' unless defined(&GPIO_PIN_SET);
    eval 'sub GPIO_PIN_ALT0 () {0x10000;}' unless defined(&GPIO_PIN_ALT0);
    eval 'sub GPIO_PIN_ALT1 () {0x20000;}' unless defined(&GPIO_PIN_ALT1);
    eval 'sub GPIO_PIN_ALT2 () {0x40000;}' unless defined(&GPIO_PIN_ALT2);
    eval 'sub GPIO_PIN_ALT3 () {0x80000;}' unless defined(&GPIO_PIN_ALT3);
    eval 'sub GPIO_PIN_ALT4 () {0x100000;}' unless defined(&GPIO_PIN_ALT4);
    eval 'sub GPIO_PIN_ALT5 () {0x200000;}' unless defined(&GPIO_PIN_ALT5);
    eval 'sub GPIO_PIN_ALT6 () {0x400000;}' unless defined(&GPIO_PIN_ALT6);
    eval 'sub GPIO_PIN_ALT7 () {0x800000;}' unless defined(&GPIO_PIN_ALT7);
    eval 'sub GPIO_PIN_HWCAPS () {( &GPIO_PIN_INPUT |  &GPIO_PIN_OUTPUT |  &GPIO_PIN_INOUT |  &GPIO_PIN_OPENDRAIN |  &GPIO_PIN_PUSHPULL |  &GPIO_PIN_TRISTATE |  &GPIO_PIN_PULLUP |  &GPIO_PIN_PULLDOWN |  &GPIO_PIN_PULSATE |  &GPIO_PIN_ALT0 |  &GPIO_PIN_ALT1 |  &GPIO_PIN_ALT2 |  &GPIO_PIN_ALT3 |  &GPIO_PIN_ALT4 |  &GPIO_PIN_ALT5 |  &GPIO_PIN_ALT6 |  &GPIO_PIN_ALT7);}' unless defined(&GPIO_PIN_HWCAPS);
    eval 'sub GPIO_INTR_POS_EDGE () {0x1;}' unless defined(&GPIO_INTR_POS_EDGE);
    eval 'sub GPIO_INTR_NEG_EDGE () {0x2;}' unless defined(&GPIO_INTR_NEG_EDGE);
    eval 'sub GPIO_INTR_DOUBLE_EDGE () {0x4;}' unless defined(&GPIO_INTR_DOUBLE_EDGE);
    eval 'sub GPIO_INTR_HIGH_LEVEL () {0x8;}' unless defined(&GPIO_INTR_HIGH_LEVEL);
    eval 'sub GPIO_INTR_LOW_LEVEL () {0x10;}' unless defined(&GPIO_INTR_LOW_LEVEL);
    eval 'sub GPIO_INTR_MPSAFE () {0x80000000;}' unless defined(&GPIO_INTR_MPSAFE);
    eval 'sub GPIO_INTR_EDGE_MASK () {( &GPIO_INTR_POS_EDGE |  &GPIO_INTR_NEG_EDGE |  &GPIO_INTR_DOUBLE_EDGE);}' unless defined(&GPIO_INTR_EDGE_MASK);
    eval 'sub GPIO_INTR_LEVEL_MASK () {( &GPIO_INTR_HIGH_LEVEL |  &GPIO_INTR_LOW_LEVEL);}' unless defined(&GPIO_INTR_LEVEL_MASK);
    eval 'sub GPIO_INTR_MODE_MASK () {( &GPIO_INTR_EDGE_MASK |  &GPIO_INTR_LEVEL_MASK);}' unless defined(&GPIO_INTR_MODE_MASK);
    eval 'sub GPIOINFO () { &_IOR(ord(\'G\'), 0, \'struct gpio_info\');}' unless defined(&GPIOINFO);
    eval 'sub GPIOSET () { &_IOWR(ord(\'G\'), 5, \'struct gpio_set\');}' unless defined(&GPIOSET);
    eval 'sub GPIOUNSET () { &_IOWR(ord(\'G\'), 6, \'struct gpio_set\');}' unless defined(&GPIOUNSET);
    eval 'sub GPIOREAD () { &_IOWR(ord(\'G\'), 7, \'struct gpio_req\');}' unless defined(&GPIOREAD);
    eval 'sub GPIOWRITE () { &_IOWR(ord(\'G\'), 8, \'struct gpio_req\');}' unless defined(&GPIOWRITE);
    eval 'sub GPIOTOGGLE () { &_IOWR(ord(\'G\'), 9, \'struct gpio_req\');}' unless defined(&GPIOTOGGLE);
    eval 'sub GPIOATTACH () { &_IOWR(ord(\'G\'), 10, \'struct gpio_attach\');}' unless defined(&GPIOATTACH);
    if(defined(&COMPAT_50)) {
	eval 'sub GPIOPINREAD () { &_IOWR(ord(\'G\'), 1, \'struct gpio_pin_op\');}' unless defined(&GPIOPINREAD);
	eval 'sub GPIOPINWRITE () { &_IOWR(ord(\'G\'), 2, \'struct gpio_pin_op\');}' unless defined(&GPIOPINWRITE);
	eval 'sub GPIOPINTOGGLE () { &_IOWR(ord(\'G\'), 3, \'struct gpio_pin_op\');}' unless defined(&GPIOPINTOGGLE);
	eval 'sub GPIOPINCTL () { &_IOWR(ord(\'G\'), 4, \'struct gpio_pin_ctl\');}' unless defined(&GPIOPINCTL);
	eval 'sub GPIOATTACH50 () { &_IOWR(ord(\'G\'), 10, \'struct gpio_attach50\');}' unless defined(&GPIOATTACH50);
	eval 'sub GPIODETACH50 () { &_IOWR(ord(\'G\'), 11, \'struct gpio_attach50\');}' unless defined(&GPIODETACH50);
	eval 'sub GPIODETACH () { &_IOWR(ord(\'G\'), 11, \'struct gpio_attach\');}' unless defined(&GPIODETACH);
    }
}
1;
