Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2011, 00:17   #1
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию Как убрать Enter из буфера клавиатуры?

Может вопрос не совлем по кросплатформенному программированию, скорее по линуксу, но всё же. Есть задача:почитать сканкоды клавиш через порты, написан следующий код:
Код:
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>

void main()
{
  int i;
  ioperm(0x60, 10, 1);
  while(1)
  {
    do
    {
      i=(inb(0x64)/2)%2;	//проверка входного буфера
    }while(i==1);
    outb(0xF4, 0x64);		//очистка выходного буфера клавиатуры
    
    do
    {
      i=(inb(0x64))%2;
    }while(i==0);		//ожидание ввода

    i=(int)inb(0x60);		//чтение сканкода из порта 
    printf("%x\n", i);		//вывод
    if(i==25) break;
  }
}
В принципе прога пашет, все клавиши работают как надо, только вот Enter почему-то остаётся висеть в буфере. То есть при запуске проги из консоли он туда попадает и просто начинает постоянно выводиться при каждом вызове
Код:
i=(int)inb(0x60);		//чтение сканкода из порта
по крайней мере мне кажется что он где-то в буфере. С другой стороны принтфом в таком случае должен был бы выводиться сканкод Enter, а он просто ньюлайном в консоль постоянно сыплется. Помгите плиз.

Да, и ещё одно уточнение. Мне кажется что клавиша может подобным образом зависать в буфере биоса, так как если во время выполнения проги надолго зажать какую либо кнопку, то сканкоды как и положено выводятся но черезнекоторое время, вероятно когда переполняется буфер клавиатуры и код клавиши попадает в буфер биос она подменяет собой enter и начинает печаталься вместо него.

Последний раз редактировалось Farrel; 15.09.2011 в 00:38.
Farrel вне форума Ответить с цитированием
Старый 15.09.2011, 22:08   #2
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

Проблему решил, причём до смешного просто. Итак тем, кто столкнулся с подобным косяком: попробуйте вставить перед работой с портами usleep. Как показала практика, всё вдруг начинает работать и в буфере ничего не зависает.
Farrel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как можно из ячеек автоматически убрать знак “enter” RafaelMirak Microsoft Office Excel 9 14.08.2012 14:28
Очистка буфера клавиатуры Hell Knight Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.03.2011 18:15
Иллюстрация работы буфера клавиатуры VaSS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 04.05.2010 22:44
работа буфера клавиатуры Kaljaida Фриланс 11 04.05.2010 13:02
Как убрать лишний Enter? Diego__ Microsoft Office Word 0 25.02.2010 18:14