static bool cm_init( init_mode install ) /**************************************/ { struct itimercb timercb; struct _osinfo osinfo; MOUSEORD row; MOUSEORD col; MouseInstalled = false; if( install != INIT_MOUSELESS ) { MouseCtrl = mouse_open( 0, 0, UIConHandle ); if( MouseCtrl != 0 ) { timercb.itcb_event.evt_value = UIProxy; MouseTimer = mktimer( TIMEOFDAY, _TNOTIFY_PROXY, &timercb ); if( MouseTimer == -1 ) { mouse_close( MouseCtrl ); } else { MouseInstalled = true; qnx_osinfo( 0, &osinfo ); _SysTime = (struct _timesel __far *)MK_FP( osinfo.timesel, 0 ); UIData->mouse_xscale = 1; UIData->mouse_yscale = 1; checkmouse( &MouseStatus, &row, &col, &MouseTime ); MouseRow = row; MouseCol = col; _stopmouse(); } } } return( MouseInstalled ); }
int mouse_test(pinfo_t fb) { int fd; if ((fd = mouse_open("/dev/input/mice")) < 0) { fprintf(stderr, "Error mouse open: %s\n", strerror(errno)); exit(1); } mevent_t mevent; int m_x = fb->w / 2; int m_y = fb->h / 2; mouse_draw(fb, m_x, m_y); u8_t buf[] = {0xF3, 0xC8, 0xF3, 0x64, 0xF3, 0x50}; if (write(fd, buf, sizeof(buf)) < sizeof(buf)) { fprintf(stderr, "Error write to mice devie:%s\n", strerror(errno)); fprintf(stderr, "鼠标将不支持滚轮\n"); } while(1) { if (mouse_parse(fd, &mevent) == 0) { printf("dx= %d\tdy=%d\tdz=%d\t", mevent.dx, mevent.dy, mevent.dz); mouse_restore(fb, m_x, m_y); m_x += mevent.dx; m_y += mevent.dy; mouse_draw(fb, m_x, m_y); printf("mx= %d\tmy= %d\n", m_x, m_y); switch(mevent.button) { case 1 : printf("left button\n"); break; case 2 : printf("right button\n"); break; case 4 : printf("middle button\n"); break; case 0 : printf("no button\n"); break; default : break; } } else ; } close(fd); return 0; }
int mouse_test(fb_info fb) { int fd; int xx = 123, yy = 234; if((fd = mouse_open("/dev/input/mice")) < 0) { perror("mouse_open"); exit(1); } mevent_t mevent; u8_t buf[] = {0xf3,0xc8,0xf3,0x64,0xf3,0x50}; if(write(fd, buf, sizeof(buf)) < sizeof(buf)) { perror("mouse_write"); fprintf(stderr, "Error write to mice device\n"); } save_cursor(fb,xx,yy,cursor_save); while(1) { if(mouse_parse(fd, &mevent) == 0 && (mevent.x || mevent.y || mevent.z || mevent.button)) { restore_cursor(fb,xx,yy,cursor_save); xx += mevent.x; yy += mevent.y; if(xx > 1366) xx = 1366; if(xx < 0) xx = 0; if(yy > 721) yy = 721; if(yy < 0) yy = 0; if(mevent.button == 1 && xx < 420) { if(xx >= 300 && yy >=210 && yy <= 290) who = 2; else if(xx >= 300 && yy >= 510 && yy <= 590) who = 1; } if(mevent.button == 1 && xx >= 420 && yy <= 710 && xx <= 1320) { if(! check(xx,yy)) { draw_piece(fb,(xx + 15)/30 * 30,yy/30 * 30 + 15,13,(who - 1) ? 0x00000000 : 0xffffffff); chess_count(xx, yy); if(check_all(fb)) exit(0); printf("%d %d\n",(xx + 15 - 420) / 30, (yy) / 30); who = (who - 1) ? 1 : 2; } } save_cursor(fb,xx,yy,cursor_save); draw_cursor(fb,xx,yy,cursor_16_25); } usleep(100); } }
/* mouse_work */ int mouse_work(fb_info fb_inf, int x_start, int y_start) { int mfd = -1; u8_t buf[8]; mouse_event_t mevent; again: fb_draw_board(fb_inf, x_start, y_start); init_chess(); m_x = fb_inf.w / 2; m_y = fb_inf.h / 2; mouse_open(NULL, &mfd); fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; fb_draw_cursor(fb_inf, m_x, m_y); for(;;) { if (read(mfd, buf, sizeof(buf)) != -1) { mouse_parse(buf, &mevent); m_x += mevent.x; m_y += mevent.y; if((m_x >= 0) && (m_x < fb_inf.w - C_WIDTH) && (m_y >= 0) && (m_y < fb_inf.h - C_HEIGHT)) { fb_restore_cursor(fb_inf, p_x, p_y); fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; // fb_draw_cursor(fb_inf, m_x, m_y); } else { m_x -= mevent.x; m_y -= mevent.y; } switch (mevent.button) { case 1: if ((win_flag == 0) && (mouse_work_flag == 1)) { chess_item = p_get_chess_item(fb_inf, x_start, y_start); if ((chess_item.x != -1) && (chess_item.y != -1) && (chess[chess_item.x][chess_item.y] == 0)) { fb_draw_chess(fb_inf, x_start + chess_item.y * GRID_SIZE, y_start + chess_item.x * GRID_SIZE, CHESS_SIZE, WHITE_CHESS_COLOR); fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; send_flag = 1; } } break; case 2: if (win_flag == 1) { win_flag = 0; goto again; } break; case 3: break; default: break; } fb_draw_cursor(fb_inf, m_x, m_y); } if (draw_chess_flag == 1) { draw_chess_flag = 0; fb_restore_cursor(fb_inf, p_x, p_y); fb_draw_chess(fb_inf, x_start + recv_chessitem.y * GRID_SIZE, y_start + recv_chessitem.x * GRID_SIZE, CHESS_SIZE, BLACK_CHESS_COLOR); if (is_p_win == 1) { is_p_win = 0; display_string_ch("你输了!", fb_inf.w / 3, fb_inf.h / 2, fb_inf, 0x0000FF00); win_flag = 1; } fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; fb_draw_cursor(fb_inf, m_x, m_y); } if (is_c_win == 1) { is_c_win = 0; display_string_ch("你赢了!", fb_inf.w / 3, fb_inf.h / 2, fb_inf, 0x0000FF00); fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; fb_draw_cursor(fb_inf, m_x, m_y); win_flag = 1; } usleep(30000); } return 0; }
BOOL InitCiscoTouchpadInput (INPUT* input, const char* mdev, const char* mtype) { { # define KBD "/dev/input/event0" char keyboard_device[] = KBD; system("mknod "KBD" c 13 64 > /dev/null 2>&1"); kbd_fd = keyboard_open(keyboard_device); if (kbd_fd < 0) { fprintf (stderr, "[WARNING] IAL Native Engine: Can not init keyboard right now, %s(%s).\nPlease plug in the KEYBOARD!\n", strerror(errno), keyboard_device); } } mouse_fd = mouse_open(mdev); if (mouse_fd <0) { fprintf (stderr, "[WARNING] IAL Native Engine: Can not init mouse right now, %s(%s).\nPlease plug in the MOUSE!\n", strerror(errno), mdev); } if (getenv("MG_ENV_DISABLE_APP_MODE")) { s_enable_appmode = 0; }else{ s_enable_appmode = 1; } if (s_enable_appmode) { system("mknod /dev/hidraw0 c 253 0 > /dev/null 2>&1"); system("mknod /dev/hidraw1 c 253 1 > /dev/null 2>&1"); # define HIDRAW "/dev/hidraw1" app_fd = open(HIDRAW, O_RDWR); if (app_fd < 0) { fprintf(stderr, "Fatal error> Failed to open %s: [errno=%d]%s", HIDRAW, errno, strerror(errno)); return -1; } mg_ial_ioctl(CMD_SET_MODE, MICE_MODE); // mg_ial_ioctl(CMD_SET_MODE, APP_MODE); }else{ s_current_mode = s_expect_mode = MICE_MODE; } xpos = 0; ypos = 0; buttons = 0; minx = 0; miny = 0; maxx = WIDTHOFPHYSCREEN; maxy = HEIGHTOFPHYSCREEN; input->update_mouse = mouse_update; input->get_mouse_xy = mouse_getxy; input->set_mouse_xy = mouse_setposition; input->get_mouse_button = mouse_getbutton; input->set_mouse_range = mouse_setrange; input->suspend_mouse= mouse_suspend; input->resume_mouse = mouse_resume; input->update_keyboard = keyboard_update; input->get_keyboard_state = keyboard_getstate; input->suspend_keyboard = keyboard_suspend; input->resume_keyboard = keyboard_resume; input->set_leds = NULL; input->wait_event = wait_event; return TRUE; }
int button_click(fb_info fb_inf) { int mfd; mouse_open(NULL, &mfd); /* highlight ico */ fb_info jpeg_inf; fb_info b_inf; if (init_fb(&b_inf) < 0) { printf("Error init_fb\n"); exit(1); } u8_t *buf24 = decode_jpeg("mainframel.jpg", &jpeg_inf); u8_t * scale_buf = scale24(buf24, b_inf, jpeg_inf); u32_t *buf32 = rgb24to32(scale_buf, b_inf); /* initialize font */ if (init_ft("x.ttf", 45) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } int m_x = fb_inf.w / 2; int m_y = fb_inf.h / 2; fb_drawcursor(fb_inf, m_x, m_y); u8_t buf[8]; mouse_event_t mevent; ico fkey[9]; fkey[0].x = 34; fkey[0].y = 34; fkey[1].x = 34; fkey[1].y = 178; fkey[2].x = 34; fkey[2].y = 322; fkey[3].x = 34; fkey[3].y = 510; fkey[4].x = 34; fkey[4].y = 660; fkey[5].x = 262; fkey[5].y = 46; fkey[6].x = 265; fkey[6].y = 180; fkey[7].x = 469; fkey[7].y = 46; fkey[8].x = 823; fkey[8].y = 595; char *discription[9] = {"图片", "音乐", "电子书", "设置", "时间", "幻灯", "浏览", "关于", "退出"}; int door2 = 1; /* loading ... */ display_jpeg("loading.jpg", fb_inf); display_string("loading", 200, 450, fb_inf, 0x00ff55e3); /* initialize font */ if (init_ft("x.ttf", 84) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } int c = 3; /* loading time */ while (c) { int i; for (i=0; i<3; i++) { display_string(".", 550 + i *100, 450, fb_inf, 0x00ff0000); usleep(200000); } for (i=0; i<3; i++) { display_string(".", 550 + i *100, 450, fb_inf, 0x00ffff55); usleep(200000); } c--; } /* landing mainfframe */ /* initialize font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_jpeg("mainframe.jpg", fb_inf); while (1) { int n = read(mfd, buf, 8); if (n != -1) { mouse_parse(buf,&mevent); fb_restorecursor(fb_inf, m_x, m_y); m_x += mevent.x; m_y += mevent.y; int k = 1; if (m_x>0 && m_x<1024 && m_y>0 && m_y<752) { fb_drawcursor(fb_inf, m_x, m_y); int i; for (i=0; i<9; i++) if (m_x > fkey[i].x && m_x < fkey[i].x + 100 && m_y > fkey[i].y && m_y < fkey[i].y + 100 ) { display_string(discription[i], fkey[i].x + 120, fkey[i].y + 50, fb_inf, 0x00ff0000); int m, n; for (m=fkey[i].y; m< fkey[i].y + 120; m++ ) for (n=fkey[i].x - 20; n< fkey[i].x + 100; n++ ) fb_pixel(b_inf, n, m, buf32[n + m * b_inf.w]); k = 0; /* interface for effect */ if (mevent.button == 1) /* if left button down ,when the cursor is being on the taiji ico occur */ { if (i == 5) { /* initialize font */ if (init_ft("x.ttf", 64) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } char *f2[7] = {"虽","然", "哥", "不", "在", "江", "湖"}; char *f3[12] = {"但", "江", "湖", "仍", "有", "哥", "的", "传", "说", ".", ".", ".",}; fb_info fbinf; if (init_fb(&fbinf) < 0) { printf("Error init_fb\n"); exit(1); } jpgdsp_door( "oba.jpg", fbinf ); int i; for (i=0; i<7; i++) { display_string(f2[i], 240 + i*80, 400, fb_inf, 0x00fffb55); usleep(100000); } for (i=0; i<12; i++) { display_string(f3[i], 100 + i*80, 570, fb_inf, 0x00fffb55); usleep(100000); } sleep(2); /* recover font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } /* interface for you */ fbb(); /* write here */ mevent.button = 0; /* Avoid play again */ display_jpeg("mainframe.jpg", fb_inf);/* back to mainframe */ } if (i == 7 && door2) { display_jpeg("show.jpg", fb_inf); sleep(5); display_jpeg("show_us.jpg", fb_inf); sleep(5); door2 = 0; display_jpeg("mainframe.jpg", fb_inf); } if (i == 8) { /* initialize font */ if (init_ft("x.ttf", 64) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } // move1("log-out.jpg", fb_inf); display_jpeg("log-out.jpg", fb_inf); int i; char *f1[5] = {"待","续", ".", ".", "."}; for (i=0; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000); usleep(100000); } int j = 4; /* replay ... tree times */ while (j) { for (i=2; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ffff55); usleep(200000); } for (i=2; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000); usleep(200000); } j--; } /* initialize font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_string("雁留声工作室", 800, 720, fb_inf, 0x0055ffff); exit(1); } } } } else { m_x -= mevent.x; m_y -= mevent.y; } if (k) { display_jpeg("mainframe.jpg", fb_inf); mevent.button = 0; } } } free(buf24); free(scale_buf); free(buf32); return 0; }
int test_mouse(fb_info fb_inf) { int mfd; mouse_open(NULL, &mfd); int m_x = fb_inf.w / 2; int m_y = fb_inf.h / 2; fb_drawcursor(fb_inf, m_x, m_y); u8_t buf[8]; unsigned int mouce_msg[3]; mouse_event_t mevent; int flag = 0; //for(i = 0; i < 1000; ++i){ while(1) { //mouse_parse(buf,&mevent); //fb_drawcursor(fb_inf, m_x, m_y); int n = read(mfd, buf, 8); if(flag == 1) { flag = 0; fb_drawcursor(fb_inf, m_x, m_y); continue; } if (n != -1){ if((buf[0] & 0x7) ==1) { flag = 10; mouce_msg[0] =buf[0] & 0x7; mouce_msg[1] =m_x; mouce_msg[2] =m_y; write(pipe_fd[1],&mouce_msg,sizeof(mouce_msg)); //m_x +=C_WIDTH; //m_y +=C_HEIGHT; fb_restorecursor(fb_inf, m_x, m_y); usleep(500000); fb_drawcursor(fb_inf, m_x, m_y); //fb_restorecursor(fb_inf, m_x, m_y); continue; } //if(0) /* if(flag > 1) { flag--; mouse_parse(buf,&mevent); m_x += mevent.x; m_y += mevent.y; m_x = m_x>0?m_x:0; m_y = m_y>0?m_y:0; m_x = m_x<(fb_inf.w-C_WIDTH)?m_x:(fb_inf.w-C_WIDTH); m_y = m_y<(fb_inf.h-C_HEIGHT)?m_y:(fb_inf.h-C_HEIGHT); mouce_msg[0] =buf[0] & 0x7; mouce_msg[1] =m_x; mouce_msg[2] =m_y; write(pipe_fd[1],&mouce_msg,sizeof(mouce_msg)); //fb_drawcursor(fb_inf, m_x, m_y); continue; } */ mouse_parse(buf,&mevent); //printf("dx:%d\tdy:%d\n", mevent.x, mevent.y); //printf("mx:%d\tmy:%d\n", m_x, m_y); fb_restorecursor(fb_inf, m_x, m_y); m_x += mevent.x; m_y += mevent.y; m_x = m_x>0?m_x:0; m_y = m_y>0?m_y:0; m_x = m_x<(fb_inf.w-C_WIDTH)?m_x:(fb_inf.w-C_WIDTH); m_y = m_y<(fb_inf.h-C_HEIGHT)?m_y:(fb_inf.h-C_HEIGHT); mouce_msg[0] =buf[0] & 0x7; mouce_msg[1] =m_x; mouce_msg[2] =m_y; //printf("%d\n",mouce_msg[0]); //printf("%d\n",mouce_msg[1]); //printf("%d\n",mouce_msg[2]); write(pipe_fd[1],&mouce_msg,sizeof(mouce_msg)); //usleep(1000); fb_drawcursor(fb_inf, m_x, m_y); //fb_restorecursor(fb_inf, m_x, m_y); //fb_drawcursor(fb_inf, m_x, m_y); } usleep(10000); } return 0; }
int mouse_test(pinfo_t fb) { int fd; mevent_t mevent; int m_x = fb->w/2; int m_y = fb->h/2; int i,j; int flag = 0; int mouse_flag = 0; if((fd = mouse_open("/dev/input/mice")) < 0) { perror("open"); exit(1); } mouse_draw(fb, m_x, m_y); // u8_t buf[] = {0xf3,0xc8,0xf3,0x64,0xf3,0x50}; // if(write(fd, buf, sizeof(buf)) < sizeof(buf)) // { // perror("write"); // fprintf(stderr, "鼠标将不知支持滚轮\n"); // } while(!flag) { if(mouse_parse(fd, &mevent) == 0) { // printf("dx = %d\tdy = %d\tdz = %d\t", mevent.dx, mevent.dy, mevent.dz); mouse_restore(fb, m_x, m_y); m_x += mevent.dx; m_y += mevent.dy; m_x=((m_x<0)? 0:m_x); m_y=((m_y<0)? 0:m_y); if(m_x > (fb->w - C_WIDTH)) { m_x = fb->w -C_WIDTH; } if(m_y > (fb->h - C_HIGHT)) { m_y = fb->h - C_HIGHT; } // printf("mx = %d\tmy = %d\n", m_x, m_y); switch(mevent.button) { case 0: switch(mouse_flag) { case 1: i = 50; while(i > 25) { fb_cirle(fb, m_x, m_y, i, 0x0fff); i--; } for (j = m_y -1; j < m_y+2; j++) { for (i = m_x - 25; i < m_x + 25; i++) { fb_pixel(fb, i, j, 0xff00); } } for (j = m_y -25; j < m_y+25; j++) { for (i = m_x - 1; i < m_x + 2; i++) { fb_pixel(fb, i, j, 0xff00); } } mouse_flag = 0; break; case 2: for (j = m_y -50; j < m_y + 50; j++) { for (i = (m_y-j-50)/2; i <= (50+j-m_y)/2; i++) { fb_pixel(fb, m_x+i/2, j, 0xff000); } } fb_cirle(fb, m_x, m_y, 250, 0x0fff); mouse_flag = 0; break; case 4: flag = 1; for (j = m_y - 12; j < m_y + 12; j++) { for (i = -75; i < 75; i++) { fb_pixel(fb, m_x+i, j, 0x0ff); } } mouse_flag = 0; break; default: break; } break; case 1: mouse_flag = 1; break; case 2: mouse_flag = 2; break; case 4: mouse_flag = 4; break; default: break; } mouse_draw(fb, m_x, m_y); } } close(fd); return 0; }
/* mouse test */ int test_mouse(fb_info fb_inf) { int mfd = -1; u8_t buf[8]; mouse_event_t mevent; int m_x = fb_inf.w / 2; int m_y = fb_inf.h / 2; int p_x; int p_y; mouse_open(NULL, &mfd); fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; fb_draw_cursor(fb_inf, m_x, m_y); for(;;) { if (read(mfd, buf, 8) != -1) { mouse_parse(buf, &mevent); //printf("dx:%d\tdy:%d\n", mevent.x, mevent.y); //printf("mx:%d\tmy:%d\n", m_x, m_y); m_x += mevent.x; m_y += mevent.y; if((m_x >= 0) && (m_x < fb_inf.w - C_WIDTH) && (m_y >= 0) && (m_y < fb_inf.h - C_HEIGHT)) { fb_restore_cursor(fb_inf, p_x, p_y); fb_save_cursor(fb_inf, m_x, m_y); p_x = m_x; p_y = m_y; fb_draw_cursor(fb_inf, m_x, m_y); } else { m_x -= mevent.x; m_y -= mevent.y; } switch (mevent.button) { case 1: // printf("left\n"); break; case 2: // printf("right\n"); break; case 3: // printf("middle\n"); break; default: break; } } usleep(300); } return 0; }