Annotation of qemu/console.h, revision 1.1.1.5

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

unix.superglobalmegacorp.com