The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Состояние мышки"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Состояние мышки"
Сообщение от BartSimpson emailИскать по авторуВ закладки on 21-Янв-02, 12:19  (MSK)
Слухай Soldier, ты мышки програмил (на разборку время не хватает), в общем надо состояние кнопок определять, ну если что так и положение курсора...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Состояние мышки"
Сообщение от Soldier Искать по авторуВ закладки on 21-Янв-02, 14:09  (MSK)
>Слухай Soldier, ты мышки програмил (на
>разборку время не хватает), в
>общем надо состояние кнопок определять,
>ну если что так и
>положение курсора...
Chto to ya ne pomnyu chtobi ya gde to upominal chto programlyu mishki. V pritsipe ya ih programil let etak 8 nazad, komovskie i pod DOS-om estestvenno. Pod Linux-om, naskol'ko ya znayu, mozhno otkrit' dlya chteniya fail /dev/ttyS0 ili /dev/psaux i t.d., v zavisimosti ot togo gde sidit mishak, konechno pri etom nado imet' sootvetstvuyuschie prava. Ne znayu kak seychas, no mne popalsya sleduyuchiy protokol:

Dannie idut gruppoy po tri baita. Dopustim vi schitali tri baita v massiv bytes. Pri etom priraschenie po x vichislyaetsya po formule:
dx=bytes[0] << 6  + bytes[1]
Prirashenie po y:
dy=(bytes[0] & 12) << 4 + bytes[2]
Nazhatie levoy knopki:
LeftButton=bytes[0] & 32 //esli ne 0, to nazhata.
analogichnbo:
RightButton=bytes[0] & 16 //esli ne 0, to nazhata.
Sredney knopki u menya togda ne bilo.
Dalee chitivayutsya sleduyuschie tri baita i t.d.

Nachal'noe tekuschee polozhenie zadaetsya vami (naprimer x=0,y=0, a dalee x+=dx, y+=dy)

Ne znayu kak eto budet rabotat' pod Linux-om, net kompa chtobi proverit'.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Состояние мышки"
Сообщение от BartSimpson emailИскать по авторуВ закладки on 21-Янв-02, 14:49  (MSK)
>Chto to ya ne pomnyu chtobi
>ya gde to upominal chto
>programlyu mishki. V pritsipe ya
>ih programil let etak 8
>nazad, komovskie i pod DOS-om
>estestvenno. Pod Linux-om, naskol'ko ya
>znayu, mozhno otkrit' dlya chteniya
>fail /dev/ttyS0 ili /dev/psaux i
>t.d., v zavisimosti ot togo
>gde sidit mishak, konechno pri
>etom nado imet' sootvetstvuyuschie prava.
>Ne znayu kak seychas, no
>mne popalsya sleduyuchiy protokol:
>
>Dannie idut gruppoy po tri baita.
>Dopustim vi schitali tri baita
>v massiv bytes. Pri etom
>priraschenie po x vichislyaetsya po
>formule:
>dx=bytes[0] << 6  + bytes[1]
>
>Prirashenie po y:
>dy=(bytes[0] & 12) << 4 +
>bytes[2]
>Nazhatie levoy knopki:
>LeftButton=bytes[0] & 32 //esli ne 0,
>to nazhata.
>analogichnbo:
>RightButton=bytes[0] & 16 //esli ne 0,
>to nazhata.
>Sredney knopki u menya togda ne
>bilo.
>Dalee chitivayutsya sleduyuschie tri baita i
>t.d.
>
>Nachal'noe tekuschee polozhenie zadaetsya vami (naprimer
>x=0,y=0, a dalee x+=dx, y+=dy)
>
>
>Ne znayu kak eto budet rabotat'
>pod Linux-om, net kompa chtobi
>proverit'.

