Spice协议----输入通道定义

1  输入通道定义

SPICE输入通道主要控制鼠标和键盘的操作

1.1服务器---》客户端

enum {
    SPICE_MSG_INPUTS_INIT = 101,
    SPICE_MSG_INPUTS_KEY_MODIFIERS,
    SPICE_MSG_INPUTS_MOUSE_MOTION_ACK = 111,
    SPICE_MSG_END_INPUTS
};

1.2客户端---》服务器

enum {
    SPICE_MSGC_INPUTS_KEY_DOWN = 101,
    SPICE_MSGC_INPUTS_KEY_UP,
    SPICE_MSGC_INPUTS_KEY_MODIFIERS,
    SPICE_MSGC_INPUTS_KEY_SCANCODE,
    SPICE_MSGC_INPUTS_MOUSE_MOTION = 111,
    SPICE_MSGC_INPUTS_MOUSE_POSITION,
    SPICE_MSGC_INPUTS_MOUSE_PRESS,
    SPICE_MSGC_INPUTS_MOUSE_RELEASE,
    SPICE_MSGC_END_INPUTS
};

1.3Keyboard消息

SPICE协议支持发送键盘事件和同步键盘指示灯功能。客户端发送键盘事件SPICE_MSGC_INPUTS_KEY_UP、SPICE_MSGC_INPUTS_KEY_DOWN消息。键值使用PC AT码表示。键盘指示灯同步是通过客户端发送SPICE_MSGC_INPUTS_KEY_MODIFIERS或者服务器端发送SPICE_MSG_INPUTS_KEY_MODIFIERS消息。这些消息中保存了键盘指示灯的状态。服务器同样可以使用SPICE_MSG_INPUTS_INIT消息发送键盘的修改。这个消息必须是第一个接收到的消息,后续不应该再发送。

1.3.1  键盘指示灯宏

typedef enumSpiceKeyboardModifierFlags {
    SPICE_KEYBOARD_MODIFIER_FLAGS_SCROLL_LOCK =(1 << 0),
    SPICE_KEYBOARD_MODIFIER_FLAGS_NUM_LOCK = (1<< 1),
    SPICE_KEYBOARD_MODIFIER_FLAGS_CAPS_LOCK =(1 << 2),

    SPICE_KEYBOARD_MODIFIER_FLAGS_MASK = 0x7
} SpiceKeyboardModifierFlags;

1.3.2  客户端---》服务器宏

enum {
    SPICE_MSGC_INPUTS_KEY_DOWN = 101,
    SPICE_MSGC_INPUTS_KEY_UP,
    SPICE_MSGC_INPUTS_KEY_MODIFIERS,
    SPICE_MSGC_INPUTS_KEY_SCANCODE,
    SPICE_MSGC_INPUTS_MOUSE_MOTION = 111,
    SPICE_MSGC_INPUTS_MOUSE_POSITION,
    SPICE_MSGC_INPUTS_MOUSE_PRESS,
    SPICE_MSGC_INPUTS_MOUSE_RELEASE,
    SPICE_MSGC_END_INPUTS
};

1.3.3  服务器---》客户端宏

enum {
    SPICE_MSG_INPUTS_INIT = 101,
    SPICE_MSG_INPUTS_KEY_MODIFIERS,
    SPICE_MSG_INPUTS_MOUSE_MOTION_ACK = 111,

    SPICE_MSG_END_INPUTS
};

1.3.4  键盘事件相关结构体

typedef structSpiceMsgcKeyDown {
    uint32_t code;
}SpiceMsgcKeyDown;

typedef structSpiceMsgcKeyUp {
    uint32_t code;
}SpiceMsgcKeyUp;

typedef structSpiceMsgcKeyModifiers {
    uint32_t modifiers;
}SpiceMsgcKeyModifiers;

1.4鼠标消息

