4个版本

0.2.2 2020年3月8日
0.2.1 2020年3月1日
0.2.0 2020年2月9日
0.1.0 2019年12月14日

#1815 in 嵌入式开发

自定义许可证

140KB
3K SLoC

Kyle的周边抽象层

CircleCI Docs.rs Crates.io

KPAL是一个物理计算的可扩展控制系统。

文档

KPAL正在开发中。直到发布1.0版本之前,API将不被视为稳定。

概述

KPAL允许您控制并读取连接到计算机(如您的台式机或Raspberry Pi)的外围设备的数据。它通过两个应用程序编程接口(API)作为用户和单个外围设备之间的接口

  • 用户API 一个可以从网络上的不同计算机(包括智能手机)访问的Web服务
  • 插件API 一个高级插件接口,允许KPAL与传感器、电机和摄像头等外围设备通信

快速入门

  1. 发布页面下载与您的平台二进制文件最新版本匹配的存档。
  2. 解压存档。
  3. 在您的家目录中创建以下文件夹
mkdir -p ~/.kpal/libraries
  1. 将存档中的文件libbasic-plugin.so移动到~/.kpal/libraries文件夹。这是一个用于演示和测试的示例插件,它不控制任何实际硬件。
  2. 运行二进制文件kpald以启动守护进程。如果您想查看日志,请将环境变量RUST_LOG设置为infoerrordebug,具体取决于所需的日志级别
RUST_LOG=info ./kpald

现在您可以向守护进程发送HTTP请求。以下示例使用UNIX curl命令行工具发送请求,但您可以使用您选择的任何HTTP客户端。

# Get the libraries that are available to the daemon
curl -s localhost:8000/api/v0/libraries

# Get the library with ID 0
curl -s localhost:8000/api/v0/libraries/0

# Create a new peripheral from the library with ID 0
curl -s \
     --request POST \
     localhost:8000/api/v0/peripherals \
     --header "Content-Type: application/json" \
     --data '{"name":"foo","library_id":0}'

# Create a new peripheral and override the default value of a pre-init attribute
curl -s \
     --request POST \
     localhost:8000/api/v0/peripherals \
     --header "Content-Type: application/json" \
     --data '{
         "name": "foo",
         "library_id": 0,
         "attributes": {
             "0": {"id":0, "variant":"double", "value": 999.99}
         }
     }'

# Get all the peripherals currently managed by the daemon
curl -s localhost:8000/api/v0/peripherals

# Get the peripheral with ID 0
curl -s localhost:8000/api/v0/peripherals/0

# Get the attributes of the peripheral with ID 0
curl -s localhost:8000/api/v0/peripherals/0/attributes

# Get the attribute with ID 0 from the peripheral with ID 0
curl -s localhost:8000/api/v0/peripherals/0/attributes/0

# Set the value of the attribute with ID 0 of the peripheral with ID 0
curl -s \
     --request PATCH \
     localhost:8000/api/v0/peripherals/0/attributes/0 \
     --header "Content-Type: application/json" \
     --data '{"variant":"double","value":42}'

核心组件

High level architecture of KPAL

对象模型

对象模型是用户交互的资源集。目前,这些资源包括

  • 外围设备 单个硬件外围设备的模型
    • 属性 表示外围设备状态的值
  • 允许插件API的共享库

守护进程

KPAL守护进程,或kpald,是一个运行在外设连接计算机上的Web服务器。用户通过用户API直接与守护进程交互。每个外设都运行在其自己的线程中,该线程由用户API的POST请求生成。守护进程通过线程的专用通道将其他用户请求转发到每个线程。线程解释传入的请求,并响应地通过插件API使用共享库读取和写入单个插件的数据。

插件

插件是将外设集成到KPAL的方式。插件使用共享库(Linux上的.so文件)与守护进程通信。库提供的通用函数集是插件API。任何可以提供C语言接口的编程语言都可以用来编写插件库。

插件将表示外设状态的数组合并到控制由外设模拟的硬件设备的功能性。

依赖项

~17-29MB
~610K SLoC