Annotation of qemu/console.h, revision 1.1.1.2

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);
                    305: void monitor_readline(const char *prompt, int is_password,
                    306:                       char *buf, int buf_size);
1.1.1.2 ! root      307: void monitor_suspend(void);
        !           308: void monitor_resume(void);
1.1       root      309: 
                    310: /* readline.c */
                    311: typedef void ReadLineFunc(void *opaque, const char *str);
                    312: 
                    313: extern int completion_index;
                    314: void add_completion(const char *str);
                    315: void readline_handle_byte(int ch);
                    316: void readline_find_completion(const char *cmdline);
                    317: const char *readline_get_history(unsigned int index);
                    318: void readline_start(const char *prompt, int is_password,
                    319:                     ReadLineFunc *readline_func, void *opaque);
                    320: 
                    321: #endif

unix.superglobalmegacorp.com