SPICE 支持鼠标操作的两种模式:服务器和客户端模式。(更多的参见3.4章节)在服务器模式下,客户端发送鼠标运动消息(SPICE_MSGC_INPUTS_MOUSE_MOTION),客户端模式下,发送位置消息(SPICE_MSGC_INPUTS_MOUSE_POSITION)。位置消息保存客户鼠标的显示位置和显示通道的ID(在RedLinkMess.channel_id)。为了防止鼠标运动、位置时间发送频繁,客户端在收到每个SPICE_MSG_INPUTS_KEY_MODIFIERS消息后会回应SPICE_MSG_INPUTS_MOUSE_MOTION_ACK。这种机制允许客户端跟随服务器的信息和改变事件的推送策略。鼠标按钮事件使用SPICE_MSGC_INPUTS_MOUSE_PRESS和SPICE_MSGC_INPUTS_MOUSE_RELEASE消息发送给服务器。

1.4.1  鼠标按键ID

typedef enumSpiceMouseButton {
    SPICE_MOUSE_BUTTON_INVALID,
    SPICE_MOUSE_BUTTON_LEFT,
    SPICE_MOUSE_BUTTON_MIDDLE,
    SPICE_MOUSE_BUTTON_RIGHT,
    SPICE_MOUSE_BUTTON_UP,
    SPICE_MOUSE_BUTTON_DOWN,

    SPICE_MOUSE_BUTTON_ENUM_END
}SpiceMouseButton;

1.4.2  按键掩码

typedef enumSpiceMouseButtonMask {
    SPICE_MOUSE_BUTTON_MASK_LEFT = (1 <<0),
    SPICE_MOUSE_BUTTON_MASK_MIDDLE = (1<< 1),
    SPICE_MOUSE_BUTTON_MASK_RIGHT = (1 <<2),

    SPICE_MOUSE_BUTTON_MASK_MASK = 0x7
}SpiceMouseButtonMask;

1.4.3  SpiceMsgcMouseMotion

typedef structSpiceMsgcMouseMotion {
    int32_t dx; //鼠标移动到的X像素点
    int32_t dy; //鼠标移动道德Y像素点
    uint32_t buttons_state;//鼠标操作的掩码。
}SpiceMsgcMouseMotion;

1.4.4SpiceMsgcMousePosition

typedef structSpiceMsgcMousePosition {
    uint32_t x; //X 坐标位置
    uint32_t y;//Y 坐标位置
    uint32_t buttons_state; //鼠标操作的掩码
    uint8_t display_id;//客户端鼠标显示的ID
}SpiceMsgcMousePosition;

1.4.5SpiceMsgcMousePress

typedef structSpiceMsgcMousePress {
    int32_t button; //鼠标按键的ID号
    int32_t buttons_state; //鼠标操作的掩码
}SpiceMsgcMousePress;

1.4.6SpiceMsgcMouseRelease

typedef structSpiceMsgcMouseRelease {
    int32_t button;//鼠标按键的ID号
    int32_t buttons_state; //鼠标操作的掩码
}SpiceMsgcMouseRelease;
时间: 2024-08-08 02:29:28

Spice协议----输入通道定义的相关文章

SPICE协议----光标通道定义

1  指针通道定义 SPICE协议定义了一组消息用来控制光标在远程桌面显示区域的形状和位置.光标位置消息和客户端鼠标模式是无关的.SPICE协议还定义了一组消息用来管理在客户端侧的光标形状缓存.客户端必须严格遵守所有的指令.服务器发送SPICE_MSG_CURSOR_INIT消息设置当前指针状态(形状,位置,能见度)和清楚缓存,后续会发送除初始化之外的其他命令.服务器可以发送SPICE_MSG_CURSOR_RESET消息将禁用指针及重置光标缓存.此消息后SPICE_MSG_CURSOR_INI

SPICE协议------主通道交互定义

