Как мне реализовать функцию записи моего устройства? - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблемы с частью игрового проекта.Для проекта мы должны создать драйвер устройства для игры в кости, который мы реализуем позже в проекте.Моя проблема в том, что моя функция dice_write (), кажется, не работает, или даже не достигается вообще.Мне интересно, связано ли это с кодом драйвера или с тем, как я его реализую в проекте.

Вот соответствующая часть файла .c драйвера:

static int SIDES = 6;

unsigned char get_random_byte(int max)
{
    unsigned char c;
    get_random_bytes(&c, 1);
    return ((c%max)+1);
}

//dice_read omitted (it works fine)

static ssize_t dice_write(struct file * file, const char * buf, size_t count, loff_t *ppos)
{
    printk(KERN_ERR "WRITE");
    int j;
    int len = sizeof(int);
    if(*ppos != 0)
    {
        return 0;
    }
    if(copy_from_user(buf, j, 1))
    {
        return -EINVAL;
    }
    *ppos = len;
    SIDES = j;
    printk(KERN_ERR "\nSides: %d",SIDES);
    //printk(KERN_ERR "write(file, 0x%p, %d, %lld)\n", buf, count, *ppos);
    return len;
}

А вот как я реализовал это в проекте:

int roll(int sides)
{
    unsigned int roll;
    int i = open("/dev/dice", O_RDWR);
    write(i, &sides, sizeof(int));
    read(i, &roll, sizeof(int));
    close(i);
    printf("ROLL: %d\n",roll);
    return roll;
}

В данный момент читаю работы, но пишите не так, SIDES никогда не обновляется и нет выводов из printks, что я и хочу (программа - игра, в которой стороны игральных костей различаются, поэтому мне нужно написать новое число в стороны).Может кто-нибудь помочь мне разобраться, как правильно реализовать запись?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...