SDL与HMI通信协议详解:JSON格式与Socket连接

需积分: 0 0 下载量 63 浏览量 更新于2024-06-30 收藏 621KB DOCX 举报
"本文介绍了SDL(HMI)协议的基本概念、整体框架、通讯通道、协议内容以及请求结构,重点关注了协议在Socket通信、Json格式和不同类型的交互请求中的应用。" SDL HMI协议是一种用于连接和通信的协议,它使得Smart Device Link (SDL) 能够与人机交互界面(HMI)进行有效交互。该协议基于Socket通信,具体是TCP/IP协议族的一部分,而数据传输则采用了Json格式,保证了数据的轻量化和易于解析。协议类型主要包括四类:HMI请求、SDL请求、HMI通知和SDL通知,这些构成了双方通信的基础。 整体框架方面,HMI和SDL通过创建多个Socket连接来实现不同功能模块的通信,如BasicCommunication、VehicleInfo、VR、Buttons、Navigation、TTS和UI等。这些连接的建立过程在HMI的初始化阶段完成。为了配置这些连接,需要在smartDeviceLink.ini配置文件中设定服务器地址(ServerAddress,默认为127.0.0.1)、服务端口(ServerPort,默认为12346)以及每个RPC(Remote Procedure Call)的默认超时时间(DefaultTimeout)。 协议内容主要围绕着请求(Request)的结构展开。一个典型的请求示例如下: ```json { "id": 9, "jsonrpc": "2.0", "method": "VR.AddCommand", "params": { "appID": 0, "cmdID": 2000000001, "vrCommands": ["Help"] } } ``` 这个例子展示了一个向VR模块添加命令的请求。其中,`id`用于标识请求,`jsonrpc`表示遵循的JSON-RPC协议版本,`method`定义了调用的方法(VR.AddCommand),而`params`包含了方法所需的参数。在这里,`cmdID`是命令的唯一标识,`vrCommands`是一个字符串数组,用于定义与命令相关的语音识别词汇。 请求中的参数具有明确的描述和限制,如`cmdID`必须是整数,范围在0到2000000000之间,且为必填项;`vrCommands`则是一组不超过100个字符长度的字符串数组,至少包含一个元素。 总结来说,SDL HMI协议是构建在TCP/IP Socket通信基础之上的,利用Json作为数据交换格式,通过定义不同的请求和通知类型,实现SDL与HMI之间的高效、可靠交互。了解和掌握这些基础知识对于开发和调试涉及SDL和HMI通信的系统至关重要。