В целом, прошивка занимает половину памяти, можно организовать MassStorage девайс (на 32кб, что бы он появлялся только при определенных комбинациях), который будет виден как флешка. Но пока не думал о таком.
Планировал разобраться с MassStorage для реализации обновления прошивки, но пока нет времени
Статус состояний Lock-ов сообщает операционная система. Т.е. если подключить две клавиатуры и на одной из них нажимать CapsLock, то статус будет отображён на каждой
Спасибо, видел реализацию на SPI, но мне хотелось поработать с таймерами на STM32 (сейчас работаю с ШИМ, полумостами и аппаратной защитой), спасибо за информацию, нужно изучить вопрос.
А еще пока писал статью, осознал, что массивом из START_COUNT[48] для генерации сброса, можно было пренебречь. Есть нулевой байт для ШИМ в STOP_COUNT, а так как вызов передачи происходит раз в 10мс, то сброс будет точно реализован.
Битовая последовательности задана в HID_KEYBOARD_ReportDesc
rx_buf - указатель на массив uint8_t. В ReportDescriptor мы хотим получить 1 байт данных, соответственно в полученном rx_buf[0] содержатся состояния светодиодов.
Сначала хотел поставить HC-05 (перешитый в RN-42), чтобы была возможность подключения по BT, но все беспроводные клавиатуры (в моем случае) всегда висели на USB-зарядке. Ещё в BT в стандартном HID (в RN-42) только один девайс - либо клавиатура (массив дескриптора для передачи передается по UART в BT-модуль), либо мультимедийное устройство. Не увидел возможности одновременной передачи и клавиатуры и мультимедиа. Возможно, нужно повнимательней почитать.
Про qmk видел, знаю что эту прошивку используют почти все, кто делает кастомы. Настраиваемые уровни через GUI, да и в целом, сообщество реализовало много удобных функций, но хотелось поработать с USB на stm32. Это же хардкорный кастом)
PS: спасибо за ссылку, там как раз описаны проблемы с nkro, о которых я отвечал в комментариях. Поизучаю вопрос с неработающей (у меня) 6й клавишей в 6kro.
Цель данного девайса не в самом девайсе, а в получении опыта с каким-никаким полезным результатом. Я очень надеялся, что даже по поверхностной оценке трудозатрат это будет явно видно. Если просуммировать все потраченное время и посчитать "упущенную экономическую выгоду", то можно купить не один десяток готовых клавиатур. Сделал просто потому что "смог". Кто-то марки собирает, кто-то авиамоделированием занимается, а у меня такое "странное" хобби, которое приносит не экономическую выгоду, а эмоциональное удовлетворение.
Да, как ответил товарищ Grey83, прямоугольные сделать проще. Я не был уверен, что такая поделка дойдет до конца, но если это случится (а это случилось), не хотелось иметь непонятных проблем с одной клавишей, которая нажимается достаточно часто (по сравнению с длинным RightShift, который без стабилизаторов себя чувствует не на 100%). Подумал, что "в следующей версии сделаю лучше, но никакой следующей версии не планирую, наигрался =)
Да, но к сожалению такие свитчи появились на площадках, вроде Али, позже, чем я заказал 1350 (Ориентировочно декабрь 2021). Всегда есть вероятность, что я плохо искал, но на тот момент kailh свитчи были на Али только у одного продавца.
В тестовом варианте был единый длинный пробел, который надевался на оба переключателя (кстати, клавиши опрашиваются независимо), но нажимается такая конструкция очень "криво". Один переключатель нажат, второй не нажался, все перекашивает и переключатели начинают покусывать. Если в центр нажимать, то необходимо прикладывать двойное усилие, в общем, моя первостепенная такая идея провалилась.
Как я понял из стандарта, HID дескриптор отчёта для клавиатуры определен однозначно. Чтобы использовать полный пакет в 64 байта, нужно становиться Custom HID девайсом и обрабатывать данные на уровне софта на ПК.
Я конечно могу ошибаться, но как минимум, любая нестандартная конфигурация HID клавиатуры не будет работать в BIOS.
Я неспешно собирал проект (от и до) 2 года. Было несколько "волн" вдохновения, а иногда забрасывал все это дело в ящик и занимался более интересными вещами
Использовать Custom HID, а на ПК ответная часть, но тогда увеличится input lag
Организовать внутри несколько точек монтирования, в таком варианте каждая точка монтирования добавляет 6 одновременно нажатых клавиш. Стандарт HID не предоставляет возможности сделать "стандартную NKRO" клавиатуру, только с такими "Хаками". Так делают почти все бренды. 2 точки монтирования для клавиатуры я делал, с моей не решённой проблемой получалось 10KRO
Да, свичи упираются в плату. Хочу вырезать мягкую подложку на лазере, но времени совершенно нет. Эту статью выдавливал из себя 2 месяца. Внизу платы у каждой кнопки есть опора в нижней части корпуса. Туда тоже нужна мягкая подложка.
Тут скорее не разработка ради клавиатуры, а клавиатура ради разработки и изучения.
Если рассматривать эту клавиатуру, как цель, то она мало того, что не стоит того, так и выходит дороже готовой от Logitech (на момент когда та стоила до 10к).
А так сейчас стоят low-profile brown; подсветка символов, а не щелей (на фото видна подсветка щелей, но я по максимуму закрыл кейкапом свет и глазами этот ареол не виден, так как это мне тоже не нравится на ноутбуке); спасибо за идею по изменению подсветки при смене языка, нужно будет подумать над этим, идея здравая. А остальное, это всего первая и последняя попытка, повторять вышеуказанное в статье я не планирую)
В целом, можно, но сейчас уже продаются кейкапы для таких свичей. По гравировке, меня не сильно устроило качество полученного результата.
Эти магические числа формируются в соответствии со стандартом usb
в конце статьи в UPD есть ссылка на гит, там в архиве Soft весь проект CubeMX+Keil
Cube лучше не настраивать, при пересборке проекта, все изменения в usb перетираются.
в usbd_hid.c:
USBD_ClassTypeDef USBD_HID =
{
USBD_HID_Init,
USBD_HID_DeInit,
USBD_HID_Setup,
NULL, /EP0_TxSent/
NULL, /EP0_RxReady/
USBD_HID_DataIn, /DataIn/
USBD_HID_DataOut, /DataOut/
NULL, /*SOF */
NULL,
NULL,
USBD_HID_GetHSCfgDesc,
USBD_HID_GetFSCfgDesc,
USBD_HID_GetOtherSpeedCfgDesc,
USBD_HID_GetDeviceQualifierDesc,
};
В целом, прошивка занимает половину памяти, можно организовать MassStorage девайс (на 32кб, что бы он появлялся только при определенных комбинациях), который будет виден как флешка. Но пока не думал о таком.
Планировал разобраться с MassStorage для реализации обновления прошивки, но пока нет времени
Статус состояний Lock-ов сообщает операционная система. Т.е. если подключить две клавиатуры и на одной из них нажимать CapsLock, то статус будет отображён на каждой
Спасибо, видел реализацию на SPI, но мне хотелось поработать с таймерами на STM32 (сейчас работаю с ШИМ, полумостами и аппаратной защитой), спасибо за информацию, нужно изучить вопрос.
А еще пока писал статью, осознал, что массивом из START_COUNT[48] для генерации сброса, можно было пренебречь. Есть нулевой байт для ШИМ в STOP_COUNT, а так как вызов передачи происходит раз в 10мс, то сброс будет точно реализован.
Для STM я использую HAL. В тех задачах, которые не требуют высокого быстродействия или оптимизации, имхо, проще использовать HAL.
Битовая последовательности задана в
HID_KEYBOARD_ReportDesc
rx_buf - указатель на массив uint8_t. В ReportDescriptor мы хотим получить 1 байт данных, соответственно в полученном rx_buf[0] содержатся состояния светодиодов.
L_NUMLOCK - 0й бит;
L_CAPSLOCK - 1й бит;
L_SCROLLLOCK - 2й бит
Константы:
HID_EPOUT_ADDR = 0x01U
HID_EPOUT_SIZE = 0x01U
Сначала хотел поставить HC-05 (перешитый в RN-42), чтобы была возможность подключения по BT, но все беспроводные клавиатуры (в моем случае) всегда висели на USB-зарядке. Ещё в BT в стандартном HID (в RN-42) только один девайс - либо клавиатура (массив дескриптора для передачи передается по UART в BT-модуль), либо мультимедийное устройство. Не увидел возможности одновременной передачи и клавиатуры и мультимедиа. Возможно, нужно повнимательней почитать.
Про qmk видел, знаю что эту прошивку используют почти все, кто делает кастомы. Настраиваемые уровни через GUI, да и в целом, сообщество реализовало много удобных функций, но хотелось поработать с USB на stm32. Это же хардкорный кастом)
PS: спасибо за ссылку, там как раз описаны проблемы с nkro, о которых я отвечал в комментариях. Поизучаю вопрос с неработающей (у меня) 6й клавишей в 6kro.
Цель данного девайса не в самом девайсе, а в получении опыта с каким-никаким полезным результатом. Я очень надеялся, что даже по поверхностной оценке трудозатрат это будет явно видно. Если просуммировать все потраченное время и посчитать "упущенную экономическую выгоду", то можно купить не один десяток готовых клавиатур. Сделал просто потому что "смог". Кто-то марки собирает, кто-то авиамоделированием занимается, а у меня такое "странное" хобби, которое приносит не экономическую выгоду, а эмоциональное удовлетворение.
Да, как ответил товарищ Grey83, прямоугольные сделать проще. Я не был уверен, что такая поделка дойдет до конца, но если это случится (а это случилось), не хотелось иметь непонятных проблем с одной клавишей, которая нажимается достаточно часто (по сравнению с длинным RightShift, который без стабилизаторов себя чувствует не на 100%). Подумал, что "в следующей версии сделаю лучше, но никакой следующей версии не планирую, наигрался =)
Да, но к сожалению такие свитчи появились на площадках, вроде Али, позже, чем я заказал 1350 (Ориентировочно декабрь 2021). Всегда есть вероятность, что я плохо искал, но на тот момент kailh свитчи были на Али только у одного продавца.
Как написал в статье, когда проектировал печатную плату, стабилизаторов под низкопрофильные переключатели не было в продаже
В тестовом варианте был единый длинный пробел, который надевался на оба переключателя (кстати, клавиши опрашиваются независимо), но нажимается такая конструкция очень "криво". Один переключатель нажат, второй не нажался, все перекашивает и переключатели начинают покусывать. Если в центр нажимать, то необходимо прикладывать двойное усилие, в общем, моя первостепенная такая идея провалилась.
Как я понял из стандарта, HID дескриптор отчёта для клавиатуры определен однозначно. Чтобы использовать полный пакет в 64 байта, нужно становиться Custom HID девайсом и обрабатывать данные на уровне софта на ПК.
Я конечно могу ошибаться, но как минимум, любая нестандартная конфигурация HID клавиатуры не будет работать в BIOS.
Я неспешно собирал проект (от и до) 2 года. Было несколько "волн" вдохновения, а иногда забрасывал все это дело в ящик и занимался более интересными вещами
Ничто не мешает организовать Nx6KRO.
NKRO можно организовать двумя способами:
Использовать Custom HID, а на ПК ответная часть, но тогда увеличится input lag
Организовать внутри несколько точек монтирования, в таком варианте каждая точка монтирования добавляет 6 одновременно нажатых клавиш. Стандарт HID не предоставляет возможности сделать "стандартную NKRO" клавиатуру, только с такими "Хаками". Так делают почти все бренды. 2 точки монтирования для клавиатуры я делал, с моей не решённой проблемой получалось 10KRO
Да, свичи упираются в плату. Хочу вырезать мягкую подложку на лазере, но времени совершенно нет. Эту статью выдавливал из себя 2 месяца. Внизу платы у каждой кнопки есть опора в нижней части корпуса. Туда тоже нужна мягкая подложка.
Тут скорее не разработка ради клавиатуры, а клавиатура ради разработки и изучения.
Если рассматривать эту клавиатуру, как цель, то она мало того, что не стоит того, так и выходит дороже готовой от Logitech (на момент когда та стоила до 10к).
А так сейчас стоят low-profile brown; подсветка символов, а не щелей (на фото видна подсветка щелей, но я по максимуму закрыл кейкапом свет и глазами этот ареол не виден, так как это мне тоже не нравится на ноутбуке); спасибо за идею по изменению подсветки при смене языка, нужно будет подумать над этим, идея здравая. А остальное, это всего первая и последняя попытка, повторять вышеуказанное в статье я не планирую)