vnc-test.c

来自「eCos操作系统源码」· C语言 代码 · 共 446 行 · 第 1/2 页

C
446
字号
//==========================================================================////      vnc-test.c////====================================================================// Copyright (C) 2003 Sweeney Design Ltd////  This software is provided 'as-is', without any express or implied//  warranty. Permission is granted to anyone to use this software for//  any purpose, including commercial applications, and to alter it and//  redistribute it freely.//// http://www.sweeneydesign.co.uk////====================================================================////  Test app for eCos VNC-server////==========================================================================#include <vnc-server.h>#include <cyg/kernel/kapi.h>  /* Kernel API */#include <cyg/infra/diag.h>   /* diag_printf() */#include <cyg/error/codes.h>  /* Cyg_ErrNo, ENOENT */#include <cyg/io/io.h>        /* cyg_io_handle_t */#include <sys/select.h>       /* select() functions */#include <fcntl.h>            /* open() */#include <unistd.h>           /* read() */#include <stdlib.h>           /* rand() */void DrawCursor(void);void HideCursor(void);int cursor_x, cursor_y;  /* Cursor position */vnc_frame_format_t *display_info;  /* Display Info */int main(){    int mouse_handle = -1;    int kbd_handle = -1;    cyg_uint8 mouse_data[8], kbd_data[4];    cyg_uint8 last_mouse_button = 0;    cyg_uint32 mouse_len = 0;    cyg_uint32 kbd_len = 0;    vnc_printf_return_t print_area;    cyg_uint16 text_y_pos;    int i, j;    cyg_uint16 bell_text_x_pos, bell_text_y_pos;  /* Bell message text position */    cyg_uint16 bell_text_width, bell_text_height; /* Bell text message size */    fd_set  sock_desc;  /* Set of descriptors for select */    int max_handle;    int bell_text_state = 0;    char bell_message[] = "***** Click on a yellow pixel to sound the bell *****";    /* Get information about the display */    display_info = VncGetInfo();    /* Initialise the VNC server display */    VncInit(VNC_WHITE);    /* Open the mouse device */    mouse_handle = open("/dev/vnc_mouse", O_RDONLY | O_NONBLOCK);    if (mouse_handle < 0)    {        diag_printf("Could not open mouse device: /dev/vnc_mouse\n");    }    /* Open the keyboard device */    kbd_handle = open("/dev/vnc_kbd", O_RDONLY | O_NONBLOCK);    if (kbd_handle < 0)    {        diag_printf("Could not open kbd device: /dev/vnc_kbd\n");    }    /* Draw and label 16 rectangles using the 16 defined colours */    VncFillRect(0, 0, 75, 50, VNC_BLACK);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 1, 1, "BLACK");    VncFillRect(75, 0, 150, 50, VNC_BLUE);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 76, 1, "BLUE");    VncFillRect(150, 0, 225, 50, VNC_GREEN);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 151, 1, "GREEN");    VncFillRect(225, 0, 300, 50, VNC_CYAN);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 226, 1, "CYAN");    VncFillRect(0, 50, 75, 100, VNC_RED);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 1, 51, "RED");    VncFillRect(75, 50, 150, 100, VNC_MAGENTA);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 76, 51, "MAGENTA");    VncFillRect(150, 50, 225, 100, VNC_BROWN);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 151, 51, "BROWN");    VncFillRect(225, 50, 300, 100, VNC_GRAY);    VncPrintf(&font_helvR10, 1, VNC_WHITE, 226, 51, "GRAY");    VncFillRect(0, 100, 75, 150, VNC_LTGRAY);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 1, 101, "LTGRAY");    VncFillRect(75, 100, 150, 150, VNC_LTBLUE);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 76, 101, "LTBLUE");    VncFillRect(150, 100, 225, 150, VNC_LTGREEN);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 151, 101, "LTGREEN");    VncFillRect(225, 100, 300, 150, VNC_LTCYAN);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 226, 101, "LTCYAN");    VncFillRect(0, 150, 75, 200, VNC_LTRED);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 1, 151, "LTRED");    VncFillRect(75, 150, 150, 200, VNC_LTMAGENTA);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 76, 151, "LTMAGENTA");    VncFillRect(150, 150, 225, 200, VNC_YELLOW);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 151, 151, "YELLOW");    VncFillRect(225, 150, 300, 200, VNC_WHITE);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 226, 151, "WHITE");    /* Fade from black to while */    for (i = 0; i < 256; i++)    {        VncDrawVertLine(i, 215, 265, VNC_RGB2COL(i, i, i));    }    VncPrintf(&font_helvR10, 1, VNC_WHITE, 1, 216, "GRAYSCALE");    /* Draw a strip with random coloured pixels */    for (i = 0; i < 256; i++)    {        for (j = 280; j < 330; j++)        {            VncDrawPixel( i, j, VNC_RGB2COL(rand()%256 , rand()%256, rand()%256) );        }    }    /* Write a title for the bar of random colours */    print_area = VncPrintf(&font_helvR10, 0, VNC_BLACK, 1, 281, "RANDOM");    VncFillRect(1, 281, 1+print_area.width , 281+print_area.height, VNC_LTGRAY);    VncPrintf(&font_helvR10, 1, VNC_BLACK, 1, 281, "RANDOM");    /* Report the pixel format */    if (display_info->rgb332)    {        VncPrintf(0, 1, VNC_BLACK, 1, 345, "Pixel format: RGB332");    }    else if (display_info->rgb555)    {        VncPrintf(0, 1, VNC_BLACK, 1, 345, "Pixel format: RGB555");    }    else if (display_info->rgb565)    {        VncPrintf(0, 1, VNC_BLACK, 1, 345, "Pixel format: RGB565");    }    else if (display_info->bgr233)    {        VncPrintf(0, 1, VNC_BLACK, 1, 345, "Pixel format: BGR233");    }    else if (display_info->truecolor0888)    {        VncPrintf(0, 1, VNC_BLACK, 1, 345, "Pixel format: TrueColor0888");    }    else    {        VncPrintf(0, 1, VNC_BLACK, 1, 345, "Pixel format: Unknown");    }    /* Report the frame dimensions */    VncPrintf(0, 1, VNC_BLACK, 1, 360, "Frame size: %d x %d", display_info->frame_width, display_info->frame_height);    /* Write text messages using each of the available fonts */    text_y_pos = 5;    print_area = VncPrintf(&font_rom8x8, 1, VNC_BLACK, 350, text_y_pos, "Hello World!\nUsing rom8x8 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_rom8x16, 1, VNC_BLUE, 350, text_y_pos, "Hello World!\nUsing rom8x16 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_winFreeSansSerif11x13, 1, VNC_CYAN, 350, text_y_pos, "Hello World!\nUsing winFreeSansSerif11x13 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(0, 1, VNC_RED, 350, text_y_pos, "Hello World!\nUsing default (winFreeSystem14x16) font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_helvB10, 1, VNC_MAGENTA, 350, text_y_pos, "Hello World!\nUsing helvB10 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_helvB12, 1, VNC_BROWN, 350, text_y_pos, "Hello World!\nUsing helvB12 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_helvR10, 1, VNC_GREEN, 350, text_y_pos, "Hello World!\nUsing helvR10 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_X5x7, 1, VNC_BLACK, 350, text_y_pos, "Hello World!\nUsing X5x7 font");    text_y_pos += (print_area.height * 1.5);    print_area = VncPrintf(&font_X6x13, 1, VNC_LTRED, 350, text_y_pos, "Hello World!\nUsing X6x13 font");    /* Write the message about ringing the bell */    /* Get the details of the area the text will occupy */    print_area = VncPrintf(0, 0, VNC_BLACK, 0, 0, "%s", bell_message);    bell_text_width = print_area.width;    bell_text_height = print_area.height;    /* Calculate x position to center the bell text */    bell_text_x_pos = (display_info->frame_width - bell_text_width) / 2;    bell_text_y_pos = 400;  /* y position always the same */    /* Draw a background for the bell text */    VncFillRect(bell_text_x_pos,  /* x1 */                bell_text_y_pos,  /* y1 */                bell_text_x_pos + bell_text_width,  /* x2 */                bell_text_y_pos + bell_text_height, /* y2 */                VNC_BLUE);  /* Colour */    /* Write the text on the background */    VncPrintf(0, 1, VNC_YELLOW, bell_text_x_pos, bell_text_y_pos, "%s", bell_message);    /* Initialise the cursor */    cursor_x = display_info->frame_width / 2;    cursor_y = display_info->frame_height / 2;    DrawCursor();    /* Initialse the max handle variable */    max_handle = -1;    if (kbd_handle > max_handle)    {        max_handle = kbd_handle;    }    if (mouse_handle > max_handle)    {        max_handle = mouse_handle;    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?