#points #display #pixel #bindings #packet #send #servicepoint

sys servicepoint_binding_c

servicepoint crate 的 C 语言绑定

3 个版本 (重大更改)

0.7.0 2024年6月27日
0.6.0 2024年6月5日
0.5.1 2024年5月28日

#31#points

每月 29 次下载

GPL-3.0-or-later

120KB
2K SLoC

servicepoint_binding_c

crates.io Crates.io Total Downloads docs.rs GPLv3 licensed

CCCB 中,墙上挂着一个大像素矩阵。它被称为 "Service Point Display" 或 "机场显示"。

这个 crate 包含了 servicepoint 库的 C 语言绑定,使用户可以通过 UDP 解析、编码并发送数据包到这个显示。

示例

#include <stdio.h>
#include "servicepoint.h"

int main(void) {
    sp_Connection *connection = sp_connection_open("localhost:2342");
    if (connection == NULL)
        return 1;

    sp_PixelGrid *pixels = sp_pixel_grid_new(sp_PIXEL_WIDTH, sp_PIXEL_HEIGHT);
    sp_pixel_grid_fill(pixels, true);

    sp_Command *command = sp_command_bitmap_linear_win(0, 0, pixels, Uncompressed);
    sp_Packet *packet = sp_packet_from_command(command);
    if (!sp_connection_send(connection, packet))
        return 1;

    sp_connection_dealloc(connection);
    return 0;
}

作为此 crate 的一部分,包含 Makefile 的完整示例。

关于稳定性的说明

此库仍在早期开发阶段。您当然可以使用它,它也能工作,但请期待每次版本升级时会有一些小的破坏性更改。在 1.0 发布之前,请在 Cargo.toml 中指定完整的版本,包括补丁。

安装

将头文件复制到您的项目中,并对其进行编译。

您可以选择静态链接(推荐)或动态链接。

  • C 示例展示了如何针对 staticlib 变体进行静态链接。
  • 当动态链接时,您必须在运行时提供与 cdylib 相同版本的库,因为目前还没有 API/ABI 保证。

关于与 Rust 库的差异的说明

  • 函数名称为:sp_ <struct_name> <rust name>。
  • 实例的消耗方式与在编写 Rust / C# 代码时相同。在(隐式!)释放后不要使用实例。
  • Option 或 Result<T, E> 转换为可空返回值 - 检查 NULL!
  • 此处尚未具体说明 C++。当直接为 C++ 生成时,您可能会得到一个更好的头文件,但它应该是可用的。
  • 同时读取和写入实例是不安全的。只有并发读取是安全的。
  • 文档包含在头文件中,并可在 线上 获取

其他一切

有关更多信息,请参阅主要项目的 README

依赖关系

~1–2.3MB
~42K SLoC