Пример #1
0
int gpio_setdir(int port, int pin, int direction)
{
    if (check_params(port, pin)) {
        return -1;
    }
    const unsigned int *bitmask = get_bitmask(port);
    register volatile unsigned int *r, *c;
    volatile int position;

    position = get_index(port, pin);
    if ((position < 0) || (position >= GPIO_ADDRESS_MAX)) {
        fprintf(stderr,"error: invalid position: %d\n", position);
        return -1;
    }
    /** set GPIO on the pad control */
    c = (void *)gpio.control + get_control(port, pin);
    *c |= 0x07;

    /** set register address */
    r = (void*)gpio.address[position] + GPIO_OE;
    switch(direction) {
    case GPIO_DIR_OUTPUT:
        *r &= ~(bitmask[pin]);
        break;
    case GPIO_DIR_INPUT:
        *r |= (bitmask[pin]);
        break;
    default:
        fprintf(stderr,"error: invalid direction %d\n", direction);
        return -1;
    }
    return 0;
}
Пример #2
0
static void
test_behavior ()
{
    rw_info (0, 0, 0, "behavior of <cctype> functions in the \"C\" locale");

    char extra_str [80];
    char missing_str [80];

    for (int i = 0; i != 256; ++i) {

        typedef unsigned char UChar;

        const int c = UChar (i);

        int mask = 0;

        mask |= std::isalnum (c) ? bit_alnum : 0;
        mask |= std::isalpha (c) ? bit_alpha : 0;
        mask |= std::iscntrl (c) ? bit_cntrl : 0;
        mask |= std::isdigit (c) ? bit_digit : 0;
        mask |= std::isgraph (c) ? bit_graph : 0;
        mask |= std::islower (c) ? bit_lower : 0;
        mask |= std::isprint (c) ? bit_print : 0;
        mask |= std::ispunct (c) ? bit_punct : 0;
        mask |= std::isspace (c) ? bit_space : 0;
        mask |= std::isupper (c) ? bit_upper : 0;
        mask |= std::isxdigit (c) ? bit_xdigit : 0;

        const int extra_bits   = mask & ~char_mask [i];
        const int missing_bits = ~mask & char_mask [i];

        rw_assert (mask == char_mask [i], 0, 0,
                   "%#c mask%{?} missing bits %s (%#x)%{;}"
                   "%{?} extra bits %s (%#x)%{;}",
                   c,
                   missing_bits,
                   get_bitmask (missing_bits, missing_str), missing_bits,
                   extra_bits,
                   get_bitmask (extra_bits, extra_str), extra_bits);
    }
}
Пример #3
0
int gpio_write(int port, int pin, int status)
{
    if (check_params(port, pin)) {
        return -1;
    }
    const unsigned int *bitmask = get_bitmask(port);
    volatile int position;

    position = get_index(port, pin);
    if ((position < 0) || (position >= GPIO_ADDRESS_MAX)) {
        fprintf(stderr,"error: invalid position: %d\n", position);
        return -1;
    }
    status = ((status == GPIO_ON) ? GPIO_SETDATAOUT : GPIO_CLEARDATAOUT);
    *((unsigned int *)((void *)gpio.address[position] + status)) =  bitmask[pin];
    return 0;
}
Пример #4
0
int gpio_read(int port, int pin)
{
    if (check_params(port, pin)) {
        return -1;
    }
    const unsigned int *bitmask = get_bitmask(port);
    volatile int position;
    int ret;

    position = get_index(port, pin);
    if ((position < 0) || (position >= GPIO_ADDRESS_MAX)) {
        fprintf(stderr,"error: invalid position: %d\n", position);
        return -1;
    }
    ret = (*((unsigned int *)((void *)gpio.address[position] + GPIO_DATAIN)) & bitmask[pin]);
    return (ret == 0 ? GPIO_OFF : GPIO_ON);
}