Использование open и i2c в C ++ - PullRequest
1 голос
/ 04 марта 2011

Я понял, что open() и ioctl() не работают внутри объекта cpp. Я могу выполнить операцию, если она вызывается внутри моей main() функции, но НЕ когда она находится внутри какого-либо из моих классов. У меня есть объект, который работает в моем главном цикле, который имеет другой объект, который делает вызовы файловой системы.

Таким образом, в основном, когда в главном цикле он может открыться (я получаю 3 для указателя, и ioctl успешно). Но когда я делаю это в объекте, он возвращает 0 для открытия (что, предположительно, не является ошибкой), и ioctl завершается ошибкой.

Я знаю, что не могу использовать опции ios:: iostream, потому что они не работают с ioctl. Как я могу заставить обычный ioctl работать внутри объекта cpp?

int add=0x4b;
int i2c_bus;

if(( i2c_bus = open( "/dev/i2c-0", O_RDWR )) < 0 )
{
    printf("Unable to open file /dev/i2c-0.\n");
}

if( ioctl( i2c_bus, I2C_SLAVE, add ) < 0 )
{
    printf("Open chip %d FAILED file %d\n",add, i2c_bus);
    return -1;
}
else 
{
    printf("Open chip %d Succeeded file %d\n\n",add, i2c_bus);
    return 1;
}

1 Ответ

2 голосов
/ 04 марта 2011

Вы присвоили результат open на i2c_bus, но вы используете fd в ioctl. Изменили ли вы имена переменных при переходе с main?

...