From 21c6566db6077de64aa72b9835e06701a25e0e2b Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Wed, 25 Sep 2024 12:25:10 -0700 Subject: [PATCH 01/16] :sparkles: Add CH9329 driver for mouse control --- CMakeLists.txt | 2 + demos/CMakeLists.txt | 1 + demos/applications/ch9329_nunchuck_mouse.cpp | 51 +++++ demos/platforms/stm32f103c8.cpp | 6 + demos/resource_list.hpp | 1 + include/libhal-input/ch9329.hpp | 74 +++++++ src/ch9329.cpp | 212 +++++++++++++++++++ tests/ch9329.test.cpp | 31 +++ 8 files changed, 378 insertions(+) create mode 100644 demos/applications/ch9329_nunchuck_mouse.cpp create mode 100644 include/libhal-input/ch9329.hpp create mode 100644 src/ch9329.cpp create mode 100644 tests/ch9329.test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 07ce1f9..82524d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,11 +19,13 @@ libhal_test_and_make_library( LIBRARY_NAME libhal-input SOURCES + src/ch9329.cpp src/input.cpp src/gamepad/nunchuck.cpp TEST_SOURCES tests/gamepad/nunchuck.test.cpp + tests/ch9329.test.cpp tests/input.test.cpp tests/main.test.cpp ) diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index 59ba97a..eb81f28 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -20,6 +20,7 @@ libhal_build_demos( DEMOS input nunchuck + ch9329_nunchuck_mouse INCLUDES . diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp new file mode 100644 index 0000000..a9b218b --- /dev/null +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -0,0 +1,51 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include + +#include + +void application(resource_list& p_map) +{ + using namespace std::chrono_literals; + using namespace hal::literals; + + constexpr auto sensitivity = 4; + auto& clock = *p_map.clock.value(); + auto& console = *p_map.console.value(); + auto& uart3 = *p_map.uart3.value(); + auto& i2c = *p_map.i2c.value(); + + hal::input::nunchuck nunchuck(i2c); + hal::input::ch9329 usb_control(uart3); + hal::input::ch9329::mouse_relative rel_mouse_control; + + hal::print(console, "Demo Application Starting...\n\n"); + + while (true) { + auto data = nunchuck.read(); + std::int8_t x = (data.joystick_x() - 128) / sensitivity; + std::int8_t y = -(data.joystick_y() - 128) / sensitivity; + rel_mouse_control.move(x, y) + .left_button(data.c_button()) + .right_button(data.z_button()); + + usb_control.send(rel_mouse_control); + hal::delay(clock, 1ms); + } +} diff --git a/demos/platforms/stm32f103c8.cpp b/demos/platforms/stm32f103c8.cpp index 8a314ac..b5de95b 100644 --- a/demos/platforms/stm32f103c8.cpp +++ b/demos/platforms/stm32f103c8.cpp @@ -41,6 +41,11 @@ resource_list initialize_platform() hal::serial::settings{ .baud_rate = 115200, }); + static hal::stm32f1::uart uart3(hal::port<3>, + hal::buffer<128>, + hal::serial::settings{ + .baud_rate = 9600, + }); static hal::stm32f1::output_pin led('C', 13); static hal::stm32f1::output_pin sda('B', 7); @@ -55,6 +60,7 @@ resource_list initialize_platform() return { .reset = +[]() { hal::cortex_m::reset(); }, .console = &uart1, + .uart3 = &uart3, .clock = &counter, .status_led = &led, .i2c = &bit_bang_i2c, diff --git a/demos/resource_list.hpp b/demos/resource_list.hpp index 906aad9..a3ed671 100644 --- a/demos/resource_list.hpp +++ b/demos/resource_list.hpp @@ -26,6 +26,7 @@ struct resource_list { hal::callback reset; std::optional console = std::nullopt; + std::optional uart3; std::optional clock = std::nullopt; std::optional status_led = std::nullopt; // Add more driver interfaces here ... diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp new file mode 100644 index 0000000..7e753ac --- /dev/null +++ b/include/libhal-input/ch9329.hpp @@ -0,0 +1,74 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma once + +#include +#include +#include + +namespace hal::input { +class ch9329 +{ + +public: + class mouse_absolute + { + public: + mouse_absolute(std::uint16_t p_screen_width, std::uint16_t p_screen_height); + mouse_absolute& position(std::uint16_t p_x, std::uint16_t p_y); + mouse_absolute& scroll_position(std::int8_t p_scroll_offset); + mouse_absolute& left_button(bool p_pressed); + mouse_absolute& middle_button(bool p_pressed); + mouse_absolute& right_button(bool p_pressed); + std::uint16_t get_screen_width(); + std::uint16_t get_screen_height(); + auto const& get_data() const + { + return m_data; + } + + private: + std::uint16_t m_screen_width; + std::uint16_t m_screen_height; + std::array m_data = {}; + }; + + class mouse_relative + { + public: + mouse_relative(); + mouse_relative& move(std::int8_t p_x_offset, std::int8_t p_y_offset); + mouse_relative& scroll_position(std::int8_t p_scroll_offset); + mouse_relative& left_button(bool p_pressed); + mouse_relative& middle_button(bool p_pressed); + mouse_relative& right_button(bool p_pressed); + auto const& get_data() const + { + return m_data; + } + + private: + std::array m_data = {}; + }; + + ch9329(hal::serial& p_uart); + + void send(mouse_absolute const& p_data); + void send(mouse_relative const& p_data); + +private: + hal::serial* m_uart; +}; +} // namespace hal::input diff --git a/src/ch9329.cpp b/src/ch9329.cpp new file mode 100644 index 0000000..2963a87 --- /dev/null +++ b/src/ch9329.cpp @@ -0,0 +1,212 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include + +namespace hal::input { + +constexpr hal::byte header_byte_1 = 0x57; +constexpr hal::byte header_byte_2 = 0xAB; +constexpr hal::byte address_byte = 0x00; + +constexpr hal::byte cmd_send_kb_general_data = 0x02; +constexpr hal::byte cmd_send_kb_media_data = 0x03; +constexpr hal::byte cmd_send_ms_abs_data = 0x04; +constexpr hal::byte cmd_send_ms_rel_data = 0x05; + +ch9329::ch9329(hal::serial& p_uart) + : m_uart(&p_uart) +{ +} + +ch9329::mouse_absolute::mouse_absolute(std::uint16_t p_screen_width, + std::uint16_t p_screen_height) + : m_screen_width(p_screen_width) + , m_screen_height(p_screen_height) + +{ + m_data = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +} + +ch9329::mouse_relative::mouse_relative() +{ + m_data = { 0x01, 0x00, 0x00, 0x00, 0x00 }; +} + +hal::byte get_size_byte(hal::byte p_command) +{ + switch (p_command) { + case cmd_send_kb_general_data: + return 0x08; + case cmd_send_kb_media_data: + return 0x01; + case cmd_send_ms_abs_data: + return 0x07; + case cmd_send_ms_rel_data: + return 0x05; + } + return 0x00; +} + +void send_start_bytes(serial& p_serial, hal::byte p_command) +{ + std::array start_bytes = { + header_byte_1, header_byte_2, address_byte, p_command + }; + start_bytes[4] = get_size_byte(p_command); + hal::print(p_serial, start_bytes); +} + +hal::byte calculate_sum(std::span p_bytes, hal::byte p_command) +{ + std::uint8_t sum_byte = header_byte_1; + sum_byte += header_byte_2; + sum_byte += address_byte; + sum_byte += get_size_byte(p_command); + for (hal::byte byte : p_bytes) { + sum_byte += byte; + } + return sum_byte; +} + +void ch9329::send(ch9329::mouse_relative const& p_data) +{ + auto bytes = p_data.get_data(); + send_start_bytes(*m_uart, cmd_send_ms_rel_data); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_ms_rel_data); + hal::print(*m_uart, std::to_array({ sum_byte })); +} + +void ch9329::send(ch9329::mouse_absolute const& p_data) +{ + auto bytes = p_data.get_data(); + send_start_bytes(*m_uart, cmd_send_ms_abs_data); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_ms_abs_data); + hal::print(*m_uart, std::to_array({ sum_byte })); +} + +// mouse absolute functions +ch9329::mouse_absolute& ch9329::mouse_absolute::position(std::uint16_t p_x, + std::uint16_t p_y) +{ + if (p_x > m_screen_width) { + p_x = m_screen_width; + } + std::uint16_t x_value = (4096 * p_x) / m_screen_width; + hal::byte lower_bits = hal::bit_extract>(x_value); + m_data[2] = lower_bits; + hal::byte upper_bits = hal::bit_extract>(x_value); + m_data[3] = upper_bits; + + if (p_y > m_screen_height) { + p_y = m_screen_height; + } + std::uint16_t y_value = (4096 * m_screen_height) / p_y; + lower_bits = hal::bit_extract>(y_value); + m_data[4] = lower_bits; + upper_bits = hal::bit_extract>(y_value); + m_data[5] = upper_bits; + return *this; +} + +ch9329::mouse_absolute& ch9329::mouse_absolute::scroll_position( + std::int8_t p_scroll_offset) +{ + m_data[6] = p_scroll_offset; + return *this; +} + +ch9329::mouse_absolute& ch9329::mouse_absolute::left_button(bool p_pressed) +{ + if (p_pressed) { + m_data[1] = m_data[1] | 0b001; + } else { + m_data[1] = m_data[1] & 0b110; + } + return *this; +} + +ch9329::mouse_absolute& ch9329::mouse_absolute::middle_button(bool p_pressed) +{ + if (p_pressed) { + m_data[1] = m_data[1] | 0b100; + } else { + m_data[1] = m_data[1] & 0b011; + } + return *this; +} + +ch9329::mouse_absolute& ch9329::mouse_absolute::right_button(bool p_pressed) +{ + if (p_pressed) { + m_data[1] = m_data[1] | 0b010; + } else { + m_data[1] = m_data[1] & 0b101; + } + return *this; +} + +// mouse relative functions +ch9329::mouse_relative& ch9329::mouse_relative::move(std::int8_t p_x_offset, + std::int8_t p_y_offset) +{ + m_data[2] = p_x_offset; + m_data[3] = p_y_offset; + return *this; +} + +ch9329::mouse_relative& ch9329::mouse_relative::scroll_position( + std::int8_t p_scroll_offset) +{ + m_data[4] = p_scroll_offset; + return *this; +} + +ch9329::mouse_relative& ch9329::mouse_relative::left_button(bool p_pressed) +{ + if (p_pressed) { + m_data[1] = m_data[1] | 0b001; + } else { + m_data[1] = m_data[1] & 0b110; + } + return *this; +} + +ch9329::mouse_relative& ch9329::mouse_relative::middle_button(bool p_pressed) +{ + if (p_pressed) { + m_data[1] = m_data[1] | 0b100; + } else { + m_data[1] = m_data[1] & 0b011; + } + return *this; +} + +ch9329::mouse_relative& ch9329::mouse_relative::right_button(bool p_pressed) +{ + if (p_pressed) { + m_data[1] = m_data[1] | 0b010; + } else { + m_data[1] = m_data[1] & 0b101; + } + return *this; +} + +} // namespace hal::input diff --git a/tests/ch9329.test.cpp b/tests/ch9329.test.cpp new file mode 100644 index 0000000..a15d487 --- /dev/null +++ b/tests/ch9329.test.cpp @@ -0,0 +1,31 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +namespace hal::input { +void ch9329_test() +{ + using namespace boost::ut; + using namespace std::literals; + + "ch9329::create()"_test = []() { + // Setup + // Exercise + // Verify + }; +}; +} // namespace hal::input From 63d344b7bd564eba76b2768c4309b69d6b6ff099 Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Wed, 25 Sep 2024 13:48:58 -0700 Subject: [PATCH 02/16] bug fixes and absolute mouse demo --- demos/CMakeLists.txt | 1 + demos/applications/ch9329_absolute_mouse.cpp | 74 ++++++++++++++++++++ demos/applications/ch9329_nunchuck_mouse.cpp | 1 - include/libhal-input/ch9329.hpp | 10 ++- src/ch9329.cpp | 23 +++--- 5 files changed, 95 insertions(+), 14 deletions(-) create mode 100644 demos/applications/ch9329_absolute_mouse.cpp diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index eb81f28..b6d76df 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -21,6 +21,7 @@ libhal_build_demos( input nunchuck ch9329_nunchuck_mouse + ch9329_absolute_mouse INCLUDES . diff --git a/demos/applications/ch9329_absolute_mouse.cpp b/demos/applications/ch9329_absolute_mouse.cpp new file mode 100644 index 0000000..8f74995 --- /dev/null +++ b/demos/applications/ch9329_absolute_mouse.cpp @@ -0,0 +1,74 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include +#include + +#include + +void application(resource_list& p_map) +{ + using namespace std::chrono_literals; + using namespace hal::literals; + + auto& clock = *p_map.clock.value(); + auto& console = *p_map.console.value(); + auto& uart3 = *p_map.uart3.value(); + + hal::input::ch9329 usb_control(uart3); + uint16_t width = 3840; + uint16_t height = 2160; + + hal::input::ch9329::mouse_absolute abs_mouse_control(width, height); + + hal::print(console, "Demo Application Starting...\n\n"); + hal::print<32>(console, "Screen Width: %li ", width); + hal::print<32>(console, "Screen Height: %li \n", height); + + while (true) { + // top left corner + abs_mouse_control.position(1, 1); + usb_control.send(abs_mouse_control); + hal::delay(clock, 1s); + + // middle screen + abs_mouse_control.position(width / 2, height / 2); + usb_control.send(abs_mouse_control); + hal::delay(clock, 1s); + + // bottom right + abs_mouse_control.position(width, height); + usb_control.send(abs_mouse_control); + hal::delay(clock, 1s); + + // bottom left + abs_mouse_control.position(1, height); + usb_control.send(abs_mouse_control); + hal::delay(clock, 1s); + + // middle screen + abs_mouse_control.position(width / 2, height / 2); + usb_control.send(abs_mouse_control); + hal::delay(clock, 1s); + + // top right + abs_mouse_control.position(width, 1); + usb_control.send(abs_mouse_control); + hal::delay(clock, 1s); + } +} diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index a9b218b..34ec422 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -44,7 +44,6 @@ void application(resource_list& p_map) rel_mouse_control.move(x, y) .left_button(data.c_button()) .right_button(data.z_button()); - usb_control.send(rel_mouse_control); hal::delay(clock, 1ms); } diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 7e753ac..acb9c3a 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -32,8 +32,14 @@ class ch9329 mouse_absolute& left_button(bool p_pressed); mouse_absolute& middle_button(bool p_pressed); mouse_absolute& right_button(bool p_pressed); - std::uint16_t get_screen_width(); - std::uint16_t get_screen_height(); + std::uint16_t get_screen_width() + { + return m_screen_width; + }; + std::uint16_t get_screen_height() + { + return m_screen_height; + }; auto const& get_data() const { return m_data; diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 2963a87..f9938bf 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -77,6 +77,7 @@ hal::byte calculate_sum(std::span p_bytes, hal::byte p_command) std::uint8_t sum_byte = header_byte_1; sum_byte += header_byte_2; sum_byte += address_byte; + sum_byte += p_command; sum_byte += get_size_byte(p_command); for (hal::byte byte : p_bytes) { sum_byte += byte; @@ -106,22 +107,22 @@ void ch9329::send(ch9329::mouse_absolute const& p_data) ch9329::mouse_absolute& ch9329::mouse_absolute::position(std::uint16_t p_x, std::uint16_t p_y) { - if (p_x > m_screen_width) { - p_x = m_screen_width; + if (p_x >= m_screen_width) { + p_x = m_screen_width - 1; } - std::uint16_t x_value = (4096 * p_x) / m_screen_width; - hal::byte lower_bits = hal::bit_extract>(x_value); + if (p_y >= m_screen_height) { + p_y = m_screen_height - 1; + } + std::uint16_t x_value = ((p_x * 4096) / m_screen_width); + hal::byte lower_bits = x_value & 0xFF; m_data[2] = lower_bits; - hal::byte upper_bits = hal::bit_extract>(x_value); + hal::byte upper_bits = (x_value >> 8) & 0xFF; m_data[3] = upper_bits; - if (p_y > m_screen_height) { - p_y = m_screen_height; - } - std::uint16_t y_value = (4096 * m_screen_height) / p_y; - lower_bits = hal::bit_extract>(y_value); + std::uint16_t y_value = ((p_y * 4096) / m_screen_height); + lower_bits = y_value & 0xFF; m_data[4] = lower_bits; - upper_bits = hal::bit_extract>(y_value); + upper_bits = (y_value >> 8) & 0xFF; m_data[5] = upper_bits; return *this; } From e22b10689ab2508cb42b833c0558d4571cd96af0 Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Thu, 26 Sep 2024 07:13:14 -0700 Subject: [PATCH 03/16] change button logic --- demos/applications/ch9329_nunchuck_mouse.cpp | 2 +- src/ch9329.cpp | 43 ++++++-------------- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 34ec422..95df639 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -25,7 +25,7 @@ void application(resource_list& p_map) using namespace std::chrono_literals; using namespace hal::literals; - constexpr auto sensitivity = 4; + constexpr auto sensitivity = 16; auto& clock = *p_map.clock.value(); auto& console = *p_map.console.value(); auto& uart3 = *p_map.uart3.value(); diff --git a/src/ch9329.cpp b/src/ch9329.cpp index f9938bf..9fba2a1 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -136,31 +136,23 @@ ch9329::mouse_absolute& ch9329::mouse_absolute::scroll_position( ch9329::mouse_absolute& ch9329::mouse_absolute::left_button(bool p_pressed) { - if (p_pressed) { - m_data[1] = m_data[1] | 0b001; - } else { - m_data[1] = m_data[1] & 0b110; - } + constexpr auto left_button_mask = hal::bit_mask::from<0>(); + hal::bit_modify(m_data[1]).insert(p_pressed); + return *this; return *this; } ch9329::mouse_absolute& ch9329::mouse_absolute::middle_button(bool p_pressed) { - if (p_pressed) { - m_data[1] = m_data[1] | 0b100; - } else { - m_data[1] = m_data[1] & 0b011; - } + constexpr auto middle_button_mask = hal::bit_mask::from<2>(); + hal::bit_modify(m_data[1]).insert(p_pressed); return *this; } ch9329::mouse_absolute& ch9329::mouse_absolute::right_button(bool p_pressed) { - if (p_pressed) { - m_data[1] = m_data[1] | 0b010; - } else { - m_data[1] = m_data[1] & 0b101; - } + constexpr auto right_button_mask = hal::bit_mask::from<1>(); + hal::bit_modify(m_data[1]).insert(p_pressed); return *this; } @@ -182,31 +174,22 @@ ch9329::mouse_relative& ch9329::mouse_relative::scroll_position( ch9329::mouse_relative& ch9329::mouse_relative::left_button(bool p_pressed) { - if (p_pressed) { - m_data[1] = m_data[1] | 0b001; - } else { - m_data[1] = m_data[1] & 0b110; - } + constexpr auto left_button_mask = hal::bit_mask::from<0>(); + hal::bit_modify(m_data[1]).insert(p_pressed); return *this; } ch9329::mouse_relative& ch9329::mouse_relative::middle_button(bool p_pressed) { - if (p_pressed) { - m_data[1] = m_data[1] | 0b100; - } else { - m_data[1] = m_data[1] & 0b011; - } + constexpr auto middle_button_mask = hal::bit_mask::from<2>(); + hal::bit_modify(m_data[1]).insert(p_pressed); return *this; } ch9329::mouse_relative& ch9329::mouse_relative::right_button(bool p_pressed) { - if (p_pressed) { - m_data[1] = m_data[1] | 0b010; - } else { - m_data[1] = m_data[1] & 0b101; - } + constexpr auto right_button_mask = hal::bit_mask::from<1>(); + hal::bit_modify(m_data[1]).insert(p_pressed); return *this; } From 848e3e7a9d8344ad4138a3995382a30347245eeb Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Thu, 26 Sep 2024 08:29:11 -0700 Subject: [PATCH 04/16] add doxygen comments --- include/libhal-input/ch9329.hpp | 133 +++++++++++++++++++++++++++++++- 1 file changed, 131 insertions(+), 2 deletions(-) diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index acb9c3a..a7768cc 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -19,27 +19,91 @@ #include namespace hal::input { +/** + * @brief Driver for CH9329 UART to USB + * + */ class ch9329 { - + /** + * @brief Holds data and functions related to using mouse absolute position + * commands + * + */ public: class mouse_absolute { public: + /** + * @brief Construct a new mouse absolute object + * + * @param p_screen_width width of the screen, used as max X value + * @param p_screen_height height of the screen, used as max Y value + */ mouse_absolute(std::uint16_t p_screen_width, std::uint16_t p_screen_height); + /** + * @brief Change the position of the cursor to specified x, y coordinates + * + * @param p_x X coordinate to move to + * @param p_y Y coordinate to move to + * @return mouse_absolute& + */ mouse_absolute& position(std::uint16_t p_x, std::uint16_t p_y); + /** + * @brief Change the position of the scroll wheel. Negative values indicates + * scrolling down and positive indicates scrolling up + * + * @param p_scroll_offset number of "scroll teeth" to move + * @return mouse_absolute& + */ mouse_absolute& scroll_position(std::int8_t p_scroll_offset); + /** + * @brief Change the state of the left button + * + * @param p_pressed State of button, true means pressed and false is + * released + * @return mouse_absolute& + */ mouse_absolute& left_button(bool p_pressed); + /** + * @brief Change the state of the middle button + * + * @param p_pressed State of button, true means pressed and false is + * released + * @return mouse_absolute& + */ mouse_absolute& middle_button(bool p_pressed); + /** + * @brief Change the state of the right button + * + * @param p_pressed State of button, true means pressed and false is + * released + * @return mouse_absolute& + */ mouse_absolute& right_button(bool p_pressed); + /** + * @brief Get the screen width + * + * @return std::uint16_t Screen width that was set in contructor + */ std::uint16_t get_screen_width() { return m_screen_width; }; + /** + * @brief Get the screen height + * + * @return std::uint16_t Screen height that was set in contructor + */ std::uint16_t get_screen_height() { return m_screen_height; }; + /** + * @brief Get the data array containing the control bytes + * + * @return auto const& Byte array containing control information + */ auto const& get_data() const { return m_data; @@ -51,15 +115,66 @@ class ch9329 std::array m_data = {}; }; + /** + * @brief Holds data and functions related to using mouse relative position + * commands + * + */ class mouse_relative { public: + /** + * @brief Construct a new mouse relative object + * + */ mouse_relative(); + /** + * @brief Move the cursor relative to where it currently is. + * + * @param p_x_offset Number of pixels to move the cursor on the x axis. + * Negative values move left and positive move right. + * @param p_y_offset Number of pixels to move the cursor on the y axis. + * Negative values move down and positive move up. + * @return mouse_relative& + */ mouse_relative& move(std::int8_t p_x_offset, std::int8_t p_y_offset); + /** + * @brief Change the position of the scroll wheel. Negative values indicates + * scrolling down and positive indicates scrolling up + * + * @param p_scroll_offset number of "scroll teeth" to move + * @return mouse_relative& + */ mouse_relative& scroll_position(std::int8_t p_scroll_offset); + /** + * @brief Change the state of the left button + * + * @param p_pressed State of button, true means pressed and false is + * released + * @return mouse_relative& + */ mouse_relative& left_button(bool p_pressed); + /** + * @brief Change the state of the middle button + * + * @param p_pressed State of button, true means pressed and false is + * released + * @return mouse_relative& + */ mouse_relative& middle_button(bool p_pressed); + /** + * @brief Change the state of the right button + * + * @param p_pressed State of button, true means pressed and false is + * released + * @return mouse_relative& + */ mouse_relative& right_button(bool p_pressed); + /** + * @brief Get the data array containing the control bytes + * + * @return auto const& Byte array containing control information + */ auto const& get_data() const { return m_data; @@ -69,9 +184,23 @@ class ch9329 std::array m_data = {}; }; + /** + * @brief Construct a new ch9329 object + * + * @param p_uart uart used to communicate with CH9329 + */ ch9329(hal::serial& p_uart); - + /** + * @brief Send mouse absolute position command + * + * @param p_data mouse absolute object containing command bytes + */ void send(mouse_absolute const& p_data); + /** + * @brief Send mouse relative position command + * + * @param p_data mouse relative object containing command bytes + */ void send(mouse_relative const& p_data); private: From b0bf16cfcdde38c96a716a37c090966a0c55a154 Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Thu, 26 Sep 2024 12:11:52 -0700 Subject: [PATCH 05/16] add keyboard general commands --- demos/CMakeLists.txt | 1 + demos/applications/ch9329_keyboard.cpp | 55 +++++++++ include/libhal-input/ch9329.hpp | 71 ++++++++++++ include/libhal-input/ch9329_kb_bytes.hpp | 137 +++++++++++++++++++++++ src/ch9329.cpp | 112 ++++++++++++++++++ 5 files changed, 376 insertions(+) create mode 100644 demos/applications/ch9329_keyboard.cpp create mode 100644 include/libhal-input/ch9329_kb_bytes.hpp diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index b6d76df..9e6ee18 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -22,6 +22,7 @@ libhal_build_demos( nunchuck ch9329_nunchuck_mouse ch9329_absolute_mouse + ch9329_keyboard INCLUDES . diff --git a/demos/applications/ch9329_keyboard.cpp b/demos/applications/ch9329_keyboard.cpp new file mode 100644 index 0000000..d48114f --- /dev/null +++ b/demos/applications/ch9329_keyboard.cpp @@ -0,0 +1,55 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include + +#include + +void application(resource_list& p_map) +{ + using namespace std::chrono_literals; + using namespace hal::literals; + + auto& clock = *p_map.clock.value(); + auto& console = *p_map.console.value(); + auto& uart3 = *p_map.uart3.value(); + + hal::input::ch9329 usb_control(uart3); + + hal::input::ch9329::keyboard_general keyboard_control; + + hal::print(console, "Demo Application Starting...\n\n"); + + while (true) { + keyboard_control.press_normal_key(normal_key::a, 1); + usb_control.send(keyboard_control); + hal::delay(clock, 1ms); + + keyboard_control.release_normal_key(normal_key::a); + usb_control.send(keyboard_control); + hal::delay(clock, 2s); + + keyboard_control.press_normal_key(normal_key::back_space, 1); + usb_control.send(keyboard_control); + hal::delay(clock, 1ms); + + keyboard_control.release_normal_key(normal_key::back_space); + usb_control.send(keyboard_control); + hal::delay(clock, 2s); + } +} diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index a7768cc..9b4ffea 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -15,6 +15,7 @@ #pragma once #include +#include #include #include @@ -184,6 +185,70 @@ class ch9329 std::array m_data = {}; }; + /** + * @brief Holds data and functions related to using keyboard general commands + * + */ + class keyboard_general + { + public: + /** + * @brief Construct a new keyboard general object + * + */ + keyboard_general(); + /** + * @brief Press a control key. + * + * Control keys are left and right control, shift, alt, and windows keys. + * + * @param p_key control_key_bit enum value representing which key to press + * @return keyboard_general& + */ + keyboard_general& press_control_key(control_key_bit p_key); + /** + * @brief Press a normal key. + * + * @param p_key normal_key enum value representing which key to press + * @param p_slot Which slot number to put the key into. Valid values are 1 - + * 6 + * @return keyboard_general& + */ + keyboard_general& press_normal_key(normal_key p_key, uint8_t p_slot); + /** + * @brief Release a control key. + * + * @param p_key control_key_bit enum value representing which key to release + * @return keyboard_general& + */ + keyboard_general& release_control_key(control_key_bit p_key); + /** + * @brief Release a normal key. + * + * @param p_key normal_key enum value representing which key to press + * @return keyboard_general& + */ + keyboard_general& release_normal_key(normal_key p_key); + /** + * @brief Release all keys, this includes control and normal keys. + * + * @return keyboard_general& + */ + keyboard_general& release_all_keys(); + /** + * @brief Get the data array containing the control bytes + * + * @return auto const& Byte array containing control information + */ + auto const& get_data() const + { + return m_data; + } + + private: + std::array m_data = {}; + }; + /** * @brief Construct a new ch9329 object * @@ -202,6 +267,12 @@ class ch9329 * @param p_data mouse relative object containing command bytes */ void send(mouse_relative const& p_data); + /** + * @brief Send keyboard general command + * + * @param p_data keyboard general object containing command bytes + */ + void send(keyboard_general const& p_data); private: hal::serial* m_uart; diff --git a/include/libhal-input/ch9329_kb_bytes.hpp b/include/libhal-input/ch9329_kb_bytes.hpp new file mode 100644 index 0000000..b4a8e6c --- /dev/null +++ b/include/libhal-input/ch9329_kb_bytes.hpp @@ -0,0 +1,137 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include + +enum class control_key_bit : std::uint8_t +{ + left_control = 0, + left_shift = 1, + left_alt = 2, + left_windows = 3, + right_control = 4, + right_shift = 5, + right_alt = 6, + right_windows = 7, +}; + +enum class normal_key : hal::byte +{ + a = 0x04, + b = 0x05, + c = 0x06, + d = 0x07, + e = 0x08, + f = 0x09, + g = 0x0A, + h = 0x0B, + i = 0x0C, + j = 0x0D, + k = 0x0E, + l = 0x0F, + m = 0x10, + n = 0x11, + o = 0x12, + p = 0x13, + q = 0x14, + r = 0x15, + s = 0x16, + t = 0x17, + u = 0x18, + v = 0x19, + w = 0x1A, + x = 0x1B, + y = 0x1C, + z = 0x1D, + k1 = 0x1E, + k2 = 0x1F, + k3 = 0x20, + k4 = 0x21, + k5 = 0x22, + k6 = 0x23, + k7 = 0x24, + k8 = 0x25, + k9 = 0x26, + k0 = 0x27, + left_enter = 0x28, + esc = 0x29, + back_space = 0x2A, + tab = 0x2B, + space = 0x2C, + hyphen = 0x2D, + equal = 0x2E, + left_bracket = 0x2F, + right_bracket = 0x30, + keycode_29 = 0x31, + keycode_42 = 0x32, + semi_colon = 0x33, + quote_mark = 0x34, + grave = 0x35, + comma = 0x36, // this might be < only? datasheet is weird + period = 0x37, + slash = 0x38, + capslock = 0x39, + f1 = 0x3A, + f2 = 0x3B, + f3 = 0x3C, + f4 = 0x3D, + f5 = 0x3E, + f6 = 0x3F, + f7 = 0x40, + f8 = 0x41, + f9 = 0x42, + f10 = 0x43, + f11 = 0x44, + f12 = 0x45, + print_screen = 0x46, + scroll_lock = 0x47, + pause = 0x48, + insert = 0x49, + home = 0x4A, + pg_up = 0x4B, + delete_key = 0x4C, + end = 0x4D, + pg_dn = 0x4E, + right_arrow = 0x4F, + left_arrow = 0x50, + down_arrow = 0x51, + up_arrow = 0x52, + num_lock = 0x53, + num_pad_asterisk = 0x55, + num_pad_minus = 0x56, + num_pad_plus = 0x57, + num_pad_enter = 0x58, + num_pad_1 = 0x59, + num_pad_2 = 0x5A, + num_pad_3 = 0x5B, + num_pad_4 = 0x5C, + num_pad_5 = 0x5D, + num_pad_6 = 0x5E, + num_pad_7 = 0x5F, + num_pad_8 = 0x60, + num_pad_9 = 0x61, + num_pad_0 = 0x62, + num_pad_del = 0x63, + keycode_45 = 0x64, + keycode_107 = 0x85, + keycode_14 = 0x89, + keycode_56 = 0x87, + left_ctrl = 0xE0, + left_shift = 0xE1, + left_alt = 0xE2, + right_ctrl = 0xE4, + right_shift = 0xE5, + right_alt = 0xE6, +}; diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 9fba2a1..59ea839 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -48,6 +48,11 @@ ch9329::mouse_relative::mouse_relative() m_data = { 0x01, 0x00, 0x00, 0x00, 0x00 }; } +ch9329::keyboard_general::keyboard_general() +{ + m_data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +} + hal::byte get_size_byte(hal::byte p_command) { switch (p_command) { @@ -103,6 +108,15 @@ void ch9329::send(ch9329::mouse_absolute const& p_data) hal::print(*m_uart, std::to_array({ sum_byte })); } +void ch9329::send(ch9329::keyboard_general const& p_data) +{ + auto bytes = p_data.get_data(); + send_start_bytes(*m_uart, cmd_send_kb_general_data); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_kb_general_data); + hal::print(*m_uart, std::to_array({ sum_byte })); +} + // mouse absolute functions ch9329::mouse_absolute& ch9329::mouse_absolute::position(std::uint16_t p_x, std::uint16_t p_y) @@ -193,4 +207,102 @@ ch9329::mouse_relative& ch9329::mouse_relative::right_button(bool p_pressed) return *this; } +// keyboard general functions +ch9329::keyboard_general& ch9329::keyboard_general::press_control_key( + control_key_bit p_key) +{ + hal::byte mask = 0x00; + switch (p_key) { + case control_key_bit::left_control: + mask = 0b1; + break; + case control_key_bit::left_shift: + mask = 0b10; + break; + case control_key_bit::left_alt: + mask = 0b100; + break; + case control_key_bit::left_windows: + mask = 0b1000; + break; + case control_key_bit::right_control: + mask = 0b10000; + break; + case control_key_bit::right_shift: + mask = 0b100000; + break; + case control_key_bit::right_alt: + mask = 0b1000000; + break; + case control_key_bit::right_windows: + mask = 0b10000000; + break; + } + m_data[0] = m_data[0] | mask; + return *this; +} + +ch9329::keyboard_general& ch9329::keyboard_general::release_control_key( + control_key_bit p_key) +{ + hal::byte mask = 0xFF; + switch (p_key) { + case control_key_bit::left_control: + mask = 0b11111110; + break; + case control_key_bit::left_shift: + mask = 0b11111101; + break; + case control_key_bit::left_alt: + mask = 0b11111011; + break; + case control_key_bit::left_windows: + mask = 0b11110111; + break; + case control_key_bit::right_control: + mask = 0b11101111; + break; + case control_key_bit::right_shift: + mask = 0b11011111; + break; + case control_key_bit::right_alt: + mask = 0b10111111; + break; + case control_key_bit::right_windows: + mask = 0b01111111; + break; + } + m_data[0] = m_data[0] & mask; + return *this; +} + +ch9329::keyboard_general& ch9329::keyboard_general::press_normal_key( + normal_key p_key, + uint8_t p_slot) +{ + if (p_slot < 1) { + p_slot = 1; + } else if (p_slot > 6) { + p_slot = 6; + } + m_data[p_slot + 1] = static_cast(p_key); + return *this; +} + +ch9329::keyboard_general& ch9329::keyboard_general::release_normal_key( + normal_key p_key) +{ + for (int i = 2; i < 8; i++) { + if (m_data[i] == static_cast(p_key)) { + m_data[i] = 0x00; + } + } + return *this; +} + +ch9329::keyboard_general& ch9329::keyboard_general::release_all_keys() +{ + m_data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + return *this; +} } // namespace hal::input From 2398b63d3bf6a4a7ba6b929c939d31a872240254 Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Fri, 27 Sep 2024 14:58:49 -0700 Subject: [PATCH 06/16] add keyboard media command --- include/libhal-input/ch9329.hpp | 82 +++++++++++++ include/libhal-input/ch9329_kb_bytes.hpp | 35 ++++++ src/ch9329.cpp | 148 ++++++++++++++++++++++- 3 files changed, 262 insertions(+), 3 deletions(-) diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 9b4ffea..64667bb 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -185,6 +185,81 @@ class ch9329 std::array m_data = {}; }; + /** + * @brief Holds data and functions related to using keyboard media commands + */ + class keyboard_media + { + public: + /** + * @brief Construct a new keyboard media object + * + */ + keyboard_media(); + /** + * @brief Press a media key. + * + * @param p_key media_key enum representing which key to press + * @return keyboard_media& + */ + keyboard_media& press_media_key(media_key p_key); + /** + * @brief Release a media key. + * + * @param p_key media_key enum representing which key to release + * @return keyboard_media& + */ + keyboard_media& release_media_key(media_key p_key); + /** + * @brief Release all acpi keys + * + * @return keyboard_media& + */ + keyboard_media& release_all_media_keys(); + /** + * @brief Press an acpi key. + * + * @param p_key acpi_key enum representing which key to press + * @return keyboard_media& + */ + keyboard_media& press_acpi_key(acpi_key p_key); + /** + * @brief Release an acpi key. + * + * @param p_key acpi_key enum representing which key to release + * @return keyboard_media& + */ + keyboard_media& release_acpi_key(acpi_key p_key); + /** + * @brief Release all acpi keys + * + * @return keyboard_media& + */ + keyboard_media& release_all_acpi_keys(); + /** + * @brief Get the data array containing the control bytes for media keys + * + * @return auto const& Byte array containing control information + */ + auto const& get_media_data() const + { + return m_media_data; + } + /** + * @brief Get the data array containing the control bytes for acpi keys + * + * @return auto const& Byte array containing control information + */ + auto const& get_acpi_data() const + { + return m_acpi_data; + } + + private: + std::array m_media_data = {}; + std::array m_acpi_data = {}; + }; + /** * @brief Holds data and functions related to using keyboard general commands * @@ -267,6 +342,13 @@ class ch9329 * @param p_data mouse relative object containing command bytes */ void send(mouse_relative const& p_data); + /** + * @brief Send keyboard media command + * + * @param p_data keyboard media object containing command bytes + * @param p_is_acpi is the command sending acpi key presses + */ + void send(keyboard_media const& p_data, bool p_is_acpi = false); /** * @brief Send keyboard general command * diff --git a/include/libhal-input/ch9329_kb_bytes.hpp b/include/libhal-input/ch9329_kb_bytes.hpp index b4a8e6c..b9adb00 100644 --- a/include/libhal-input/ch9329_kb_bytes.hpp +++ b/include/libhal-input/ch9329_kb_bytes.hpp @@ -27,6 +27,41 @@ enum class control_key_bit : std::uint8_t right_windows = 7, }; +enum class acpi_key : std::uint8_t +{ + power = 0, + sleep = 1, + wake_up = 2 +}; + +enum class media_key : std::uint8_t +{ + volume_up = 0, + volume_down = 1, + mute = 2, + play_pause = 3, + next_track = 4, + prev_track = 5, + cd_stop = 6, + eject = 7, + email = 8, + internet_search = 9, + internet_favorites = 10, + internet_home = 11, + internet_back = 12, + internet_forward = 13, + internet_stop = 14, + refresh = 15, + media = 16, + explorer = 17, + calculator = 18, + screen_save = 19, + my_computer = 20, + minimize = 21, + record = 22, + rewind = 23 +}; + enum class normal_key : hal::byte { a = 0x04, diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 59ea839..9e8e102 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include #include #include @@ -48,6 +49,12 @@ ch9329::mouse_relative::mouse_relative() m_data = { 0x01, 0x00, 0x00, 0x00, 0x00 }; } +ch9329::keyboard_media::keyboard_media() +{ + m_media_data = { 0x02, 0x00, 0x00, 0x00 }; + m_acpi_data = { 0x01, 0x00 }; +} + ch9329::keyboard_general::keyboard_general() { m_data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -59,7 +66,7 @@ hal::byte get_size_byte(hal::byte p_command) case cmd_send_kb_general_data: return 0x08; case cmd_send_kb_media_data: - return 0x01; + return 0x04; case cmd_send_ms_abs_data: return 0x07; case cmd_send_ms_rel_data: @@ -68,12 +75,16 @@ hal::byte get_size_byte(hal::byte p_command) return 0x00; } -void send_start_bytes(serial& p_serial, hal::byte p_command) +void send_start_bytes(serial& p_serial, hal::byte p_command, uint8_t p_size = 0) { std::array start_bytes = { header_byte_1, header_byte_2, address_byte, p_command }; - start_bytes[4] = get_size_byte(p_command); + if (p_size == 0) { + start_bytes[4] = get_size_byte(p_command); + } else { + start_bytes[4] = p_size; // does this work? + } hal::print(p_serial, start_bytes); } @@ -117,6 +128,23 @@ void ch9329::send(ch9329::keyboard_general const& p_data) hal::print(*m_uart, std::to_array({ sum_byte })); } +void ch9329::send(keyboard_media const& p_data, bool p_acpi) +{ + if (p_acpi) { + auto bytes = p_data.get_acpi_data(); + send_start_bytes(*m_uart, cmd_send_kb_media_data, 2); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_kb_media_data); + hal::print(*m_uart, std::to_array({ sum_byte })); + } else { + auto bytes = p_data.get_media_data(); + send_start_bytes(*m_uart, cmd_send_kb_media_data); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_kb_media_data); + hal::print(*m_uart, std::to_array({ sum_byte })); + } +} + // mouse absolute functions ch9329::mouse_absolute& ch9329::mouse_absolute::position(std::uint16_t p_x, std::uint16_t p_y) @@ -207,6 +235,120 @@ ch9329::mouse_relative& ch9329::mouse_relative::right_button(bool p_pressed) return *this; } +// keyboard media functions +ch9329::keyboard_media& ch9329::keyboard_media::press_media_key(media_key p_key) +{ + auto byte_num = (static_cast(p_key) >> 3) + 1; + auto bit_num = static_cast(p_key) & 0b111; + + switch (bit_num) { + case 0: + m_media_data[byte_num] = m_media_data[byte_num] | 0b1; + break; + case 1: + m_media_data[byte_num] = m_media_data[byte_num] | 0b10; + break; + case 2: + m_media_data[byte_num] = m_media_data[byte_num] | 0b100; + break; + case 3: + m_media_data[byte_num] = m_media_data[byte_num] | 0b1000; + break; + case 4: + m_media_data[byte_num] = m_media_data[byte_num] | 0b10000; + break; + case 5: + m_media_data[byte_num] = m_media_data[byte_num] | 0b100000; + break; + case 6: + m_media_data[byte_num] = m_media_data[byte_num] | 0b1000000; + break; + case 7: + m_media_data[byte_num] = m_media_data[byte_num] | 0b10000000; + break; + } + return *this; +} + +ch9329::keyboard_media& ch9329::keyboard_media::release_media_key( + media_key p_key) +{ + auto byte_num = (static_cast(p_key) >> 3) + 1; + auto bit_num = static_cast(p_key) & 0b111; + + switch (bit_num) { + case 0: + m_media_data[byte_num] = m_media_data[byte_num] & 0b11111110; + break; + case 1: + m_media_data[byte_num] = m_media_data[byte_num] & 0b11111101; + break; + case 2: + m_media_data[byte_num] = m_media_data[byte_num] & 0b11111011; + break; + case 3: + m_media_data[byte_num] = m_media_data[byte_num] & 0b11110111; + break; + case 4: + m_media_data[byte_num] = m_media_data[byte_num] & 0b11101111; + break; + case 5: + m_media_data[byte_num] = m_media_data[byte_num] & 0b11011111; + break; + case 6: + m_media_data[byte_num] = m_media_data[byte_num] & 0b10111111; + break; + case 7: + m_media_data[byte_num] = m_media_data[byte_num] & 0b01111111; + break; + } + return *this; +} + +ch9329::keyboard_media& ch9329::keyboard_media::release_all_media_keys() +{ + m_media_data = { 0x01, 0x00, 0x00, 0x00 }; + return *this; +} + +ch9329::keyboard_media& ch9329::keyboard_media::press_acpi_key(acpi_key p_key) +{ + switch (p_key) { + case acpi_key::power: + m_acpi_data[1] = m_acpi_data[1] | 0b001; + break; + case acpi_key::sleep: + m_acpi_data[1] = m_acpi_data[1] | 0b010; + break; + case acpi_key::wake_up: + m_acpi_data[1] = m_acpi_data[1] | 0b100; + break; + } + return *this; +} + +ch9329::keyboard_media& ch9329::keyboard_media::release_acpi_key(acpi_key p_key) +{ + switch (p_key) { + case acpi_key::power: + m_acpi_data[1] = m_acpi_data[1] & 0b110; + break; + case acpi_key::sleep: + m_acpi_data[1] = m_acpi_data[1] & 0b101; + break; + case acpi_key::wake_up: + m_acpi_data[1] = m_acpi_data[1] & 0b011; + break; + } + return *this; +} + +ch9329::keyboard_media& ch9329::keyboard_media::release_all_acpi_keys() +{ + m_acpi_data = { 0x02, 0x00 }; + return *this; +} + // keyboard general functions ch9329::keyboard_general& ch9329::keyboard_general::press_control_key( control_key_bit p_key) From 99d4fa35287e10c8dccfb69d42bd34cd521694dd Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Mon, 30 Sep 2024 11:32:41 -0700 Subject: [PATCH 07/16] split keyboard media and acpi commands --- demos/applications/ch9329_nunchuck_mouse.cpp | 19 ++- include/libhal-input/ch9329.hpp | 61 +++++---- src/ch9329.cpp | 132 +++++-------------- 3 files changed, 87 insertions(+), 125 deletions(-) diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 95df639..f486b6f 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -33,17 +33,28 @@ void application(resource_list& p_map) hal::input::nunchuck nunchuck(i2c); hal::input::ch9329 usb_control(uart3); + hal::input::ch9329::keyboard_media kb_media_control; hal::input::ch9329::mouse_relative rel_mouse_control; hal::print(console, "Demo Application Starting...\n\n"); - + bool btn_prev_state = false; while (true) { auto data = nunchuck.read(); std::int8_t x = (data.joystick_x() - 128) / sensitivity; std::int8_t y = -(data.joystick_y() - 128) / sensitivity; - rel_mouse_control.move(x, y) - .left_button(data.c_button()) - .right_button(data.z_button()); + // only send keyboard commands if btn state has changed + bool z_button_state = data.z_button(); + if (z_button_state && z_button_state != btn_prev_state) { + btn_prev_state = z_button_state; + kb_media_control.press_media_key(media_key::play_pause); + usb_control.send(kb_media_control); + } + if (!z_button_state && z_button_state != btn_prev_state) { + btn_prev_state = z_button_state; + kb_media_control.release_media_key(media_key::play_pause); + usb_control.send(kb_media_control); + } + rel_mouse_control.move(x, y).left_button(data.c_button()); usb_control.send(rel_mouse_control); hal::delay(clock, 1ms); } diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 64667bb..1675b7d 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -215,49 +215,59 @@ class ch9329 * * @return keyboard_media& */ - keyboard_media& release_all_media_keys(); + keyboard_media& release_all_keys(); + auto const& get_data() const + { + return m_data; + } + + private: + std::array m_data = {}; + }; + + /** + * @brief Holds data and functions related to using keyboard acpi commands + */ + class keyboard_acpi + { + public: /** - * @brief Press an acpi key. + * @brief Construct a new keyboard acpi object * - * @param p_key acpi_key enum representing which key to press - * @return keyboard_media& */ - keyboard_media& press_acpi_key(acpi_key p_key); + keyboard_acpi(); /** - * @brief Release an acpi key. + * @brief Press an acpi key. * * @param p_key acpi_key enum representing which key to release - * @return keyboard_media& + * @return keyboard_acpi& */ - keyboard_media& release_acpi_key(acpi_key p_key); + keyboard_acpi& press_acpi_key(acpi_key p_key); /** - * @brief Release all acpi keys + * @brief Release an acpi key. * - * @return keyboard_media& + * @param p_key acpi_key enum representing which key to release + * @return keyboard_acpi& */ - keyboard_media& release_all_acpi_keys(); + keyboard_acpi& release_acpi_key(acpi_key p_key); /** - * @brief Get the data array containing the control bytes for media keys + * @brief Release all acpi keys * - * @return auto const& Byte array containing control information + * @return keyboard_acpi& */ - auto const& get_media_data() const - { - return m_media_data; - } + keyboard_acpi& release_all_keys(); /** * @brief Get the data array containing the control bytes for acpi keys * * @return auto const& Byte array containing control information */ - auto const& get_acpi_data() const + auto const& get_data() const { - return m_acpi_data; + return m_data; } private: - std::array m_media_data = {}; - std::array m_acpi_data = {}; + std::array m_data = {}; }; /** @@ -346,9 +356,14 @@ class ch9329 * @brief Send keyboard media command * * @param p_data keyboard media object containing command bytes - * @param p_is_acpi is the command sending acpi key presses */ - void send(keyboard_media const& p_data, bool p_is_acpi = false); + void send(keyboard_media const& p_data); + /** + * @brief Send keyboard acpi command + * + * @param p_data + */ + void send(keyboard_acpi const& p_data); /** * @brief Send keyboard general command * diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 9e8e102..b98bee3 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -51,8 +51,12 @@ ch9329::mouse_relative::mouse_relative() ch9329::keyboard_media::keyboard_media() { - m_media_data = { 0x02, 0x00, 0x00, 0x00 }; - m_acpi_data = { 0x01, 0x00 }; + m_data = { 0x02, 0x00, 0x00, 0x00 }; +} + +ch9329::keyboard_acpi::keyboard_acpi() +{ + m_data = { 0x01, 0x00 }; } ch9329::keyboard_general::keyboard_general() @@ -128,21 +132,22 @@ void ch9329::send(ch9329::keyboard_general const& p_data) hal::print(*m_uart, std::to_array({ sum_byte })); } -void ch9329::send(keyboard_media const& p_data, bool p_acpi) +void ch9329::send(keyboard_media const& p_data) { - if (p_acpi) { - auto bytes = p_data.get_acpi_data(); - send_start_bytes(*m_uart, cmd_send_kb_media_data, 2); - hal::print(*m_uart, bytes); - auto sum_byte = calculate_sum(bytes, cmd_send_kb_media_data); - hal::print(*m_uart, std::to_array({ sum_byte })); - } else { - auto bytes = p_data.get_media_data(); - send_start_bytes(*m_uart, cmd_send_kb_media_data); - hal::print(*m_uart, bytes); - auto sum_byte = calculate_sum(bytes, cmd_send_kb_media_data); - hal::print(*m_uart, std::to_array({ sum_byte })); - } + auto bytes = p_data.get_data(); + send_start_bytes(*m_uart, cmd_send_kb_media_data); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_kb_media_data); + hal::print(*m_uart, std::to_array({ sum_byte })); +} + +void ch9329::send(keyboard_acpi const& p_data) +{ + auto bytes = p_data.get_data(); + send_start_bytes(*m_uart, cmd_send_kb_media_data, 2); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_send_kb_media_data); + hal::print(*m_uart, std::to_array({ sum_byte })); } // mouse absolute functions @@ -240,33 +245,7 @@ ch9329::keyboard_media& ch9329::keyboard_media::press_media_key(media_key p_key) { auto byte_num = (static_cast(p_key) >> 3) + 1; auto bit_num = static_cast(p_key) & 0b111; - - switch (bit_num) { - case 0: - m_media_data[byte_num] = m_media_data[byte_num] | 0b1; - break; - case 1: - m_media_data[byte_num] = m_media_data[byte_num] | 0b10; - break; - case 2: - m_media_data[byte_num] = m_media_data[byte_num] | 0b100; - break; - case 3: - m_media_data[byte_num] = m_media_data[byte_num] | 0b1000; - break; - case 4: - m_media_data[byte_num] = m_media_data[byte_num] | 0b10000; - break; - case 5: - m_media_data[byte_num] = m_media_data[byte_num] | 0b100000; - break; - case 6: - m_media_data[byte_num] = m_media_data[byte_num] | 0b1000000; - break; - case 7: - m_media_data[byte_num] = m_media_data[byte_num] | 0b10000000; - break; - } + m_data[byte_num] |= 1 << bit_num; return *this; } @@ -275,77 +254,34 @@ ch9329::keyboard_media& ch9329::keyboard_media::release_media_key( { auto byte_num = (static_cast(p_key) >> 3) + 1; auto bit_num = static_cast(p_key) & 0b111; - - switch (bit_num) { - case 0: - m_media_data[byte_num] = m_media_data[byte_num] & 0b11111110; - break; - case 1: - m_media_data[byte_num] = m_media_data[byte_num] & 0b11111101; - break; - case 2: - m_media_data[byte_num] = m_media_data[byte_num] & 0b11111011; - break; - case 3: - m_media_data[byte_num] = m_media_data[byte_num] & 0b11110111; - break; - case 4: - m_media_data[byte_num] = m_media_data[byte_num] & 0b11101111; - break; - case 5: - m_media_data[byte_num] = m_media_data[byte_num] & 0b11011111; - break; - case 6: - m_media_data[byte_num] = m_media_data[byte_num] & 0b10111111; - break; - case 7: - m_media_data[byte_num] = m_media_data[byte_num] & 0b01111111; - break; - } + m_data[byte_num] &= ~(1 << bit_num); return *this; } -ch9329::keyboard_media& ch9329::keyboard_media::release_all_media_keys() +ch9329::keyboard_media& ch9329::keyboard_media::release_all_keys() { - m_media_data = { 0x01, 0x00, 0x00, 0x00 }; + m_data = { 0x01, 0x00, 0x00, 0x00 }; return *this; } -ch9329::keyboard_media& ch9329::keyboard_media::press_acpi_key(acpi_key p_key) +// keyboard acpi functions +ch9329::keyboard_acpi& ch9329::keyboard_acpi::press_acpi_key(acpi_key p_key) { - switch (p_key) { - case acpi_key::power: - m_acpi_data[1] = m_acpi_data[1] | 0b001; - break; - case acpi_key::sleep: - m_acpi_data[1] = m_acpi_data[1] | 0b010; - break; - case acpi_key::wake_up: - m_acpi_data[1] = m_acpi_data[1] | 0b100; - break; - } + auto bit_num = static_cast(p_key); + m_data[1] |= 1 << bit_num; return *this; } -ch9329::keyboard_media& ch9329::keyboard_media::release_acpi_key(acpi_key p_key) +ch9329::keyboard_acpi& ch9329::keyboard_acpi::release_acpi_key(acpi_key p_key) { - switch (p_key) { - case acpi_key::power: - m_acpi_data[1] = m_acpi_data[1] & 0b110; - break; - case acpi_key::sleep: - m_acpi_data[1] = m_acpi_data[1] & 0b101; - break; - case acpi_key::wake_up: - m_acpi_data[1] = m_acpi_data[1] & 0b011; - break; - } + auto bit_num = static_cast(p_key); + m_data[1] &= ~(1 << bit_num); return *this; } -ch9329::keyboard_media& ch9329::keyboard_media::release_all_acpi_keys() +ch9329::keyboard_acpi& ch9329::keyboard_acpi::release_all_keys() { - m_acpi_data = { 0x02, 0x00 }; + m_data = { 0x02, 0x00 }; return *this; } From 3ca04443976b3b342ea3e6a3b84fcb9ab71a4bbb Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Mon, 30 Sep 2024 11:45:34 -0700 Subject: [PATCH 08/16] comment out new demos in cmake --- demos/CMakeLists.txt | 6 +++--- demos/resource_list.hpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index 9e6ee18..402652b 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -20,9 +20,9 @@ libhal_build_demos( DEMOS input nunchuck - ch9329_nunchuck_mouse - ch9329_absolute_mouse - ch9329_keyboard + # ch9329_nunchuck_mouse + # ch9329_absolute_mouse + # ch9329_keyboard INCLUDES . diff --git a/demos/resource_list.hpp b/demos/resource_list.hpp index a3ed671..6a8868c 100644 --- a/demos/resource_list.hpp +++ b/demos/resource_list.hpp @@ -26,7 +26,7 @@ struct resource_list { hal::callback reset; std::optional console = std::nullopt; - std::optional uart3; + std::optional uart3 = std::nullopt; std::optional clock = std::nullopt; std::optional status_led = std::nullopt; // Add more driver interfaces here ... From ff238c2cf30af9f754d640f9112e13a30eaa444e Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Mon, 30 Sep 2024 11:50:41 -0700 Subject: [PATCH 09/16] Update demo to use nunchuck buttons as kb buttons --- demos/applications/ch9329_nunchuck_mouse.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index f486b6f..6966d39 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -42,6 +42,9 @@ void application(resource_list& p_map) auto data = nunchuck.read(); std::int8_t x = (data.joystick_x() - 128) / sensitivity; std::int8_t y = -(data.joystick_y() - 128) / sensitivity; + rel_mouse_control.move(x, y).left_button(data.c_button()); + usb_control.send(rel_mouse_control); + // only send keyboard commands if btn state has changed bool z_button_state = data.z_button(); if (z_button_state && z_button_state != btn_prev_state) { @@ -54,8 +57,6 @@ void application(resource_list& p_map) kb_media_control.release_media_key(media_key::play_pause); usb_control.send(kb_media_control); } - rel_mouse_control.move(x, y).left_button(data.c_button()); - usb_control.send(rel_mouse_control); hal::delay(clock, 1ms); } } From 317f449d5d702a3315134deff2286693496e3d3d Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Mon, 30 Sep 2024 12:46:10 -0700 Subject: [PATCH 10/16] add get info command --- include/libhal-input/ch9329.hpp | 10 ++++++++++ src/ch9329.cpp | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 1675b7d..2e0e5c8 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -26,6 +26,14 @@ namespace hal::input { */ class ch9329 { + struct chip_info + { + hal::byte version; + bool enumeration_status; + bool num_lock; + bool caps_lock; + bool scroll_lock; + }; /** * @brief Holds data and functions related to using mouse absolute position * commands @@ -371,6 +379,8 @@ class ch9329 */ void send(keyboard_general const& p_data); + chip_info get_info(); + private: hal::serial* m_uart; }; diff --git a/src/ch9329.cpp b/src/ch9329.cpp index b98bee3..9243fdd 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include namespace hal::input { @@ -25,6 +26,7 @@ constexpr hal::byte header_byte_1 = 0x57; constexpr hal::byte header_byte_2 = 0xAB; constexpr hal::byte address_byte = 0x00; +constexpr hal::byte cmd_get_info = 0x01; constexpr hal::byte cmd_send_kb_general_data = 0x02; constexpr hal::byte cmd_send_kb_media_data = 0x03; constexpr hal::byte cmd_send_ms_abs_data = 0x04; @@ -150,6 +152,22 @@ void ch9329::send(keyboard_acpi const& p_data) hal::print(*m_uart, std::to_array({ sum_byte })); } +ch9329::chip_info ch9329::get_info() +{ + std::array info_bytes; + send_start_bytes(*m_uart, cmd_get_info); + hal::print(*m_uart, std::to_array({ (hal::byte)0x03 })); + hal::read(*m_uart, info_bytes, hal::never_timeout()); + chip_info info = {}; + info.version = info_bytes[5]; + info.enumeration_status = info_bytes[6]; + info.num_lock = info_bytes[7] & 0b1; + info.caps_lock = info_bytes[7] & 0b10; + info.scroll_lock = info_bytes[7] & 0b100; + + return info; +} + // mouse absolute functions ch9329::mouse_absolute& ch9329::mouse_absolute::position(std::uint16_t p_x, std::uint16_t p_y) From f9baa82eec134bfd5f7c85e981e1b8c926d966eb Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Tue, 1 Oct 2024 19:22:52 -0700 Subject: [PATCH 11/16] work in progress, more commands --- demos/CMakeLists.txt | 2 +- demos/applications/ch9329_nunchuck_mouse.cpp | 24 ++ include/libhal-input/ch9329.hpp | 64 ++++- src/ch9329.cpp | 252 ++++++++++++++++++- 4 files changed, 330 insertions(+), 12 deletions(-) diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt index 402652b..3ad4943 100644 --- a/demos/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -20,7 +20,7 @@ libhal_build_demos( DEMOS input nunchuck - # ch9329_nunchuck_mouse + ch9329_nunchuck_mouse # ch9329_absolute_mouse # ch9329_keyboard diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 6966d39..99218ec 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -37,6 +37,30 @@ void application(resource_list& p_map) hal::input::ch9329::mouse_relative rel_mouse_control; hal::print(console, "Demo Application Starting...\n\n"); + auto params = usb_control.get_parameters(); + hal::print<32>( + console, "Chip working mode: %0X \n", params.chip_working_mode); + hal::print<32>( + console, "Communication mode: %0X \n", params.serial_communication_mode); + hal::print<32>(console, "Serial address: %0X \n", params.serial_address); + hal::print<32>(console, "Baud: %lu \n", params.serial_mode_baud_rate); + hal::print<32>( + console, "Packet Interval: %lu \n", params.serial_mode_packet_interval); + hal::print<32>(console, "Vendor: %000X \n", params.vendor_id); + hal::print<32>(console, "PID: %000X \n", params.p_id); + hal::print<32>(console, + "KB upload interval: %lu \n", + params.ascii_mode_kb_upload_interval); + hal::print<32>( + console, "KB release delay: %lu \n", params.ascii_mode_kb_release_delay); + hal::print<32>( + console, "KB auto enter: %0X \n", params.ascii_mode_kb_auto_enter); + hal::print<32>( + console, "USB string enable: %0X \n", params.usb_string_enable); + hal::print<32>( + console, "Fast Upload: %0X \n", params.ascii_mode_kb_fast_upload_mode); + + hal::print(console, "Loop Starting...\n\n"); bool btn_prev_state = false; while (true) { auto data = nunchuck.read(); diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 2e0e5c8..3df0646 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -14,10 +14,12 @@ #pragma once +#include #include #include #include #include +#include namespace hal::input { /** @@ -26,6 +28,8 @@ namespace hal::input { */ class ch9329 { + +public: struct chip_info { hal::byte version; @@ -34,12 +38,60 @@ class ch9329 bool caps_lock; bool scroll_lock; }; + + struct usb_string_descriptor + { + auto full_span() + { + return std::span(buffer); + } + auto received_data() + { + return std::span(buffer).first(length); + } + std::array buffer{}; + std::size_t length = 0; + }; + + class ch9329_parameters + { + public: + ch9329_parameters(std::array p_config_bytes); + hal::byte set_parameters(ch9329_parameters p_parameters); + void set_config_bytes(std::array p_config_bytes) + { + m_config_bytes = p_config_bytes; + }; + auto const& get_config_bytes() const + { + return m_config_bytes; + } + hal::byte chip_working_mode; + hal::byte serial_communication_mode; + hal::byte serial_address; + std::uint32_t serial_mode_baud_rate; + std::uint16_t serial_mode_packet_interval; + std::uint16_t vendor_id; + std::uint16_t p_id; + std::uint16_t ascii_mode_kb_upload_interval; + std::uint16_t ascii_mode_kb_release_delay; + hal::byte ascii_mode_kb_auto_enter; + std::uint32_t ascii_mode_kb_carriage_return_1; + std::uint32_t ascii_mode_kb_carriage_return_2; + std::uint32_t kb_start_filter_chars; + std::uint32_t kb_end_filter_chars; + hal::byte usb_string_enable; + hal::byte ascii_mode_kb_fast_upload_mode; + + private: + std::array m_config_bytes = {}; + }; + /** * @brief Holds data and functions related to using mouse absolute position * commands * */ -public: class mouse_absolute { public: @@ -378,8 +430,18 @@ class ch9329 * @param p_data keyboard general object containing command bytes */ void send(keyboard_general const& p_data); + hal::byte set_parameters(ch9329_parameters const& p_data); + ch9329_parameters get_parameters(); chip_info get_info(); + usb_string_descriptor get_manufacturer_descriptor(); + usb_string_descriptor get_product_descriptor(); + usb_string_descriptor get_serial_number_descriptor(); + hal::byte set_manufacturer_descriptor(std::string_view p_string); + hal::byte set_product_descriptor(std::string_view p_string); + hal::byte set_serial_number_descriptor(std::string_view p_string); + hal::byte restore_factory_default_settings(); + hal::byte reset(); private: hal::serial* m_uart; diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 9243fdd..c4c3e6e 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include #include #include @@ -19,6 +20,7 @@ #include #include #include +#include namespace hal::input { @@ -27,16 +29,75 @@ constexpr hal::byte header_byte_2 = 0xAB; constexpr hal::byte address_byte = 0x00; constexpr hal::byte cmd_get_info = 0x01; +constexpr hal::byte cmd_get_usb_string = 0x0A; +constexpr hal::byte cmd_set_usb_string = 0x0B; +constexpr hal::byte cmd_restore_factory_default_settings = 0x0C; +constexpr hal::byte cmd_reset = 0x0F; constexpr hal::byte cmd_send_kb_general_data = 0x02; constexpr hal::byte cmd_send_kb_media_data = 0x03; constexpr hal::byte cmd_send_ms_abs_data = 0x04; constexpr hal::byte cmd_send_ms_rel_data = 0x05; +constexpr hal::byte cmd_get_para_cfg = 0x08; +constexpr hal::byte cmd_set_para_cfg = 0x09; ch9329::ch9329(hal::serial& p_uart) : m_uart(&p_uart) { } +ch9329::ch9329_parameters::ch9329_parameters( + std::array p_config_bytes) + : m_config_bytes(p_config_bytes) +{ + std::uint32_t baud = m_config_bytes[3]; + baud = (baud << 8) | m_config_bytes[4]; + baud = (baud << 8) | m_config_bytes[5]; + baud = (baud << 8) | m_config_bytes[6]; + + std::uint32_t carriage_ret_1 = m_config_bytes[20]; + carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[21]; + carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[22]; + carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[23]; + + std::uint32_t carriage_ret_2 = m_config_bytes[24]; + carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[25]; + carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[26]; + carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[27]; + + std::uint32_t start_filters = m_config_bytes[28]; + start_filters = (start_filters << 8) | m_config_bytes[29]; + start_filters = (start_filters << 8) | m_config_bytes[30]; + start_filters = (start_filters << 8) | m_config_bytes[31]; + + std::uint32_t end_filters = m_config_bytes[32]; + end_filters = (end_filters << 8) | m_config_bytes[33]; + end_filters = (end_filters << 8) | m_config_bytes[34]; + end_filters = (end_filters << 8) | m_config_bytes[35]; + + ch9329_parameters params(m_config_bytes); + params.chip_working_mode = m_config_bytes[0]; + params.serial_communication_mode = m_config_bytes[1]; + params.serial_address = m_config_bytes[2]; + params.serial_mode_baud_rate = baud; + params.serial_mode_packet_interval = + static_cast((m_config_bytes[9] << 8) | m_config_bytes[10]); + params.vendor_id = + static_cast((m_config_bytes[11] << 8) | m_config_bytes[12]); + params.p_id = + static_cast((m_config_bytes[13] << 8) | m_config_bytes[14]); + params.ascii_mode_kb_upload_interval = + static_cast((m_config_bytes[15] << 8) | m_config_bytes[16]); + params.ascii_mode_kb_release_delay = + static_cast((m_config_bytes[17] << 8) | m_config_bytes[18]); + params.ascii_mode_kb_auto_enter = m_config_bytes[19]; + params.ascii_mode_kb_carriage_return_1 = carriage_ret_1; + params.ascii_mode_kb_carriage_return_2 = carriage_ret_2; + params.kb_start_filter_chars = start_filters; + params.kb_end_filter_chars = end_filters; + params.usb_string_enable = m_config_bytes[36]; + params.ascii_mode_kb_fast_upload_mode = m_config_bytes[37]; +}; + ch9329::mouse_absolute::mouse_absolute(std::uint16_t p_screen_width, std::uint16_t p_screen_height) : m_screen_width(p_screen_width) @@ -77,6 +138,8 @@ hal::byte get_size_byte(hal::byte p_command) return 0x07; case cmd_send_ms_rel_data: return 0x05; + case cmd_get_usb_string: + return 0x01; } return 0x00; } @@ -89,7 +152,7 @@ void send_start_bytes(serial& p_serial, hal::byte p_command, uint8_t p_size = 0) if (p_size == 0) { start_bytes[4] = get_size_byte(p_command); } else { - start_bytes[4] = p_size; // does this work? + start_bytes[4] = p_size; } hal::print(p_serial, start_bytes); } @@ -154,20 +217,189 @@ void ch9329::send(keyboard_acpi const& p_data) ch9329::chip_info ch9329::get_info() { - std::array info_bytes; + std::array response{}; send_start_bytes(*m_uart, cmd_get_info); - hal::print(*m_uart, std::to_array({ (hal::byte)0x03 })); - hal::read(*m_uart, info_bytes, hal::never_timeout()); + hal::print(*m_uart, std::to_array({ (hal::byte)0x03 })); // sum byte + hal::read(*m_uart, response, hal::never_timeout()); chip_info info = {}; - info.version = info_bytes[5]; - info.enumeration_status = info_bytes[6]; - info.num_lock = info_bytes[7] & 0b1; - info.caps_lock = info_bytes[7] & 0b10; - info.scroll_lock = info_bytes[7] & 0b100; - + info.version = response[5]; + info.enumeration_status = response[6]; + info.num_lock = response[7] & 0b1; + info.caps_lock = response[7] & 0b10; + info.scroll_lock = response[7] & 0b100; return info; } +ch9329::usb_string_descriptor get_usb_string_descriptor(serial& p_serial, + hal::byte p_string_type) +{ + ch9329::usb_string_descriptor str; + auto bytes = std::to_array({ p_string_type }); + send_start_bytes(p_serial, cmd_get_usb_string); + hal::print(p_serial, bytes); + auto sum_byte = calculate_sum(bytes, cmd_get_usb_string); + hal::print(p_serial, std::to_array({ sum_byte })); + std::array header_bytes; + hal::read(p_serial, header_bytes, hal::never_timeout()); + str.length = header_bytes[6]; + hal::read(p_serial, str.received_data(), hal::never_timeout()); + std::array check_sum; + hal::read(p_serial, check_sum, hal::never_timeout()); + return str; +} + +hal::byte set_usb_string_descriptor(serial& p_serial, + hal::byte p_string_type, + std::string_view p_string) +{ + uint8_t string_length = p_string.length(); + auto bytes = std::to_array({ p_string_type, string_length }); + send_start_bytes(p_serial, cmd_set_usb_string, string_length + 2); + hal::print(p_serial, bytes); + hal::print(p_serial, p_string); + auto sum_byte = calculate_sum(bytes, cmd_set_usb_string); + sum_byte += (string_length + 2); + for (hal::byte byte : p_string) { + sum_byte += byte; + } + hal::print(p_serial, std::to_array({ sum_byte })); + std::array response; + hal::read(p_serial, response, hal::never_timeout()); + return response[5]; +} + +ch9329::usb_string_descriptor ch9329::get_manufacturer_descriptor() +{ + return get_usb_string_descriptor(*m_uart, 0x00); +} + +ch9329::usb_string_descriptor ch9329::get_product_descriptor() +{ + return get_usb_string_descriptor(*m_uart, 0x01); +} + +ch9329::usb_string_descriptor ch9329::get_serial_number_descriptor() +{ + return get_usb_string_descriptor(*m_uart, 0x02); +} + +hal::byte ch9329::set_manufacturer_descriptor(std::string_view p_string) +{ + return set_usb_string_descriptor(*m_uart, 0x00, p_string); +} + +hal::byte ch9329::set_product_descriptor(std::string_view p_string) +{ + return set_usb_string_descriptor(*m_uart, 0x01, p_string); +} + +hal::byte ch9329::set_serial_number_descriptor(std::string_view p_string) +{ + return set_usb_string_descriptor(*m_uart, 0x02, p_string); +} + +hal::byte ch9329::restore_factory_default_settings() +{ + send_start_bytes(*m_uart, cmd_restore_factory_default_settings); + auto sum_byte = calculate_sum({}, cmd_restore_factory_default_settings); + hal::print(*m_uart, std::to_array({ sum_byte })); + std::array response; + hal::read(*m_uart, response, hal::never_timeout()); + return response[5]; +} + +hal::byte ch9329::reset() +{ + send_start_bytes(*m_uart, cmd_reset); + auto sum_byte = calculate_sum({}, cmd_reset); + hal::print(*m_uart, std::to_array({ sum_byte })); + std::array response; + hal::read(*m_uart, response, hal::never_timeout()); + return response[5]; +} + +ch9329::ch9329_parameters ch9329::get_parameters() +{ + send_start_bytes(*m_uart, cmd_get_para_cfg); + auto sum_byte = calculate_sum({}, cmd_get_para_cfg); + hal::print(*m_uart, std::to_array({ sum_byte })); + std::array response_header; + std::array response; + std::array response_sum; + + hal::read(*m_uart, response_header, hal::never_timeout()); + hal::read(*m_uart, response, hal::never_timeout()); + hal::read(*m_uart, response_sum, hal::never_timeout()); + + ch9329_parameters params(response); + + return params; +} + +hal::byte ch9329::set_parameters(ch9329_parameters const& p_parameters) +{ + std::array bytes = { + p_parameters.chip_working_mode, + p_parameters.serial_communication_mode, + p_parameters.serial_address, + static_cast(p_parameters.serial_mode_baud_rate >> 24), + static_cast(p_parameters.serial_mode_baud_rate >> 16), + static_cast(p_parameters.serial_mode_baud_rate >> 8), + static_cast(p_parameters.serial_mode_baud_rate), + 0x00, + 0x00, + static_cast(p_parameters.serial_mode_packet_interval >> 8), + static_cast(p_parameters.serial_mode_packet_interval), + static_cast(p_parameters.vendor_id >> 8), + static_cast(p_parameters.vendor_id), + static_cast(p_parameters.p_id >> 8), + static_cast(p_parameters.p_id), + static_cast(p_parameters.ascii_mode_kb_upload_interval >> 8), + static_cast(p_parameters.ascii_mode_kb_upload_interval), + static_cast(p_parameters.ascii_mode_kb_release_delay >> 8), + static_cast(p_parameters.ascii_mode_kb_release_delay), + p_parameters.ascii_mode_kb_auto_enter, + static_cast(p_parameters.ascii_mode_kb_carriage_return_1 >> 24), + static_cast(p_parameters.ascii_mode_kb_carriage_return_1 >> 16), + static_cast(p_parameters.ascii_mode_kb_carriage_return_1 >> 8), + static_cast(p_parameters.ascii_mode_kb_carriage_return_1), + static_cast(p_parameters.ascii_mode_kb_carriage_return_2 >> 24), + static_cast(p_parameters.ascii_mode_kb_carriage_return_2 >> 16), + static_cast(p_parameters.ascii_mode_kb_carriage_return_2 >> 8), + static_cast(p_parameters.ascii_mode_kb_carriage_return_2), + static_cast(p_parameters.kb_start_filter_chars >> 24), + static_cast(p_parameters.kb_start_filter_chars >> 16), + static_cast(p_parameters.kb_start_filter_chars >> 8), + static_cast(p_parameters.kb_start_filter_chars), + static_cast(p_parameters.kb_end_filter_chars >> 24), + static_cast(p_parameters.kb_end_filter_chars >> 16), + static_cast(p_parameters.kb_end_filter_chars >> 8), + static_cast(p_parameters.kb_end_filter_chars), + p_parameters.usb_string_enable, + p_parameters.ascii_mode_kb_fast_upload_mode, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00 + }; + // auto bytes = p_parameters.get_config_bytes(); + send_start_bytes(*m_uart, cmd_set_para_cfg, 50); + hal::print(*m_uart, bytes); + auto sum_byte = calculate_sum(bytes, cmd_set_para_cfg); + hal::print(*m_uart, std::to_array({ sum_byte })); + std::array response; + hal::read(*m_uart, response, hal::never_timeout()); + return response[5]; +} + // mouse absolute functions ch9329::mouse_absolute& ch9329::mouse_absolute::position(std::uint16_t p_x, std::uint16_t p_y) From bd8d78acbb1e7530a9c7640dd6aa11b4ddcbc3de Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Fri, 4 Oct 2024 09:07:15 -0700 Subject: [PATCH 12/16] more work in progress --- demos/applications/ch9329_nunchuck_mouse.cpp | 38 +-- include/libhal-input/ch9329.hpp | 314 ++++++++++++++++-- src/ch9329.cpp | 327 +++++++++++++------ 3 files changed, 533 insertions(+), 146 deletions(-) diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 99218ec..4fdd1d6 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -33,33 +33,23 @@ void application(resource_list& p_map) hal::input::nunchuck nunchuck(i2c); hal::input::ch9329 usb_control(uart3); - hal::input::ch9329::keyboard_media kb_media_control; + hal::input::ch9329::keyboard_general kb_control; hal::input::ch9329::mouse_relative rel_mouse_control; hal::print(console, "Demo Application Starting...\n\n"); auto params = usb_control.get_parameters(); hal::print<32>( - console, "Chip working mode: %0X \n", params.chip_working_mode); + console, "Chip working mode: %0X \n", params.get_chip_working_mode()); hal::print<32>( - console, "Communication mode: %0X \n", params.serial_communication_mode); - hal::print<32>(console, "Serial address: %0X \n", params.serial_address); - hal::print<32>(console, "Baud: %lu \n", params.serial_mode_baud_rate); - hal::print<32>( - console, "Packet Interval: %lu \n", params.serial_mode_packet_interval); - hal::print<32>(console, "Vendor: %000X \n", params.vendor_id); - hal::print<32>(console, "PID: %000X \n", params.p_id); - hal::print<32>(console, - "KB upload interval: %lu \n", - params.ascii_mode_kb_upload_interval); - hal::print<32>( - console, "KB release delay: %lu \n", params.ascii_mode_kb_release_delay); - hal::print<32>( - console, "KB auto enter: %0X \n", params.ascii_mode_kb_auto_enter); - hal::print<32>( - console, "USB string enable: %0X \n", params.usb_string_enable); - hal::print<32>( - console, "Fast Upload: %0X \n", params.ascii_mode_kb_fast_upload_mode); + console, "Communication mode: %0X \n", params.get_serial_communication_mode()); + hal::print<32>(console, "Baud: %lu \n", params.get_serial_mode_baud_rate()); + params.set_serial_mode_baud_rate(115200); + usb_control.set_parameters(params); + params = usb_control.get_parameters(); + hal::print<32>( + console, "Communication mode: %0X \n", params.get_serial_communication_mode()); + hal::print(console, "Loop Starting...\n\n"); bool btn_prev_state = false; while (true) { @@ -73,13 +63,13 @@ void application(resource_list& p_map) bool z_button_state = data.z_button(); if (z_button_state && z_button_state != btn_prev_state) { btn_prev_state = z_button_state; - kb_media_control.press_media_key(media_key::play_pause); - usb_control.send(kb_media_control); + kb_control.press_normal_key(normal_key::a, 1); + usb_control.send(kb_control); } if (!z_button_state && z_button_state != btn_prev_state) { btn_prev_state = z_button_state; - kb_media_control.release_media_key(media_key::play_pause); - usb_control.send(kb_media_control); + kb_control.release_normal_key(normal_key::a); + usb_control.send(kb_control); } hal::delay(clock, 1ms); } diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 3df0646..7db11ce 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -14,12 +14,10 @@ #pragma once -#include #include #include #include #include -#include namespace hal::input { /** @@ -28,17 +26,29 @@ namespace hal::input { */ class ch9329 { - public: +/** + * @brief Holds information about the chip from the cmd_get_info command + * + */ struct chip_info { + /// chip version, 0x30 indicates version 1.0 hal::byte version; + /// usb enumeration status of the chip bool enumeration_status; + /// status of num lock (0 means off, 1 is on) bool num_lock; + /// status of caps lock (0 means off, 1 is on) bool caps_lock; + /// status of scroll lock (0 means off, 1 is on) bool scroll_lock; }; +/** + * @brief Holds data used to get and set usb string descriptors + * + */ struct usb_string_descriptor { auto full_span() @@ -53,35 +63,238 @@ class ch9329 std::size_t length = 0; }; + /** + * @brief Holds data and functions related to getting and setting parameter + * configurations on the chip + * + */ class ch9329_parameters { public: + /** + * @brief Construct a new ch9329 parameters object with all 0x00 data bytes + * + */ + ch9329_parameters(); + /** + * @brief Construct a new ch9329 parameters object with an array of bytes + * containing parameters + * + * @param p_config_bytes array holding parameter settings in bytes + */ ch9329_parameters(std::array p_config_bytes); - hal::byte set_parameters(ch9329_parameters p_parameters); + + /** + * @brief Set the array containing parameter bytes + * + * @param p_config_bytes bytes to use + */ void set_config_bytes(std::array p_config_bytes) { m_config_bytes = p_config_bytes; }; + /** + * @brief Set the chip working mode. + * + * @param p_working_mode + */ + void set_chip_working_mode(hal::byte p_working_mode); + /** + * @brief Set the serial communication mode + * + * @param p_communication_mode + */ + void set_serial_communication_mode(hal::byte p_communication_mode); + /** + * @brief Set the serial mode baud rate + * + * @param p_baud + */ + void set_serial_mode_baud_rate(std::uint32_t p_baud); + /** + * @brief Set the serial address + * + * @param p_serial + */ + void set_serial_address(hal::byte p_serial); + /** + * @brief Set the serial mode packet interval + * + * @param p_packet_interval + */ + void set_serial_mode_packet_interval(std::uint16_t p_packet_interval); + /** + * @brief Set the vendor id + * + * @param p_vid + */ + void set_vendor_id(std::uint16_t p_vid); + /** + * @brief Set the product id + * + * @param p_pid + */ + void set_product_id(std::uint16_t p_pid); + /** + * @brief Set the ascii mode keyboard upload interval + * + * @param p_upload_interval + */ + void set_ascii_mode_kb_upload_interval(std::uint16_t p_upload_interval); + /** + * @brief Set the ascii mode keyboard release delay + * + * @param p_release_dealy + */ + void set_ascii_mode_kb_release_delay(std::uint16_t p_release_dealy); + /** + * @brief Set the ascii mode keyboard auto enter + * + * @param p_auto_enter + */ + void set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter); + /** + * @brief Set the ascii mode keyboard carriage return 1 + * + * @param p_carriage_return + */ + void set_ascii_mode_kb_carriage_return_1(std::uint32_t p_carriage_return); + /** + * @brief Set the ascii mode keyboard carriage return 2 + * + * @param p_carriage_return + */ + void set_ascii_mode_kb_carriage_return_2(std::uint32_t p_carriage_return); + /** + * @brief Set the keyboard start filter characters + * + * @param p_start_filters + */ + void set_kb_start_filter_chars(std::uint32_t p_start_filters); + /** + * @brief Set the keyboard end filter characters + * + * @param p_end_filters + */ + void set_kb_end_filter_chars(std::uint32_t p_end_filters); + /** + * @brief Set the usb string enable flag + * + * @param p_enable + */ + void set_usb_string_enable(hal::byte p_enable); + /** + * @brief Set the ascii mode keyboard fast upload mode + * + * @param p_fast_upload + */ + void set_ascii_mode_kb_fast_upload_mode(hal::byte p_fast_upload); + + /** + * @brief Get the chip working mode + * + * @return hal::byte + */ + hal::byte get_chip_working_mode(); + /** + * @brief Get the serial communication mode + * + * @return hal::byte + */ + hal::byte get_serial_communication_mode(); + /** + * @brief Get the serial address + * + * @return hal::byte + */ + hal::byte get_serial_address(); + /** + * @brief Get the serial mode baud rate + * + * @return std::uint32_t + */ + std::uint32_t get_serial_mode_baud_rate(); + /** + * @brief Get the serial mode packet interval + * + * @return std::uint16_t + */ + std::uint16_t get_serial_mode_packet_interval(); + /** + * @brief Get the vendor id + * + * @return std::uint16_t + */ + std::uint16_t get_vendor_id(); + /** + * @brief Get the product id + * + * @return std::uint16_t + */ + std::uint16_t get_product_id(); + /** + * @brief Get the ascii mode keyboard upload interval + * + * @return std::uint16_t + */ + std::uint16_t get_ascii_mode_kb_upload_interval(); + /** + * @brief Get the ascii mode keyboard release delay + * + * @return std::uint16_t + */ + std::uint16_t get_ascii_mode_kb_release_delay(); + /** + * @brief Get the ascii mode keyboard auto enter flag + * + * @return hal::byte + */ + hal::byte get_ascii_mode_kb_auto_enter(); + /** + * @brief Get the ascii mode keyboard carriage return 1 + * + * @return std::uint32_t + */ + std::uint32_t get_ascii_mode_kb_carriage_return_1(); + /** + * @brief Get the ascii mode keyboard carriage return 2 + * + * @return std::uint32_t + */ + std::uint32_t get_ascii_mode_kb_carriage_return_2(); + /** + * @brief Get the keyboard start filter characters + * + * @return std::uint32_t + */ + std::uint32_t get_kb_start_filter_chars(); + /** + * @brief Get the keyboard end filter characters + * + * @return std::uint32_t + */ + std::uint32_t get_kb_end_filter_chars(); + /** + * @brief Get the usb string enable flag + * + * @return hal::byte + */ + hal::byte get_usb_string_enable(); + /** + * @brief Get the ascii mode keyboard fast upload mode + * + * @return hal::byte + */ + hal::byte get_ascii_mode_kb_fast_upload_mode(); + /** + * @brief Get the config bytes array + * + * @return auto const& + */ auto const& get_config_bytes() const { return m_config_bytes; } - hal::byte chip_working_mode; - hal::byte serial_communication_mode; - hal::byte serial_address; - std::uint32_t serial_mode_baud_rate; - std::uint16_t serial_mode_packet_interval; - std::uint16_t vendor_id; - std::uint16_t p_id; - std::uint16_t ascii_mode_kb_upload_interval; - std::uint16_t ascii_mode_kb_release_delay; - hal::byte ascii_mode_kb_auto_enter; - std::uint32_t ascii_mode_kb_carriage_return_1; - std::uint32_t ascii_mode_kb_carriage_return_2; - std::uint32_t kb_start_filter_chars; - std::uint32_t kb_end_filter_chars; - hal::byte usb_string_enable; - hal::byte ascii_mode_kb_fast_upload_mode; private: std::array m_config_bytes = {}; @@ -430,17 +643,76 @@ class ch9329 * @param p_data keyboard general object containing command bytes */ void send(keyboard_general const& p_data); + + /** + * @brief Set the parameters configuration of the chip + * + * @param p_data object containing parameters to change + * @return hal::byte status byte returned from chip + */ hal::byte set_parameters(ch9329_parameters const& p_data); + /** + * @brief Get the current parameters configuration from the chip + * + * @return ch9329_parameters contains parameters and the response bytes + */ ch9329_parameters get_parameters(); - +/** + * @brief Get info about the chip + * + * @return chip_info contains basic information about the chip + */ chip_info get_info(); + /** + * @brief Get the manufacturer usb string descriptor on the chip + * + * @return usb_string_descriptor contains buffer and trimmed data + */ usb_string_descriptor get_manufacturer_descriptor(); + /** + * @brief Get the product usb string descriptor on the chip + * + * @return usb_string_descriptor contains buffer and trimmed data + */ usb_string_descriptor get_product_descriptor(); + /** + * @brief Get the serial number usb string descriptor on the chip + * + * @return usb_string_descriptor contains buffer and trimmed data + */ usb_string_descriptor get_serial_number_descriptor(); + /** + * @brief Set the manufacturer usb string descriptor + * + * @param p_string string to use as descriptor + * @return hal::byte status byte returned from the chip + */ hal::byte set_manufacturer_descriptor(std::string_view p_string); + /** + * @brief Set the product usb string descriptor + * + * @param p_string string to use as descriptor + * @return hal::byte status byte returned from the chip + */ hal::byte set_product_descriptor(std::string_view p_string); + /** + * @brief Set the serial number usb string descriptor + * + * @param p_string string to use as descriptor + * @return hal::byte status byte returned from the chip + */ hal::byte set_serial_number_descriptor(std::string_view p_string); + /** + * @brief Restore all settings to factory default + * + * @return hal::byte status byte returned from the chip + */ hal::byte restore_factory_default_settings(); + /** + * @brief Reset the chip using the cmd_reset command + * + * @return hal::byte status byte returned from the chip + */ hal::byte reset(); private: diff --git a/src/ch9329.cpp b/src/ch9329.cpp index c4c3e6e..4daa910 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -48,55 +48,63 @@ ch9329::ch9329(hal::serial& p_uart) ch9329::ch9329_parameters::ch9329_parameters( std::array p_config_bytes) : m_config_bytes(p_config_bytes) -{ - std::uint32_t baud = m_config_bytes[3]; - baud = (baud << 8) | m_config_bytes[4]; - baud = (baud << 8) | m_config_bytes[5]; - baud = (baud << 8) | m_config_bytes[6]; - - std::uint32_t carriage_ret_1 = m_config_bytes[20]; - carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[21]; - carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[22]; - carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[23]; +{}; - std::uint32_t carriage_ret_2 = m_config_bytes[24]; - carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[25]; - carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[26]; - carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[27]; - - std::uint32_t start_filters = m_config_bytes[28]; - start_filters = (start_filters << 8) | m_config_bytes[29]; - start_filters = (start_filters << 8) | m_config_bytes[30]; - start_filters = (start_filters << 8) | m_config_bytes[31]; - - std::uint32_t end_filters = m_config_bytes[32]; - end_filters = (end_filters << 8) | m_config_bytes[33]; - end_filters = (end_filters << 8) | m_config_bytes[34]; - end_filters = (end_filters << 8) | m_config_bytes[35]; - - ch9329_parameters params(m_config_bytes); - params.chip_working_mode = m_config_bytes[0]; - params.serial_communication_mode = m_config_bytes[1]; - params.serial_address = m_config_bytes[2]; - params.serial_mode_baud_rate = baud; - params.serial_mode_packet_interval = - static_cast((m_config_bytes[9] << 8) | m_config_bytes[10]); - params.vendor_id = - static_cast((m_config_bytes[11] << 8) | m_config_bytes[12]); - params.p_id = - static_cast((m_config_bytes[13] << 8) | m_config_bytes[14]); - params.ascii_mode_kb_upload_interval = - static_cast((m_config_bytes[15] << 8) | m_config_bytes[16]); - params.ascii_mode_kb_release_delay = - static_cast((m_config_bytes[17] << 8) | m_config_bytes[18]); - params.ascii_mode_kb_auto_enter = m_config_bytes[19]; - params.ascii_mode_kb_carriage_return_1 = carriage_ret_1; - params.ascii_mode_kb_carriage_return_2 = carriage_ret_2; - params.kb_start_filter_chars = start_filters; - params.kb_end_filter_chars = end_filters; - params.usb_string_enable = m_config_bytes[36]; - params.ascii_mode_kb_fast_upload_mode = m_config_bytes[37]; -}; +ch9329::ch9329_parameters::ch9329_parameters() +{ + m_config_bytes = { + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00 + }; +} ch9329::mouse_absolute::mouse_absolute(std::uint16_t p_screen_width, std::uint16_t p_screen_height) @@ -338,59 +346,7 @@ ch9329::ch9329_parameters ch9329::get_parameters() hal::byte ch9329::set_parameters(ch9329_parameters const& p_parameters) { - std::array bytes = { - p_parameters.chip_working_mode, - p_parameters.serial_communication_mode, - p_parameters.serial_address, - static_cast(p_parameters.serial_mode_baud_rate >> 24), - static_cast(p_parameters.serial_mode_baud_rate >> 16), - static_cast(p_parameters.serial_mode_baud_rate >> 8), - static_cast(p_parameters.serial_mode_baud_rate), - 0x00, - 0x00, - static_cast(p_parameters.serial_mode_packet_interval >> 8), - static_cast(p_parameters.serial_mode_packet_interval), - static_cast(p_parameters.vendor_id >> 8), - static_cast(p_parameters.vendor_id), - static_cast(p_parameters.p_id >> 8), - static_cast(p_parameters.p_id), - static_cast(p_parameters.ascii_mode_kb_upload_interval >> 8), - static_cast(p_parameters.ascii_mode_kb_upload_interval), - static_cast(p_parameters.ascii_mode_kb_release_delay >> 8), - static_cast(p_parameters.ascii_mode_kb_release_delay), - p_parameters.ascii_mode_kb_auto_enter, - static_cast(p_parameters.ascii_mode_kb_carriage_return_1 >> 24), - static_cast(p_parameters.ascii_mode_kb_carriage_return_1 >> 16), - static_cast(p_parameters.ascii_mode_kb_carriage_return_1 >> 8), - static_cast(p_parameters.ascii_mode_kb_carriage_return_1), - static_cast(p_parameters.ascii_mode_kb_carriage_return_2 >> 24), - static_cast(p_parameters.ascii_mode_kb_carriage_return_2 >> 16), - static_cast(p_parameters.ascii_mode_kb_carriage_return_2 >> 8), - static_cast(p_parameters.ascii_mode_kb_carriage_return_2), - static_cast(p_parameters.kb_start_filter_chars >> 24), - static_cast(p_parameters.kb_start_filter_chars >> 16), - static_cast(p_parameters.kb_start_filter_chars >> 8), - static_cast(p_parameters.kb_start_filter_chars), - static_cast(p_parameters.kb_end_filter_chars >> 24), - static_cast(p_parameters.kb_end_filter_chars >> 16), - static_cast(p_parameters.kb_end_filter_chars >> 8), - static_cast(p_parameters.kb_end_filter_chars), - p_parameters.usb_string_enable, - p_parameters.ascii_mode_kb_fast_upload_mode, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00 - }; - // auto bytes = p_parameters.get_config_bytes(); + auto bytes = p_parameters.get_config_bytes(); send_start_bytes(*m_uart, cmd_set_para_cfg, 50); hal::print(*m_uart, bytes); auto sum_byte = calculate_sum(bytes, cmd_set_para_cfg); @@ -633,4 +589,173 @@ ch9329::keyboard_general& ch9329::keyboard_general::release_all_keys() m_data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; return *this; } + +void ch9329::ch9329_parameters::set_chip_working_mode(hal::byte p_working_mode) +{ + m_config_bytes[0] = p_working_mode; +}; +void ch9329::ch9329_parameters::set_serial_communication_mode(hal::byte p_communication_mode) +{ + m_config_bytes[1] = p_communication_mode; +}; +void ch9329::ch9329_parameters::set_serial_address(hal::byte p_serial) +{ + m_config_bytes[2] = p_serial; +}; +void ch9329::ch9329_parameters::set_serial_mode_baud_rate(std::uint32_t p_baud) +{ + m_config_bytes[3] = static_cast(p_baud >> 24); + m_config_bytes[4] = static_cast(p_baud >> 16); + m_config_bytes[5] = static_cast(p_baud >> 8); + m_config_bytes[6] = static_cast(p_baud); +}; +void ch9329::ch9329_parameters::set_serial_mode_packet_interval(std::uint16_t p_packet_interval) +{ + m_config_bytes[9] = static_cast(p_packet_interval >> 8); + m_config_bytes[10] = static_cast(p_packet_interval); +}; +void ch9329::ch9329_parameters::set_vendor_id(std::uint16_t p_vid) +{ + m_config_bytes[11] = static_cast(p_vid >> 8); + m_config_bytes[12] = static_cast(p_vid); +}; +void ch9329::ch9329_parameters::set_product_id(std::uint16_t p_id) +{ + m_config_bytes[13] = static_cast(p_id >> 8); + m_config_bytes[14] = static_cast(p_id); +}; +void ch9329::ch9329_parameters::set_ascii_mode_kb_upload_interval(std::uint16_t p_upload_interval) +{ + m_config_bytes[15] =static_cast(p_upload_interval >> 8); + m_config_bytes[16] =static_cast(p_upload_interval); +}; +void ch9329::ch9329_parameters::set_ascii_mode_kb_release_delay(std::uint16_t p_release_dealy) +{ + m_config_bytes[17] = static_cast(p_release_dealy >> 8); + m_config_bytes[18] = static_cast(p_release_dealy); +}; +void ch9329::ch9329_parameters::set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter) +{ + m_config_bytes[19] = p_auto_enter; +}; +void ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_1(std::uint32_t p_carriage_return) +{ + m_config_bytes[20] =static_cast(p_carriage_return >> 24); + m_config_bytes[21] =static_cast(p_carriage_return >> 16); + m_config_bytes[22] =static_cast(p_carriage_return >> 8); + m_config_bytes[23] =static_cast(p_carriage_return); +}; +void ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_2(std::uint32_t p_carriage_return) +{ + m_config_bytes[24] =static_cast(p_carriage_return >> 24); + m_config_bytes[25] =static_cast(p_carriage_return >> 16); + m_config_bytes[26] =static_cast(p_carriage_return >> 8); + m_config_bytes[27] =static_cast(p_carriage_return); +}; +void ch9329::ch9329_parameters::set_kb_start_filter_chars(std::uint32_t p_start_filters) +{ + m_config_bytes[28] =static_cast(p_start_filters >> 24); + m_config_bytes[29] =static_cast(p_start_filters >> 16); + m_config_bytes[30] =static_cast(p_start_filters >> 8); + m_config_bytes[31] =static_cast(p_start_filters); +}; +void ch9329::ch9329_parameters::set_kb_end_filter_chars(std::uint32_t p_end_filters) +{ + m_config_bytes[32] =static_cast(p_end_filters >> 24); + m_config_bytes[33] =static_cast(p_end_filters >> 16); + m_config_bytes[34] =static_cast(p_end_filters >> 8); + m_config_bytes[35] =static_cast(p_end_filters); +}; +void ch9329::ch9329_parameters::set_usb_string_enable(hal::byte p_enable) +{ + m_config_bytes[36] = p_enable; +}; +void ch9329::ch9329_parameters::set_ascii_mode_kb_fast_upload_mode(hal::byte p_fast_upload) +{ + m_config_bytes[37] = p_fast_upload; +}; +hal::byte ch9329::ch9329_parameters::get_chip_working_mode() +{ + return m_config_bytes[0]; +}; +hal::byte ch9329::ch9329_parameters::get_serial_communication_mode() +{ + return m_config_bytes[1]; +}; +hal::byte ch9329::ch9329_parameters::get_serial_address() +{ + return m_config_bytes[2]; +}; +std::uint32_t ch9329::ch9329_parameters::get_serial_mode_baud_rate() +{ + std::uint32_t baud = m_config_bytes[3]; + baud = (baud << 8) | m_config_bytes[4]; + baud = (baud << 8) | m_config_bytes[5]; + baud = (baud << 8) | m_config_bytes[6]; + return baud; +}; +std::uint16_t ch9329::ch9329_parameters::get_serial_mode_packet_interval() +{ + return static_cast((m_config_bytes[9] << 8) | m_config_bytes[10]); +}; +std::uint16_t ch9329::ch9329_parameters::get_vendor_id() +{ + return static_cast((m_config_bytes[11] << 8) | m_config_bytes[12]); +}; +std::uint16_t ch9329::ch9329_parameters::get_product_id() +{ + return static_cast((m_config_bytes[13] << 8) | m_config_bytes[14]); +}; +std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_upload_interval() +{ + return static_cast((m_config_bytes[15] << 8) | m_config_bytes[16]); +}; +std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_release_delay() +{ + return static_cast((m_config_bytes[17] << 8) | m_config_bytes[18]); +}; +hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_auto_enter() +{ + return m_config_bytes[19]; +}; +std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_1() +{ + std::uint32_t carriage_ret_1 = m_config_bytes[20]; + carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[21]; + carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[22]; + carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[23]; + return carriage_ret_1; +}; +std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_2() +{ + std::uint32_t carriage_ret_2 = m_config_bytes[24]; + carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[25]; + carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[26]; + carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[27]; + return carriage_ret_2; +}; +std::uint32_t ch9329::ch9329_parameters::get_kb_start_filter_chars() +{ + std::uint32_t start_filters = m_config_bytes[28]; + start_filters = (start_filters << 8) | m_config_bytes[29]; + start_filters = (start_filters << 8) | m_config_bytes[30]; + start_filters = (start_filters << 8) | m_config_bytes[31]; + return start_filters; +}; +std::uint32_t ch9329::ch9329_parameters::get_kb_end_filter_chars() +{ + std::uint32_t end_filters = m_config_bytes[32]; + end_filters = (end_filters << 8) | m_config_bytes[33]; + end_filters = (end_filters << 8) | m_config_bytes[34]; + end_filters = (end_filters << 8) | m_config_bytes[35]; + return end_filters; +}; +hal::byte ch9329::ch9329_parameters::get_usb_string_enable() +{ + return m_config_bytes[36]; +}; +hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_fast_upload_mode() +{ + return m_config_bytes[37]; +}; } // namespace hal::input From ed2f16f08adb6314f86309e6aebba6a53beb52d6 Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Fri, 4 Oct 2024 12:52:05 -0700 Subject: [PATCH 13/16] more work in progress --- ...hip Serial Port Communication Protocol.PDF | Bin 0 -> 271429 bytes datasheets/ch9329/CH9329DS1.PDF | Bin 0 -> 141903 bytes demos/applications/ch9329_nunchuck_mouse.cpp | 14 +- include/libhal-input/ch9329.hpp | 262 ++++++++++-------- src/ch9329.cpp | 205 +++++++------- 5 files changed, 252 insertions(+), 229 deletions(-) create mode 100644 datasheets/ch9329/CH9329 Chip Serial Port Communication Protocol.PDF create mode 100644 datasheets/ch9329/CH9329DS1.PDF diff --git a/datasheets/ch9329/CH9329 Chip Serial Port Communication Protocol.PDF b/datasheets/ch9329/CH9329 Chip Serial Port Communication Protocol.PDF new file mode 100644 index 0000000000000000000000000000000000000000..af18ad9e2c28450d0db6d9f43f121018dc71d43c GIT binary patch literal 271429 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 literal 0 HcmV?d00001 diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 4fdd1d6..a0df4cb 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -40,16 +40,16 @@ void application(resource_list& p_map) auto params = usb_control.get_parameters(); hal::print<32>( console, "Chip working mode: %0X \n", params.get_chip_working_mode()); - hal::print<32>( - console, "Communication mode: %0X \n", params.get_serial_communication_mode()); + hal::print<32>(console, + "Communication mode: %0X \n", + params.get_serial_communication_mode()); hal::print<32>(console, "Baud: %lu \n", params.get_serial_mode_baud_rate()); - params.set_serial_mode_baud_rate(115200); - usb_control.set_parameters(params); + auto response = usb_control.set_parameters(params); params = usb_control.get_parameters(); - hal::print<32>( - console, "Communication mode: %0X \n", params.get_serial_communication_mode()); - + hal::print<32>(console, "set params response: %0X \n", response); + hal::print<32>(console, "Baud: %lu \n", params.get_serial_mode_baud_rate()); + hal::print(console, "Loop Starting...\n\n"); bool btn_prev_state = false; while (true) { diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 7db11ce..11217c2 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -27,10 +27,10 @@ namespace hal::input { class ch9329 { public: -/** - * @brief Holds information about the chip from the cmd_get_info command - * - */ + /** + * @brief Holds information about the chip from the cmd_get_info command + * + */ struct chip_info { /// chip version, 0x30 indicates version 1.0 @@ -45,10 +45,10 @@ class ch9329 bool scroll_lock; }; -/** - * @brief Holds data used to get and set usb string descriptors - * - */ + /** + * @brief Holds data used to get and set usb string descriptors + * + */ struct usb_string_descriptor { auto full_span() @@ -64,232 +64,254 @@ class ch9329 }; /** - * @brief Holds data and functions related to getting and setting parameter - * configurations on the chip - * - */ + * @brief Holds data and functions related to getting and setting parameter + * configurations on the chip + * + */ class ch9329_parameters { public: /** * @brief Construct a new ch9329 parameters object with all 0x00 data bytes - * + * */ ch9329_parameters(); /** - * @brief Construct a new ch9329 parameters object with an array of bytes + * @brief Construct a new ch9329 parameters object with an array of bytes * containing parameters - * + * * @param p_config_bytes array holding parameter settings in bytes */ ch9329_parameters(std::array p_config_bytes); - + /** * @brief Set the array containing parameter bytes - * + * * @param p_config_bytes bytes to use + * @return ch9329_parameters& */ - void set_config_bytes(std::array p_config_bytes) - { - m_config_bytes = p_config_bytes; - }; + ch9329_parameters& set_config_bytes( + std::array p_config_bytes); /** * @brief Set the chip working mode. - * - * @param p_working_mode + * + * @param p_working_mode + * @return ch9329_parameters& */ - void set_chip_working_mode(hal::byte p_working_mode); + ch9329_parameters& set_chip_working_mode(hal::byte p_working_mode); /** * @brief Set the serial communication mode - * - * @param p_communication_mode + * + * @param p_communication_mode + * @return ch9329_parameters& */ - void set_serial_communication_mode(hal::byte p_communication_mode); + ch9329_parameters& set_serial_communication_mode( + hal::byte p_communication_mode); /** * @brief Set the serial mode baud rate - * - * @param p_baud + * + * @param p_baud + * @return ch9329_parameters& */ - void set_serial_mode_baud_rate(std::uint32_t p_baud); + ch9329_parameters& set_serial_mode_baud_rate(std::uint32_t p_baud); /** * @brief Set the serial address - * - * @param p_serial + * + * @param p_serial + * @return ch9329_parameters& */ - void set_serial_address(hal::byte p_serial); + ch9329_parameters& set_serial_address(hal::byte p_serial); /** * @brief Set the serial mode packet interval - * - * @param p_packet_interval + * + * @param p_packet_interval + * @return ch9329_parameters& */ - void set_serial_mode_packet_interval(std::uint16_t p_packet_interval); + ch9329_parameters& set_serial_mode_packet_interval( + std::uint16_t p_packet_interval); /** * @brief Set the vendor id - * - * @param p_vid + * + * @param p_vid + * @return ch9329_parameters& */ - void set_vendor_id(std::uint16_t p_vid); + ch9329_parameters& set_vendor_id(std::uint16_t p_vid); /** * @brief Set the product id - * - * @param p_pid + * + * @param p_pid + * @return ch9329_parameters& */ - void set_product_id(std::uint16_t p_pid); + ch9329_parameters& set_product_id(std::uint16_t p_pid); /** * @brief Set the ascii mode keyboard upload interval - * - * @param p_upload_interval + * + * @param p_upload_interval + * @return ch9329_parameters& */ - void set_ascii_mode_kb_upload_interval(std::uint16_t p_upload_interval); + ch9329_parameters& set_ascii_mode_kb_upload_interval( + std::uint16_t p_upload_interval); /** * @brief Set the ascii mode keyboard release delay - * - * @param p_release_dealy + * + * @param p_release_dealy + * @return ch9329_parameters& */ - void set_ascii_mode_kb_release_delay(std::uint16_t p_release_dealy); + ch9329_parameters& set_ascii_mode_kb_release_delay( + std::uint16_t p_release_dealy); /** * @brief Set the ascii mode keyboard auto enter - * - * @param p_auto_enter + * + * @param p_auto_enter + * @return ch9329_parameters& */ - void set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter); + ch9329_parameters& set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter); /** * @brief Set the ascii mode keyboard carriage return 1 - * - * @param p_carriage_return + * + * @param p_carriage_return + * @return ch9329_parameters& */ - void set_ascii_mode_kb_carriage_return_1(std::uint32_t p_carriage_return); + ch9329_parameters& set_ascii_mode_kb_carriage_return_1( + std::uint32_t p_carriage_return); /** - * @brief Set the ascii mode keyboard carriage return 2 - * - * @param p_carriage_return - */ - void set_ascii_mode_kb_carriage_return_2(std::uint32_t p_carriage_return); + * @brief Set the ascii mode keyboard carriage return 2 + * + * @param p_carriage_return + * @return ch9329_parameters& + */ + ch9329_parameters& set_ascii_mode_kb_carriage_return_2( + std::uint32_t p_carriage_return); /** * @brief Set the keyboard start filter characters - * - * @param p_start_filters + * + * @param p_start_filters + * @return ch9329_parameters& */ - void set_kb_start_filter_chars(std::uint32_t p_start_filters); + ch9329_parameters& set_kb_start_filter_chars(std::uint32_t p_start_filters); /** * @brief Set the keyboard end filter characters - * - * @param p_end_filters + * + * @param p_end_filters + * @return ch9329_parameters& */ - void set_kb_end_filter_chars(std::uint32_t p_end_filters); + ch9329_parameters& set_kb_end_filter_chars(std::uint32_t p_end_filters); /** * @brief Set the usb string enable flag - * - * @param p_enable + * + * @param p_enable + * @return ch9329_parameters& */ - void set_usb_string_enable(hal::byte p_enable); + ch9329_parameters& set_usb_string_enable(hal::byte p_enable); /** * @brief Set the ascii mode keyboard fast upload mode - * - * @param p_fast_upload + * + * @param p_fast_upload + * @return ch9329_parameters& */ - void set_ascii_mode_kb_fast_upload_mode(hal::byte p_fast_upload); + ch9329_parameters& set_ascii_mode_kb_fast_upload_mode( + hal::byte p_fast_upload); /** * @brief Get the chip working mode - * - * @return hal::byte + * + * @return hal::byte */ hal::byte get_chip_working_mode(); /** * @brief Get the serial communication mode - * - * @return hal::byte + * + * @return hal::byte */ hal::byte get_serial_communication_mode(); /** * @brief Get the serial address - * - * @return hal::byte + * + * @return hal::byte */ hal::byte get_serial_address(); /** * @brief Get the serial mode baud rate - * - * @return std::uint32_t + * + * @return std::uint32_t */ std::uint32_t get_serial_mode_baud_rate(); /** * @brief Get the serial mode packet interval - * - * @return std::uint16_t + * + * @return std::uint16_t */ std::uint16_t get_serial_mode_packet_interval(); /** * @brief Get the vendor id - * - * @return std::uint16_t + * + * @return std::uint16_t */ std::uint16_t get_vendor_id(); /** * @brief Get the product id - * - * @return std::uint16_t + * + * @return std::uint16_t */ std::uint16_t get_product_id(); /** * @brief Get the ascii mode keyboard upload interval - * - * @return std::uint16_t + * + * @return std::uint16_t */ std::uint16_t get_ascii_mode_kb_upload_interval(); /** * @brief Get the ascii mode keyboard release delay - * - * @return std::uint16_t + * + * @return std::uint16_t */ std::uint16_t get_ascii_mode_kb_release_delay(); /** * @brief Get the ascii mode keyboard auto enter flag - * - * @return hal::byte + * + * @return hal::byte */ hal::byte get_ascii_mode_kb_auto_enter(); /** * @brief Get the ascii mode keyboard carriage return 1 - * - * @return std::uint32_t + * + * @return std::uint32_t */ std::uint32_t get_ascii_mode_kb_carriage_return_1(); /** * @brief Get the ascii mode keyboard carriage return 2 - * - * @return std::uint32_t + * + * @return std::uint32_t */ std::uint32_t get_ascii_mode_kb_carriage_return_2(); /** * @brief Get the keyboard start filter characters - * - * @return std::uint32_t + * + * @return std::uint32_t */ std::uint32_t get_kb_start_filter_chars(); /** * @brief Get the keyboard end filter characters - * - * @return std::uint32_t + * + * @return std::uint32_t */ std::uint32_t get_kb_end_filter_chars(); /** * @brief Get the usb string enable flag - * - * @return hal::byte + * + * @return hal::byte */ hal::byte get_usb_string_enable(); /** * @brief Get the ascii mode keyboard fast upload mode - * - * @return hal::byte + * + * @return hal::byte */ hal::byte get_ascii_mode_kb_fast_upload_mode(); /** * @brief Get the config bytes array - * - * @return auto const& + * + * @return auto const& */ auto const& get_config_bytes() const { @@ -646,71 +668,71 @@ class ch9329 /** * @brief Set the parameters configuration of the chip - * + * * @param p_data object containing parameters to change * @return hal::byte status byte returned from chip */ hal::byte set_parameters(ch9329_parameters const& p_data); /** * @brief Get the current parameters configuration from the chip - * + * * @return ch9329_parameters contains parameters and the response bytes */ ch9329_parameters get_parameters(); -/** - * @brief Get info about the chip - * - * @return chip_info contains basic information about the chip - */ + /** + * @brief Get info about the chip + * + * @return chip_info contains basic information about the chip + */ chip_info get_info(); /** * @brief Get the manufacturer usb string descriptor on the chip - * + * * @return usb_string_descriptor contains buffer and trimmed data */ usb_string_descriptor get_manufacturer_descriptor(); /** * @brief Get the product usb string descriptor on the chip - * + * * @return usb_string_descriptor contains buffer and trimmed data */ usb_string_descriptor get_product_descriptor(); /** * @brief Get the serial number usb string descriptor on the chip - * + * * @return usb_string_descriptor contains buffer and trimmed data */ usb_string_descriptor get_serial_number_descriptor(); /** * @brief Set the manufacturer usb string descriptor - * + * * @param p_string string to use as descriptor * @return hal::byte status byte returned from the chip */ hal::byte set_manufacturer_descriptor(std::string_view p_string); /** * @brief Set the product usb string descriptor - * + * * @param p_string string to use as descriptor * @return hal::byte status byte returned from the chip */ hal::byte set_product_descriptor(std::string_view p_string); /** * @brief Set the serial number usb string descriptor - * + * * @param p_string string to use as descriptor * @return hal::byte status byte returned from the chip */ hal::byte set_serial_number_descriptor(std::string_view p_string); /** * @brief Restore all settings to factory default - * + * * @return hal::byte status byte returned from the chip */ hal::byte restore_factory_default_settings(); /** * @brief Reset the chip using the cmd_reset command - * + * * @return hal::byte status byte returned from the chip */ hal::byte reset(); diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 4daa910..57561f4 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -47,62 +47,16 @@ ch9329::ch9329(hal::serial& p_uart) ch9329::ch9329_parameters::ch9329_parameters( std::array p_config_bytes) - : m_config_bytes(p_config_bytes) -{}; + : m_config_bytes(p_config_bytes){}; ch9329::ch9329_parameters::ch9329_parameters() { m_config_bytes = { - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; } @@ -350,6 +304,7 @@ hal::byte ch9329::set_parameters(ch9329_parameters const& p_parameters) send_start_bytes(*m_uart, cmd_set_para_cfg, 50); hal::print(*m_uart, bytes); auto sum_byte = calculate_sum(bytes, cmd_set_para_cfg); + sum_byte += 0x32; hal::print(*m_uart, std::to_array({ sum_byte })); std::array response; hal::read(*m_uart, response, hal::never_timeout()); @@ -590,103 +545,149 @@ ch9329::keyboard_general& ch9329::keyboard_general::release_all_keys() return *this; } -void ch9329::ch9329_parameters::set_chip_working_mode(hal::byte p_working_mode) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_config_bytes( + std::array p_config_bytes) +{ + m_config_bytes = p_config_bytes; + return *this; +}; + +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_chip_working_mode( + hal::byte p_working_mode) { m_config_bytes[0] = p_working_mode; + return *this; }; -void ch9329::ch9329_parameters::set_serial_communication_mode(hal::byte p_communication_mode) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_serial_communication_mode( + hal::byte p_communication_mode) { m_config_bytes[1] = p_communication_mode; + return *this; }; -void ch9329::ch9329_parameters::set_serial_address(hal::byte p_serial) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_serial_address( + hal::byte p_serial) { m_config_bytes[2] = p_serial; + return *this; }; -void ch9329::ch9329_parameters::set_serial_mode_baud_rate(std::uint32_t p_baud) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_serial_mode_baud_rate( + std::uint32_t p_baud) { m_config_bytes[3] = static_cast(p_baud >> 24); m_config_bytes[4] = static_cast(p_baud >> 16); m_config_bytes[5] = static_cast(p_baud >> 8); m_config_bytes[6] = static_cast(p_baud); + return *this; }; -void ch9329::ch9329_parameters::set_serial_mode_packet_interval(std::uint16_t p_packet_interval) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_serial_mode_packet_interval( + std::uint16_t p_packet_interval) { m_config_bytes[9] = static_cast(p_packet_interval >> 8); m_config_bytes[10] = static_cast(p_packet_interval); + return *this; }; -void ch9329::ch9329_parameters::set_vendor_id(std::uint16_t p_vid) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_vendor_id( + std::uint16_t p_vid) { m_config_bytes[11] = static_cast(p_vid >> 8); m_config_bytes[12] = static_cast(p_vid); + return *this; }; -void ch9329::ch9329_parameters::set_product_id(std::uint16_t p_id) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_product_id( + std::uint16_t p_id) { m_config_bytes[13] = static_cast(p_id >> 8); m_config_bytes[14] = static_cast(p_id); + return *this; }; -void ch9329::ch9329_parameters::set_ascii_mode_kb_upload_interval(std::uint16_t p_upload_interval) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_ascii_mode_kb_upload_interval( + std::uint16_t p_upload_interval) { - m_config_bytes[15] =static_cast(p_upload_interval >> 8); - m_config_bytes[16] =static_cast(p_upload_interval); + m_config_bytes[15] = static_cast(p_upload_interval >> 8); + m_config_bytes[16] = static_cast(p_upload_interval); + return *this; }; -void ch9329::ch9329_parameters::set_ascii_mode_kb_release_delay(std::uint16_t p_release_dealy) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_ascii_mode_kb_release_delay( + std::uint16_t p_release_dealy) { m_config_bytes[17] = static_cast(p_release_dealy >> 8); m_config_bytes[18] = static_cast(p_release_dealy); + return *this; }; -void ch9329::ch9329_parameters::set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter) { m_config_bytes[19] = p_auto_enter; + return *this; }; -void ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_1(std::uint32_t p_carriage_return) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_1( + std::uint32_t p_carriage_return) { - m_config_bytes[20] =static_cast(p_carriage_return >> 24); - m_config_bytes[21] =static_cast(p_carriage_return >> 16); - m_config_bytes[22] =static_cast(p_carriage_return >> 8); - m_config_bytes[23] =static_cast(p_carriage_return); + m_config_bytes[20] = static_cast(p_carriage_return >> 24); + m_config_bytes[21] = static_cast(p_carriage_return >> 16); + m_config_bytes[22] = static_cast(p_carriage_return >> 8); + m_config_bytes[23] = static_cast(p_carriage_return); + return *this; }; -void ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_2(std::uint32_t p_carriage_return) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_2( + std::uint32_t p_carriage_return) { - m_config_bytes[24] =static_cast(p_carriage_return >> 24); - m_config_bytes[25] =static_cast(p_carriage_return >> 16); - m_config_bytes[26] =static_cast(p_carriage_return >> 8); - m_config_bytes[27] =static_cast(p_carriage_return); + m_config_bytes[24] = static_cast(p_carriage_return >> 24); + m_config_bytes[25] = static_cast(p_carriage_return >> 16); + m_config_bytes[26] = static_cast(p_carriage_return >> 8); + m_config_bytes[27] = static_cast(p_carriage_return); + return *this; }; -void ch9329::ch9329_parameters::set_kb_start_filter_chars(std::uint32_t p_start_filters) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_kb_start_filter_chars( + std::uint32_t p_start_filters) { - m_config_bytes[28] =static_cast(p_start_filters >> 24); - m_config_bytes[29] =static_cast(p_start_filters >> 16); - m_config_bytes[30] =static_cast(p_start_filters >> 8); - m_config_bytes[31] =static_cast(p_start_filters); + m_config_bytes[28] = static_cast(p_start_filters >> 24); + m_config_bytes[29] = static_cast(p_start_filters >> 16); + m_config_bytes[30] = static_cast(p_start_filters >> 8); + m_config_bytes[31] = static_cast(p_start_filters); + return *this; }; -void ch9329::ch9329_parameters::set_kb_end_filter_chars(std::uint32_t p_end_filters) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_kb_end_filter_chars( + std::uint32_t p_end_filters) { - m_config_bytes[32] =static_cast(p_end_filters >> 24); - m_config_bytes[33] =static_cast(p_end_filters >> 16); - m_config_bytes[34] =static_cast(p_end_filters >> 8); - m_config_bytes[35] =static_cast(p_end_filters); + m_config_bytes[32] = static_cast(p_end_filters >> 24); + m_config_bytes[33] = static_cast(p_end_filters >> 16); + m_config_bytes[34] = static_cast(p_end_filters >> 8); + m_config_bytes[35] = static_cast(p_end_filters); + return *this; }; -void ch9329::ch9329_parameters::set_usb_string_enable(hal::byte p_enable) +ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_usb_string_enable( + hal::byte p_enable) { m_config_bytes[36] = p_enable; + return *this; }; -void ch9329::ch9329_parameters::set_ascii_mode_kb_fast_upload_mode(hal::byte p_fast_upload) +ch9329::ch9329_parameters& +ch9329::ch9329_parameters::set_ascii_mode_kb_fast_upload_mode( + hal::byte p_fast_upload) { m_config_bytes[37] = p_fast_upload; + return *this; }; -hal::byte ch9329::ch9329_parameters::get_chip_working_mode() +hal::byte ch9329::ch9329_parameters::get_chip_working_mode() { return m_config_bytes[0]; }; -hal::byte ch9329::ch9329_parameters::get_serial_communication_mode() +hal::byte ch9329::ch9329_parameters::get_serial_communication_mode() { return m_config_bytes[1]; }; -hal::byte ch9329::ch9329_parameters::get_serial_address() +hal::byte ch9329::ch9329_parameters::get_serial_address() { return m_config_bytes[2]; }; -std::uint32_t ch9329::ch9329_parameters::get_serial_mode_baud_rate() +std::uint32_t ch9329::ch9329_parameters::get_serial_mode_baud_rate() { std::uint32_t baud = m_config_bytes[3]; baud = (baud << 8) | m_config_bytes[4]; @@ -694,31 +695,31 @@ std::uint32_t ch9329::ch9329_parameters::get_serial_mode_baud_rate() baud = (baud << 8) | m_config_bytes[6]; return baud; }; -std::uint16_t ch9329::ch9329_parameters::get_serial_mode_packet_interval() +std::uint16_t ch9329::ch9329_parameters::get_serial_mode_packet_interval() { return static_cast((m_config_bytes[9] << 8) | m_config_bytes[10]); }; -std::uint16_t ch9329::ch9329_parameters::get_vendor_id() +std::uint16_t ch9329::ch9329_parameters::get_vendor_id() { return static_cast((m_config_bytes[11] << 8) | m_config_bytes[12]); }; -std::uint16_t ch9329::ch9329_parameters::get_product_id() +std::uint16_t ch9329::ch9329_parameters::get_product_id() { return static_cast((m_config_bytes[13] << 8) | m_config_bytes[14]); }; -std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_upload_interval() +std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_upload_interval() { return static_cast((m_config_bytes[15] << 8) | m_config_bytes[16]); }; -std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_release_delay() +std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_release_delay() { return static_cast((m_config_bytes[17] << 8) | m_config_bytes[18]); }; -hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_auto_enter() +hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_auto_enter() { return m_config_bytes[19]; }; -std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_1() +std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_1() { std::uint32_t carriage_ret_1 = m_config_bytes[20]; carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[21]; @@ -726,7 +727,7 @@ std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_1() carriage_ret_1 = (carriage_ret_1 << 8) | m_config_bytes[23]; return carriage_ret_1; }; -std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_2() +std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_2() { std::uint32_t carriage_ret_2 = m_config_bytes[24]; carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[25]; @@ -734,7 +735,7 @@ std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_2() carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[27]; return carriage_ret_2; }; -std::uint32_t ch9329::ch9329_parameters::get_kb_start_filter_chars() +std::uint32_t ch9329::ch9329_parameters::get_kb_start_filter_chars() { std::uint32_t start_filters = m_config_bytes[28]; start_filters = (start_filters << 8) | m_config_bytes[29]; @@ -742,7 +743,7 @@ std::uint32_t ch9329::ch9329_parameters::get_kb_start_filter_chars() start_filters = (start_filters << 8) | m_config_bytes[31]; return start_filters; }; -std::uint32_t ch9329::ch9329_parameters::get_kb_end_filter_chars() +std::uint32_t ch9329::ch9329_parameters::get_kb_end_filter_chars() { std::uint32_t end_filters = m_config_bytes[32]; end_filters = (end_filters << 8) | m_config_bytes[33]; @@ -750,11 +751,11 @@ std::uint32_t ch9329::ch9329_parameters::get_kb_end_filter_chars() end_filters = (end_filters << 8) | m_config_bytes[35]; return end_filters; }; -hal::byte ch9329::ch9329_parameters::get_usb_string_enable() +hal::byte ch9329::ch9329_parameters::get_usb_string_enable() { return m_config_bytes[36]; }; -hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_fast_upload_mode() +hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_fast_upload_mode() { return m_config_bytes[37]; }; From 035effa9861df16c9f1f7c19d42de1046693d64e Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Tue, 8 Oct 2024 15:38:44 -0700 Subject: [PATCH 14/16] fix merge conflicts and change parameters design --- demos/applications/ch9329_nunchuck_mouse.cpp | 1 - demos/platforms/stm32f103c8.cpp | 18 -- include/libhal-input/ch9329.hpp | 100 +++++----- include/libhal-input/ch9329_kb_bytes.hpp | 172 ------------------ .../ch9329_parameter_constants.hpp | 66 +++++++ src/ch9329.cpp | 171 +++++++++-------- 6 files changed, 221 insertions(+), 307 deletions(-) delete mode 100644 include/libhal-input/ch9329_kb_bytes.hpp create mode 100644 include/libhal-input/ch9329_parameter_constants.hpp diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 8b64ce4..39d2198 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -33,7 +33,6 @@ void application(resource_list& p_map) hal::input::nunchuck nunchuck(i2c); hal::input::ch9329 usb_control(uart3); - hal::input::ch9329::keyboard_general kb_control; hal::input::ch9329::mouse_relative rel_mouse_control; hal::print(console, "Demo Application Starting...\n\n"); diff --git a/demos/platforms/stm32f103c8.cpp b/demos/platforms/stm32f103c8.cpp index d9b1089..46867fb 100644 --- a/demos/platforms/stm32f103c8.cpp +++ b/demos/platforms/stm32f103c8.cpp @@ -44,20 +44,14 @@ void initialize_platform(resource_list& p_resources) hal::serial::settings{ .baud_rate = 115200, }); -<<<<<<< HEAD -======= p_resources.console = &uart1; ->>>>>>> main static hal::stm32f1::uart uart3(hal::port<3>, hal::buffer<128>, hal::serial::settings{ .baud_rate = 9600, }); -<<<<<<< HEAD -======= p_resources.uart3 = &uart3; ->>>>>>> main static hal::stm32f1::output_pin led('C', 13); p_resources.status_led = &led; @@ -67,17 +61,5 @@ void initialize_platform(resource_list& p_resources) static hal::bit_bang_i2c::pins pins{ .sda = &sda, .scl = &scl }; static hal::bit_bang_i2c bit_bang_i2c(pins, counter); bit_bang_i2c.configure(hal::i2c::settings{ .clock_rate = 100.0_kHz }); -<<<<<<< HEAD - - return { - .reset = +[]() { hal::cortex_m::reset(); }, - .console = &uart1, - .uart3 = &uart3, - .clock = &counter, - .status_led = &led, - .i2c = &bit_bang_i2c, - }; -======= p_resources.i2c = &bit_bang_i2c; ->>>>>>> main } diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index b792aea..0695d65 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -14,9 +14,11 @@ #pragma once +#include #include #include +#include #include #include @@ -26,6 +28,9 @@ constexpr auto mouse_rel_data_size = 5; constexpr auto kb_media_data_size = 4; constexpr auto kb_acpi_data_size = 2; constexpr auto kb_general_data_size = 8; +constexpr auto parameter_data_size = 50; +constexpr auto filter_chars_length = 4; +constexpr auto usb_string_descriptor_max_length = 23; /** * @brief Driver for CH9329 UART to USB @@ -66,7 +71,7 @@ class ch9329 { return std::span(buffer).first(length); } - std::array buffer{}; + std::array buffer{}; std::size_t length = 0; }; @@ -89,49 +94,53 @@ class ch9329 * * @param p_config_bytes array holding parameter settings in bytes */ - ch9329_parameters(std::array p_config_bytes); + ch9329_parameters( + std::array p_config_bytes); /** * @brief Set the array containing parameter bytes * - * @param p_config_bytes bytes to use + * @param p_config_bytes bytes containing parameters * @return ch9329_parameters& */ ch9329_parameters& set_config_bytes( - std::array p_config_bytes); + std::array p_config_bytes); /** * @brief Set the chip working mode. * - * @param p_working_mode + * @param p_working_mode working_mode enum representing which working mode + * to use * @return ch9329_parameters& */ - ch9329_parameters& set_chip_working_mode(hal::byte p_working_mode); + ch9329_parameters& set_chip_working_mode(working_mode p_working_mode); /** * @brief Set the serial communication mode * - * @param p_communication_mode + * @param p_communication_mode communication_mode enum representing which + * communication mode to use * @return ch9329_parameters& */ ch9329_parameters& set_serial_communication_mode( - hal::byte p_communication_mode); + communication_mode p_communication_mode); /** * @brief Set the serial mode baud rate * - * @param p_baud + * @param p_baud baud rate to set the chip to use * @return ch9329_parameters& */ ch9329_parameters& set_serial_mode_baud_rate(std::uint32_t p_baud); /** * @brief Set the serial address * - * @param p_serial + * @param p_serial serial address of chip * @return ch9329_parameters& */ ch9329_parameters& set_serial_address(hal::byte p_serial); /** * @brief Set the serial mode packet interval * - * @param p_packet_interval + * @param p_packet_interval max time in ms to wait between bytes before + * ending packet * @return ch9329_parameters& */ ch9329_parameters& set_serial_mode_packet_interval( @@ -139,21 +148,22 @@ class ch9329 /** * @brief Set the vendor id * - * @param p_vid + * @param p_vid 2 bytes representing the vendor id of the chip * @return ch9329_parameters& */ ch9329_parameters& set_vendor_id(std::uint16_t p_vid); /** * @brief Set the product id * - * @param p_pid + * @param p_pid 2 bytes representing the product id of the chip * @return ch9329_parameters& */ ch9329_parameters& set_product_id(std::uint16_t p_pid); /** * @brief Set the ascii mode keyboard upload interval * - * @param p_upload_interval + * @param p_upload_interval time to wait in ms between sending packets in + * ascii mode * @return ch9329_parameters& */ ch9329_parameters& set_ascii_mode_kb_upload_interval( @@ -161,18 +171,19 @@ class ch9329 /** * @brief Set the ascii mode keyboard release delay * - * @param p_release_dealy + * @param p_release_delay time to wait in ms before sending packet to + * release keys pressed in ascii mode ascii mode * @return ch9329_parameters& */ ch9329_parameters& set_ascii_mode_kb_release_delay( - std::uint16_t p_release_dealy); + std::uint16_t p_release_delay); /** * @brief Set the ascii mode keyboard auto enter * - * @param p_auto_enter + * @param p_auto_enter auto send enter after end of package in ascii mode * @return ch9329_parameters& */ - ch9329_parameters& set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter); + ch9329_parameters& set_ascii_mode_kb_auto_enter(bool p_auto_enter); /** * @brief Set the ascii mode keyboard carriage return 1 * @@ -192,45 +203,50 @@ class ch9329 /** * @brief Set the keyboard start filter characters * - * @param p_start_filters + * @param p_start_filters start filter characters * @return ch9329_parameters& */ - ch9329_parameters& set_kb_start_filter_chars(std::uint32_t p_start_filters); + ch9329_parameters& set_kb_start_filter_chars( + std::array p_start_filters); /** * @brief Set the keyboard end filter characters * - * @param p_end_filters + * @param p_end_filters end filter characters * @return ch9329_parameters& */ - ch9329_parameters& set_kb_end_filter_chars(std::uint32_t p_end_filters); + ch9329_parameters& set_kb_end_filter_chars( + std::array p_end_filters); /** - * @brief Set the usb string enable flag + * @brief Enable or disable custom usb string descriptors * - * @param p_enable + * @param p_descriptor custom_descriptor enum representing which descriptor + * to change + * @param p_enable allow custom string descriptor * @return ch9329_parameters& */ - ch9329_parameters& set_usb_string_enable(hal::byte p_enable); + ch9329_parameters& set_usb_string_enable(custom_descriptor p_descriptor, + bool p_enable); /** * @brief Set the ascii mode keyboard fast upload mode * - * @param p_fast_upload + * @param p_fast_upload send all characters before sending release keys + * packets * @return ch9329_parameters& */ - ch9329_parameters& set_ascii_mode_kb_fast_upload_mode( - hal::byte p_fast_upload); + ch9329_parameters& set_ascii_mode_kb_fast_upload_mode(bool p_fast_upload); /** * @brief Get the chip working mode * - * @return hal::byte + * @return working_mode */ - hal::byte get_chip_working_mode(); + working_mode get_chip_working_mode(); /** * @brief Get the serial communication mode * - * @return hal::byte + * @return communication_mode */ - hal::byte get_serial_communication_mode(); + communication_mode get_serial_communication_mode(); /** * @brief Get the serial address * @@ -276,9 +292,9 @@ class ch9329 /** * @brief Get the ascii mode keyboard auto enter flag * - * @return hal::byte + * @return bool */ - hal::byte get_ascii_mode_kb_auto_enter(); + bool get_ascii_mode_kb_auto_enter(); /** * @brief Get the ascii mode keyboard carriage return 1 * @@ -294,27 +310,27 @@ class ch9329 /** * @brief Get the keyboard start filter characters * - * @return std::uint32_t + * @return std::array */ - std::uint32_t get_kb_start_filter_chars(); + std::array get_kb_start_filter_chars(); /** * @brief Get the keyboard end filter characters * - * @return std::uint32_t + * @return std::array */ - std::uint32_t get_kb_end_filter_chars(); + std::array get_kb_end_filter_chars(); /** * @brief Get the usb string enable flag * - * @return hal::byte + * @return bool */ - hal::byte get_usb_string_enable(); + bool get_usb_string_enable(custom_descriptor p_descriptor); /** * @brief Get the ascii mode keyboard fast upload mode * * @return hal::byte */ - hal::byte get_ascii_mode_kb_fast_upload_mode(); + bool get_ascii_mode_kb_fast_upload_mode(); /** * @brief Get the config bytes array * @@ -326,7 +342,7 @@ class ch9329 } private: - std::array m_config_bytes = {}; + std::array m_config_bytes = {}; }; /** diff --git a/include/libhal-input/ch9329_kb_bytes.hpp b/include/libhal-input/ch9329_kb_bytes.hpp deleted file mode 100644 index b9adb00..0000000 --- a/include/libhal-input/ch9329_kb_bytes.hpp +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2024 Khalil Estell -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include -#include - -enum class control_key_bit : std::uint8_t -{ - left_control = 0, - left_shift = 1, - left_alt = 2, - left_windows = 3, - right_control = 4, - right_shift = 5, - right_alt = 6, - right_windows = 7, -}; - -enum class acpi_key : std::uint8_t -{ - power = 0, - sleep = 1, - wake_up = 2 -}; - -enum class media_key : std::uint8_t -{ - volume_up = 0, - volume_down = 1, - mute = 2, - play_pause = 3, - next_track = 4, - prev_track = 5, - cd_stop = 6, - eject = 7, - email = 8, - internet_search = 9, - internet_favorites = 10, - internet_home = 11, - internet_back = 12, - internet_forward = 13, - internet_stop = 14, - refresh = 15, - media = 16, - explorer = 17, - calculator = 18, - screen_save = 19, - my_computer = 20, - minimize = 21, - record = 22, - rewind = 23 -}; - -enum class normal_key : hal::byte -{ - a = 0x04, - b = 0x05, - c = 0x06, - d = 0x07, - e = 0x08, - f = 0x09, - g = 0x0A, - h = 0x0B, - i = 0x0C, - j = 0x0D, - k = 0x0E, - l = 0x0F, - m = 0x10, - n = 0x11, - o = 0x12, - p = 0x13, - q = 0x14, - r = 0x15, - s = 0x16, - t = 0x17, - u = 0x18, - v = 0x19, - w = 0x1A, - x = 0x1B, - y = 0x1C, - z = 0x1D, - k1 = 0x1E, - k2 = 0x1F, - k3 = 0x20, - k4 = 0x21, - k5 = 0x22, - k6 = 0x23, - k7 = 0x24, - k8 = 0x25, - k9 = 0x26, - k0 = 0x27, - left_enter = 0x28, - esc = 0x29, - back_space = 0x2A, - tab = 0x2B, - space = 0x2C, - hyphen = 0x2D, - equal = 0x2E, - left_bracket = 0x2F, - right_bracket = 0x30, - keycode_29 = 0x31, - keycode_42 = 0x32, - semi_colon = 0x33, - quote_mark = 0x34, - grave = 0x35, - comma = 0x36, // this might be < only? datasheet is weird - period = 0x37, - slash = 0x38, - capslock = 0x39, - f1 = 0x3A, - f2 = 0x3B, - f3 = 0x3C, - f4 = 0x3D, - f5 = 0x3E, - f6 = 0x3F, - f7 = 0x40, - f8 = 0x41, - f9 = 0x42, - f10 = 0x43, - f11 = 0x44, - f12 = 0x45, - print_screen = 0x46, - scroll_lock = 0x47, - pause = 0x48, - insert = 0x49, - home = 0x4A, - pg_up = 0x4B, - delete_key = 0x4C, - end = 0x4D, - pg_dn = 0x4E, - right_arrow = 0x4F, - left_arrow = 0x50, - down_arrow = 0x51, - up_arrow = 0x52, - num_lock = 0x53, - num_pad_asterisk = 0x55, - num_pad_minus = 0x56, - num_pad_plus = 0x57, - num_pad_enter = 0x58, - num_pad_1 = 0x59, - num_pad_2 = 0x5A, - num_pad_3 = 0x5B, - num_pad_4 = 0x5C, - num_pad_5 = 0x5D, - num_pad_6 = 0x5E, - num_pad_7 = 0x5F, - num_pad_8 = 0x60, - num_pad_9 = 0x61, - num_pad_0 = 0x62, - num_pad_del = 0x63, - keycode_45 = 0x64, - keycode_107 = 0x85, - keycode_14 = 0x89, - keycode_56 = 0x87, - left_ctrl = 0xE0, - left_shift = 0xE1, - left_alt = 0xE2, - right_ctrl = 0xE4, - right_shift = 0xE5, - right_alt = 0xE6, -}; diff --git a/include/libhal-input/ch9329_parameter_constants.hpp b/include/libhal-input/ch9329_parameter_constants.hpp new file mode 100644 index 0000000..9fe85a2 --- /dev/null +++ b/include/libhal-input/ch9329_parameter_constants.hpp @@ -0,0 +1,66 @@ +// Copyright 2024 Khalil Estell +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +enum class working_mode : hal::byte +{ + // software mode keyboard (normal & multimedia) and mouse + software_keyboard_and_mouse = 0x00, + // software mode keyboard (normal) only + software_keyboard_only = 0x01, + // software mode mouse only + software_mouse_only = 0x02, + // software mode HID mode + software_hid_mode = 0x03, + // hardware mode keyboard (normal & multimedia) and mouse + hardware_keyboard_and_mouse = 0x80, + // hardware mode keyboard (normal) only + hardware_keyboard_only = 0x81, + // hardware mode mouse only + hardware_mouse_only = 0x82, + // hardware mode HID mode + hardware_hid_mode = 0x83 +}; + +enum class communication_mode : hal::byte +{ + // software set protocol transmission mode + software_protocol_mode = 0x00, + // software set ascii mode + software_ascii_mode = 0x01, + // software set transparent mode + software_transparent_mode = 0x02, + // hardware set protocol transmission mode + hardware_protocol_mode = 0x80, + // hardware set ascii mode + hardware_ascii_mode = 0x81, + // hardware set transparent mode + hardware_transparent_mode = 0x82 +}; + +enum class custom_descriptor : std::uint8_t +{ + serial_number = 0, + product_string = 1, + vendor_string = 2, + usb_string = 7 +}; + +enum class lock_status : std::uint8_t +{ + num_lock = 0, + caps_lock = 1, + scroll_lock = 2 +}; diff --git a/src/ch9329.cpp b/src/ch9329.cpp index 3c55b79..faf863d 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -45,21 +45,31 @@ constexpr hal::byte cmd_send_ms_rel_data = 0x05; constexpr hal::byte cmd_get_para_cfg = 0x08; constexpr hal::byte cmd_set_para_cfg = 0x09; +constexpr auto header_frame_size = 5; +constexpr auto info_response_length = 14; +constexpr auto response_length = 7; +constexpr auto response_byte = 5; +constexpr auto response_header_length = 5; +constexpr auto check_sum_read_length = 1; +constexpr auto string_header_length = 2; +constexpr auto parameters_length = 50; + ch9329::ch9329(hal::serial& p_uart) : m_uart(&p_uart) { } ch9329::ch9329_parameters::ch9329_parameters( - std::array p_config_bytes) + std::array p_config_bytes) : m_config_bytes(p_config_bytes){}; ch9329::ch9329_parameters::ch9329_parameters() { + // these are the default parameters m_config_bytes = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x00, 0x00, 0x00, 0x25, 0x80, 0x08, 0x00, 0x00, + 0x03, 0x86, 0x1A, 0x29, 0xE1, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -185,16 +195,16 @@ void ch9329::send(keyboard_acpi const& p_data) ch9329::chip_info ch9329::get_info() { - std::array response{}; + std::array response{}; send_start_bytes(*m_uart, cmd_get_info); hal::print(*m_uart, std::to_array({ (hal::byte)0x03 })); // sum byte hal::read(*m_uart, response, hal::never_timeout()); chip_info info = {}; info.version = response[5]; info.enumeration_status = response[6]; - info.num_lock = response[7] & 0b1; - info.caps_lock = response[7] & 0b10; - info.scroll_lock = response[7] & 0b100; + info.num_lock = response[7] & (1 << hal::value(lock_status::num_lock)); + info.caps_lock = response[7] & (1 << hal::value(lock_status::caps_lock)); + info.scroll_lock = response[7] & (1 << hal::value(lock_status::scroll_lock)); return info; } @@ -203,15 +213,12 @@ ch9329::usb_string_descriptor get_usb_string_descriptor(serial& p_serial, { ch9329::usb_string_descriptor str; auto bytes = std::to_array({ p_string_type }); - send_start_bytes(p_serial, cmd_get_usb_string); - hal::print(p_serial, bytes); - auto sum_byte = calculate_sum(bytes, cmd_get_usb_string); - hal::print(p_serial, std::to_array({ sum_byte })); - std::array header_bytes; + send_command_with_bytes(bytes, cmd_get_usb_string, p_serial); + std::array header_bytes; hal::read(p_serial, header_bytes, hal::never_timeout()); - str.length = header_bytes[6]; + str.length = header_bytes.back(); hal::read(p_serial, str.received_data(), hal::never_timeout()); - std::array check_sum; + std::array check_sum; hal::read(p_serial, check_sum, hal::never_timeout()); return str; } @@ -221,19 +228,24 @@ hal::byte set_usb_string_descriptor(serial& p_serial, std::string_view p_string) { uint8_t string_length = p_string.length(); - auto bytes = std::to_array({ p_string_type, string_length }); - send_start_bytes(p_serial, cmd_set_usb_string, string_length + 2); - hal::print(p_serial, bytes); + auto string_header = std::to_array({ p_string_type, string_length }); + send_start_bytes( + p_serial, cmd_set_usb_string, string_length + string_header_length); + hal::print(p_serial, string_header); hal::print(p_serial, p_string); - auto sum_byte = calculate_sum(bytes, cmd_set_usb_string); - sum_byte += (string_length + 2); + // get the sum up to the end of the string header + auto sum_byte = calculate_sum(string_header, cmd_set_usb_string); + // add string header bytes to sum + sum_byte += (string_length + string_header_length); + // add chars in string to sum for (hal::byte byte : p_string) { sum_byte += byte; } + // send sum byte hal::print(p_serial, std::to_array({ sum_byte })); - std::array response; + std::array response; hal::read(p_serial, response, hal::never_timeout()); - return response[5]; + return response[response_byte]; } ch9329::usb_string_descriptor ch9329::get_manufacturer_descriptor() @@ -271,9 +283,9 @@ hal::byte ch9329::restore_factory_default_settings() send_start_bytes(*m_uart, cmd_restore_factory_default_settings); auto sum_byte = calculate_sum({}, cmd_restore_factory_default_settings); hal::print(*m_uart, std::to_array({ sum_byte })); - std::array response; + std::array response; hal::read(*m_uart, response, hal::never_timeout()); - return response[5]; + return response[response_byte]; } hal::byte ch9329::reset() @@ -281,9 +293,9 @@ hal::byte ch9329::reset() send_start_bytes(*m_uart, cmd_reset); auto sum_byte = calculate_sum({}, cmd_reset); hal::print(*m_uart, std::to_array({ sum_byte })); - std::array response; + std::array response; hal::read(*m_uart, response, hal::never_timeout()); - return response[5]; + return response[response_byte]; } ch9329::ch9329_parameters ch9329::get_parameters() @@ -291,9 +303,9 @@ ch9329::ch9329_parameters ch9329::get_parameters() send_start_bytes(*m_uart, cmd_get_para_cfg); auto sum_byte = calculate_sum({}, cmd_get_para_cfg); hal::print(*m_uart, std::to_array({ sum_byte })); - std::array response_header; - std::array response; - std::array response_sum; + std::array response_header; + std::array response; + std::array response_sum; hal::read(*m_uart, response_header, hal::never_timeout()); hal::read(*m_uart, response, hal::never_timeout()); @@ -307,14 +319,14 @@ ch9329::ch9329_parameters ch9329::get_parameters() hal::byte ch9329::set_parameters(ch9329_parameters const& p_parameters) { auto bytes = p_parameters.get_config_bytes(); - send_start_bytes(*m_uart, cmd_set_para_cfg, 50); + send_start_bytes(*m_uart, cmd_set_para_cfg, parameters_length); hal::print(*m_uart, bytes); auto sum_byte = calculate_sum(bytes, cmd_set_para_cfg); - sum_byte += 0x32; + sum_byte += parameters_length; hal::print(*m_uart, std::to_array({ sum_byte })); - std::array response; + std::array response; hal::read(*m_uart, response, hal::never_timeout()); - return response[5]; + return response[response_byte]; } // mouse absolute functions @@ -505,23 +517,23 @@ ch9329::keyboard_general& ch9329::keyboard_general::release_all_keys() } ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_config_bytes( - std::array p_config_bytes) + std::array p_config_bytes) { m_config_bytes = p_config_bytes; return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_chip_working_mode( - hal::byte p_working_mode) + working_mode p_working_mode) { - m_config_bytes[0] = p_working_mode; + m_config_bytes[0] = static_cast(p_working_mode); return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_serial_communication_mode( - hal::byte p_communication_mode) + communication_mode p_communication_mode) { - m_config_bytes[1] = p_communication_mode; + m_config_bytes[1] = static_cast(p_communication_mode); return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_serial_address( @@ -578,9 +590,10 @@ ch9329::ch9329_parameters::set_ascii_mode_kb_release_delay( return *this; }; ch9329::ch9329_parameters& -ch9329::ch9329_parameters::set_ascii_mode_kb_auto_enter(hal::byte p_auto_enter) +ch9329::ch9329_parameters::set_ascii_mode_kb_auto_enter(bool p_auto_enter) { - m_config_bytes[19] = p_auto_enter; + m_config_bytes[19] = + static_cast(p_auto_enter); // TODO: does this work? return *this; }; ch9329::ch9329_parameters& @@ -604,43 +617,50 @@ ch9329::ch9329_parameters::set_ascii_mode_kb_carriage_return_2( return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_kb_start_filter_chars( - std::uint32_t p_start_filters) + std::array p_start_filters) { - m_config_bytes[28] = static_cast(p_start_filters >> 24); - m_config_bytes[29] = static_cast(p_start_filters >> 16); - m_config_bytes[30] = static_cast(p_start_filters >> 8); - m_config_bytes[31] = static_cast(p_start_filters); + m_config_bytes[28] = p_start_filters[0]; + m_config_bytes[29] = p_start_filters[1]; + m_config_bytes[30] = p_start_filters[2]; + m_config_bytes[31] = p_start_filters[3]; return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_kb_end_filter_chars( - std::uint32_t p_end_filters) + std::array p_end_filters) { - m_config_bytes[32] = static_cast(p_end_filters >> 24); - m_config_bytes[33] = static_cast(p_end_filters >> 16); - m_config_bytes[34] = static_cast(p_end_filters >> 8); - m_config_bytes[35] = static_cast(p_end_filters); + m_config_bytes[32] = p_end_filters[0]; + m_config_bytes[33] = p_end_filters[1]; + m_config_bytes[34] = p_end_filters[2]; + m_config_bytes[35] = p_end_filters[3]; return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_usb_string_enable( - hal::byte p_enable) + custom_descriptor p_descriptor, + bool p_enable) { - m_config_bytes[36] = p_enable; + if (p_enable) { + hal::byte mask = 1 << hal::value(p_descriptor); + m_config_bytes[36] = m_config_bytes[36] | mask; + } else { + hal::byte mask = ~(1 << hal::value(p_descriptor)); + m_config_bytes[36] = m_config_bytes[36] & mask; + } return *this; }; ch9329::ch9329_parameters& ch9329::ch9329_parameters::set_ascii_mode_kb_fast_upload_mode( - hal::byte p_fast_upload) + bool p_fast_upload) { - m_config_bytes[37] = p_fast_upload; + m_config_bytes[37] = static_cast(p_fast_upload); return *this; }; -hal::byte ch9329::ch9329_parameters::get_chip_working_mode() +working_mode ch9329::ch9329_parameters::get_chip_working_mode() { - return m_config_bytes[0]; + return static_cast(m_config_bytes[0]); }; -hal::byte ch9329::ch9329_parameters::get_serial_communication_mode() +communication_mode ch9329::ch9329_parameters::get_serial_communication_mode() { - return m_config_bytes[1]; + return static_cast(m_config_bytes[1]); }; hal::byte ch9329::ch9329_parameters::get_serial_address() { @@ -674,9 +694,9 @@ std::uint16_t ch9329::ch9329_parameters::get_ascii_mode_kb_release_delay() { return static_cast((m_config_bytes[17] << 8) | m_config_bytes[18]); }; -hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_auto_enter() +bool ch9329::ch9329_parameters::get_ascii_mode_kb_auto_enter() { - return m_config_bytes[19]; + return static_cast(m_config_bytes[19]); }; std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_1() { @@ -694,28 +714,31 @@ std::uint32_t ch9329::ch9329_parameters::get_ascii_mode_kb_carriage_return_2() carriage_ret_2 = (carriage_ret_2 << 8) | m_config_bytes[27]; return carriage_ret_2; }; -std::uint32_t ch9329::ch9329_parameters::get_kb_start_filter_chars() +std::array ch9329::ch9329_parameters::get_kb_start_filter_chars() { - std::uint32_t start_filters = m_config_bytes[28]; - start_filters = (start_filters << 8) | m_config_bytes[29]; - start_filters = (start_filters << 8) | m_config_bytes[30]; - start_filters = (start_filters << 8) | m_config_bytes[31]; + std::array start_filters = { m_config_bytes[28], + m_config_bytes[29], + m_config_bytes[30], + m_config_bytes[31] }; return start_filters; }; -std::uint32_t ch9329::ch9329_parameters::get_kb_end_filter_chars() +std::array ch9329::ch9329_parameters::get_kb_end_filter_chars() { - std::uint32_t end_filters = m_config_bytes[32]; - end_filters = (end_filters << 8) | m_config_bytes[33]; - end_filters = (end_filters << 8) | m_config_bytes[34]; - end_filters = (end_filters << 8) | m_config_bytes[35]; + std::array end_filters = { m_config_bytes[32], + m_config_bytes[33], + m_config_bytes[34], + m_config_bytes[35] }; return end_filters; }; -hal::byte ch9329::ch9329_parameters::get_usb_string_enable() +bool ch9329::ch9329_parameters::get_usb_string_enable( + custom_descriptor p_descriptor) { - return m_config_bytes[36]; + hal::byte mask = 1 << hal::value(p_descriptor); + hal::byte status = (m_config_bytes[36] | mask) >> hal::value(p_descriptor); + return static_cast(status); }; -hal::byte ch9329::ch9329_parameters::get_ascii_mode_kb_fast_upload_mode() +bool ch9329::ch9329_parameters::get_ascii_mode_kb_fast_upload_mode() { - return m_config_bytes[37]; + return static_cast(m_config_bytes[37]); }; } // namespace hal::input From d911fda411c15cd47072e42d4c44aebf2e11f33c Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Wed, 9 Oct 2024 08:07:52 -0700 Subject: [PATCH 15/16] more work in progress --- src/ch9329.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ch9329.cpp b/src/ch9329.cpp index faf863d..babc7ff 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -117,6 +117,8 @@ hal::byte get_size_byte(hal::byte p_command) return 0x05; case cmd_get_usb_string: return 0x01; + case cmd_set_para_cfg: + return 0x32; } return 0x00; } @@ -319,11 +321,7 @@ ch9329::ch9329_parameters ch9329::get_parameters() hal::byte ch9329::set_parameters(ch9329_parameters const& p_parameters) { auto bytes = p_parameters.get_config_bytes(); - send_start_bytes(*m_uart, cmd_set_para_cfg, parameters_length); - hal::print(*m_uart, bytes); - auto sum_byte = calculate_sum(bytes, cmd_set_para_cfg); - sum_byte += parameters_length; - hal::print(*m_uart, std::to_array({ sum_byte })); + send_command_with_bytes(bytes, cmd_set_para_cfg, *m_uart); std::array response; hal::read(*m_uart, response, hal::never_timeout()); return response[response_byte]; From d3e5738b028efd6a43e9db11154eefe2c632d897 Mon Sep 17 00:00:00 2001 From: MaliaLabor Date: Sat, 19 Oct 2024 08:16:25 -0700 Subject: [PATCH 16/16] WIP scan baud rate on ctor --- demos/applications/ch9329_nunchuck_mouse.cpp | 2 +- include/libhal-input/ch9329.hpp | 22 ++++-- src/ch9329.cpp | 72 ++++++++++++++------ 3 files changed, 68 insertions(+), 28 deletions(-) diff --git a/demos/applications/ch9329_nunchuck_mouse.cpp b/demos/applications/ch9329_nunchuck_mouse.cpp index 39d2198..3a29959 100644 --- a/demos/applications/ch9329_nunchuck_mouse.cpp +++ b/demos/applications/ch9329_nunchuck_mouse.cpp @@ -32,7 +32,7 @@ void application(resource_list& p_map) auto& i2c = *p_map.i2c.value(); hal::input::nunchuck nunchuck(i2c); - hal::input::ch9329 usb_control(uart3); + hal::input::ch9329 usb_control(uart3, clock); hal::input::ch9329::mouse_relative rel_mouse_control; hal::print(console, "Demo Application Starting...\n\n"); diff --git a/include/libhal-input/ch9329.hpp b/include/libhal-input/ch9329.hpp index 0695d65..f051f87 100644 --- a/include/libhal-input/ch9329.hpp +++ b/include/libhal-input/ch9329.hpp @@ -19,7 +19,10 @@ #include #include +#include #include +#include +#include #include namespace hal::input { @@ -657,7 +660,7 @@ class ch9329 * * @param p_uart uart used to communicate with CH9329 */ - ch9329(hal::serial& p_uart); + ch9329(hal::serial& p_uart, hal::steady_clock& p_clock); /** * @brief Send mouse absolute position command * @@ -695,37 +698,42 @@ class ch9329 * @param p_data object containing parameters to change * @return hal::byte status byte returned from chip */ - hal::byte set_parameters(ch9329_parameters const& p_data); + hal::byte set_parameters(ch9329_parameters const& p_data, + hal::function_ref p_timeout); /** * @brief Get the current parameters configuration from the chip * * @return ch9329_parameters contains parameters and the response bytes */ - ch9329_parameters get_parameters(); + ch9329_parameters get_parameters( + hal::function_ref p_timeout); /** * @brief Get info about the chip * * @return chip_info contains basic information about the chip */ - chip_info get_info(); + chip_info get_info(hal::function_ref p_timeout); /** * @brief Get the manufacturer usb string descriptor on the chip * * @return usb_string_descriptor contains buffer and trimmed data */ - usb_string_descriptor get_manufacturer_descriptor(); + usb_string_descriptor get_manufacturer_descriptor( + hal::function_ref p_timeout); /** * @brief Get the product usb string descriptor on the chip * * @return usb_string_descriptor contains buffer and trimmed data */ - usb_string_descriptor get_product_descriptor(); + usb_string_descriptor get_product_descriptor( + hal::function_ref p_timeout); /** * @brief Get the serial number usb string descriptor on the chip * * @return usb_string_descriptor contains buffer and trimmed data */ - usb_string_descriptor get_serial_number_descriptor(); + usb_string_descriptor get_serial_number_descriptor( + hal::function_ref p_timeout); /** * @brief Set the manufacturer usb string descriptor * diff --git a/src/ch9329.cpp b/src/ch9329.cpp index babc7ff..03ee3d9 100644 --- a/src/ch9329.cpp +++ b/src/ch9329.cpp @@ -16,6 +16,9 @@ #include #include +#include +#include +#include #include #include @@ -54,9 +57,29 @@ constexpr auto check_sum_read_length = 1; constexpr auto string_header_length = 2; constexpr auto parameters_length = 50; -ch9329::ch9329(hal::serial& p_uart) +constexpr std::array standard_baud_rates = { 9600, + 19200, + 38400, + 57600, + 115200 }; + +ch9329::ch9329(hal::serial& p_uart, hal::steady_clock& p_clock) : m_uart(&p_uart) { + using namespace std::chrono_literals; + auto wait_time = hal::create_timeout(p_clock, 10ms); + for (auto baud : standard_baud_rates) { + try { + m_uart->configure({ .baud_rate = baud }); + auto response = get_info(wait_time); + if (response.version < 0x30) { + break; + } + } catch (timed_out) { + // what do here? + throw; + } + } } ch9329::ch9329_parameters::ch9329_parameters( @@ -195,12 +218,13 @@ void ch9329::send(keyboard_acpi const& p_data) send_command_with_bytes(bytes, cmd_send_kb_media_data, *m_uart, 2); } -ch9329::chip_info ch9329::get_info() +ch9329::chip_info ch9329::get_info( + hal::function_ref p_timeout = hal::never_timeout()) { std::array response{}; send_start_bytes(*m_uart, cmd_get_info); hal::print(*m_uart, std::to_array({ (hal::byte)0x03 })); // sum byte - hal::read(*m_uart, response, hal::never_timeout()); + hal::read(*m_uart, response, p_timeout); chip_info info = {}; info.version = response[5]; info.enumeration_status = response[6]; @@ -210,18 +234,20 @@ ch9329::chip_info ch9329::get_info() return info; } -ch9329::usb_string_descriptor get_usb_string_descriptor(serial& p_serial, - hal::byte p_string_type) +ch9329::usb_string_descriptor get_usb_string_descriptor( + serial& p_serial, + hal::byte p_string_type, + hal::function_ref p_timeout) { ch9329::usb_string_descriptor str; auto bytes = std::to_array({ p_string_type }); send_command_with_bytes(bytes, cmd_get_usb_string, p_serial); std::array header_bytes; - hal::read(p_serial, header_bytes, hal::never_timeout()); + hal::read(p_serial, header_bytes, p_timeout); str.length = header_bytes.back(); - hal::read(p_serial, str.received_data(), hal::never_timeout()); + hal::read(p_serial, str.received_data(), p_timeout); std::array check_sum; - hal::read(p_serial, check_sum, hal::never_timeout()); + hal::read(p_serial, check_sum, p_timeout); return str; } @@ -250,19 +276,22 @@ hal::byte set_usb_string_descriptor(serial& p_serial, return response[response_byte]; } -ch9329::usb_string_descriptor ch9329::get_manufacturer_descriptor() +ch9329::usb_string_descriptor ch9329::get_manufacturer_descriptor( + hal::function_ref p_timeout = hal::never_timeout()) { - return get_usb_string_descriptor(*m_uart, 0x00); + return get_usb_string_descriptor(*m_uart, 0x00, p_timeout); } -ch9329::usb_string_descriptor ch9329::get_product_descriptor() +ch9329::usb_string_descriptor ch9329::get_product_descriptor( + hal::function_ref p_timeout = hal::never_timeout()) { - return get_usb_string_descriptor(*m_uart, 0x01); + return get_usb_string_descriptor(*m_uart, 0x01, p_timeout); } -ch9329::usb_string_descriptor ch9329::get_serial_number_descriptor() +ch9329::usb_string_descriptor ch9329::get_serial_number_descriptor( + hal::function_ref p_timeout = hal::never_timeout()) { - return get_usb_string_descriptor(*m_uart, 0x02); + return get_usb_string_descriptor(*m_uart, 0x02, p_timeout); } hal::byte ch9329::set_manufacturer_descriptor(std::string_view p_string) @@ -300,7 +329,8 @@ hal::byte ch9329::reset() return response[response_byte]; } -ch9329::ch9329_parameters ch9329::get_parameters() +ch9329::ch9329_parameters ch9329::get_parameters( + hal::function_ref p_timeout = hal::never_timeout()) { send_start_bytes(*m_uart, cmd_get_para_cfg); auto sum_byte = calculate_sum({}, cmd_get_para_cfg); @@ -309,21 +339,23 @@ ch9329::ch9329_parameters ch9329::get_parameters() std::array response; std::array response_sum; - hal::read(*m_uart, response_header, hal::never_timeout()); - hal::read(*m_uart, response, hal::never_timeout()); - hal::read(*m_uart, response_sum, hal::never_timeout()); + hal::read(*m_uart, response_header, p_timeout); + hal::read(*m_uart, response, p_timeout); + hal::read(*m_uart, response_sum, p_timeout); ch9329_parameters params(response); return params; } -hal::byte ch9329::set_parameters(ch9329_parameters const& p_parameters) +hal::byte ch9329::set_parameters( + ch9329_parameters const& p_parameters, + hal::function_ref p_timeout = hal::never_timeout()) { auto bytes = p_parameters.get_config_bytes(); send_command_with_bytes(bytes, cmd_set_para_cfg, *m_uart); std::array response; - hal::read(*m_uart, response, hal::never_timeout()); + hal::read(*m_uart, response, p_timeout); return response[response_byte]; }

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