Да не, я спрашивал програмил ты али нет, ну в общем буду разбираться сам (идея интересная есть, а времени мало), придется gpm копать.......

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Состояние мышки"
Сообщение от Soldier Искать по авторуВ закладки on 22-Янв-02, 10:39  (MSK)
>Да не, я спрашивал програмил ты
>али нет, ну в общем
>буду разбираться сам (идея интересная
>есть, а времени мало), придется
>gpm копать.......
Proveril na Linux-e. Dlya com-ovskih mishek vrode pashet, esli port initsializriovat' kak nado (cs7, baud=1200 i t.d). Dlya PS/2 nashel tol'ko kak knopki opredelyat'. Esli vse esche aktula'no, mogu  podelit'sya svoimi nauchnimi issledovaniyami v etoy oblasti.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Состояние мышки"
Сообщение от BartSimpson emailИскать по авторуВ закладки on 22-Янв-02, 11:06  (MSK)
>Proveril na Linux-e. Dlya com-ovskih mishek
>vrode pashet, esli port initsializriovat'
>kak nado (cs7, baud=1200 i
>t.d). Dlya PS/2 nashel tol'ko
>kak knopki opredelyat'. Esli vse
>esche aktula'no, mogu  podelit'sya
>svoimi nauchnimi issledovaniyami v etoy
>oblasti.

Спасибо Барин, не дай имереть халопу!

В общем ну очень надо,время совсем нет (переход на новый план счетов), а надо очень, и потом в линуксе есль библиотека для интерфейса с мышом, в gpm принажатии мышки происходит вызов процедуры.

ЗЫ Совсем "nauchnimi issledovaniyami v etoy oblasti" конечно не надо, я тока под *нуксом не программил, а в остальном - умею.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Состояние мышки"
Сообщение от Soldier Искать по авторуВ закладки on 23-Янв-02, 11:51  (MSK)
>>Proveril na Linux-e. Dlya com-ovskih mishek
>>vrode pashet, esli port initsializriovat'
>>kak nado (cs7, baud=1200 i
>>t.d). Dlya PS/2 nashel tol'ko
>>kak knopki opredelyat'. Esli vse
>>esche aktula'no, mogu  podelit'sya
>>svoimi nauchnimi issledovaniyami v etoy
>>oblasti.
>
>Спасибо Барин, не дай имереть халопу!
>
>
>В общем ну очень надо,время совсем
>нет (переход на новый план
>счетов), а надо очень, и
>потом в линуксе есль библиотека
>для интерфейса с мышом, в
>gpm принажатии мышки происходит вызов
>процедуры.
>
>ЗЫ Совсем "nauchnimi issledovaniyami v etoy
>oblasti" конечно не надо, я
>тока под *нуксом не программил,
>а в остальном - умею.
>

Ya predlagayu metod bez ispol'zovaniya gpm. Ne znayu podoydet on
ili net -  esli net to  pokopayus' takzhe naschet gpm no eto v drugoy raz i esli
ono nado.

Moya ideya sostoit v  napisanii svoego obrabotchika misha, t.e.
delaetsya sleduyuschie:
1. Pishetsya proga, kotoraya otkrivaet  mishkin device dlya chteniya
2. Etoy progoy sozdaetysa  svoy FIFO.
3. Dannie obrabativatyustay i zapisivayutsya v etot fifo.
4. Vse progi, i rabotayuschie s device-om mishaka (gpm , X-Windi)
dolzhni  ispol'zovat' imenno etot fifo.

Tepert' podrobnee. Ya testiroval (pravda vsego odin den')
eto delo dlya com-ovskih  i ps2 -shnih mishakov. Edinstveniiy
trouble - gpm ne pahala s  kolesnim  mishakom (imps2), no X-Winda
pahala vo vseh sluchyayah.  S com-ovskim i ps2 bez kolesa  -
no problem. Vse eto prodelivalos'  na Debian, yadro 2.4.16.

1. Otrkitie mishiogo device-a.

Dlya komovskix  (ttyS*)  mishakov, kak ya uzhe govoril,  
nado  snachal initsializirovat'  port.
Eto mozhno sdelat' libo cherz tcsetattr, libo cherz stty.  
Dopustim mishak sidit na  com1 (/dev/ttyS0)
Togda:
#define STTY_PAR " -parenb -parodd cs7 hupcl -cstopb cread clocal -crtscts " \
                 "-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel " \
"nl0 cr0 tab0 bs0 vt0 ff0 " \
"ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff "\
                 "-iuclc -ixany -imaxbel " \
"-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop "\
                 "-echoprt -echoctl -echoke 1200 "
system("/bin/stty  -F  /dev/ttyS0 "STTY_PAR);
md=open("/dev/ttyS0",O_RDONLY);
if (md<0) {perror("open mouse"); return -1;}

