#arm #cortex-m #smartwatch

no-std app mwatch-kernel-stm32l4

一款嵌入式“智能”手表

1个稳定版本

2.0.0 2022年12月23日

#801 in 嵌入式开发

MIT/Apache

120KB
2.5K SLoC

Build Status

mwatch

使用Rust编写的嵌入式智能手表,使用RTFM框架进行多线程。

Logo

特性

  • 电容式触摸感应输入 - 支持多点触控手势
  • 全16位颜色ssd1351 OLED
  • 可运行时安装的应用程序(更多信息请参阅SDK部分
  • 实时时钟
  • 通过蓝牙发送通知警报
  • 可在稳定Rust 2018上构建

为MWatch开发应用程序

mwatch提供了一个SDK,用于开发可以在运行时通过mwatch-send-tool安装的应用程序。有关SDK的更多信息,请参阅SDK仓库

系统架构

概述

MWatch试图遵循现代计算机操作系统,包括内核、内置的窗口/显示管理器以及用于在手表上开发用户空间应用程序的用户空间API,以及一些内置应用程序。

窗口/显示管理器

窗口管理器处理手表内部的状态/应用程序的输入和渲染,所有状态必须实现State特质才能运行,但可以可选实现其他辅助特质,这允许窗口管理器为状态启用更多功能。

内核API

内核除了其他功能外,还为SDK提供了一个用于交互的API,这由内核crate中的lib.rs提供。这允许SDK正确依赖内核,这意味着如果内核实现了新的API,SDK要使用它,只需将内核版本升级即可。目前对SDK生成的二进制文件没有进行检查,以确保它与当前运行的内核兼容。

协议

MWatch内置了一个连接到usart2的蓝牙模块。通过这个串行接口,我们可以接收NotificationsApplications等。基本协议如下

STX -> TYPE -> (DELIM:DATA)* -> ETX
                ^^^^^^^^^^
                Can repeat many times based on the type 

用英文来说,开始字节后面跟一个类型,然后跟任意数量的分隔符,最后是数据,最后是ETX。所有数据都必须是有效的ASCII,要发送二进制数据,必须先将其转换为十六进制半字节。有关更多信息,请参阅application_manager。

输入管理

内置在 mwatch 中的 TSC(触摸感测控制器)提供三个输入。内核轮询这些输入并将结果多路复用来生成最终输出。例如,触摸中间按钮会产生中间输出,同时触摸左右按钮会产生双击输出。

文档

更新日志

构建

  • 需要安装 thumbv7em-none-eabi 目标,使用 rustup target add thumbv7em-none-eabi 来执行。
  • 需要 cargo-binutils 以支持额外功能,例如生成精简的二进制文件。注意:必须使用 rustup component add llvm-tools-preview 安装 llvm-tools-preview 组件,以便它能够正常工作。

许可

根据您的选择,许可协议可以是以下之一

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交的任何贡献,均应按照上述方式双许可,不附加任何额外条款或条件。

版权 © Scott Mabin 2019

依赖项

~63MB
~1.5M SLoC