Annotation of qemu/console.h, revision 1.1.1.3

1.1       root        1: #ifndef CONSOLE_H
                      2: #define CONSOLE_H
                      3: 
                      4: #include "qemu-char.h"
                      5: 
                      6: /* keyboard/mouse support */
                      7: 
                      8: #define MOUSE_EVENT_LBUTTON 0x01
                      9: #define MOUSE_EVENT_RBUTTON 0x02
                     10: #define MOUSE_EVENT_MBUTTON 0x04
                     11: 
1.1.1.2   root       12: /* in ms */
                     13: #define GUI_REFRESH_INTERVAL 30
                     14: 
1.1       root       15: typedef void QEMUPutKBDEvent(void *opaque, int keycode);
                     16: typedef void QEMUPutMouseEvent(void *opaque, int dx, int dy, int dz, int buttons_state);
                     17: 
                     18: typedef struct QEMUPutMouseEntry {
                     19:     QEMUPutMouseEvent *qemu_put_mouse_event;
                     20:     void *qemu_put_mouse_event_opaque;
                     21:     int qemu_put_mouse_event_absolute;
                     22:     char *qemu_put_mouse_event_name;
                     23: 
                     24:     /* used internally by qemu for handling mice */
                     25:     struct QEMUPutMouseEntry *next;
                     26: } QEMUPutMouseEntry;
                     27: 
                     28: void qemu_add_kbd_event_handler(QEMUPutKBDEvent *func, void *opaque);
                     29: QEMUPutMouseEntry *qemu_add_mouse_event_handler(QEMUPutMouseEvent *func,
                     30:                                                 void *opaque, int absolute,
                     31:                                                 const char *name);
                     32: void qemu_remove_mouse_event_handler(QEMUPutMouseEntry *entry);
                     33: 
                     34: void kbd_put_keycode(int keycode);
                     35: void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
                     36: int kbd_mouse_is_absolute(void);
                     37: 
1.1.1.2   root       38: struct mouse_transform_info_s {
                     39:     /* Touchscreen resolution */
                     40:     int x;
                     41:     int y;
                     42:     /* Calibration values as used/generated by tslib */
                     43:     int a[7];
                     44: };
                     45: 
1.1       root       46: void do_info_mice(void);
                     47: void do_mouse_set(int index);
                     48: 
                     49: /* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
                     50:    constants) */
                     51: #define QEMU_KEY_ESC1(c) ((c) | 0xe100)
                     52: #define QEMU_KEY_BACKSPACE  0x007f
                     53: #define QEMU_KEY_UP         QEMU_KEY_ESC1('A')
                     54: #define QEMU_KEY_DOWN       QEMU_KEY_ESC1('B')
                     55: #define QEMU_KEY_RIGHT      QEMU_KEY_ESC1('C')
                     56: #define QEMU_KEY_LEFT       QEMU_KEY_ESC1('D')
                     57: #define QEMU_KEY_HOME       QEMU_KEY_ESC1(1)
                     58: #define QEMU_KEY_END        QEMU_KEY_ESC1(4)
                     59: #define QEMU_KEY_PAGEUP     QEMU_KEY_ESC1(5)
                     60: #define QEMU_KEY_PAGEDOWN   QEMU_KEY_ESC1(6)
                     61: #define QEMU_KEY_DELETE     QEMU_KEY_ESC1(3)
                     62: 
                     63: #define QEMU_KEY_CTRL_UP         0xe400
                     64: #define QEMU_KEY_CTRL_DOWN       0xe401
                     65: #define QEMU_KEY_CTRL_LEFT       0xe402
                     66: #define QEMU_KEY_CTRL_RIGHT      0xe403
                     67: #define QEMU_KEY_CTRL_HOME       0xe404
                     68: #define QEMU_KEY_CTRL_END        0xe405
                     69: #define QEMU_KEY_CTRL_PAGEUP     0xe406
                     70: #define QEMU_KEY_CTRL_PAGEDOWN   0xe407
                     71: 
                     72: void kbd_put_keysym(int keysym);
                     73: 
                     74: /* consoles */
                     75: 
1.1.1.2   root       76: #define QEMU_BIG_ENDIAN_FLAG    0x01
                     77: #define QEMU_ALLOCATED_FLAG     0x02
                     78: 
                     79: struct PixelFormat {
                     80:     uint8_t bits_per_pixel;
                     81:     uint8_t bytes_per_pixel;
                     82:     uint8_t depth; /* color depth in bits */
                     83:     uint32_t rmask, gmask, bmask, amask;
                     84:     uint8_t rshift, gshift, bshift, ashift;
                     85:     uint8_t rmax, gmax, bmax, amax;
                     86:     uint8_t rbits, gbits, bbits, abits;
                     87: };
                     88: 
                     89: struct DisplaySurface {
                     90:     uint8_t flags;
1.1       root       91:     int width;
                     92:     int height;
1.1.1.2   root       93:     int linesize;        /* bytes per line */
                     94:     uint8_t *data;
                     95: 
                     96:     struct PixelFormat pf;
                     97: };
                     98: 
                     99: struct DisplayChangeListener {
                    100:     int idle;
                    101:     uint64_t gui_timer_interval;
1.1       root      102: 
                    103:     void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
1.1.1.2   root      104:     void (*dpy_resize)(struct DisplayState *s);
                    105:     void (*dpy_setdata)(struct DisplayState *s);
1.1       root      106:     void (*dpy_refresh)(struct DisplayState *s);
                    107:     void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
                    108:                      int dst_x, int dst_y, int w, int h);
                    109:     void (*dpy_fill)(struct DisplayState *s, int x, int y,
                    110:                      int w, int h, uint32_t c);
