Как стать автором
Обновить
31
0

Пользователь

Отправить сообщение

В целом, можно, но сейчас уже продаются кейкапы для таких свичей. По гравировке, меня не сильно устроило качество полученного результата.

Эти магические числа формируются в соответствии со стандартом 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 можно организовать двумя способами:

  1. Использовать Custom HID, а на ПК ответная часть, но тогда увеличится input lag

  2. Организовать внутри несколько точек монтирования, в таком варианте каждая точка монтирования добавляет 6 одновременно нажатых клавиш. Стандарт HID не предоставляет возможности сделать "стандартную NKRO" клавиатуру, только с такими "Хаками". Так делают почти все бренды. 2 точки монтирования для клавиатуры я делал, с моей не решённой проблемой получалось 10KRO

Да, свичи упираются в плату. Хочу вырезать мягкую подложку на лазере, но времени совершенно нет. Эту статью выдавливал из себя 2 месяца. Внизу платы у каждой кнопки есть опора в нижней части корпуса. Туда тоже нужна мягкая подложка.

Тут скорее не разработка ради клавиатуры, а клавиатура ради разработки и изучения.

Если рассматривать эту клавиатуру, как цель, то она мало того, что не стоит того, так и выходит дороже готовой от Logitech (на момент когда та стоила до 10к).

А так сейчас стоят low-profile brown; подсветка символов, а не щелей (на фото видна подсветка щелей, но я по максимуму закрыл кейкапом свет и глазами этот ареол не виден, так как это мне тоже не нравится на ноутбуке); спасибо за идею по изменению подсветки при смене языка, нужно будет подумать над этим, идея здравая. А остальное, это всего первая и последняя попытка, повторять вышеуказанное в статье я не планирую)

1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность