Код: Выделить всё
static bool is_blink;
#define BLINK_TIMEOUT 100
static int thread_fn(void *data)
{
is_blink = true;
while (!kthread_should_stop()) {
set_gpio(gpio, true);
msleep(BLINK_TIMEOUT);
set_gpio(gpio, false);
msleep(BLINK_TIMEOUT);
}
is_blink = false;
return 0;
}
static struct task_struct *task;
static ssize_t dozor_ioctl(struct file *file, unsigned int num,
unsigned long param)
{
if (_IOC_TYPE(num) != 'D')
return -ENOIOCTLCMD;
switch (num) {
case DOZOR_LED_ON:
if (is_blink) {
kthread_stop(task);
msleep(BLINK_TIMEOUT * 2);
}
set_gpio(gpio, true);
break;
case DOZOR_LED_OFF:
if (is_blink) {
kthread_stop(task);
msleep(BLINK_TIMEOUT * 2);
}
set_gpio(gpio, false);
break;
case DOZOR_LED_BLINK:
task = kthread_run(thread_fn, NULL, "dozor_led");
break;
default:
pr_err("Unknown IOCTL %u", num);
return -EINVAL;
}
return 0;
}
Как без использования дополнительной переменной проверить состояние потока?
Спасибо.