Dlya ps2 mozhno srazu:
md=open("/dev/psaux",O_RDONLY);
if (md<0) {perror("open mouse"); return -1;}
Eta  proga dolzhna bit' pervoy (osobenno esli  COM), kto
otrkivaet  mishinniy device .

2. Sozdanie FIFO:
Dopustim vi hotite sozdat' fifo v /tmp/mouse. Togda
//
mkfifo("/tmp/mouse",S_IRUSR | S_IWUSR);
//
Dalee otrkrivaem etot FIFO na chtenie zapis':
//
mf=open("/tmp/mouse",O_RDWR);
if (mf<0) {
  perror("fopen ifo");   return -1;
}
//
Pochemu delaetsy otrkritie na chtenie /zapis' smotri te v  
man fifo
3.  Obrabotka dannih ot mishaka.
Esli vse v poryadke,  to vhodim v beskonechniy tsikl i zhdem dannie
s mishinogo device-a.  Proverit'  nalishie idannih na chtenie
mozhno s pomosch'yu funktsii select:

//
fd_set mr
int n;
//.............................

  FD_ZERO(&mr);
  FD_SET(md,&mr);
  if (select(md+1,&mr,NULL,NULL,NULL)>0) {
   read(md,&ch,1); //chtenie s mishinnogo device-a
.//...................

Dalee zapisivaem eti dannie  v nash fifo. Pri etom nado pomnit' ,  chto
esli nikto ne budet chitat' dannie iz etogo  FIFO, to ono postepenno
zabivaetsya i  kogda dostignet opredelennogo razmera (u menya 4096
bait)  zapis' blokiruetsya i programma "zavisnet", poka eti dannie ne budut
prochitani. Chtobi eto go izbezhat', nado tazkhe delat' proverku na
nalichie dannih v FIFO. Eto mozhno sdelat'  cherez ioctl:
//.........
   read(md,&ch,1);  //chtenie s mishinnogo device-a
   if (!ioctl(mf,FIONREAD,&n)) {
     if (!n)  write(mf,&ch,1); // zapis' v  nash FIFO  eslii ono pustoe.
   }
//.........

Teper'   ob obrabotke dannih.  Ps2 i COM shlyut dannie portsiyami
po tri baita,  imps2 (ps2 s kolesom) - chetire (v chetvertiy  dlya  kolesa)
Sostoyanie knopok opisivaetsya v pervom baite dlya  vseh etih protokolov.
Dlya COM-ovskih  mishakov  esli 6 -oy bit (otschet s 0) ustanovlen,
to  etot bait  rassmatrivaetsya kak perviy, takim obrazom dlya
COM mozhno  tak:

#define  DATA_COUNT 3
char data[4]   //dlya  imps2
//................
i=0;
//.........
//Posle chteniya s mishkinogo device i zapisi v nash FIFO:
if (ch & 64)  i=0;
  data[i++]=ch;
if (i==DATA_COUNT) {
    LeftButton=(data[0] & 32) != 0;
   RightButton= (data[0] & 16) !=0;
//s Middle button poka ne razobralsya
  //...................//
}
//

Dlya ps2  (bez kolesa) i imps2
//......
  if (!i && !(ch & 8))  continue; //u  1-go baita 3 -iy-bit (ot 0) dolzhen  bit ustanovlen
data[i++]=ch;
if (i==DATA_COUNT) {
    LeftButton=(data[0] &  1) != 0;
    RightButton= (data[0] &  2) !=0;
    MiddleButton= (data[0] &  4) !=0;
//........................
}
//

Dalee propisivaem dlya X-ov  mishiniy device kak
/tmp/mouse, i zapuskaem gpm
gpm -m /tmp/mouse -t ps2 //ili  ms  

V obschem  sutki  vse rabotalo  - poka bez problem.
Pro gpm esche  segodnya poglyazhu.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Состояние мышки"
Сообщение от BartSimpson emailИскать по авторуВ закладки on 23-Янв-02, 13:13  (MSK)
Обрадовал!!!
Если можно, то писани на мой мыло, скинь адресок свой, обясню для чего все это я затеял.

лучше на mailto:b-w-l@mail.ru

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру