* [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server @ 2013-04-24 10:12 Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 1/3] vnc: Add SCROLL lock key to kbd_leds Lei Li ` (3 more replies) 0 siblings, 4 replies; 13+ messages in thread From: Lei Li @ 2013-04-24 10:12 UTC (permalink / raw) To: qemu-devel; +Cc: lagarcia, aliguori, Lei Li Hi guys, This patch series tries to add support for LED state extension to Qemu VNC server. The proposal has been sent few days ago as link below: http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg01421.html The previous version as link: http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg03988.html Pleae let me know if there is anything else need be improved. Thanks! Changes since v2: - Address the comments from Anthony includes: - Just send 1 instead of the actual width and height. - Improve the document by adding the Pseudo-encoding number and simplify the description of the LED state encoding. Changes since v1: - Address the comments from Anthony includes: - Use Pseudo-encoding for led state; - Get rid of send_ext_leds_state_ack; - Add document for the led state Pseudo-encoding. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 1/3] vnc: Add SCROLL lock key to kbd_leds 2013-04-24 10:12 [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Lei Li @ 2013-04-24 10:12 ` Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li ` (2 subsequent siblings) 3 siblings, 0 replies; 13+ messages in thread From: Lei Li @ 2013-04-24 10:12 UTC (permalink / raw) To: qemu-devel; +Cc: lagarcia, aliguori, Lei Li Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> --- ui/vnc.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index 8ee66b7..f574962 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -1525,10 +1525,11 @@ static void press_key(VncState *vs, int keysym) static void kbd_leds(void *opaque, int ledstate) { VncState *vs = opaque; - int caps, num; + int caps, num, scr; caps = ledstate & QEMU_CAPS_LOCK_LED ? 1 : 0; num = ledstate & QEMU_NUM_LOCK_LED ? 1 : 0; + scr = ledstate & QEMU_SCROLL_LOCK_LED ? 1 : 0; if (vs->modifiers_state[0x3a] != caps) { vs->modifiers_state[0x3a] = caps; @@ -1536,6 +1537,9 @@ static void kbd_leds(void *opaque, int ledstate) if (vs->modifiers_state[0x45] != num) { vs->modifiers_state[0x45] = num; } + if (vs->modifiers_state[0x46] != scr) { + vs->modifiers_state[0x46] = scr; + } } static void do_key_event(VncState *vs, int down, int keycode, int sym) -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension 2013-04-24 10:12 [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 1/3] vnc: Add SCROLL lock key to kbd_leds Lei Li @ 2013-04-24 10:12 ` Lei Li 2013-04-24 11:44 ` Gerd Hoffmann 2013-04-24 10:12 ` [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state Lei Li 2013-04-24 14:54 ` [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Eric Blake 3 siblings, 1 reply; 13+ messages in thread From: Lei Li @ 2013-04-24 10:12 UTC (permalink / raw) To: qemu-devel; +Cc: lagarcia, aliguori, Lei Li Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> --- ui/vnc.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ ui/vnc.h | 4 +++- 2 files changed, 48 insertions(+), 1 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index f574962..44189d7 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -1522,6 +1522,42 @@ static void press_key(VncState *vs, int keysym) kbd_put_keycode(keycode | SCANCODE_UP); } +static int current_led_state(VncState *vs) +{ + int ledstate = 0; + + if (vs->modifiers_state[0x46]) { + ledstate |= QEMU_SCROLL_LOCK_LED; + } + if (vs->modifiers_state[0x45]) { + ledstate |= QEMU_NUM_LOCK_LED; + } + if (vs->modifiers_state[0x3a]) { + ledstate |= QEMU_CAPS_LOCK_LED; + } + + return ledstate; +} + +static void vnc_led_state_change(VncState *vs) +{ + int ledstate = 0; + + if (!vnc_has_feature(vs, VNC_FEATURE_LED_STATE)) { + return; + } + + ledstate = current_led_state(vs); + vnc_lock_output(vs); + vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); + vnc_framebuffer_update(vs, 0, 0, 1, 1, VNC_ENCODING_LED_STATE); + vnc_write_u8(vs, ledstate); + vnc_unlock_output(vs); + vnc_flush(vs); +} + static void kbd_leds(void *opaque, int ledstate) { VncState *vs = opaque; @@ -1540,6 +1576,11 @@ static void kbd_leds(void *opaque, int ledstate) if (vs->modifiers_state[0x46] != scr) { vs->modifiers_state[0x46] = scr; } + + /* Sending the current led state message to the client */ + if (ledstate != current_led_state(vs)) { + vnc_led_state_change(vs); + } } static void do_key_event(VncState *vs, int down, int keycode, int sym) @@ -1893,6 +1934,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) case VNC_ENCODING_WMVi: vs->features |= VNC_FEATURE_WMVI_MASK; break; + case VNC_ENCODING_LED_STATE: + vs->features |= VNC_FEATURE_LED_STATE_MASK; + break; case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9: vs->tight.compression = (enc & 0x0F); break; @@ -1908,6 +1952,7 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) } vnc_desktop_resize(vs); check_pointer_type_change(&vs->mouse_mode_notifier, NULL); + vnc_led_state_change(vs); } static void set_pixel_conversion(VncState *vs) diff --git a/ui/vnc.h b/ui/vnc.h index ad1dec2..e873377 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -384,6 +384,7 @@ enum { #define VNC_ENCODING_EXT_KEY_EVENT 0XFFFFFEFE /* -258 */ #define VNC_ENCODING_AUDIO 0XFFFFFEFD /* -259 */ #define VNC_ENCODING_TIGHT_PNG 0xFFFFFEFC /* -260 */ +#define VNC_ENCODING_LED_STATE 0XFFFFFEFB /* -261 */ #define VNC_ENCODING_WMVi 0x574D5669 /***************************************************************************** @@ -422,6 +423,7 @@ enum { #define VNC_FEATURE_TIGHT_PNG 8 #define VNC_FEATURE_ZRLE 9 #define VNC_FEATURE_ZYWRLE 10 +#define VNC_FEATURE_LED_STATE 11 #define VNC_FEATURE_RESIZE_MASK (1 << VNC_FEATURE_RESIZE) #define VNC_FEATURE_HEXTILE_MASK (1 << VNC_FEATURE_HEXTILE) @@ -434,7 +436,7 @@ enum { #define VNC_FEATURE_TIGHT_PNG_MASK (1 << VNC_FEATURE_TIGHT_PNG) #define VNC_FEATURE_ZRLE_MASK (1 << VNC_FEATURE_ZRLE) #define VNC_FEATURE_ZYWRLE_MASK (1 << VNC_FEATURE_ZYWRLE) - +#define VNC_FEATURE_LED_STATE_MASK (1 << VNC_FEATURE_LED_STATE) /* Client -> Server message IDs */ #define VNC_MSG_CLIENT_SET_PIXEL_FORMAT 0 -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension 2013-04-24 10:12 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li @ 2013-04-24 11:44 ` Gerd Hoffmann 2013-04-25 3:53 ` Lei Li 0 siblings, 1 reply; 13+ messages in thread From: Gerd Hoffmann @ 2013-04-24 11:44 UTC (permalink / raw) To: Lei Li; +Cc: lagarcia, aliguori, qemu-devel Hi, > + case VNC_ENCODING_LED_STATE: > + vs->features |= VNC_FEATURE_LED_STATE_MASK; > + break; I think it with the client supporting the led state extension it is probably a good idea to turn off the lock state sync logic in qemu's vnc server, i.e. add a "!(vs->features & VNC_FEATURE_LED_STATE_MASK)" check next to the lock_key_sync checks in do_key_event(). cheers, Gerd ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension 2013-04-24 11:44 ` Gerd Hoffmann @ 2013-04-25 3:53 ` Lei Li 0 siblings, 0 replies; 13+ messages in thread From: Lei Li @ 2013-04-25 3:53 UTC (permalink / raw) To: Gerd Hoffmann; +Cc: lagarcia, aliguori, qemu-devel On 04/24/2013 07:44 PM, Gerd Hoffmann wrote: > Hi, > >> + case VNC_ENCODING_LED_STATE: >> + vs->features |= VNC_FEATURE_LED_STATE_MASK; >> + break; > I think it with the client supporting the led state extension it is > probably a good idea to turn off the lock state sync logic in qemu's vnc > server, i.e. add a "!(vs->features & VNC_FEATURE_LED_STATE_MASK)" check > next to the lock_key_sync checks in do_key_event(). > > cheers, > Gerd Hi Gerd, Yes, I think it's a good idea. Thanks! > -- Lei ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state 2013-04-24 10:12 [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 1/3] vnc: Add SCROLL lock key to kbd_leds Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li @ 2013-04-24 10:12 ` Lei Li 2013-04-24 14:57 ` Eric Blake 2013-04-24 14:54 ` [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Eric Blake 3 siblings, 1 reply; 13+ messages in thread From: Lei Li @ 2013-04-24 10:12 UTC (permalink / raw) To: qemu-devel; +Cc: lagarcia, aliguori, Lei Li Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> --- docs/vnc-ledstate-Pseudo-encoding.txt | 40 +++++++++++++++++++++++++++++++++ 1 files changed, 40 insertions(+), 0 deletions(-) create mode 100644 docs/vnc-ledstate-Pseudo-encoding.txt diff --git a/docs/vnc-ledstate-Pseudo-encoding.txt b/docs/vnc-ledstate-Pseudo-encoding.txt new file mode 100644 index 0000000..0c312cf --- /dev/null +++ b/docs/vnc-ledstate-Pseudo-encoding.txt @@ -0,0 +1,40 @@ +VNC LED state Pseudo-encoding +============================= + +Introduction +------------ + +This document describes the Pseudo-encoding of LED state for RFB which +is the protocol used in VNC as reference link below: + +http://tigervnc.svn.sourceforge.net/viewvc/tigervnc/rfbproto/rfbproto.rst?content-type=text/plain + +When accessing a guest by console through VNC, there might be mismatch +between the lock keys notification LED on the computer running the VNC +client session and the current status of the lock keys on the guest +machine. + +To solve this problem it attempts to add LED state Pseudo-encoding +extension to VNC protocol to deal with setting LED state. + +Pseudo-encoding +--------------- + +This Pseudo-encoding requested by client declares to server that it supports +LED state extensions to the protocol. + +The Pseudo-encoding number for LED state defined as: + +======= =============================================================== +Number Name +======= =============================================================== +-261 'LED state Pseudo-encoding'_ +======= =============================================================== + +LED state Pseudo-enconding +-------------------------- + +The LED state Pseudo-encoding describes the encoding of LED state which +consists of 3 bits, each bit represents the Caps, Num, and Scroll lock +key respectively. '1' indicates that the LED should be on and '0' should +be off. -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state 2013-04-24 10:12 ` [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state Lei Li @ 2013-04-24 14:57 ` Eric Blake 2013-04-25 2:25 ` Lei Li 0 siblings, 1 reply; 13+ messages in thread From: Eric Blake @ 2013-04-24 14:57 UTC (permalink / raw) To: Lei Li; +Cc: lagarcia, aliguori, qemu-devel [-- Attachment #1: Type: text/plain, Size: 1191 bytes --] On 04/24/2013 04:12 AM, Lei Li wrote: > Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> > --- > docs/vnc-ledstate-Pseudo-encoding.txt | 40 +++++++++++++++++++++++++++++++++ > 1 files changed, 40 insertions(+), 0 deletions(-) > create mode 100644 docs/vnc-ledstate-Pseudo-encoding.txt > > + > +The Pseudo-encoding number for LED state defined as: > + > +======= =============================================================== > +Number Name > +======= =============================================================== > +-261 'LED state Pseudo-encoding'_ Is the trailing _ intentional? > +======= =============================================================== > + > +LED state Pseudo-enconding s/enconding/encoding/ > +-------------------------- > + > +The LED state Pseudo-encoding describes the encoding of LED state which > +consists of 3 bits, each bit represents the Caps, Num, and Scroll lock > +key respectively. '1' indicates that the LED should be on and '0' should > +be off. Which bit is which? Is bit 0 the Caps lock LED? -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 621 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state 2013-04-24 14:57 ` Eric Blake @ 2013-04-25 2:25 ` Lei Li 2013-04-25 2:56 ` Eric Blake 0 siblings, 1 reply; 13+ messages in thread From: Lei Li @ 2013-04-25 2:25 UTC (permalink / raw) To: Eric Blake; +Cc: lagarcia, aliguori, qemu-devel On 04/24/2013 10:57 PM, Eric Blake wrote: > On 04/24/2013 04:12 AM, Lei Li wrote: >> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> >> --- >> docs/vnc-ledstate-Pseudo-encoding.txt | 40 +++++++++++++++++++++++++++++++++ >> 1 files changed, 40 insertions(+), 0 deletions(-) >> create mode 100644 docs/vnc-ledstate-Pseudo-encoding.txt >> >> + >> +The Pseudo-encoding number for LED state defined as: >> + >> +======= =============================================================== >> +Number Name >> +======= =============================================================== >> +-261 'LED state Pseudo-encoding'_ > Is the trailing _ intentional? Yes, add this trailing '_' to indicate that this is a quoted context and you can locate its section somewhere. I saw this style used in RFB protocol, but it's not necessary. I'd get rid of it if you don't like it. :) > >> +======= =============================================================== >> + >> +LED state Pseudo-enconding > s/enconding/encoding/ Sure. >> +-------------------------- >> + >> +The LED state Pseudo-encoding describes the encoding of LED state which >> +consists of 3 bits, each bit represents the Caps, Num, and Scroll lock >> +key respectively. '1' indicates that the LED should be on and '0' should >> +be off. > Which bit is which? Is bit 0 the Caps lock LED? Caps lock key is represented as '100', and Scroll lock key is represented as '001'. Sorry, I should describe it more clearly. Or maybe I should include the example of the encodings defined? > -- Lei ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state 2013-04-25 2:25 ` Lei Li @ 2013-04-25 2:56 ` Eric Blake 0 siblings, 0 replies; 13+ messages in thread From: Eric Blake @ 2013-04-25 2:56 UTC (permalink / raw) To: Lei Li; +Cc: lagarcia, aliguori, qemu-devel [-- Attachment #1: Type: text/plain, Size: 1791 bytes --] On 04/24/2013 08:25 PM, Lei Li wrote: > On 04/24/2013 10:57 PM, Eric Blake wrote: >> On 04/24/2013 04:12 AM, Lei Li wrote: >>> Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> >>> --- >>> docs/vnc-ledstate-Pseudo-encoding.txt | 40 >>> +++++++++++++++++++++++++++++++++ >>> 1 files changed, 40 insertions(+), 0 deletions(-) >>> create mode 100644 docs/vnc-ledstate-Pseudo-encoding.txt >>> >>> + >>> +The Pseudo-encoding number for LED state defined as: >>> + >>> +======= =============================================================== >>> +Number Name >>> +======= =============================================================== >>> +-261 'LED state Pseudo-encoding'_ >> Is the trailing _ intentional? > > Yes, add this trailing '_' to indicate that this is a quoted context and > you can > locate its section somewhere. > I saw this style used in RFB protocol, but it's not necessary. I'd get > rid of it > if you don't like it. :) I didn't read the RFB protocol; if you are being consistent with a parent document that you are extending, then by all means use the same conventions. >> Which bit is which? Is bit 0 the Caps lock LED? > > Caps lock key is represented as '100', and Scroll lock key is > represented as '001'. > Sorry, I should describe it more clearly. Yep, especially since your choice of encoding was opposite to mine. A good protocol should be easy to implement. I don't care which order the bits go in, as long as everyone treats the same bit as caps lock based on good docs. > Or maybe I should include the example of the encodings defined? In my opinion, adding an example will never hurt :) -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 621 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server 2013-04-24 10:12 [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Lei Li ` (2 preceding siblings ...) 2013-04-24 10:12 ` [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state Lei Li @ 2013-04-24 14:54 ` Eric Blake 2013-04-25 2:10 ` Lei Li 3 siblings, 1 reply; 13+ messages in thread From: Eric Blake @ 2013-04-24 14:54 UTC (permalink / raw) To: Lei Li; +Cc: lagarcia, aliguori, qemu-devel [-- Attachment #1: Type: text/plain, Size: 1296 bytes --] On 04/24/2013 04:12 AM, Lei Li wrote: > Hi guys, > > This patch series tries to add support for LED state > extension to Qemu VNC server. The proposal has been sent > few days ago as link below: > > http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg01421.html > > The previous version as link: > > http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg03988.html > > Pleae let me know if there is anything else need be improved. Can you fix your setup to include a series diffstat in your cover letter? I know that 'git send-email --cover-letter --annotate' does this; but I also know that's not the workflow everyone uses. I just updated http://wiki.qemu.org/Contribute/SubmitAPatch to mention that a cover letter diffstat is a useful review aid (I'd much rather check a 0/n letter to see what files are touched in summary, rather than opening n emails just to see if it touches any file I care about). I guess that means I'm asking for a bit of help in further updating the wiki to mention how to have git reliably include a cover letter diffstat, since asking for something without giving a recipe of how to accomplish it isn't very nice. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 621 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server 2013-04-24 14:54 ` [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Eric Blake @ 2013-04-25 2:10 ` Lei Li 0 siblings, 0 replies; 13+ messages in thread From: Lei Li @ 2013-04-25 2:10 UTC (permalink / raw) To: Eric Blake; +Cc: lagarcia, aliguori, qemu-devel On 04/24/2013 10:54 PM, Eric Blake wrote: > On 04/24/2013 04:12 AM, Lei Li wrote: >> Hi guys, >> >> This patch series tries to add support for LED state >> extension to Qemu VNC server. The proposal has been sent >> few days ago as link below: >> >> http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg01421.html >> >> The previous version as link: >> >> http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg03988.html >> >> Pleae let me know if there is anything else need be improved. > Can you fix your setup to include a series diffstat in your cover > letter? I know that 'git send-email --cover-letter --annotate' does > this; but I also know that's not the workflow everyone uses. I just > updated http://wiki.qemu.org/Contribute/SubmitAPatch to mention that a > cover letter diffstat is a useful review aid (I'd much rather check a > 0/n letter to see what files are touched in summary, rather than opening > n emails just to see if it touches any file I care about). I guess that > means I'm asking for a bit of help in further updating the wiki to > mention how to have git reliably include a cover letter diffstat, since > asking for something without giving a recipe of how to accomplish it > isn't very nice. Hi Eric, Sure, I will include the series diffstat. Thanks for your good suggestion! > -- Lei ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 0/3 RFC v2] Support for LED state extension to Qemu VNC server @ 2013-04-19 18:11 Lei Li 2013-04-19 18:11 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li 0 siblings, 1 reply; 13+ messages in thread From: Lei Li @ 2013-04-19 18:11 UTC (permalink / raw) To: qemu-devel; +Cc: lagarcia, aliguori, Lei Li Hi guys, This patch series tries to add support for LED state extension to Qemu VNC server. The proposal has been sent few days ago as link below: http://lists.gnu.org/archive/html/qemu-devel/2013-04/msg01421.html Hi Anthony, This series has not been completely tested, it takes longer than expected for that I found that it needs to add hack on gtk-vnc not just gvncfb, so still mark it as RFC. Send it out first to make sure I understood your previous suggestions correctly. Please let me know if this seems like the direction we should be headed. Your suggestions and comments are very appreciated! Thanks Changes since v1: - Address the comments from Anthony includes: - Use Pseudo-encoding for led state; - Get rid of send_ext_leds_state_ack; - Add document for the led state Pseudo-encoding. ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension 2013-04-19 18:11 [Qemu-devel] [PATCH 0/3 RFC v2] " Lei Li @ 2013-04-19 18:11 ` Lei Li 2013-04-22 19:34 ` Anthony Liguori 0 siblings, 1 reply; 13+ messages in thread From: Lei Li @ 2013-04-19 18:11 UTC (permalink / raw) To: qemu-devel; +Cc: lagarcia, aliguori, Lei Li Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> --- ui/vnc.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ ui/vnc.h | 4 +++- 2 files changed, 51 insertions(+), 1 deletions(-) diff --git a/ui/vnc.c b/ui/vnc.c index f574962..e22cca1 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -1522,6 +1522,45 @@ static void press_key(VncState *vs, int keysym) kbd_put_keycode(keycode | SCANCODE_UP); } +static int current_led_state(VncState *vs) +{ + int ledstate = 0; + + if (vs->modifiers_state[0x46]) { + ledstate |= QEMU_SCROLL_LOCK_LED; + } + if (vs->modifiers_state[0x45]) { + ledstate |= QEMU_NUM_LOCK_LED; + } + if (vs->modifiers_state[0x3a]) { + ledstate |= QEMU_CAPS_LOCK_LED; + } + + return ledstate; +} + +static void vnc_led_state_change(VncState *vs) +{ + int ledstate = 0; + + if (!vnc_has_feature(vs, VNC_FEATURE_LED_STATE)) { + return; + } + + ledstate = current_led_state(vs); + vnc_lock_output(vs); + vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); + vnc_write_u8(vs, 0); + vnc_write_u16(vs, 1); + vnc_framebuffer_update(vs, 0, 0, + surface_width(vs->vd->ds), + surface_height(vs->vd->ds), + VNC_ENCODING_LED_STATE); + vnc_write_u8(vs, ledstate); + vnc_unlock_output(vs); + vnc_flush(vs); +} + static void kbd_leds(void *opaque, int ledstate) { VncState *vs = opaque; @@ -1540,6 +1579,11 @@ static void kbd_leds(void *opaque, int ledstate) if (vs->modifiers_state[0x46] != scr) { vs->modifiers_state[0x46] = scr; } + + /* Sending the current led state message to the client */ + if (ledstate != current_led_state(vs)) { + vnc_led_state_change(vs); + } } static void do_key_event(VncState *vs, int down, int keycode, int sym) @@ -1893,6 +1937,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) case VNC_ENCODING_WMVi: vs->features |= VNC_FEATURE_WMVI_MASK; break; + case VNC_ENCODING_LED_STATE: + vs->features |= VNC_FEATURE_LED_STATE_MASK; + break; case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9: vs->tight.compression = (enc & 0x0F); break; @@ -1908,6 +1955,7 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) } vnc_desktop_resize(vs); check_pointer_type_change(&vs->mouse_mode_notifier, NULL); + vnc_led_state_change(vs); } static void set_pixel_conversion(VncState *vs) diff --git a/ui/vnc.h b/ui/vnc.h index ad1dec2..e873377 100644 --- a/ui/vnc.h +++ b/ui/vnc.h @@ -384,6 +384,7 @@ enum { #define VNC_ENCODING_EXT_KEY_EVENT 0XFFFFFEFE /* -258 */ #define VNC_ENCODING_AUDIO 0XFFFFFEFD /* -259 */ #define VNC_ENCODING_TIGHT_PNG 0xFFFFFEFC /* -260 */ +#define VNC_ENCODING_LED_STATE 0XFFFFFEFB /* -261 */ #define VNC_ENCODING_WMVi 0x574D5669 /***************************************************************************** @@ -422,6 +423,7 @@ enum { #define VNC_FEATURE_TIGHT_PNG 8 #define VNC_FEATURE_ZRLE 9 #define VNC_FEATURE_ZYWRLE 10 +#define VNC_FEATURE_LED_STATE 11 #define VNC_FEATURE_RESIZE_MASK (1 << VNC_FEATURE_RESIZE) #define VNC_FEATURE_HEXTILE_MASK (1 << VNC_FEATURE_HEXTILE) @@ -434,7 +436,7 @@ enum { #define VNC_FEATURE_TIGHT_PNG_MASK (1 << VNC_FEATURE_TIGHT_PNG) #define VNC_FEATURE_ZRLE_MASK (1 << VNC_FEATURE_ZRLE) #define VNC_FEATURE_ZYWRLE_MASK (1 << VNC_FEATURE_ZYWRLE) - +#define VNC_FEATURE_LED_STATE_MASK (1 << VNC_FEATURE_LED_STATE) /* Client -> Server message IDs */ #define VNC_MSG_CLIENT_SET_PIXEL_FORMAT 0 -- 1.7.7.6 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension 2013-04-19 18:11 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li @ 2013-04-22 19:34 ` Anthony Liguori 0 siblings, 0 replies; 13+ messages in thread From: Anthony Liguori @ 2013-04-22 19:34 UTC (permalink / raw) To: Lei Li, qemu-devel; +Cc: lagarcia Lei Li <lilei@linux.vnet.ibm.com> writes: > Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> > --- > ui/vnc.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ > ui/vnc.h | 4 +++- > 2 files changed, 51 insertions(+), 1 deletions(-) > > diff --git a/ui/vnc.c b/ui/vnc.c > index f574962..e22cca1 100644 > --- a/ui/vnc.c > +++ b/ui/vnc.c > @@ -1522,6 +1522,45 @@ static void press_key(VncState *vs, int keysym) > kbd_put_keycode(keycode | SCANCODE_UP); > } > > +static int current_led_state(VncState *vs) > +{ > + int ledstate = 0; > + > + if (vs->modifiers_state[0x46]) { > + ledstate |= QEMU_SCROLL_LOCK_LED; > + } > + if (vs->modifiers_state[0x45]) { > + ledstate |= QEMU_NUM_LOCK_LED; > + } > + if (vs->modifiers_state[0x3a]) { > + ledstate |= QEMU_CAPS_LOCK_LED; > + } > + > + return ledstate; > +} > + > +static void vnc_led_state_change(VncState *vs) > +{ > + int ledstate = 0; > + > + if (!vnc_has_feature(vs, VNC_FEATURE_LED_STATE)) { > + return; > + } > + > + ledstate = current_led_state(vs); > + vnc_lock_output(vs); > + vnc_write_u8(vs, VNC_MSG_SERVER_FRAMEBUFFER_UPDATE); > + vnc_write_u8(vs, 0); > + vnc_write_u16(vs, 1); > + vnc_framebuffer_update(vs, 0, 0, > + surface_width(vs->vd->ds), > + surface_height(vs->vd->ds), This can just be 1, 1. You don't have to send the actual width/height. Otherwise, looks pretty good. Regards, Anthony Liguori > + VNC_ENCODING_LED_STATE); > + vnc_write_u8(vs, ledstate); > + vnc_unlock_output(vs); > + vnc_flush(vs); > +} > + > static void kbd_leds(void *opaque, int ledstate) > { > VncState *vs = opaque; > @@ -1540,6 +1579,11 @@ static void kbd_leds(void *opaque, int ledstate) > if (vs->modifiers_state[0x46] != scr) { > vs->modifiers_state[0x46] = scr; > } > + > + /* Sending the current led state message to the client */ > + if (ledstate != current_led_state(vs)) { > + vnc_led_state_change(vs); > + } > } > > static void do_key_event(VncState *vs, int down, int keycode, int sym) > @@ -1893,6 +1937,9 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) > case VNC_ENCODING_WMVi: > vs->features |= VNC_FEATURE_WMVI_MASK; > break; > + case VNC_ENCODING_LED_STATE: > + vs->features |= VNC_FEATURE_LED_STATE_MASK; > + break; > case VNC_ENCODING_COMPRESSLEVEL0 ... VNC_ENCODING_COMPRESSLEVEL0 + 9: > vs->tight.compression = (enc & 0x0F); > break; > @@ -1908,6 +1955,7 @@ static void set_encodings(VncState *vs, int32_t *encodings, size_t n_encodings) > } > vnc_desktop_resize(vs); > check_pointer_type_change(&vs->mouse_mode_notifier, NULL); > + vnc_led_state_change(vs); > } > > static void set_pixel_conversion(VncState *vs) > diff --git a/ui/vnc.h b/ui/vnc.h > index ad1dec2..e873377 100644 > --- a/ui/vnc.h > +++ b/ui/vnc.h > @@ -384,6 +384,7 @@ enum { > #define VNC_ENCODING_EXT_KEY_EVENT 0XFFFFFEFE /* -258 */ > #define VNC_ENCODING_AUDIO 0XFFFFFEFD /* -259 */ > #define VNC_ENCODING_TIGHT_PNG 0xFFFFFEFC /* -260 */ > +#define VNC_ENCODING_LED_STATE 0XFFFFFEFB /* -261 */ > #define VNC_ENCODING_WMVi 0x574D5669 > > /***************************************************************************** > @@ -422,6 +423,7 @@ enum { > #define VNC_FEATURE_TIGHT_PNG 8 > #define VNC_FEATURE_ZRLE 9 > #define VNC_FEATURE_ZYWRLE 10 > +#define VNC_FEATURE_LED_STATE 11 > > #define VNC_FEATURE_RESIZE_MASK (1 << VNC_FEATURE_RESIZE) > #define VNC_FEATURE_HEXTILE_MASK (1 << VNC_FEATURE_HEXTILE) > @@ -434,7 +436,7 @@ enum { > #define VNC_FEATURE_TIGHT_PNG_MASK (1 << VNC_FEATURE_TIGHT_PNG) > #define VNC_FEATURE_ZRLE_MASK (1 << VNC_FEATURE_ZRLE) > #define VNC_FEATURE_ZYWRLE_MASK (1 << VNC_FEATURE_ZYWRLE) > - > +#define VNC_FEATURE_LED_STATE_MASK (1 << VNC_FEATURE_LED_STATE) > > /* Client -> Server message IDs */ > #define VNC_MSG_CLIENT_SET_PIXEL_FORMAT 0 > -- > 1.7.7.6 ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2013-04-25 3:54 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-04-24 10:12 [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 1/3] vnc: Add SCROLL lock key to kbd_leds Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li 2013-04-24 11:44 ` Gerd Hoffmann 2013-04-25 3:53 ` Lei Li 2013-04-24 10:12 ` [Qemu-devel] [PATCH 3/3] doc: document the Pseudo-encoding of LED state Lei Li 2013-04-24 14:57 ` Eric Blake 2013-04-25 2:25 ` Lei Li 2013-04-25 2:56 ` Eric Blake 2013-04-24 14:54 ` [Qemu-devel] [PATCH 0/3 v3] Support for LED state extension to Qemu VNC server Eric Blake 2013-04-25 2:10 ` Lei Li -- strict thread matches above, loose matches on Subject: below -- 2013-04-19 18:11 [Qemu-devel] [PATCH 0/3 RFC v2] " Lei Li 2013-04-19 18:11 ` [Qemu-devel] [PATCH 2/3] vnc: Support for LED state extension Lei Li 2013-04-22 19:34 ` Anthony Liguori
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).