1  主通道协议定义 1.1服务器->客户端 enum { SPICE_MSG_MAIN_MIGRATE_BEGIN = 101, SPICE_MSG_MAIN_MIGRATE_CANCEL, SPICE_MSG_MAIN_INIT, SPICE_MSG_MAIN_CHANNELS_LIST, SPICE_MSG_MAIN_MOUSE_MODE, SPICE_MSG_MAIN_MULTI_MEDIA_TIME, SPICE_MSG_MAIN_AGENT_CONNECTED, SPICE_MSG_

SPICE协议-----基本简介及普通协议定义

1  SPICE协议简介 SPICE协议定义了一组协议消息来访问.控制.和接收通过网络从远程计算机设备(如:键盘.视频.鼠标)的操作,并回复发送输出.控制设备既可以在客户端,也可以在服务端.另外,协议定义了一组支持远程服务器从一个网络地址迁移到另一个网络地址.加密传输数据,有一个例外,在选择加密方法上比较灵活.SPICE使用简单的消息传递和不依赖于任何RPC标准或特定的传输层. SPICE通信会话分为多种沟通通道道(每个通道针对一个远程设备)为了有能力控制通信和执行根据通道类型的消息(如QOS加

spice协议----播放和录音通道

1  播放通道定义 SPICE协议支持服务器发送音频流数据在客户端播放.音频流服务器使用SPICE_MSG_PLAYBACK_DATA消息发送客户端,音频数据的内容有播放模式控制(服务器通过SPICE_MSG_PLAYBACK_MODE消息发送客户端).服务器通过发送SPICE_MSG_PLAYBACK_START消息和SPICE_MSG_PLAYBACK_STOP消息来停止和播放音频流.数据包发送期间只允许停止和播放消息. 1.1服务器->客户端消息宏 enum { SPICE_MSG_PLA

Spice协议初探

转载自 灵跃云 :原文链接 序 言 SPICE,即Simple Protocol for Independent Computing Environment(独立计算环境简单协议)是红帽企业虚拟化桌面版的主要技术组件之一,具有自适应能力的远程提交协议,能够提供与物理桌面完全相同的最终用户体验.借助支持SPICE协议的客户端(如remote-viewer)或者通过浏览器,用户可以访问自己的虚拟桌面,如下图1所示. 图1 spice remote-viewer客户端 1.特点 Spice虚拟桌面传输

Android底层开发之音频输入通道的软硬件分析

Android底层开发之音频输入通道的软硬件分析 我们都知道耳机Mic集成在一直的那种四段耳机Mic插头是Android设备上比较常用.但是也会有分开的情况,比较如果在普通的PC机中装Android系统,那么就是这种情况.所以就有必要对音频输入通道的软件硬件进行统一的分析一下,接下来分析一个实例. 该设备的硬件连接为:基于3157的模拟开关实现的 通道切换. 设备是完全靠硬件实现的,那么就没有软件的什么工作了.但是这并不是一个理想的实现方法,真下的实现方法应该是所有的Mic都是并行的,每个Mic

关于android版本spice协议tls端口链接方式的bug问题

最近在搞了搞android版本的spice协议.在andorid-spice官方github代码下载下来之后,编译成功并且顺利的运行在android系统上链接云桌面的时候,在非安全端口的情况下可以成功的链接到虚拟云桌面,但是非常非常让人头疼的是在tls端口下链接的时候总是链接不到云桌面,并且后台报了一堆ssl问题的错误.经过反复查找问题,原来这个问题是一个本来就存在的bug,是在ssl_read()函数执行的时候由于系统自身的某些原因导致有时候协议的数据是读取不成功的,如果在这时候让ssl_re

.net开发环境的认识,控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值打印 两种数据类型,整形类型转换

首先感谢向立凯老师带我走进.net这个很好的软件开发程序.通过两天的学习在这个领域的了解也多了很多,让大家先了解一下c#语言 c#是一种全新且简单.安全.快捷面向对象的程序设计语言.是专门为.net应用开发的语言..net的开发都基于一个统一的开发环境 Visual Studio.net.下面我们来看看怎么在Visual Studio.net.下创建以新的项目: 1.打开 2.新建一个项目 通过执行文件-新建-项目菜单命令,会弹出一个新建项目对话框.在这个对话框中选择开发语言为c#,选择框架版本

2017-2-17 c#基础学习 (控制台程序的创建,输出,输入,定义变量,变量赋值,值覆盖,值拼接,值打印)

1 控制台程序的创建 > 新建项目  ,选择 c#,  框架选择4.0 , 选择控制应用台程序, 选择文件保存位置 修改名字. 2 c#输出与输入 >在main函数中编写代码 >在编写时可以先插入Console.ReadLine();防止程序闪退 > Console.Write("实例语句");//不换行输出 Console.WriteLine("示例语句");//换行输出 Console.ReadLine();//等待用户输入 防止闪退 结