1个不稳定版本
0.1.0 | 2022年11月4日 |
---|
#994 在 嵌入式开发
11KB
175 行
世嘉控制器驱动
使用Rust编写的用于读取世嘉控制器输入的嵌入式驱动。
此库利用embedded-hal
特质作为平台无关的驱动程序。
特性
mega-drive
- 包含世嘉Mega Drive控制器all
- 包含所有可用功能
示例
use sega_controller::mega_drive::{MegaDriveButton, MegaDriveController};
use sega_controller::Error;
// Using some kind of hal like `arduino_hal`
// NOTE: You should have pull-up resistors on these pins (10k ohm)
let controller = MegaDriveController::from_pins(
pins.d8.into_output(), // select pin
pins.d2.into_floating_input(), // data pin 0
pins.d3.into_floating_input(), // data pin 1
pins.d4.into_floating_input(), // data pin 2
pins.d5.into_floating_input(), // data pin 3
pins.d6.into_floating_input(), // data pin 4
pins.d7.into_floating_input(), // data pin 5
);
// Only do this once every frame (16ms)
match controller.read_state() {
Ok(state) => {
if state.is_six_button {
// do something special for six-button controllers if you like
}
if state.is_pressed(MegaDriveButton::Start) {
// start button is currently held down
}
}
Err(Error:NotPresent) => {} // controller is not connected
_ => {}
}
硬件参考
世嘉Mega Drive使用标准DB9串行端口连接器来连接控制器。
控制器连接器
CONSOLE PORT (MALE)
,---------------------------,
\ (1) (2) (3) (4) (5) /
\ (6) (7) (8) (9) /
`-----------------------'
CONTROLLER CABLE (FEMALE)
,---------------------------,
\ (5) (4) (3) (2) (1) /
\ (9) (8) (7) (6) /
`-----------------------'
注意: 控制器电缆使用的是 雌性 连接器,而控制台有 雄性 连接器。
引脚映射
引脚 | 描述 | 模式 |
---|---|---|
1 | 数据位0 | 输入 |
2 | 数据位1 | 输入 |
3 | 数据位2 | 输入 |
4 | 数据位3 | 输入 |
5 | +5V直流电 | -- |
6 | 数据位4 | 输入 |
7 | 选择 | 输出 |
8 | 地 | -- |
9 | 数据位5 | 输入 |
注意: Mode
是从控制台或微控制器的角度来读取控制器。
致谢
感谢PlutieDev提供的关于Mega Drive控制器如何工作的文档。特别适用于轮询六按钮控制器。
待办事项
- 通过
mdbook
和GitHub Actions提供库文档 - 通过
mdbook
和GitHub Actions提供硬件文档 - 移位寄存器支持(并行输入)
- 世嘉鼠标支持
- 世嘉多路复用支持
- 大师系统支持
- 单元测试
依赖项
~71KB