1.1.1.2   root      111:     void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
                    112: 
                    113:     struct DisplayChangeListener *next;
                    114: };
                    115: 
                    116: struct DisplayState {
                    117:     struct DisplaySurface *surface;
                    118:     void *opaque;
                    119:     struct QEMUTimer *gui_timer;
                    120: 
                    121:     struct DisplayChangeListener* listeners;
                    122: 
1.1       root      123:     void (*mouse_set)(int x, int y, int on);
                    124:     void (*cursor_define)(int width, int height, int bpp, int hot_x, int hot_y,
                    125:                           uint8_t *image, uint8_t *mask);
1.1.1.2   root      126: 
                    127:     struct DisplayState *next;
1.1       root      128: };
                    129: 
1.1.1.2   root      130: void register_displaystate(DisplayState *ds);
                    131: DisplayState *get_displaystate(void);
                    132: DisplaySurface* qemu_create_displaysurface(int width, int height, int bpp, int linesize);
                    133: DisplaySurface* qemu_resize_displaysurface(DisplaySurface *surface,
                    134:                                            int width, int height, int bpp, int linesize);
                    135: DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
                    136:                                                 int linesize, uint8_t *data);
                    137: void qemu_free_displaysurface(DisplaySurface *surface);
                    138: PixelFormat qemu_different_endianness_pixelformat(int bpp);
                    139: PixelFormat qemu_default_pixelformat(int bpp);
                    140: 
                    141: static inline int is_buffer_shared(DisplaySurface *surface)
                    142: {
                    143:     return (!(surface->flags & QEMU_ALLOCATED_FLAG));
                    144: }
                    145: 
                    146: static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
                    147: {
                    148:     dcl->next = ds->listeners;
                    149:     ds->listeners = dcl;
                    150: }
                    151: 
1.1       root      152: static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
                    153: {
1.1.1.2   root      154:     struct DisplayChangeListener *dcl = s->listeners;
                    155:     while (dcl != NULL) {
                    156:         dcl->dpy_update(s, x, y, w, h);
                    157:         dcl = dcl->next;
                    158:     }
                    159: }
                    160: 
                    161: static inline void dpy_resize(DisplayState *s)
                    162: {
                    163:     struct DisplayChangeListener *dcl = s->listeners;
                    164:     while (dcl != NULL) {
                    165:         dcl->dpy_resize(s);
                    166:         dcl = dcl->next;
                    167:     }
                    168: }
                    169: 
                    170: static inline void dpy_setdata(DisplayState *s)
                    171: {
                    172:     struct DisplayChangeListener *dcl = s->listeners;
                    173:     while (dcl != NULL) {
                    174:         if (dcl->dpy_setdata) dcl->dpy_setdata(s);
                    175:         dcl = dcl->next;
                    176:     }
                    177: }
                    178: 
                    179: static inline void dpy_refresh(DisplayState *s)
                    180: {
                    181:     struct DisplayChangeListener *dcl = s->listeners;
                    182:     while (dcl != NULL) {
                    183:         if (dcl->dpy_refresh) dcl->dpy_refresh(s);
                    184:         dcl = dcl->next;
                    185:     }
                    186: }
                    187: 
                    188: static inline void dpy_copy(struct DisplayState *s, int src_x, int src_y,
                    189:                              int dst_x, int dst_y, int w, int h) {
                    190:     struct DisplayChangeListener *dcl = s->listeners;
                    191:     while (dcl != NULL) {
                    192:         if (dcl->dpy_copy)
                    193:             dcl->dpy_copy(s, src_x, src_y, dst_x, dst_y, w, h);
                    194:         else /* TODO */
                    195:             dcl->dpy_update(s, dst_x, dst_y, w, h);
                    196:         dcl = dcl->next;
                    197:     }
                    198: }
                    199: 
                    200: static inline void dpy_fill(struct DisplayState *s, int x, int y,
                    201:                              int w, int h, uint32_t c) {
                    202:     struct DisplayChangeListener *dcl = s->listeners;
                    203:     while (dcl != NULL) {
                    204:         if (dcl->dpy_fill) dcl->dpy_fill(s, x, y, w, h, c);
                    205:         dcl = dcl->next;
                    206:     }
                    207: }
                    208: 
                    209: static inline void dpy_cursor(struct DisplayState *s, int x, int y) {
                    210:     struct DisplayChangeListener *dcl = s->listeners;
                    211:     while (dcl != NULL) {
                    212:         if (dcl->dpy_text_cursor) dcl->dpy_text_cursor(s, x, y);
                    213:         dcl = dcl->next;
                    214:     }
                    215: }
                    216: 
                    217: static inline int ds_get_linesize(DisplayState *ds)
                    218: {
                    219:     return ds->surface->linesize;
1.1       root      220: }
                    221: 
