Официальный форум СВД Встраиваемые Системы
29 Март, 2024, 16:15:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по Character I/O Library  (Прочитано 713 раз)
Андрей Ивлев
Опытный пользователь

Сообщений: 138



« : 25 Апрель, 2020, 16:49:10 »

Подскажите пожалуйста, можно ли из обработчика tto, каким-то образом узнать открыто ли устройство?

У меня есть некий самописный драйвер, который представляет собой пару устройств символьного ввода/вывода (например /dev/v1 и /dev/v2) связанных друг с другом, v2 связан с v1 через (TTYDEV*)dev->extra (и наоборот так же).
Когда в v1 поступают данные, они просто передаются в v2. Код функции:
Код: (обработчик tto)
int tto ( TTYDEV *dev, int action, int arg1 )
{
TTYDEV *ext = dev->extra;
int status = 0;
char c;

switch ( action )
{
//case TTO_STTY:
//case TTO_CTRL:
//case TTO_LINESTATUS:
// return 0;

case TTO_DATA:
//case TTO_EVENT:
break;

default:
return 0;
}

while ( dev->obuf.cnt > 0 )
{
/*
// Если входной буфер внешнего tty заполнился - уходим.
if ( ext->ibuf.cnt >= ext->ibuf.size ) {
dev->un.s.tx_tmr = 3; // Timeout
break;
}
*/

if ( dev->flags & (OHW_PAGED|OSW_PAGED) && !(dev->xflags & OSW_PAGED_OVERRIDE) ) {
dev->un.s.tx_tmr = 3; // Timeout
break;
}

// Получаем символ из obuf
dev_lock( dev );
c = tto_getchar( dev );
dev_unlock( dev );

// Отправляем на внешнее устройство
status |= tti( ext, c );
dev->un.s.tx_tmr = 3;  // Timeout
if ( dev->xflags & OSW_PAGED_OVERRIDE )
{
atomic_clr(&dev->xflags, OSW_PAGED_OVERRIDE);
break;
}
}

if ( status )
iochar_send_event( ext );

    return tto_checkclients(dev);
}
Если, например в v1 писать данные, а v2 не открыт на чтение, то данные буферизируются в его входном буфере и если его открыть спустя какое-то время, то будут вычитаны ранее записанные в него данные (даже если v1 уже отвалился). Мне требуется, в случае если v2 не открыт на чтение, не производить в него запись из v1.

Спасибо!

Возможное решение:
Нашел в структуре TTYDEV атрибутивную запись на устройство, в которой есть поле ext->attr.rcount - число читателей, наверное можно использовать его.
« Последнее редактирование: 26 Апрель, 2020, 02:32:33 от Андрей Ивлев » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 25 Декабрь, 2023, 07:41:25