📄 vnc-test.c
字号:
//==========================================================================
//
// 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -