Страниц: [1]
  Печать  
Автор Тема: Вопрос по Character I/O Library  (Прочитано 3139 раз)
qnx_user
Full Member
***
Offline Offline

Сообщений: 125


Просмотр профиля
« : Апреля 26, 2020, 01:45:20 am »

Подскажите пожалуйста, можно ли из обработчика 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 - число читателей, наверное можно использовать его.

P.S. Может быть тут еще есть живые Smiley
« Последнее редактирование: Апреля 26, 2020, 02:33:13 am от qnx_user » Записан
Страниц: [1]
  Печать  
 
Перейти в: