Mon, 29 Oct 2018 19:37:14 +0100

Michiel Broek <>
Mon, 29 Oct 2018 19:37:14 +0100
changeset 30
parent 0

Swapped MLT and HLT SSR pins to match he real hardware. More doxygen changes.

 * @file vnc-server.h
 * @brief VNC server original written for eCos.
 * The VNC server runs on the target platform and waits for a client 
 * (vncviewer program running on a PC) to connect via an ethernet connection
 * (port 5900). Once a client has connected, the target platform has a 
 * virtual screen, keyboard and mouse.
 * This port of the VNC server has been designed with some limitations in 
 * order to keep memory and processor power requirements to a minimum.
 * The VNC client must accept the settings that the VNC server suggests (bits-per-pixel, 
 * number-of-colours and so on as specified at build time with the eCos configuration 
 * tool) or the VNC server will just disconnect.
 * The VNC server only supports CoRRE encoding and RAW encoding for sending 
 * display data to the client.
 * The VNC server does not support password authentication, the client is able 
 * to connect without the user typing in a password.
 * Only one VNC client may connect to the VNC server at a time.
 * In reality these limitations are not a problem.
 * @author Chris Garry <>
 * @author Michiel Broek.

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <stdbool.h>
#include <errno.h>
#include <sys/unistd.h>
#include "lwip/sockets.h"
#include "lwip/netdb.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/event_groups.h"

 * @brief Type to hold the frame format details
typedef struct
    uint16_t	frame_width;			///< Frame width
    uint16_t	frame_height;			///< Frame height
    void	*frame_buffer;			///< Frame buffer data
    bool	rgb332;				///< 8 bits RGB format (only one is set).
    bool	rgb555;				///< 15 bits RGB
    bool	rgb565;				///< 16 bits RGB
    bool	bgr233;				///< 8 bits BGR format
    bool	truecolor0888;			///< 24 bits truecolor.
} vnc_frame_format_t;

typedef uint8_t vnc_color_t;

 * @brief Start the VNC server. Two tasks are started, one to handle the
 *        clients and one that serves the updates of the framebuffer.
void VncStartup(void);

 * @brief Clear the display and set a background color.
 * @param color Then RGB color for the background.
void  VncCls(vnc_color_t color);

 * @brief Draw a pixel on the display.
 * @param x The horizontal position of the pixel.
 * @param y The vertical position of the pixel.
 * @param color The RGB value of the pixel.
void VncDrawPixel(uint16_t x, uint16_t y, vnc_color_t color);

 * @brief Draw a horizontal line on the display.
 * @param x1 Start horizontal position.
 * @param x2 End of the horizontal position.
 * @param y The vertical position of the line.
 * @param color The RGB color of the line.
void VncDrawHorzLine(uint16_t x1, uint16_t x2, uint16_t y, vnc_color_t color);

 * @brief Draw a vertical line on the display.
 * @param x The jprizontal position of the line.
 * @param y1 The vertical top position of the line.
 * @param y2 The vertical bottom position of the line.
 * @param color The RGB color of the line.
void VncDrawVertLine(uint16_t x, uint16_t y1, uint16_t y2, vnc_color_t color);

 * @brief Fill a rectangle with the given color.
 * @param x1 The top-left horizontal start position.
 * @param y1 The top-left vertical start position.
 * @param x2 The bottom-right horizontal end position.
 * @param y2 The bottom-right vertical end position.
 * @param color The RGB color of the line.
void VncFillRect(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, vnc_color_t color);

 * @brief Sound the bell on the client computer.
void VncSoundBell(void);

 * @brief Macro to convert from RGB to colour values
#define VNC_RGB2COL(r,g,b) (vnc_color_t)(((((uint8_t)r)&0xE0) >> 0) | ((((uint8_t)g)&0xE0) >> 3) | ((((uint8_t)b)&0xC0) >> 6))

 * @brief Start task for a websocket client.
int VncStartWS(int num);

 * @brief Stop task for a websocket client.
void VncStopWS(int num);

 * @brief Remote websocket message to the VNC server.
void VncGetWSmessage(char *msg, uint16_t len);