1.1.1.2   root      222: static inline uint8_t* ds_get_data(DisplayState *ds)
1.1       root      223: {
1.1.1.2   root      224:     return ds->surface->data;
                    225: }
                    226: 
                    227: static inline int ds_get_width(DisplayState *ds)
                    228: {
                    229:     return ds->surface->width;
                    230: }
                    231: 
                    232: static inline int ds_get_height(DisplayState *ds)
                    233: {
                    234:     return ds->surface->height;
                    235: }
                    236: 
                    237: static inline int ds_get_bits_per_pixel(DisplayState *ds)
                    238: {
                    239:     return ds->surface->pf.bits_per_pixel;
                    240: }
                    241: 
                    242: static inline int ds_get_bytes_per_pixel(DisplayState *ds)
                    243: {
                    244:     return ds->surface->pf.bytes_per_pixel;
                    245: }
                    246: 
                    247: typedef unsigned long console_ch_t;
                    248: static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
                    249: {
                    250:     cpu_to_le32wu((uint32_t *) dest, ch);
1.1       root      251: }
                    252: 
                    253: typedef void (*vga_hw_update_ptr)(void *);
                    254: typedef void (*vga_hw_invalidate_ptr)(void *);
                    255: typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
1.1.1.2   root      256: typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
                    257: 
                    258: DisplayState *graphic_console_init(vga_hw_update_ptr update,
                    259:                                    vga_hw_invalidate_ptr invalidate,
                    260:                                    vga_hw_screen_dump_ptr screen_dump,
                    261:                                    vga_hw_text_update_ptr text_update,
                    262:                                    void *opaque);
1.1       root      263: 
                    264: void vga_hw_update(void);
                    265: void vga_hw_invalidate(void);
                    266: void vga_hw_screen_dump(const char *filename);
1.1.1.2   root      267: void vga_hw_text_update(console_ch_t *chardata);
1.1       root      268: 
                    269: int is_graphic_console(void);
1.1.1.2   root      270: int is_fixedsize_console(void);
                    271: CharDriverState *text_console_init(const char *p);
                    272: void text_consoles_set_display(DisplayState *ds);
1.1       root      273: void console_select(unsigned int index);
                    274: void console_color_init(DisplayState *ds);
1.1.1.2   root      275: void qemu_console_resize(DisplayState *ds, int width, int height);
                    276: void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
                    277:                        int dst_x, int dst_y, int w, int h);
1.1       root      278: 
                    279: /* sdl.c */
                    280: void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
                    281: 
                    282: /* cocoa.m */
                    283: void cocoa_display_init(DisplayState *ds, int full_screen);
                    284: 
                    285: /* vnc.c */
                    286: void vnc_display_init(DisplayState *ds);
                    287: void vnc_display_close(DisplayState *ds);
                    288: int vnc_display_open(DisplayState *ds, const char *display);
                    289: int vnc_display_password(DisplayState *ds, const char *password);
                    290: void do_info_vnc(void);
                    291: 
1.1.1.2   root      292: /* curses.c */
                    293: void curses_display_init(DisplayState *ds, int full_screen);
1.1       root      294: 
                    295: /* FIXME: term_printf et al should probably go elsewhere so everything
                    296:    does not need to include console.h  */
                    297: /* monitor.c */
                    298: void monitor_init(CharDriverState *hd, int show_banner);
                    299: void term_puts(const char *str);
                    300: void term_vprintf(const char *fmt, va_list ap);
                    301: void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
                    302: void term_print_filename(const char *filename);
                    303: void term_flush(void);
                    304: void term_print_help(void);
1.1.1.2   root      305: void monitor_suspend(void);
                    306: void monitor_resume(void);
1.1.1.3 ! root      307: int monitor_read_bdrv_key(BlockDriverState *bs);
1.1       root      308: 
                    309: /* readline.c */
                    310: typedef void ReadLineFunc(void *opaque, const char *str);
                    311: 
                    312: extern int completion_index;
                    313: void add_completion(const char *str);
                    314: void readline_handle_byte(int ch);
                    315: void readline_find_completion(const char *cmdline);
                    316: const char *readline_get_history(unsigned int index);
                    317: void readline_start(const char *prompt, int is_password,
                    318:                     ReadLineFunc *readline_func, void *opaque);
                    319: 
                    320: #endif

unix.superglobalmegacorp.com