Annotation of qemu/console.h, revision 1.1.1.4

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.4 ! root       38: struct MouseTransformInfo {
1.1.1.2   root       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.1.4 ! root       46: void do_info_mice(Monitor *mon);
        !            47: void do_mouse_set(Monitor *mon, int index);
1.1       root       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
1.1.1.4 ! root       78: #define QEMU_REALPIXELS_FLAG    0x04
1.1.1.2   root       79: 
                     80: struct PixelFormat {
                     81:     uint8_t bits_per_pixel;
                     82:     uint8_t bytes_per_pixel;
                     83:     uint8_t depth; /* color depth in bits */
                     84:     uint32_t rmask, gmask, bmask, amask;
                     85:     uint8_t rshift, gshift, bshift, ashift;
                     86:     uint8_t rmax, gmax, bmax, amax;
                     87:     uint8_t rbits, gbits, bbits, abits;
                     88: };
                     89: 
                     90: struct DisplaySurface {
                     91:     uint8_t flags;
1.1       root       92:     int width;
                     93:     int height;
1.1.1.2   root       94:     int linesize;        /* bytes per line */
                     95:     uint8_t *data;
                     96: 
                     97:     struct PixelFormat pf;
                     98: };
                     99: 
                    100: struct DisplayChangeListener {
                    101:     int idle;
                    102:     uint64_t gui_timer_interval;
1.1       root      103: 
                    104:     void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
1.1.1.2   root      105:     void (*dpy_resize)(struct DisplayState *s);
                    106:     void (*dpy_setdata)(struct DisplayState *s);
1.1       root      107:     void (*dpy_refresh)(struct DisplayState *s);
                    108:     void (*dpy_copy)(struct DisplayState *s, int src_x, int src_y,
                    109:                      int dst_x, int dst_y, int w, int h);
                    110:     void (*dpy_fill)(struct DisplayState *s, int x, int y,
                    111:                      int w, int h, uint32_t c);
1.1.1.2   root      112:     void (*dpy_text_cursor)(struct DisplayState *s, int x, int y);
                    113: 
                    114:     struct DisplayChangeListener *next;
                    115: };
                    116: 
1.1.1.4 ! root      117: struct DisplayAllocator {
        !           118:     DisplaySurface* (*create_displaysurface)(int width, int height);
        !           119:     DisplaySurface* (*resize_displaysurface)(DisplaySurface *surface, int width, int height);
        !           120:     void (*free_displaysurface)(DisplaySurface *surface);
        !           121: };
        !           122: 
1.1.1.2   root      123: struct DisplayState {
                    124:     struct DisplaySurface *surface;
                    125:     void *opaque;
                    126:     struct QEMUTimer *gui_timer;
                    127: 
1.1.1.4 ! root      128:     struct DisplayAllocator* allocator;
1.1.1.2   root      129:     struct DisplayChangeListener* listeners;
                    130: 
1.1       root      131:     void (*mouse_set)(int x, int y, int on);
                    132:     void (*cursor_define)(int width, int height, int bpp, int hot_x, int hot_y,
                    133:                           uint8_t *image, uint8_t *mask);
1.1.1.2   root      134: 
                    135:     struct DisplayState *next;
1.1       root      136: };
                    137: 
1.1.1.2   root      138: void register_displaystate(DisplayState *ds);
                    139: DisplayState *get_displaystate(void);
                    140: DisplaySurface* qemu_create_displaysurface_from(int width, int height, int bpp,
                    141:                                                 int linesize, uint8_t *data);
                    142: PixelFormat qemu_different_endianness_pixelformat(int bpp);
                    143: PixelFormat qemu_default_pixelformat(int bpp);
                    144: 
1.1.1.4 ! root      145: extern struct DisplayAllocator default_allocator;
        !           146: DisplayAllocator *register_displayallocator(DisplayState *ds, DisplayAllocator *da);
        !           147: DisplaySurface* defaultallocator_create_displaysurface(int width, int height);
        !           148: DisplaySurface* defaultallocator_resize_displaysurface(DisplaySurface *surface, int width, int height);
        !           149: void defaultallocator_free_displaysurface(DisplaySurface *surface);
        !           150: 
        !           151: static inline DisplaySurface* qemu_create_displaysurface(DisplayState *ds, int width, int height)
        !           152: {
        !           153:     return ds->allocator->create_displaysurface(width, height);    
        !           154: }
        !           155: 
        !           156: static inline DisplaySurface* qemu_resize_displaysurface(DisplayState *ds, int width, int height)
        !           157: {
        !           158:     return ds->allocator->resize_displaysurface(ds->surface, width, height);
        !           159: }
        !           160: 
        !           161: static inline void qemu_free_displaysurface(DisplayState *ds)
        !           162: {
        !           163:     ds->allocator->free_displaysurface(ds->surface);
        !           164: }
        !           165: 
        !           166: static inline int is_surface_bgr(DisplaySurface *surface)
        !           167: {
        !           168:     if (surface->pf.bits_per_pixel == 32 && surface->pf.rshift == 0)
        !           169:         return 1;
        !           170:     else
        !           171:         return 0;
        !           172: }
        !           173: 
1.1.1.2   root      174: static inline int is_buffer_shared(DisplaySurface *surface)
                    175: {
1.1.1.4 ! root      176:     return (!(surface->flags & QEMU_ALLOCATED_FLAG) &&
        !           177:             !(surface->flags & QEMU_REALPIXELS_FLAG));
1.1.1.2   root      178: }
                    179: 
                    180: static inline void register_displaychangelistener(DisplayState *ds, DisplayChangeListener *dcl)
                    181: {
                    182:     dcl->next = ds->listeners;
                    183:     ds->listeners = dcl;
                    184: }
                    185: 
1.1       root      186: static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
                    187: {
1.1.1.2   root      188:     struct DisplayChangeListener *dcl = s->listeners;
                    189:     while (dcl != NULL) {
                    190:         dcl->dpy_update(s, x, y, w, h);
                    191:         dcl = dcl->next;
                    192:     }
                    193: }
                    194: 
                    195: static inline void dpy_resize(DisplayState *s)
                    196: {
                    197:     struct DisplayChangeListener *dcl = s->listeners;
                    198:     while (dcl != NULL) {
                    199:         dcl->dpy_resize(s);
                    200:         dcl = dcl->next;
                    201:     }
                    202: }
                    203: 
                    204: static inline void dpy_setdata(DisplayState *s)
                    205: {
                    206:     struct DisplayChangeListener *dcl = s->listeners;
                    207:     while (dcl != NULL) {
                    208:         if (dcl->dpy_setdata) dcl->dpy_setdata(s);
                    209:         dcl = dcl->next;
                    210:     }
                    211: }
                    212: 
                    213: static inline void dpy_refresh(DisplayState *s)
                    214: {
                    215:     struct DisplayChangeListener *dcl = s->listeners;
                    216:     while (dcl != NULL) {
                    217:         if (dcl->dpy_refresh) dcl->dpy_refresh(s);
                    218:         dcl = dcl->next;
                    219:     }
                    220: }
                    221: 
                    222: static inline void dpy_copy(struct DisplayState *s, int src_x, int src_y,
                    223:                              int dst_x, int dst_y, int w, int h) {
                    224:     struct DisplayChangeListener *dcl = s->listeners;
                    225:     while (dcl != NULL) {
                    226:         if (dcl->dpy_copy)
                    227:             dcl->dpy_copy(s, src_x, src_y, dst_x, dst_y, w, h);
                    228:         else /* TODO */
                    229:             dcl->dpy_update(s, dst_x, dst_y, w, h);
                    230:         dcl = dcl->next;
                    231:     }
                    232: }
                    233: 
                    234: static inline void dpy_fill(struct DisplayState *s, int x, int y,
                    235:                              int w, int h, uint32_t c) {
                    236:     struct DisplayChangeListener *dcl = s->listeners;
                    237:     while (dcl != NULL) {
                    238:         if (dcl->dpy_fill) dcl->dpy_fill(s, x, y, w, h, c);
                    239:         dcl = dcl->next;
                    240:     }
                    241: }
                    242: 
                    243: static inline void dpy_cursor(struct DisplayState *s, int x, int y) {
                    244:     struct DisplayChangeListener *dcl = s->listeners;
                    245:     while (dcl != NULL) {
                    246:         if (dcl->dpy_text_cursor) dcl->dpy_text_cursor(s, x, y);
                    247:         dcl = dcl->next;
                    248:     }
                    249: }
                    250: 
                    251: static inline int ds_get_linesize(DisplayState *ds)
                    252: {
                    253:     return ds->surface->linesize;
1.1       root      254: }
                    255: 
1.1.1.2   root      256: static inline uint8_t* ds_get_data(DisplayState *ds)
1.1       root      257: {
1.1.1.2   root      258:     return ds->surface->data;
                    259: }
                    260: 
                    261: static inline int ds_get_width(DisplayState *ds)
                    262: {
                    263:     return ds->surface->width;
                    264: }
                    265: 
                    266: static inline int ds_get_height(DisplayState *ds)
                    267: {
                    268:     return ds->surface->height;
                    269: }
                    270: 
                    271: static inline int ds_get_bits_per_pixel(DisplayState *ds)
                    272: {
                    273:     return ds->surface->pf.bits_per_pixel;
                    274: }
                    275: 
                    276: static inline int ds_get_bytes_per_pixel(DisplayState *ds)
                    277: {
                    278:     return ds->surface->pf.bytes_per_pixel;
                    279: }
                    280: 
                    281: typedef unsigned long console_ch_t;
                    282: static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
                    283: {
                    284:     cpu_to_le32wu((uint32_t *) dest, ch);
1.1       root      285: }
                    286: 
                    287: typedef void (*vga_hw_update_ptr)(void *);
                    288: typedef void (*vga_hw_invalidate_ptr)(void *);
                    289: typedef void (*vga_hw_screen_dump_ptr)(void *, const char *);
1.1.1.2   root      290: typedef void (*vga_hw_text_update_ptr)(void *, console_ch_t *);
                    291: 
                    292: DisplayState *graphic_console_init(vga_hw_update_ptr update,
                    293:                                    vga_hw_invalidate_ptr invalidate,
                    294:                                    vga_hw_screen_dump_ptr screen_dump,
                    295:                                    vga_hw_text_update_ptr text_update,
                    296:                                    void *opaque);
1.1       root      297: 
                    298: void vga_hw_update(void);
                    299: void vga_hw_invalidate(void);
                    300: void vga_hw_screen_dump(const char *filename);
1.1.1.2   root      301: void vga_hw_text_update(console_ch_t *chardata);
1.1       root      302: 
                    303: int is_graphic_console(void);
1.1.1.2   root      304: int is_fixedsize_console(void);
                    305: CharDriverState *text_console_init(const char *p);
                    306: void text_consoles_set_display(DisplayState *ds);
1.1       root      307: void console_select(unsigned int index);
                    308: void console_color_init(DisplayState *ds);
1.1.1.2   root      309: void qemu_console_resize(DisplayState *ds, int width, int height);
                    310: void qemu_console_copy(DisplayState *ds, int src_x, int src_y,
                    311:                        int dst_x, int dst_y, int w, int h);
1.1       root      312: 
                    313: /* sdl.c */
                    314: void sdl_display_init(DisplayState *ds, int full_screen, int no_frame);
                    315: 
                    316: /* cocoa.m */
                    317: void cocoa_display_init(DisplayState *ds, int full_screen);
                    318: 
                    319: /* vnc.c */
                    320: void vnc_display_init(DisplayState *ds);
                    321: void vnc_display_close(DisplayState *ds);
                    322: int vnc_display_open(DisplayState *ds, const char *display);
                    323: int vnc_display_password(DisplayState *ds, const char *password);
1.1.1.4 ! root      324: void do_info_vnc(Monitor *mon);
        !           325: char *vnc_display_local_addr(DisplayState *ds);
1.1       root      326: 
1.1.1.2   root      327: /* curses.c */
                    328: void curses_display_init(DisplayState *ds, int full_screen);
1.1       root      329: 
                    330: #endif

unix.superglobalmegacorp.com