| /* |
| * Copyright (c) 2002, Adam Dunkels. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above |
| * copyright notice, this list of conditions and the following |
| * disclaimer in the documentation and/or other materials provided |
| * with the distribution. |
| * 3. The name of the author may not be used to endorse or promote |
| * products derived from this software without specific prior |
| * written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
| * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE |
| * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| * This file is part of the Contiki VNC client. |
| * |
| * $Id: vnc-viewer.h,v 1.8 2004/09/12 07:33:26 adamdunkels Exp $ |
| * |
| */ |
| |
| #ifndef __VNC_VIEWER_H__ |
| #define __VNC_VIEWER_H__ |
| |
| #include "ek.h" |
| |
| struct vnc_viewer_state; |
| |
| typedef unsigned long u32_t; |
| |
| void vnc_viewer_init(void); |
| void vnc_viewer_appcall(void *nullptr); |
| |
| void vnc_viewer_connect(u16_t *server, u8_t display); |
| void vnc_viewer_close(void); |
| |
| /* Callback: redraws the VNC viewer bitmap area. */ |
| void vnc_viewer_refresh(void); |
| |
| #define VNC_POINTER_EVENT RFB_POINTER_EVENT |
| #define VNC_KEY_EVENT RFB_KEY_EVENT |
| #define VNC_UPDATERQ_EVENT 7 |
| |
| #define VNC_VIEWER_POST_POINTER_EVENT(x, y, button) \ |
| vnc_viewer_post_event(VNC_POINTER_EVENT, button, x, y, 0) |
| |
| #define VNC_VIEWER_POST_KEY_EVENT(key) \ |
| vnc_viewer_post_event(VNC_KEY_EVENT, key, 0, 0, 0) |
| |
| #define VNC_VIEWER_POST_UPDATERQ_EVENT(x1,y1,x2,y2) \ |
| vnc_viewer_post_event(VNC_UPDATERQ_EVENT, x1, y1, x2, y2) |
| |
| void vnc_viewer_post_event(u8_t event, |
| u16_t data1, u16_t data2, |
| u16_t data3, u16_t data4); |
| |
| /* UIP_APPCALL: the name of the application function. This function |
| must return void and take no arguments (i.e., C type "void |
| appfunc(void)"). */ |
| #ifndef UIP_APPCALL |
| #define UIP_APPCALL vnc_viewer_app |
| #endif |
| |
| struct vnc_key_event { |
| u8_t down; |
| u16_t key; |
| }; |
| |
| struct vnc_pointer_event { |
| u8_t buttonmask; |
| u16_t x, y; |
| }; |
| |
| struct vnc_updaterq_event { |
| u16_t x, y; |
| u16_t w, h; |
| }; |
| |
| struct vnc_event { |
| u8_t type; |
| union { |
| struct vnc_key_event key; |
| struct vnc_pointer_event ptr; |
| struct vnc_updaterq_event urq; |
| } ev; |
| }; |
| |
| enum vnc_sendmsg { |
| VNC_SEND_NONE, |
| |
| VNC_SEND_VERSION, |
| VNC_SEND_AUTH, |
| VNC_SEND_CINIT, |
| VNC_SEND_PFMT, |
| VNC_SEND_ENCODINGS, |
| |
| VNC_SEND_UPDATERQ, |
| VNC_SEND_UPDATERQ_INC, |
| VNC_SEND_EVENTS, |
| }; |
| |
| enum vnc_waitmsg { |
| VNC_WAIT_NONE, |
| |
| VNC_WAIT_VERSION, |
| VNC_WAIT_AUTH, |
| VNC_WAIT_AUTH_RESPONSE, |
| VNC_WAIT_SINIT, |
| |
| VNC_WAIT_UPDATE, |
| VNC_WAIT_UPDATE_RECT, |
| |
| }; |
| |
| |
| enum vnc_rectstate { |
| VNC_RECTSTATE_NONE, |
| VNC_RECTSTATE_RAW, |
| VNC_RECTSTATE_RRE, |
| }; |
| |
| struct vnc_viewer_state { |
| u8_t close; |
| u16_t w, h; |
| |
| u8_t sendmsg; |
| |
| u8_t waitmsg; |
| |
| u16_t rectsleft; |
| |
| u8_t rectstate; |
| u32_t rectstateleft; |
| u16_t rectstatex, rectstatey; |
| u16_t rectstateh, rectstatew; |
| u16_t rectstatex0, rectstatey0; |
| u16_t rectstatex2, rectstatey2; |
| |
| |
| u16_t eventptr_acked; |
| u16_t eventptr_unacked; |
| u16_t eventptr_next; |
| #define VNC_EVENTQUEUE_SIZE 32 |
| struct vnc_event event_queue[VNC_EVENTQUEUE_SIZE]; |
| |
| |
| u16_t bufferleft; |
| u16_t buffersize; |
| #define VNC_BUFFERSIZE 64 |
| u8_t buffer[VNC_BUFFERSIZE]; |
| }; |
| |
| extern struct vnc_viewer_state vnc_viewer_state; |
| |
| /* Definitions of the RFB (Remote Frame Buffer) protocol |
| structures and constants. */ |
| |
| #include "uipopt.h" |
| |
| |
| /* Generic rectangle - x, y coordinates, width and height. */ |
| struct rfb_rect { |
| u16_t x; |
| u16_t y; |
| u16_t w; |
| u16_t h; |
| }; |
| |
| /* Pixel format definition. */ |
| struct rfb_pixel_format { |
| u8_t bps; /* Bits per pixel: 8, 16 or 32. */ |
| u8_t depth; /* Color depth: 8-32 */ |
| u8_t endian; /* 1 - big endian (motorola), 0 - little endian |
| (x86) */ |
| u8_t truecolor; /* 1 - true color is used, 0 - true color is not used. */ |
| |
| /* The following fields are only used if true color is used. */ |
| u16_t red_max, green_max, blue_max; |
| u8_t red_shift, green_shift, blue_shift; |
| u8_t pad1; |
| u16_t pad2; |
| }; |
| |
| |
| /* RFB authentication constants. */ |
| |
| #define RFB_AUTH_FAILED 0 |
| #define RFB_AUTH_NONE 1 |
| #define RFB_AUTH_VNC 2 |
| |
| #define RFB_VNC_AUTH_OK 0 |
| #define RFB_VNC_AUTH_FAILED 1 |
| #define RFB_VNC_AUTH_TOOMANY 2 |
| |
| /* RFB message types. */ |
| |
| /* From server to client: */ |
| #define RFB_FB_UPDATE 0 |
| #define RFB_SET_COLORMAP_ENTRIES 1 |
| #define RFB_BELL 2 |
| #define RFB_SERVER_CUT_TEXT 3 |
| |
| /* From client to server. */ |
| #define RFB_SET_PIXEL_FORMAT 0 |
| #define RFB_FIX_COLORMAP_ENTRIES 1 |
| #define RFB_SET_ENCODINGS 2 |
| #define RFB_FB_UPDATE_REQ 3 |
| #define RFB_KEY_EVENT 4 |
| #define RFB_POINTER_EVENT 5 |
| #define RFB_CLIENT_CUT_TEXT 6 |
| |
| /* Encoding types. */ |
| #define RFB_ENC_RAW 0 |
| #define RFB_ENC_COPYRECT 1 |
| #define RFB_ENC_RRE 2 |
| #define RFB_ENC_CORRE 3 |
| #define RFB_ENC_HEXTILE 4 |
| |
| /* Message definitions. */ |
| |
| /* Server to client messages. */ |
| |
| struct rfb_server_init { |
| u16_t width; |
| u16_t height; |
| struct rfb_pixel_format format; |
| u8_t namelength[4]; |
| /* Followed by name. */ |
| }; |
| |
| struct rfb_fb_update { |
| u8_t type; |
| u8_t pad; |
| u16_t rects; /* Number of rectanges (struct rfb_fb_update_rect_hdr + |
| data) that follows. */ |
| }; |
| |
| struct rfb_fb_update_rect_hdr { |
| struct rfb_rect rect; |
| u8_t encoding[4]; |
| }; |
| |
| struct rfb_copy_rect { |
| u16_t srcx; |
| u16_t srcy; |
| }; |
| |
| struct rfb_rre_hdr { |
| u16_t subrects[2]; /* Number of subrectangles (struct |
| rfb_rre_subrect) to follow. */ |
| u8_t bgpixel; |
| }; |
| |
| struct rfb_rre_subrect { |
| u8_t pixel; |
| struct rfb_rect rect; |
| }; |
| |
| struct rfb_corre_rect { |
| u8_t x; |
| u8_t y; |
| u8_t w; |
| u8_t h; |
| }; |
| |
| /* Client to server messages. */ |
| |
| struct rfb_set_pixel_format { |
| u8_t type; |
| u8_t pad; |
| u16_t pad2; |
| struct rfb_pixel_format format; |
| }; |
| |
| struct rfb_fix_colormap_entries { |
| u8_t type; |
| u8_t pad; |
| u16_t firstcolor; |
| u16_t colors; |
| }; |
| |
| struct rfb_set_encodings { |
| u8_t type; |
| u8_t pad; |
| u16_t encodings; |
| }; |
| |
| struct rfb_fb_update_request { |
| u8_t type; |
| u8_t incremental; |
| u16_t x; |
| u16_t y; |
| u16_t w; |
| u16_t h; |
| }; |
| |
| struct rfb_key_event { |
| u8_t type; |
| u8_t down; |
| u16_t pad; |
| u8_t key[4]; |
| }; |
| |
| #define RFB_BUTTON_MASK1 1 |
| #define RFB_BUTTON_MASK2 2 |
| #define RFB_BUTTON_MASK3 4 |
| struct rfb_pointer_event { |
| u8_t type; |
| u8_t buttonmask; |
| u16_t x; |
| u16_t y; |
| }; |
| |
| #endif /* __VNC_VIEWER_H__ */ |