📄 mw_uid_test.cc
字号:
/*
*/
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <rtems/mw_uid.h>
#include <rtems/kd.h>
static const char *Q_NAME = "MWQ";
#define Q_MAX_MSGS 128
/*
* "Select() routine called by the MicroWindows framework to receive events
* from the input devices.
*/
void GsSelect(void)
{
struct MW_UID_MESSAGE m;
int rc;
/* let's make sure that the type is invalid */
m.type = MV_UID_INVALID;
/* wait up to 100 milisecons for events */
rc = uid_read_message( &m, 100 );
/* return if timed-out or something went wrong */
if( rc < 0 )
{
if( errno != ETIMEDOUT )
printf( " rc= %d, errno=%d\n", rc, errno );
return;
}
/* let's pass the event up to microwindows */
switch( m.type )
{
/* Mouse or Touch Screen event */
case MV_UID_REL_POS:
case MV_UID_ABS_POS:
printf( "Mouse: btns=%X, dx=%d, dy=%d, dz=%d\n",
m.m.pos.btns, m.m.pos.x, m.m.pos.y, m.m.pos.z );
break;
/* KBD event */
case MV_UID_KBD:
printf( "Kbd: code=%X, modifiers=%X, mode=%d\n",
(unsigned char )m.m.kbd.code, m.m.kbd.modifiers, m.m.kbd.mode );
break;
/* micro-windows does nothing with those.. */
case MV_UID_TIMER:
case MV_UID_INVALID:
default:
;
}
}
extern "C" int close( int );
extern "C" int rtems_main(int argc, char **argv)
{
int status;
printf( "Starting untar file.\n" );
struct MW_UID_MESSAGE m;
int rc;
/* if this is the first time around, create the message queue */
rc = uid_open_queue( Q_NAME, O_CREAT | O_RDWR, Q_MAX_MSGS );
printf( "Open QUEUE=%X\n", rc );
int mouse_fd = open( "/dev/mouse", O_NONBLOCK );
uid_register_device( mouse_fd, Q_NAME );
/* kbd it is already opened */
int kbd_fd = fileno( stdin );
uid_register_device( kbd_fd, Q_NAME );
int old_mode = 0;
/* set keyboard to scanmode */
rc = uid_set_kbd_mode( kbd_fd, MV_KEY_MODE_SCANCODE, &old_mode );
printf( "Kbd OldMode=%X, rc=%d\n", old_mode, rc );
while( TRUE )
{
GsSelect();
}
uid_unregister_device( kbd_fd );
uid_unregister_device( mouse_fd );
rc = uid_close_queue();
printf( "Close QUEUE=%X\n", rc );
close( mouse_fd );
fprintf(stdout, "About to leave main()\n" );
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -