Библиотека USB Composite (HID / MIDI / MASS MASS)

Арпрос
Солнце 03 декабря 2017 г. 20:32
Я упорно трудился, чтобы принести филиал Addmidihid базирующегося в либмаплее ядро до настоящего времени, и даже сделал запрос на притяжение, чтобы объединить это в главную филиал, но потом сегодня я понял, что для технического обслуживания и настройки будет проще поместить все вещи в отдельную библиотеку, используя тот факт, что последовательная поддержка USB -середины Core имеет __weak ссылки, где это важно.

Итак, вот библиотека USB, совместимая с основным ядром на основе Libmaple: (Библиотека также связана с Ядро Роджера.)

По состоянию на февраль 2018 года библиотека поддерживает:
  • USB Hid
  • Серийный (используйте композитоэральные, а не последовательные)
  • USB MIDI
  • Xbox 360 Controller
  • Массовое хранилище
Вы можете делать различные комбинации составных комбинаций, E.глин., Hid+Serial, Mass Storage+Hid и т. Д.

Вот какой -то пример кода: адаптер из игрового порта IBM до джойстика USB:
#include // https://github.com/arpruss/GameControllersSTM32 #include USBHID HID; // declare HID plugin instance HIDJoystick Joystick(HID); // declare Joystick profile instance GamePortController controller(PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7); void setup() { // to composite serial, use USBHID_begin_with_serial() instead USBHID.begin(HID_JOYSTICK); // other options: HID_KEYBOARD, HID_MOUSE, HID_KEYBOARD_JOYSTICK, HID_KEYBOARD_MOUSE, HID_KEYBOARD_MOUSE_JOYSTICK pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, 1); controller.begin(); Joystick.setManualReportMode(true); // aggregate data before sending } void loop() { GameControllerData_t data; if (controller.read(&data)) { Joystick.X(data.joystickX); Joystick.Y(data.joystickY); Joystick.Xrotate(data.cX); Joystick.sliderRight(data.shoulderRight); uint8_t mask = 1; for (int i=1; i<=8; i++, mask <<= 1) Joystick.button(i, (data.buttons & mask) != 0); Joystick.send(); } delay(10); }

Rogerclark
Солнце 03 декабря 2017 г. 9:16 вечера
Любая идея, как мы могли бы остановить код, висящий, если вызовы сделаны в сериал ?

Арпрос
Солнце 03 декабря 2017 г. 22:51
[Rogerclark - Солнце 03 декабря 2017 г. 9:16 вечера] - Любая идея, как мы могли бы остановить код, висящий, если вызовы сделаны в сериал ?
На самом деле, моя записка о подвешении была чрезмерно паникой: когда я на самом деле попробовал, не было никакого виса.

Тем не менее, чтобы быть в безопасности, я только что добавил класс UsserialNop, который расширяет USBERIAL и ничего не делает, и сделал код инициирования для HID и MIDI SEREWRITE с помощью экземпляра USBERIALNOP. Мы по -прежнему тратят вспышку, имея последовательный код, но, по крайней мере, у нас не будет проблем с помехами.

Rogerclark
Солнце 03 декабря 2017 11:59
ХОРОШО

Спасибо

Я попробую, когда получу шанс (возможно, сегодня вечером)

Арпрос
Пн декабря 04, 2017, 15:57
Кстати, делает сериал.begin () звонок должен быть в вариантах/*/wirish/boards_setup.CPP: board_setup_usb ()? Все эскизы, на которые я смотрел или написал, которые используют серийный вызов сериал.begin () в setup () в любом случае.

Если сериал.Begin () вызов был удален из глобального кода настройки в ядре, и если кто -то оставил проблемы по использованию сериала по ошибке для пользователя, чтобы беспокоиться о выходе, то линкер не будет ссылаться в USBERIAL и USBCDCACM, а также библиотеку и библиотеки. Пользователи сохранят Flash. Это один призыв к серийному.begin () в плате по умолчанию_setup_usb (), который заставляет линкера втягивать серийный код USB.

Что странно, так это то, что board_setup_usb () объявляется __weak, и я переопределяю его в библиотеке. Переопределение работает, но глупый (?) Линкер по -прежнему втягивает зависимости для исходного __weak board_setup_usb (). Это происходит даже в режиме LTO, который не имеет для меня смысла для меня. Но если кто -то комментирует сериал.Begin () строка в ядре, весь этот ненужный код исчезает.

Арпрос
Пн, 04 декабря 2017 г., 17:21
Не обращайте внимания на предложение удалить сериал.начинать(). Это необходимо для функциональности серийного разрешения. :-(

Было бы неплохо найти способ переопределить его, не привлекая ненужных зависимостей.

Rogerclark
Пн декабря, 04, 2017, 19:56
Да...
К сожалению, сериал.начинание очень важно, чтобы ядро ​​было вызвано для перезагрузки через IDE

Я смотрел, чтобы увидеть, можно ли отправлять команды через HID, который можно использовать для перезагрузки, но я не смог найти много полезной информации о том, как это можно сделать, используя универсальный драйвер Hid Hid

Арпрос
Вторник 05 декабря 2017 г. 13:18
Может быть, лучшим решением было бы добавить вариант меню, который отключает USB -сериал в сердечнике. Это было бы похоже на ветвь Addmidihid, но легче поддерживать, так как вся реальная поддержка MIDI и HID будет выдвинута в библиотеки, и с двумя вариантами меню USB вместо четырех или пяти. И как только кто -то приложит усилия, он может написать серийную композитную библиотеку HID+.

Rogerclark
Вторник 05 декабря 2017 г., 19:59
Было бы хорошо, если бы мы могли добавить меню, но это не так просто, потому что некоторые из методов загрузки уже не включают сериал USB.

Таким образом, это сломало бы вещи для любого, кто в настоящее время использует серийную загрузку или загрузку BMP, если бы он был не дефолт на включение.

К сожалению, система меню в IDE не каскадна, поэтому невозможно просто иметь это в качестве варианта для методов загрузки, которые в настоящее время включают сериал USB, включенный в сборку.


Из того, что я понимаю, изначально включенная USB -сериал, означает, что код больше, но ваш код отключает его.

Я не вижу в этом большой проблемы, потому что, наоборот, кто -то может захотеть использовать HID USB для начала, но затем переключиться на USB -сериал позже в их коде. В этом случае USB -сериал должен быть составлен в.

У большинства Bluepills есть 128K, поэтому я не думаю, что еще 5 тыс. Все время - большая проблема


Если проблема заключается в том, что USB -сериал запускается, а затем снова останавливается (потому что библиотека HID отключает последовательный), возможно, есть способ добавить глобальный флаг, который устанавливается как часть, если библиотека HID, которая предотвращает код вызовов последовательным.начинать () в ядре.

Арпрос
Чт, 07 декабря 2017 г., 3:51 утра
Я заменил три библиотеки клавиатуры / джойстик / клавиш-Mouse-Joystick на Библиотека HID HID с единым USB. Это требует одной строки инициализации для выбора между параметрами: HID.begin(device); // where HID is your instance of USBHID

Rogerclark
Чт, 07 декабря 2017 г., 4:05 утра
Ух ты

Хорошо выглядит

Я постараюсь проверить, когда у меня будет время, вероятно, на выходных

Rogerclark
Чт, 07 декабря 2017 г., 4:06 утра
Ммм

Ваша ссылка не работает :-(

Это этот

https: // github.com/arpruss/usbhid_stm32f1

Арпрос
Чт, 07 декабря 2017 г., 5:12
Да, это этот.

Одна проблема, которую я не понял, это как сбросить USB -соединение. Скрытый.Begin (usb_hid_joystick); Скрытый.конец(); Скрытый.начинать (usb_hid_keyboard); не работает, по крайней мере, не с Windows. Windows по -прежнему видит устройство джойстика, а не клавиатуру, хотя HID.begin () включает код сброса PA12.

Арпрос
Чт, 07 декабря 2017 г., 16:55
Глядя на код загрузчика, я выяснил вопрос о том, как сбросить соединение, чтобы переключить идентификаторы скрыта: теперь я выключаю периферийное устройство USB в USB_HID_DISABLE () и USB_MIDI_DISABLE (). Вероятно, что -то подобное должно быть сделано в ядре в отношении серийных.

Незначительная проблема, которую я заметил, заключается в том, что если вы отправляете данные на клавиатуру (и, вероятно, другие устройства) слишком рано после скрытия.begin (), он исчезнет. Пауза на 500 мс достаточно хороша.

Rogerclark
Чт, 07 декабря 2017 г., 19:56
Похоже, у сериала такая же проблема.

Отправка слишком рано после запуска USB, что приводит к потерянию данных.

Арпрос
Пт 08 декабря 2017 г. 1:55 утра
Я опубликовал запрос на вытягивание на USB с сериалом.конец().

Rogerclark
Пт 08 декабря 2017 г. 3:21 утра
ХОРОШО

Я немного снег с пиарами в данный момент.

Есть 2 срочных, потому что провод работает не правильно и не является тоном ()

И, кажется, есть другие разные PR, некоторые из которых я откажусь

Я также нахожусь в центре внимания, так как это было почти 300 коммитов...
Так что мне нужно подтвердить слияние с Master (плюс некоторые ручные изменения) в порядке.


Если ваш пиар - это просто добавление LIB, я смогу взглянуть на выходные.

Арпрос
Пт 08 декабря 2017 г. 4:06 утра
Нет, мой пиар просто для того, чтобы привести вниз USB, когда называется сериал Disable Function. Это необходимо, чтобы можно было отключить и запустить другой режим USB, E.глин., переключение от сериала на скрытое или от сериала на MIDI. Это около пяти строк кода, переносимых из USB -кода USB -загрузчика.

Я еще не сливаюсь в библиотеках, так как хотел бы иметь возможность улучшить их в течение следующих нескольких недель, так как у меня есть проект, который будет их использовать, поэтому у меня может быть больше идей для них.

Я закрыл пиар, чтобы слияние в филиале Addmidihid. Если вы хотите, я могу дать вам пиар, чтобы поднять ветвь Addmidihid с Master, но я думаю, что эта ветвь устарела, учитывая библиотеки.

Rogerclark
Пт 08 декабря 2017 г. 6:24 утра
Если библиотеки так же хороши или лучше, чем ветвь, то мы можем использовать только библиотеки

Арпрос
Сб 09 декабря 2017 г. 16:03
На данный момент библиотеки лучше, чем филиал.

Одна вещь, которую я не смог работать-она также не работала в филиале-это двусторонний Hid Raw. У меня работает одностороннее (устройство на размещение), но функция прерывания приема не вызывается.

Арпрос
Сб 09 декабря 2017 г. 18:39
Hid Raw Stuff расстраивает. USB MIDI работает в обоих направлениях просто отлично, и я не вижу существенной разницы в коде. Я попытался отправить данные HID RAW как из Pywinusb, так и Android HID -терминала. Осциллограф показывает, что на линии есть данные, но я не знаю, как интерпретировать данные.

Если у кого-то есть идеи о том, как спрятать необработанную работу хоста-хоста, я бы приветствовал вклад. Не то чтобы мне это действительно нужно для чего -либо - просто было бы хорошим завершением библиотеки.

Rogerclark
Сб 09 декабря 2017 г., 19:56
КСТАТИ.

Re: USB Power включает и отключите

Если сериал.END отключает питание в вашем PR, сериал.Начните, чтобы включить питание, так как это должно быть возможно для всех end (), а затем вызовите Begin ()

Я согласен, что перемещение USB -сброса в сериал.Begin () следует исследовать, но у меня не было времени посмотреть на существующий код, чтобы увидеть, есть ли какие -либо ловушки с этим.

Арпрос
Сб 09 декабря 2017 г., 21:30
Сериал.begin () вызывает USB_CDCACM_ENABLE (), который вызывает USB_INIT_USBLIB (), который вызывает (через обратный вызов) USBINIT (), который поднимает периферийное устройство USB.

Сериал.End () В настоящее время вызывает USB_CDCACM_DISABLE (), который, я думаю, должен включить периферийное устройство USB (это делает это в моем PR).

Я склонен думать, что лучшее место для кода сброса USB genic_bootloader для сериала - USB_CDCACM_ENABL. Единственная проблема, которую я предвижу, заключается в том, что если у пользователя есть явный сериал.begin (), тогда будет два вызова в код сброса USB. Я не знаю, это проблема или нет.

Rogerclark
Сб 09 декабря 2017 г. 11:32
Сериал.begin () имеет какой -то код, чтобы предотвратить его делать что -то, если его уже вызвано
if (_hasBegun) return;

Арпрос
Солнце 10 декабря 2017 г. 1:12
О, хорошо. Таким образом, вставка кода сброса в USB_CDCACM_ENABLE () должен работать нормально.

Rogerclark
Солнце 10 декабря 2017 г. 5:32 утра
Мне не нравится функция, чтобы включить USB без очевидного способа вернуть его снова

Я понимаю, что это сделано в другом месте, это просто не очевидно для тех, кто смотрит в код.

Возможно, у нас может быть функция, которая может выполнять как включение и отключение мощности USB, или иметь отдельные функции.

Арпрос
Солнце 10 декабря 2017 г. 6:46
Может быть, некоторые комментарии должны быть просто добавлены. Включение питания происходит только при вызове кода последовательного устройства после того, как куча конфигурационных вещей сделана USBLIB. Я бы не хотел рисковать, чтобы двигаться в другом месте.

ХОРОШО.
Я не хотел перемещать функцию. Так что, возможно, некоторые комментарии были бы полезны для тех, кто расследует USB

Арпрос
Пн 11 декабря 2017 г., 3:44
Я добавил комментарии о Powerdown и Powerup в PR.

Кстати, я до сих пор не могу заставить работать с HARHID для работы, но настройки функций с хост-до девяти теперь работают в филиале FecuteStting библиотеки.

(Теоретически, можно использовать настройку функций хоста-к концу для реализации программного обеспечения сброса.)

Rogerclark
Пн 11 декабря 2017 г. 6:36
Re: Хозяин для размещения

Несколько недель назад я попытался найти, можно ли отправить команду через HID, так как она должна быть двунаправленной, но не нашел ничего полезного

Был пост в Avrfreaks, где кто -то использовал VUSB для HID и хотел отправить команды AVR, но у него, казалось, был контрольно -пропускной пункт с драйверами HID по умолчанию на Windows, и для этой функции могут потребоваться пользовательские драйверы

Арпрос
Пн 11 декабря 2017 г. 14:32
Похоже, что не нужны индивидуальные драйверы. Я использую простой скрипт Python и Pywinusb для отправки отчета о функциях из Windows.

Арпрос
Пн 11 декабря 2017 г., 17:39
Если вы хотите попробовать USB-коммуникацию с хоста-устройством, в филиал USBHID функции USBHID включает в себя примеры/SoftJoystick, который является проектом, который отражается на компьюте. (Это не совсем глупо. Он обеспечивает что -то вроде функциональности Vjoy без необходимости установки драйверов Vjoy, так что вы можете реализовать джойстик в программном обеспечении на ПК. Тем не менее, я не вижу очень хорошего варианта использования, кроме тестирования коммуникаций.)

Чтобы проверить его в Windows, установите на STM32F1, запустите отправить.PY (который нуждается в pywinusb) на ПК, а затем посмотрите в инструменте конфигурации игровых контроллеров в Windows, чтобы увидеть, движется ли джойстик. (Win-R, радость.CPL, введите, нажмите на «Maple», нажмите «Свойства») Еще один тест - соответствует ли строка Fetch предыдущей линии отправки в выходе. $ c:/python36/python send.py HID device (vID=0x1eaf, pID=0x0024, v=0x0200); LeafLabs; Maple, Path: \\?\hid#vid_1eaf&pid_0024#6&149a03ce&2&0000#{4d1e55b2-f16f-11cf-88cb-001111000030} send: [3, 7, 0, 0, 0, 15, 0, 0, 0, 2, 8, 32, 128] fetch: [3, 7, 0, 0, 0, 15, 0, 0, 0, 2, 8, 32, 128]

Rogerclark
Пн 11 декабря 2017 г., 19:15
Прохладный..

Так не могли бы вы отправить команду через HID для перезагрузки ??

Арпрос
Пн 11 декабря 2017 г., 19:47
Ага. Просто добавьте вывод функции в описание скрытого, а затем определите волшебную строку байтов, которая заставляет сбросить, когда он отправляется на устройство.

Но нужно было бы решить, к какому описанию (и) скрыта его добавить, и там будет некоторая потраченная впустую SRAM (40-300 байтов или около того) в зависимости от того, как один его реализовал.

Rogerclark
Пн 11 декабря 2017 г., 19:54
ХОРОШО. это’S не настолько хорош, что ему нужно больше ОЗУ

Также должны быть двоичные инструменты для всех платформ, чтобы отправить эту команду, так как у людей не обязательно установлен Python

Арпрос
Пн 11 декабря 2017 г., 21:28
[Rogerclark - Пн 11 декабря 2017 г., 19:54] - ХОРОШО. это’S не настолько хорош, что ему нужно больше ОЗУ

Также должны быть двоичные инструменты для всех платформ, чтобы отправить эту команду, так как у людей не обязательно установлен Python
Лично я думаю, что это больше проблем, чем стоит. :-) Я бы предпочел просто нажать заглушку или нажать кнопку сброса вместо тестирования вещей на трех платформах.

Rogerclark
Пн 11 декабря 2017 г., 21:53
[Арпрос - Пн 11 декабря 2017 г., 21:28] -
[Rogerclark - Пн 11 декабря 2017 г., 19:54] - ХОРОШО. это’S не настолько хорош, что ему нужно больше ОЗУ

Также должны быть двоичные инструменты для всех платформ, чтобы отправить эту команду, так как у людей не обязательно установлен Python
Лично я думаю, что это больше проблем, чем стоит. :-) Я бы предпочел просто нажать заглушку или нажать кнопку сброса вместо тестирования вещей на трех платформах.
Согласованный

АНВ
Вт 12 декабря 2017 г. 9:12
Для Arduino Leonardo есть библиотека USB -клавиш. Может быть, вы могли бы проверить, как это работает. Я не помню сейчас, но если я найду это, я скажу вам.

Арпрос
Вторник 12 декабря 2017 г., 17:54
Я взял много кода из филиала Libarra111, а теперь библиотека реализует композитное серийное / скрытое устройство с функциональностью сброса с использованием стандартных инструментов загрузки. Из -за последовательной поддержки используется больше вспышки/SRAM, но серийная поддержка должна стоить того.

Единственное, что я не мог понять, - это как переопределить сериал ядра, поэтому в настоящее время, если вы хотите сделать серийный ввод -вывод, вам нужно использовать композит -мощность.

Может быть, можно было бы сделать виртуальный USBERIAL Class и сделать серийный экземпляр __weak в ядре или что -то в этом роде. Я не знаю достаточно о наследовании C ++, чтобы выяснить это прямо сейчас.

АНВ
Вт 12 декабря 2017 г., 19:43
Только что скачанный мастер -филиал. Пример для двух Joysticks не компилируется.
Попробовал USB -клавиатуру. USB HID обнаруживается, но не может быть настроен.
Обнаружен серийный интерфейс и загружается модуль.

Это мой выход DMESG, когда я подключаю устройство.

74281.945860] USB 1-4: Новый полноступный номер USB-устройства 107 с использованием xhci_hcd
[74282.115902] USB 1-4: Новое USB-устройство, Idvendor = 1EAF, IDProduct = 0024
[74282.115904] USB 1-4: Новые строки USB-устройства: MFR = 1, продукт = 2, серийный. = 0
[74282.115905] USB 1-4: Продукт: Maple
[74282.115905] USB 1-4: Производитель: Leaflabs
[74292.251940] cdc_acm 1-4: 1.0: ttyacm0: Устройство USB ACM
[74292.253017] USBHID 1-4: 1.2: не удается добавить устройство HID: -71
[74292.253026] USBHID: зонд 1-4: 1.2 не удалось с ошибкой -71
[74293.769062] cdc_acm 1-4: 1.0: не удалось установить DTR/RTS
[74306.967792] cdc_acm 1-4: 1.0: не удалось установить DTR/RTS
[74306.969538] cdc_acm 1-4: 1.0: не удалось установить DTR/RTS
[74316.062451] cdc_acm 1-4: 1.0: не удалось установить DTR/RTS
[74316.063964] cdc_acm 1-4: 1.0: не удалось установить DTR/RTS
[74322.061371] cdc_acm 1-4: 1.0: не удалось установить DTR/RTS


Исходный код для программы:
#include const uint8_t reportDescription[] = { USB_HID_ABS_MOUSE_REPORT_DESCRIPTOR(USB_HID_MOUSE_REPORT_ID) ,USB_HID_KEYBOARD_REPORT_DESCRIPTOR(USB_HID_KEYBOARD_REPORT_ID) }; HIDAbsMouse mouse; void setup(){ HID.begin(reportDescription, sizeof(reportDescription)); delay(1000); mouse.move(0,0); delay(1000); mouse.press(MOUSE_LEFT); mouse.move(500,500); mouse.release(MOUSE_ALL); mouse.click(MOUSE_RIGHT); } void loop(){ delay(100); mouse.move(16384,16384); Keyboard.write('h'); Keyboard.write('o'); Keyboard.write('l'); Keyboard.write('a'); delay(100); }

Арпрос
Вторник 12 декабря 2017 г. 20:27
[АНВ - Вторник 12 декабря 2017 г., 19:43] - Только что скачанный мастер -филиал. Пример для двух Joysticks не компилируется.
Извините: я изменил API без изменения примера. Сейчас исправлено.
Попробовал USB -клавиатуру. USB HID обнаруживается, но не может быть настроен. Это не хорошо. Я тестировал только в Windows.

1. Знаете ли вы, работает ли Libarra111 USB Core для вас?

2. Можете ли вы попробовать что-то супер-базы, как:
#include void setup() { USB.begin(USB_HID_JOYSTICK); } void loop() { Joystick.X(0); delay(500); Joystick.X(1023); delay(500); }

Арпрос
Вторник 12 декабря 2017 г. 8:44
Вы также можете попробовать решение здесь:
https: // aweirdimagination.net/2015/04/0 ... идентификационные ошибки/

Кроме того, вы можете отправить или опубликовать вывод LSUSB, как в этом посте: https: // bbs.Archlinux.org/viewtopic.PHP ... 2#p1578802

Арпрос
Вт 12 декабря 2017 г. 22:57
Я пробовал это с виртуальной машиной Ubuntu в Windows. Он работает, когда я выключаю сериал в коде (#undef serial_composite в composite_usb.H в текущей кодовой версии), но с серийной и клавиатурой, она не удается.

Арпрос
Ср 13 декабря 2017 г. 1:04
Теперь он работает под Android и в ubuntu VM. Проблема была в дескрипторе, который я схватил из вилки Libarra111.

Mrburnette
Ср 13 декабря 2017 г. 15:41
[Арпрос - Ср 13 декабря 2017 г. 1:04] - Теперь он работает под Android и в ubuntu VM. Проблема была в дескрипторе, который я схватил из вилки Libarra111.
Это действительно интересно.

Я много давно играл с AVR-специфическим Реализация V-USB. Я также играл с ATMEGA32U4 'Micro."

Луча

Арпрос
Ср 13 декабря 2017 г. 16:38
С чем мне нужна помощь, так это выяснить, как сделать отчеты о выходе скрыта (хост-до девиса). Отчеты о функциях HID работают нормально в обоих направлениях.

Конечно, это на самом деле не нужно, кроме, может быть, для скорости и эффективности. Все, что вы можете сделать с выводом, вы можете сделать с отчетом о функциях, я думаю.

АНВ
Ср 13 декабря 2017 г. 18:39
[Арпрос - Ср 13 декабря 2017 г. 1:04] - Теперь он работает под Android и в ubuntu VM. Проблема была в дескрипторе, который я схватил из вилки Libarra111.
Да!! Клавиатура теперь работает под Linux. Если вам нужны тесты или информация USB от настоящих джойстиков, клавиатуры, Mous или MIDI устройства просто спросите меня. Я могу скопировать это для тебя.
я.Эн. Вот информация с настоящей USB -клавиатуры:

Информация о ядре (DMESG) при подключении устройства: [ 579.488436] usb 1-4: new low-speed USB device number 7 using xhci_hcd [ 579.663196] usb 1-4: New USB device found, idVendor=0461, idProduct=4e29 [ 579.663197] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 579.663198] usb 1-4: Product: Wired USB Keyboard [ 579.663199] usb 1-4: Manufacturer: PRIMAX [ 579.666268] input: PRIMAX Wired USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/0003:0461:4E29.0005/input/input19 [ 579.717495] hid-generic 0003:0461:4E29.0005: input,hidraw4: USB HID v1.10 Keyboard [PRIMAX Wired USB Keyboard] on usb-0000:00:14.0-4/input0 [ 579.723297] input: PRIMAX Wired USB Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.1/0003:0461:4E29.0006/input/input20 [ 579.775720] hid-generic 0003:0461:4E29.0006: input,hiddev0,hidraw5: USB HID v1.10 Device [PRIMAX Wired USB Keyboard] on usb-0000:00:14.0-4/input1

АНВ
Ср 13 декабря 2017 г. 18:59
[Арпрос - Ср 13 декабря 2017 г., 16:38] - С чем мне нужна помощь, так это выяснить, как сделать отчеты о выходе скрыта (хост-до девиса). Отчеты о функциях HID работают нормально в обоих направлениях.

Конечно, это на самом деле не нужно, кроме, может быть, для скорости и эффективности. Все, что вы можете сделать с выводом, вы можете сделать с отчетом о функциях, я думаю.
Может быть, вы могли бы проверить библиотеку HID-проекта https: // github.com/Nicohood/Hid
Он работает OK. Смотрите этот пример (я проверил его с помощью Arduino Leonardo и работает ОК):
/* Copyright (c) 2014-2015 NicoHood See the readme for credit to other people. KeyboardLed example Press a button to toogle caps lock. Caps lock state is represented by the onboard led. Leds are only supported on single report HID devices. See HID Project documentation for more information. https://github.com/NicoHood/HID/wiki/Keyboard-API */ #include "HID-Project.h" const int pinLed = LED_BUILTIN; const int pinButton = 2; void setup() { pinMode(pinLed, OUTPUT); pinMode(pinButton, INPUT_PULLUP); // Sends a clean report to the host. This is important on any Arduino type. BootKeyboard.begin(); } void loop() { // Update Led equal to the caps lock state. // Keep in mind that on a 16u2 and Arduino Micro HIGH and LOW for TX/RX Leds are inverted. if (BootKeyboard.getLeds() & LED_CAPS_LOCK) digitalWrite(pinLed, HIGH); else digitalWrite(pinLed, LOW); // Trigger caps lock manually via button if (!digitalRead(pinButton)) { BootKeyboard.write(KEY_CAPS_LOCK); // Simple debounce delay(300); } }

Арпрос
Ср 13 декабря 2017 г., 19:32
[АНВ - Ср 13 декабря 2017 г. 18:39] -
[Арпрос - Ср 13 декабря 2017 г. 1:04] - Теперь он работает под Android и в ubuntu VM. Проблема была в дескрипторе, который я схватил из вилки Libarra111.
Да!! Клавиатура теперь работает под Linux.
Но мои изменения сломали отчеты о функциях на Windows. Я сделал еще несколько изменений, и теперь это работает как под Windows, так и под Android. Вы можете проверить Linux? (Я знаю, что Android - это Linux, но он может использовать другие драйверы USB.)

Арпрос
Ср 13 декабря 2017 г., 21:28
Отчеты о выводе сейчас работают. Мне действительно не нужно было делать ничего особенного, когда я исправил дескрипторы: под капотом они работают так же, как отчеты о функциях. Я немного узнаю о USB, когда иду.

Rogerclark
Ср 13 декабря 2017 г. 22:45
Просто мысль, но я заметил, что кто -то спрашивает о массовом хранении USB...

Я помню, что был какой -то старый код с форума Leaflabs, который я давно пробовал.

Я предполагаю, что теоретически мы могли бы добавить USB Mass Storage в качестве библиотеки ???

Арпрос
Чт 14 декабря 2017 г. 1:12
Кто -то, безусловно, мог бы добавить это. Я не хочу делать это сам, так как у меня нет варианта использования.

Rogerclark
Чт 14 декабря 2017 г. 3:38 утра
Не беспокойся

Если кто -то еще этого хочет, он может добавить это

Арпрос
Солнце 17 декабря 2017 г. 15:49
Я внес много изменений в библиотеку за последние пару дней.

1. Общедоступные макросы USB_HID_XXX были переименованы в HID_XXX.
2. Основной экземпляр USBDevice теперь должен упоминаться как USB вместо HID.
3. Добавлено устройство управления потребителем (объем, пауза/игра, яркости и т. Д.). См. Пример потребителя.
4. Улучшение управления потоком для хоста до девизии.

Арпрос
Пн, 18 декабря 2017 г. 15:40
Добавлена ​​поддержка серийного номера в библиотеку. Серийный номер по умолчанию 00000000000000000001. Это может быть указано в USB.begin () звонок. Вы даже можете сделать это идентификатором устройства, но тогда вы теряете любую потенциальную полезность, которую он может иметь в криптографических целях.

Rogerclark
Пн, 18 декабря 2017 г. 20:19
КСТАТИ.

Я вытащил ваши изменения для мощности USB, на свою локальную машину, а затем вручную проверил файлы инструментов (от моего локального мастера), которые также были изменены вашим пиаром, но я думаю, что если я объединю это обратно в свой локальный мастер (голова ), он отслеживает изменения в файлах инструментов, как если бы они были изменены дважды.

Поэтому я думаю, что мне нужно будет начать снова и вручную обновить отдельные USB -файлы, в противном случае история GIT сбивает с толку, поскольку в нем есть эти изменения в инструментах, которые ненужны

АНВ
Вт 19 декабря 2017 г. 9:41
[Арпрос - Пн, 18 декабря 2017 г. 15:40] - Добавлена ​​поддержка серийного номера в библиотеку. Серийный номер по умолчанию 00000000000000000001. Это может быть указано в USB.begin () звонок. Вы даже можете сделать это идентификатором устройства, но тогда вы теряете любую потенциальную полезность, которую он может иметь в криптографических целях.
Отличная работа. Возможно ли также назначить текстовую строку устройства?

Арпрос
Вторник 19 декабря 2017 г. 14:50
Что ты имеешь в виду?

АНВ
Вторник 19 декабря 2017 г. 16:38
[Арпрос - Вторник 19 декабря 2017 г. 14:50] - Что ты имеешь в виду?
Я говорю о струнах ASCII, которые описывают устройства:
Bus 001 Device 004: ID 0bda:57f3 Realtek Semiconductor Corp. <---webcam Bus 001 Device 003: ID 8087:0a2a Intel Corp. <-- bluetooth Bus 001 Device 007: ID 054c:0268 Sony Corp. Batoh Device / PlayStation 3 Controller <-- PS3 joystick Bus 001 Device 005: ID 0079:0006 DragonRise Inc. PC TWIN SHOCK Gamepad <-- arkade joystick Bus 001 Device 006: ID 1eaf:0024 <-- STM32

Арпрос
Ср 20 декабря 2017 г., 2:17
Конечно. Когда вы звоните USB.begin (), вы можете сделать что -то вроде USB.Begin (hid_joystick, 0, 0, «Я сделал это», «Мой забавный джойстик»). Смотрите USBHID.H для всех параметров. Если вы хотите, вы можете заменить 0,0 на любимое видео и пид, E.глин., Чтобы обмануть ОС, думая, что у тебя есть другое устройство, чем ты.

Арпрос
Чт 21 декабря 2017 г. 16:47
Я только что переключил PID по умолчанию с 0x24 на 0x04, чтобы соответствовать стандартному PID PID.

Арпрос
Ср. 03 января 2018 г. 18:06
Я добавил опцию без ожидания для вывода/функции хоста-хост-до девиза, чтобы USB HID-обработчик молча обновлял буферы вывода/функции в фоновом режиме без необходимости опроса, чтобы гарантировать, что эскиз не пропускает данные.

И добавил пример с клавиатурой, который повторяет статус светодиодов клавиатуры в сериал.

АНВ
Чт, 04 января 2018 г. 8:40 утра
[Арпрос - Ср. 03 января 2018 г. 18:06] - Я добавил опцию без ожидания для вывода/функции хоста-хост-до девиза, чтобы USB HID-обработчик молча обновлял буферы вывода/функции в фоновом режиме без необходимости опроса, чтобы гарантировать, что эскиз не пропускает данные.

И добавил пример с клавиатурой, который повторяет статус светодиодов клавиатуры в сериал.
Отличная работа!

Арпрос
Солнце 07 января 2018 г. 16:17
Я изменил основной класс с USBDevice на USBHIDDEVICE и его экземпляр с USB на USBHID. Я постараюсь сделать это последним изменением, которое нарушает существующий код, который зависит от функций высокого уровня в библиотеке, но это необходимо для будущей совместимости с некоторыми не-скрытыми устройствами.

Арпрос
Солнце 07 января 2018 г., 17:22
Я интегрировал простой эмулятор контроллера Xbox360. См. Пример X360.

Он не составлен с серийной поддержкой, в отличие от стандартных материалов USBHID.

Арпрос
Солнце 07 января 2018 г., 17:43
Я также бросил USB MIDI в библиотеку USBHID (которая сейчас несколько плохо названа). См. Пример Mididemo.

Арпрос
Солнце 07 января 2018 18:47
И я только что попробовал серийный/хитрый композит на победе 8.1 машина. С установленным серийным драйвером Maple HID не работает. Без кленового серийного драйвера сериал не работает. :-(

Я также добавил метод SetSerial (), который позволяет вам отключить композиточную поддержку, которая может быть полезна для OSES, таких как Win 8.1. Просто позвоните USBHID.SetSerial (0) перед USBHID.начинать().

Арпрос
Сб 20 января 2018 г. 3:31
Добавлена ​​поддержка клавиатуры загрузки. См. Пример Bootkeyboard.

Арпрос
Солнце 21 января 2018 г. 15:12
Я сделал API -интерфейсы отчета о выводе и функциях немного приятнее использования. В результате я смог проще всего запускать светодиоды поддержки клавиатуры и ботинок. Теперь вы можете сделать: USBHID.begin(HID_KEYBOARD); Keyboard.begin(); ... ledState = Keyboard.getLEDs();

Арпрос
Чт, 01 февраля 2018 г., 4:05
[Rogerclark - Ср 13 декабря 2017 г. 22:45] - Просто мысль, но я заметил, что кто -то спрашивает о массовом хранении USB...

Я помню, что был какой -то старый код с форума Leaflabs, который я давно пробовал.

Я предполагаю, что теоретически мы могли бы добавить USB Mass Storage в качестве библиотеки ???
В «обобщаемом» филиале библиотеки у меня теперь есть рабочий код массового хранения. Я создал 12 -километровый диск с оперативной памятью, размещенный на STM32F1 и успешно отформатировал его с взломанной версией MKDOSFS. Однако API для кода массового хранения изменится, однако.

«Обобщаемая» ветвь предназначена для того, чтобы позволить смешать и соответствовать различным «частям» композитного USB -устройства, E.глин., массовое хранилище + HID + серийное, или MIDI + серийный и т. Д. Не все комбинации можно сработать. (E.глин., Xbox360 + Serial не работает.)

Rogerclark
Чт 01 февраля 2018 г. 9:38 утра
очень круто

Арпрос
Пт. 02 февраля 2018 г. 2:48
Я объединился в изменениях. Новая библиотека использует меньше оперативной памяти, но может делать всевозможные крутые вещи, такие как HID+MassStorage и т. Д. Существуют ограничения на то, что работают комбинации, а проб и ошибка могут потребоваться. Поскольку возможно много комбинаций, а изменения в библиотеке были настолько тяжелыми, что есть довольно хорошие шансы на ошибки. :-( Но, по крайней мере, я сделал API, совместимый с предыдущей версией библиотеки.

Код массового хранения основан на коде Джо Фернера. Забавный пример кода массового хранения - примеры/масса, что, вероятно, является самым бесполезным USB -диском в мире, поддерживаемым 12 КБ SRAM в STM32. Привод предварительно форматируется, чтобы представить как крошечный диск FAT12, и на самом деле, кажется, работает в Windows 10.

Вот пример того, как настроить клавиатуру/мышь/джойстик + массовый магазин: #include #include // supply driveSize, readFunction(offset, buff, len) and writeFunction(offset, buff, len) void setup() { MassStorage.setDrive(0, driveSize, readFunction, writeFunction); MassStorage.registerComponent(); USBHID.setReportDescriptor(HID_KEYBOARD_MOUSE_JOYSTICK); USBHID.registerComponent(); USBComposite.begin(); Keyboard.println("hello"); } void loop() { MassStorage.loop(); }

Rogerclark
Пт. 02 февраля 2018 г. 5:22
Замечательный

Я попробую на выходных, когда я получу свободное время.....

Zoomx
Пт, 02 февраля 2018 г. 8:10
Свободное время! Свободное время! Мое королевство в свободное время!

Я тоже попробую!


Редактировать:

Просто базовый тест.
Получил библиотеку из обобщаемой ветви (в главной ветви нет примеров массового хранения)
Загружено массовое пример, который он не компилируется, поскольку в массовом хранении.H есть ссылка на USBComposite.H Но есть только файл CPP.
Итак, я получил недостающий файл из главной ветви и компилируется.

michael_l
Пт. 02 февраля 2018 12:25
Очень хорошая работа.

Таким образом, можно было бы установить SD -карту, также просто реализуя функции чтения и записи ? Можно использовать также резки FS и использовать флэш -память платы, хотя места не так много места .

Арпрос
Пт. 02 февраля 2018 г. 16:07
[michael_l - Пт. 02 февраля 2018 12:25] - Таким образом, можно было бы установить SD -карту, также просто реализуя функции чтения и записи ?
Да: должно быть очень просто (вам также нужно прочитать способность, конечно).

Я хотел попробовать это сегодня утром, но я не мог получить SDFAT (либо официальная версия, либо версия Виктора), чтобы узнать любую из двух карт, которые я попробовал. Я думаю, что мой адаптер SD -карты может быть сломан.
Можно использовать также резки FS и использовать флэш -память платы, хотя места не так много места . Верно.

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

michael_l
Пт, 02 февраля 2018 г., 16:22
[Арпрос - Пт. 02 февраля 2018 г. 16:07] -
[michael_l - Пт. 02 февраля 2018 12:25] - Таким образом, можно было бы установить SD -карту, также просто реализуя функции чтения и записи ?
Да: должно быть очень просто (вам также нужно прочитать способность, конечно).

Я хотел попробовать это сегодня утром, но я не мог получить SDFAT (либо официальная версия, либо версия Виктора), чтобы узнать любую из двух карт, которые я попробовал. Я думаю, что мой адаптер SD -карты может быть сломан.
Можно использовать также резки FS и использовать флэш -память платы, хотя места не так много места . Верно.

Кроме того, если вы просто хотите, чтобы у хоста имелся доступ только для чтения, вы можете просто использовать Flash прямо с жирной системой и включить изображение диска. Может быть полезен для распределения небольшого драйвера или сценария, который идет с устройством, я полагаю.
Я взломал ранее Speffs для работы с WDXXX SPI Flash Memories на STM32DUINO. Он работает, но код немного * диван * отрывочный. Это на самом деле не быстрый FS, но возможна для небольших проектов. Вместе с MSC, который сделает хорошее дополнение.

Интересно, есть ли у текущих Libmaple/STM32Duino готовые функции для чтения/письма из флэш -памяти ?

Арпрос
Пт, 02 февраля 2018 г., 18:46
[michael_l - Пт. 02 февраля 2018 г., 16:22] - Интересно, есть ли текущие Libmaple/STM32DUIN ?
Чтение просто memcpy.

Написание здесь: https: // github.com/rogerclarkmelbourne/ ... IES/EEPROM

Арпрос
Сб 03 февраля 2018 г., 4:54
Я добавил пример SD Reader. Это работает, но это смехотворно медленно: 11 с/МБ.

Тестирование предполагает, что низкая скорость связана с доступом SD, а не из -за передачи USB.

michael_l
Сб 03 февраля 2018 г. 7:22 утра
Большой! Я хотел бы получить массовое хранилище (с SD) с серийным работой в моем проекте, поэтому я буду тестировать ваш код в ближайшем будущем.

Арпрос
Сб 03 февраля 2018 г., 14:30
[Арпрос - Сб 03 февраля 2018 г., 4:54 утра] - Я добавил пример SD Reader. Это работает, но это смехотворно медленно: 11 с/МБ.

Тестирование предполагает, что низкая скорость связана с доступом SD, а не из -за передачи USB.
Я переоценил тесты сегодня утром и получал 479 кб/с/с, что намного лучше. У меня есть причудливый адаптер SD -карты, так что, возможно, когда соединение плохое, есть много повторных поисков. На текущей скорости, с картой и файлом, которые я тестировал, чтения занимают 50% больше, чем встроенный считыватель карт на моем ноутбуке, что не так уж и плохо.

Арпрос
Сб 03 февраля 2018 г. 14:34
[michael_l - Пт. 02 февраля 2018 г., 16:22] - Я взломал ранее Speffs для работы с WDXXX SPI Flash Memories на STM32DUINO. Он работает, но код немного * диван * отрывочный. Это на самом деле не быстрый FS, но возможна для небольших проектов. Вместе с MSC, который сделает хорошее дополнение.
Если вы портируете Speffs во внутреннюю вспышку, вы должны помнить, что внутренняя вспышка может быть написана только два байта за раз. Spiffs Readme предполагает, что библиотека предполагает, что вы всегда можете превратить 1 в 0s. Это неправильно для внутренней вспышки STM32F1. Вы можете обратиться к 0xffff к чему -либо, но если слово памяти содержит что -то, кроме 0xffff, вы ничего не можете написать в него, даже 0x0000.

Арпрос
Сб 03 февраля 2018 г., 16:40
Есть еще один крупный тип устройства USB, который еще не поддерживается: аудио. Кто -нибудь хочет написать плагин USBAUDIO?

Rogerclark
Сб 03 февраля 2018 г., 8:15 вечера
Аудио - интересная мысль ..

Возможно, его можно использовать с кодом свиньи-o-scope, который уже может прочитать АЦП через DMA.

Аудио вывод немного сложнее, как чертепилл и т. Д’t есть ЦАП. Я знаю, что есть код, чтобы делать умные вещи с PWM для имитации ЦАП, но я не уверен в накладных расходах системы

Существует также ввод видео или камеры, так как у нас есть код, который будет читать камеру OV7670, при 320 x 240 примерно в 11 кадров в секунду.
Я думаю, что скорость кадра может быть ограничением ILI9341, которое мы используем для отображения изображения.
(Стивестронг - это гуру это)


К сожалению, у меня есть другие более насущные обязательства моего времени, так что я могу’По помоги с этим
Пса. Хотелось бы, чтобы у меня было время понять внутренние USB, так как у меня есть несколько проектов, в которых мне нужно обратить вспять некоторые USB-протоколы, но все они находятся на заднем плане, потому что я дон’t есть время :-(

michael_l
Сб 03 февраля 2018 г., 21:24
[Арпрос - Сб 03 февраля 2018 г. 16:40] - Есть еще один крупный тип устройства USB, который еще не поддерживается: аудио. Кто -нибудь хочет написать плагин USBAUDIO?
Извините за простой вопрос, но что я могу сделать с USB -звуком - и какие спецификации есть для USB -аудио -интерфейса ?

Арпрос
Пн, 05 февраля 2018 г., 4:16 утра
После большого количества проб и ошибок мне удалось найти способ не дать линкеру связываться в очень ненужном коде (E.глин., Если вы хотите использовать USBHID, он не должен загружать массовое хранилище, последовательное и т. Д.)

К сожалению, мне пришлось внести некоторые изменения в API, поскольку моя предыдущая реализация USB Compositing использовала классы с виртуальными функциями. Но когда такой класс инициализируется, автоматически все виртуальные функции связаны, даже если они никогда не используются.

Два основных изменения:
1. USBHID.begin () больше не включает сериал. Чтобы заставить Serial быть включенным, используйте функцию удобства USBHID_BEGIN_WITH_SERIAL () вместо этого. И USBHID.Метод setSerial () был удален.
2. Чтобы добавить компонент в композитное устройство, DO: Компонент.RegisterComponent () вместо предыдущего USBComposite.добавить (компонент). См. Примеры массового хранения.

Кроме того, я переименовал классы массового хранения и X360 и/или экземпляры.

Freakeyy
Вт 13 февраля 2018 г., 21:30
Просто нужно играть с библиотекой, она отлично работает, за исключением серийных. Это только я или сериал еще не работает ? Он показывает на диспетчере устройств, но ничего не печатает

Арпрос
Ср 14 февраля 2018 г. 14:25
Используете ли вы композитоэражные вместо сериала, так как требуется библиотека?
Попробуйте пример с клавиатурой, который должен повторить состояние светодиода клавиатуры в сериал.

CPT.Заслуживающий доверия
Ср 28 февраля 2018 г. 16:53
У меня только что была возможность поиграть с этой библиотекой сегодня, и мне это нравится! Мне, однако, было интересно, это библиотека несовместима с великолепным Франсуам лучше (.k.а. Сорок, склонные к библиотеке MIDI? Просто добавление "#include <Миди.час> в «Мидиине.Пример INO «бросает эту ошибку:
«Mymidi Midi», переработанный как другой символ »
Есть быстрое решение для этого? мне нужно войти и изменить одну из двух библиотек?

Aslo, на одном из трех компьютеров, на которых я попробовал это, устройство MIDI не найдено компьютером. (стационарный бег win10) Это синяя доска таблеток с неправильным резистором на R10, но с любопытством появляется серийный порт клена и отлично работает и работает отлично. Может ли это все еще объяснить значение резистора R10? Или что -то еще не так?

Арпрос
Чт, 01, 2018, 14:19
[CPT.Заслуживающий доверия - Ср 28 февраля 2018 г., 16:53] - Просто добавление "#include <Миди.час> в «Мидиине.Пример INO «бросает эту ошибку:
«Mymidi Midi», переработанный как другой символ »
Не нужно менять библиотеки. Просто измените пример, заменив переменную MIDI в примере на что -то еще, e.глин., USBMIDI.
Aslo, на одном из трех компьютеров, на которых я попробовал это, устройство MIDI не найдено компьютером. (стационарный бег win10) Это синяя доска таблеток с неправильным резистором на R10, но с любопытством появляется серийный порт клена и отлично работает и работает отлично. Может ли это все еще объяснить значение резистора R10? Или что -то еще не так? Я бы не подумал, что резистор будет иметь такой эффект, учитывая, что сериал появляется. Вы можете проверить, появится ли джойстик (E.глин., Используйте пример простой Joyjoystick).

Для меня примеры MIDI работают на Win10pro. Но у меня иногда возникали путаница с Windows при переключении между различными USB -устройствами, которые имеют одинаковые поставщики и идентификаторы продукта. Поэтому, если вы подключили плату в другом режиме (E.глин., серийный или спрятанный), вы могли запутать окна. Вы можете попробовать удалить старый драйвер в диспетчете устройств Windows, а затем снова горят или изменить идентификатор продукта в коде. Эн.глин., В моем примере Midiin добавьте MIDI.SetProductId (0x25) перед вызовом MIDI.начинать().

Мадиас
Чт, 01, 2018, 15:56
Несколько слов о массовом хранении:
Несколько лет назад я спорил о пользе массового хранения по простой причине:
Вы закончили проект для третьего лица без действительно знаний MCU/кодирования (назовите этот человек Protoype "Mother"). В коде есть ошибка, которую вы должны исправить, просто для вас, но «третье лицо» не может загрузить его, как мы делаем. Таким образом, «устройство проекта» имеет функцию загрузки (комбинированные кнопки на запуске, на дисплее, что угодно), переключение устройства на массовое хранилище и просто плагин на компьютер, загрузите новый *.Файл корзины -> готовый.
Так что это должно быть теперь возможно, не так ли?

Второй:
Также должно быть возможно переключаться между состояниями HID USB (например, переключение с USB-MIDI на USB-хранилище и так далее)?

С уважением
Матиас

Arduinoob
Чт, 01, 2018, 16:22
Я никогда не слышал о STM32 до сегодняшнего дня, и я хотел бы знать, совместим ли код, совместимый с «классическим» arduino nano/pro micro.

На самом деле я хотел бы использовать свой Arduino в качестве эмулированного массового хранилища (например, USB -накопитель) при подключении к ПК, предоставляющим файлы, хранящиеся с карты MicroSD, используемой с щитом.

Извините за неудобства, если мое сообщение является иннопропри Его https: // github.com/arduino/arduino/wiki ... ehid-howto

Я не уверен в программировании микроконтроллеров, несчастно :(

Мадиас
Чт, 01, 2018, 16:31
«Классический» Arduino (Atmega 328p) не имеет физического USB на чипе, поэтому вы не можете использовать этот код с помощью этих устройств. Таким образом, вам понадобится хотя бы ATMEGA32U4 ("Arduino Leonardo")
Все написано здесь:
https: // github.com/arduino-libraries/midiusb "Эта библиотека позволяет доске Arduino с USB -возможностями выступать в качестве инструмента MIDI над USB. Библиотека основана на plugtableusb, поэтому совместима только с IDE 1.6.6 и ночные сборки (AVR Core > 1.6.8, SAM CORE > 1.6.4, Samd Core > 1.6.1)
Кроме того, поскольку PluggableUSB только нацелены на доски с местными возможностями USB, эта библиотека поддерживает только эти доски (например,. Леонардо, Микро, Должна, ноль и т. Д.)
"
Но: вы можете получить STM32 "синюю таблетку" для менее 2 евро на ebay/aliexpress, так что попробуйте это!

Имейте в виду, что «микро», продаваемый на eBay/AliexPress, в основном Atmega 328p!

РЕДАКТИРОВАТЬ: Это будет ваш друг, но имейте в виду, что это стоит больше, чем синяя таблетка!
https: // www.aliexpress.com/item/pro-mic ... 76437.HTML

Arduinoob
Чт, 01, 2018, 17:03
Спасибо, Мадиас за ответ !!

У меня есть версия, которую вы предложили в ссылке. Я уже использую скрытую.H предоставлен Arduino для эмуляции клавиатуры, но текущая работа, кажется, позволяет только эмуляцию клавиатуры и мыши:-/ Ничего для эмуляции массового хранения ;-(-(-(-(

CPT.Заслуживающий доверия
Чт, 01, 2018, 19:45
[Арпрос - Чт марта 01, 2018, 14:19] - Не нужно менять библиотеки. Просто измените пример, заменив переменную MIDI в примере на что -то еще, e.глин., USBMIDI.
Эхем, кашель, да, конечно. : oops: : D
[Арпрос - Чт марта 01, 2018, 14:19] - Для меня примеры MIDI работают на Win10pro. Но у меня иногда возникали путаница с Windows при переключении между различными USB -устройствами, которые имеют одинаковые поставщики и идентификаторы продукта. Поэтому, если вы подключили плату в другом режиме (E.глин., серийный или спрятанный), вы могли запутать окна. Вы можете попробовать удалить старый драйвер в диспетчете устройств Windows, а затем снова горят или изменить идентификатор продукта в коде. Эн.глин., В моем примере Midiin добавьте MIDI.SetProductId (0x25) перед вызовом MIDI.начинать().
Я попробую это!

Петр
Чт, 01, 2018, 23:01
Я только что нашел эту ветку (следил за веткой Либарры, где кто -то только что разместил здесь ссылку, спасибо!) и я должен сказать замечательную работу!!

У меня есть существующее устройство/проект с использованием HID RAW для высокоскоростного протокола передачи данных, который реализован на ATMEGA16U2 с использованием LUFA Library. Я попробую перенести его в STM32 теперь благодаря этой новой библиотеке, которая поддерживает Hid Raw, в конце концов. Еще раз спасибо, @arpruss.

Кроме того, недавняя работа по USB Mass Storage захватывающая. Возможная простая загрузка файла для обновления прошивки - это просто мечта :)

Арпрос
Пт 02, 2018 2:47
[Петр - Чт -март 01, 2018 11:01 вечера] - У меня есть существующее устройство/проект с использованием HID RAW для высокоскоростного протокола передачи данных, который реализован на ATMEGA16U2 с использованием LUFA Library. Я попробую перенести его в STM32 теперь благодаря этой новой библиотеке, которая поддерживает Hid Raw, в конце концов.
Я должен сказать, что Hid Raw не так хорошо протестирован, как другие части библиотеки. Так что я не удивлюсь, если есть ошибки. Он также настроен на передачу хоста в установке по конечной точке управления, которая может не идеально подходит для скорости.

АНВ
Пт 02, 2018 8:00 утра
[Мадиас - Чт марта 01, 2018, 15:56] - Вы закончили проект для третьего лица без действительно знаний MCU/кодирования (назовите этот человек Protoype "Mother"). В коде есть ошибка, которую вы должны исправить, просто для вас, но «третье лицо» не может загрузить его, как мы делаем. Таким образом, «устройство проекта» имеет функцию загрузки (комбинированные кнопки на запуске, на дисплее, что угодно), переключение устройства на массовое хранилище и просто плагин на компьютер, загрузите новый *.Файл корзины -> готовый.
Я могу подумать во многих применениях для хранения USB. я.эн. регистратор данных, который можно прочитать, просто подключив USB-кабель и Readig в качестве диска только для чтения. Нет необходимости иметь полную файловую систему в памяти. Структуры жира могут быть смоделированы на программном обеспечении.

Арпрос
Пт 02 марта 2018 г., 19:19
[Мадиас - Чт, 01, 2018, 15:56] - Вы закончили проект для третьего лица без действительно знаний MCU/кодирования (назовите этот человек Protoype "Mother"). В коде есть ошибка, которую вы должны исправить, просто для вас, но «третье лицо» не может загрузить его, как мы делаем. Таким образом, «устройство проекта» имеет функцию загрузки (комбинированные кнопки на запуске, на дисплее, что угодно), переключение устройства на массовое хранилище и просто плагин на компьютер, загрузите новый *.Файл корзины -> готовый.
Так что это должно быть теперь возможно, не так ли?
Я думаю, ты мог бы сделать это. Вам, вероятно, придется иметь виртуальный диск в верхней 64 тыс. Флэш, а затем у вас есть хост, напишите на этот диск, а затем вы вспыхиваете от него. Но вам нужно беспокоиться о том, чтобы погрузить устройство в середине стекла. Я думаю, что я бы реализовал бы, написав пользовательский загрузчик, который сначала проверяет, есть ли данные для мигания в верхней 64 тыс. Флэш, и если да, то мигает эти данные и следы, которые стерли. Чтобы сделать пользовательский загрузчик максимально простым, я бы сохранил .Файл корзины в контейнере, который разделяет его на 492 байтовых кусков (скажем) и добавляет заголовок 20 байтов в каждый кусок, чтобы создать сектор 512 байта. Заголовок будет иметь несколько волшебных персонажей, а также информация о том, где во время вспышки должны идти 492 байтов. Затем загрузчик может просто сканировать верхнюю 64K вспышки для волшебных персонажей и написать любые куски, которые он находит, а затем стирать их волшебные персонажи после их написания. Это спасет загрузчик от необходимости понимать жир.
Второй:
Также должно быть возможно переключаться между состояниями HID USB (например, переключение с USB-MIDI на USB-хранилище и так далее)?
Да. Я делаю это в своем GameCube USB -адаптер, который может эмулировать как стандартное устройство HID USB (джойстик/клавиатура/мышь), так и контроллер Xbox, так и двойные джойстики, и может переключаться между устройствами с помощью программного обеспечения или жесткой кнопки.

В основном, вы просто настроили одно устройство, вызовите его метод begin (), а затем вызовите метод End (), настроите другое устройство и вызовите метод begin (). Эн.глин.: USBHID.begin(HID_KEYBOARD); ... USBHID.end(HID_KEYBOARD); MassStorage.setDrive(0, sizeof(image), read, write); MassStorage.begin(); ... MassStorage.end(); USBHID.begin(HID_JOYSTICK); ... USBHID.end();

Арпрос
Пт, 02 марта 2018 г., 19:25
[Arduinoob - Чт, 01, 2018, 16:22] - Я никогда не слышал о STM32 до сегодняшнего дня, и я хотел бы знать, совместим ли код, совместимый с «классическим» arduino nano/pro micro.
Нет, код специфичен для платформы STM32F1.

Rogerclark
Пт 02 марта 2018 г. 20:31
ИМХО Проблема с загрузчиком USB Mass Storage Bootloader - его размер. Мы едва можем сдать версию DFU в 8K

Я пробовал загрузчики массового хранилища, которые Дон’t Реализуйте хранилище формата жира, которые довольно малы (не уверены, что они менее 8 тысяч), но им нужны специальные программы в Windows для загрузки на неформатированное устройство для хранения.
Что делает их только незначительно лучше, чем загрузчик на основе DFU.

Я полагаю, DFU нужен драйвер, но вы также можете использовать HID RAW, если вам нужен специальный инструмент для загрузки.

CPT.Заслуживающий доверия
Сб 3 марта 2018 г. 8:56 утра
Мне очень нравится идея обновления прошивки с помощью эмулированного устройства массового хранения! Пример наброска или учебник о том, как заставить это работать, был бы эпическим!

nicolas_soundforce
SAT 03 марта 2018 12:00
Это фантастика, я использовал addmidibranch до сих пор, я не могу дождаться, чтобы попробовать это. Большое спасибо за усилия!

Есть ли способ установить имя устройства в пользовательской программе ? До сих пор я редактировал файлы заголовков. Это сработало, но я часто переключаюсь, так что не очень практично.

Арпрос
SAT 03 марта 2018 г., 15:12
[nicolas_soundforce - Сб, март 03, 2018, 12:00 вечера] - Есть ли способ установить имя устройства в пользовательской программе ? До сих пор я редактировал файлы заголовков. Это сработало, но я часто переключаюсь, так что не очень практично.
USBComposite.setManufacturerString("My Garage"); USBComposite.setProductString("My Thingy");

Арпрос
Сб, 3 марта 2018 г. 15:17
Я заметил, что если у вас на клавиатуре Capslock на клавиатуре Windows, состояние Capslock также повлияло на клавиатуру USB HID. Это, вероятно, приведет к нежелательной работе. Например, если ваше устройство STM32F1 было менеджером паролей, государство Capslock на клавиатуре Хост будет манипулировать вещами. Моим быстрым и грязным исправлением было использование светодиодного статуса Capslock в коде клавиатуры, чтобы обмениваться корпусом по мере необходимости. Теперь клавиатура.Println ("Hello World") напечатает "Hello World" независимо от состояния Capslock of the Windows. Было бы неплохо, если бы кто -то с удобно доступной системой Linux проверил, работает ли это для них тоже.

Если вам нравится это поведение, вы должны позвонить в клавиатуру.begin () перед вызовом каких -либо функций клавиатуры. (Обычно клавиатура.begin () обязательно, но это необходимо для светодиодного состояния.)

Если вам не нравится это поведение, вы можете позвонить в клавиатуру.setadjustforhostcapslock (false).

vitor_boss
SAT 03 марта 2018 г., 17:51
Привет, этот код может работать только как скрытое? Я думаю, как улучшить программист OpenProg, и STM32 идеально подходит для этого.

http: // openprog.Altervista.org/op_eng.HTML

nicolas_soundforce
Сб 3 марта 2018 г., 21:32
[Арпрос - SAT, 03 марта 2018 г., 15:12] -
[nicolas_soundforce - Сб, март 03, 2018, 12:00 вечера] - Есть ли способ установить имя устройства в пользовательской программе ? До сих пор я редактировал файлы заголовков. Это сработало, но я часто переключаюсь, так что не очень практично.
USBComposite.setManufacturerString("My Garage"); USBComposite.setProductString("My Thingy");

Арпрос
Солнце 04 марта 2018 г. 5:18 утра
[vitor_boss - SAT, 03 марта 2018 г., 17:51] - Привет, этот код может работать только как скрытое?
Конечно. Вы имеете в виду сырое скрытое? Есть пример кода для этого.

CPT.Заслуживающий доверия
Вт, 06 марта 2018 12:14
Мне трудно с проблемой, когда Windows больше не обнаруживает USB -устройство.

Как упоминалось ранее, после того, как поболтал о попытке настроить MIDI и серийный параллельно для отладки, иногда настройка кода, который приводит к «неисправному устройству» и внезапно, по причинам без ведома, мой компьютер больше не будет обнаруживать устройство MIDI USB. Он все еще обнаруживает последовательное устройство клено. И если я подключаю его к другой машине, он будет хорошо отображаться как последовательное устройство Maple и MIDI -устройство.

И когда я говорю, что это не появляется, я имею в виду, что это вообще не появляется. Windows не признает, что он существует вообще. Нет «неизвестного устройства» нет ».
[Арпрос - Чт марта 01, 2018, 14:19] - Вы можете попробовать удалить старый драйвер в диспетчете устройств Windows, а затем снова горят или изменить идентификатор продукта в коде. Эн.глин., В моем примере Midiin добавьте MIDI.SetProductId (0x25) перед вызовом MIDI.начинать().
Как предложил Arpruss, изменение идентификатора продукта на что -то другое, используя USBComposite.SetProductId () позволяет моему компьютеру обнаружить и использовать устройство MIDI, но разбивает серийный драйвер Maple, который ожидает идентификатор продукта 4. И на заметке по удалению драйверов, ни одно удаление водителя не помогает. Я даже использовал USBDeview, чтобы удалить все USB -устройства, когда -либо подключенные к машине безрезультатно.

Это волшебное исчезновение произошло на двух моих машинах сейчас, один Win10 и One Win7, и я ценю, что это не проблема с этой славной библиотекой, больше проблема с моим невежеством и моим компьютером. Но я вырываю волосы и задавался вопросом, знает ли кто -нибудь, как это исправить.

Устройство в черном списке где -то на низком уровне? Это какое -то оборудование на материнской плате, которое решило начать игнорировать это устройство? Должен ли я просто сдаться и использовать аппаратный сериал для отладки (не оптимально, поскольку он, кажется, блокирует и вызывает выбытие звука (я делаю синтезатор)))

Любое понимание или помощь будет очень оценено

РЕДАКТИРОВАТЬ:
Все инструменты для удаления «призрачных устройств» и удаления всех следов ранее подключенных устройств потерпели неудачу, «Призрачный банк» и «USBOBLIVION». Тем не менее, это было программирование STM32F103C с примером Midiout, на котором он ошибочно появился как серийное устройство, которое не запустило бы. Щелкните правой кнопкой мыши и выбрать удаление устройства и драйвера удаления, позволили его заново открыть в качестве устройства MIDI.

Флорисла
Вт, 06 марта 2018 г., 21:04
[CPT.Заслуживающий доверия - Вторник 06 марта 2018 12:14] - И когда я говорю, что это не появляется, я имею в виду, что это вообще не появляется. Windows не признает, что он существует вообще. Нет «неизвестного устройства» нет ».
Когда он пропал без вести, вы делаете действие -> Сканирование для изменения аппаратного обеспечения? Мне приходилось делать это во многих случаях, чтобы Windows «повторно открыл» устройство, для которого я удалил (отключен + удален!) водитель.

Кроме того, вообще поможет ли перезагрузка ПК?

Арпрос
Ср. 07 марта 2018 г., 5:49
1. Вы можете установить серийный драйвер для другого идентификатора продукта. Просто отредактируйте пакетный файл.

2. Вы установили свой диспетчер устройств для просмотра скрытых устройств? https: // technet.Microsoft.com/en-us/lib ... 84583.aspx

CPT.Заслуживающий доверия
Ср. 07 марта 2018 г. 8:19
[Арпрос - Ср. 07, 2018 5:49] - 1. Вы можете установить серийный драйвер для другого идентификатора продукта. Просто отредактируйте пакетный файл.
Это удобно знать!
[Арпрос - Ср. 07, 2018 5:49] - 2. Вы установили свой диспетчер устройств для просмотра скрытых устройств? https: // technet.Microsoft.com/en-us/lib ... 84583.aspx
Да, и перезагрузился, но, как я уже упоминал в редактировании, кажется, что где -то было что -то данные, которые я не мог найти в реестре или использовать любой из инструментов исправления устройств USB, которые я нашел. Сделать его отображаться только как устройство MIDI с использованием примера MIDIOU. Я поговорил с некоторыми другими разработчиками, знакомыми с разработкой USB, и сообщение, которое я получил :)

На связанном примечании, есть ли что -нибудь еще в Setup () в примере Midiin, чтобы использовать сериал вместе с MIDI? Если будет композиточный.начать (250000) или что -то в этом роде? или это все, что обрабатывается в USBComposite.начинать()? Должен ли я просто добавить композиториальный.println ("Hello World") в главной петле?

Арпрос
Ср. 07, 2018, 14:55
[CPT.Заслуживающий доверия - Ср. 07 марта 2018 г. 8:19] - На связанном примечании, есть ли что -нибудь еще в Setup () в примере Midiin, чтобы использовать сериал вместе с MIDI? Если будет композиточный.начать (250000) или что -то в этом роде?
Нет. Увидеть Readme file, который увы все еще незакончен. Compositeserial - это плагин, и единственный раз, когда вы называете метод Begin's Plagin's Begin (), если вы делаете простое USB -устройство (только с одним плагином). В противном случае вы зарегистрируете плагины с помощью плагина.RegisterComponent () и вызовать usbComposite.начинать().
или это все, что обрабатывается в USBComposite.начинать()? Должен ли я просто добавить композиториальный.println ("Hello World") в главной петле? Все, что вам нужно, это композитоэральный.println (). Обратите внимание, что уже есть призывы к композитном.Println () в обработчиках Noteon и NoteOff в примере.

Freakeyy
Ср. 07 марта 2018 г., 22:19
Привет,

Мне было интересно, в чем была разница между "bootkeyboard" и "keyboard ? Также возможно иметь возможность NKRO для клавиатуры ? Было бы интересно для строительства механических клавиатур. Вот несколько заметок о NKRO https: // github.com/tmk/tmk_core/blob/ma ... B_nkro.текст
https: // форум.PJRC.com/threads/23993-te ... O-keyboard

Арпрос
Ср. 07 марта 2018 11:22
[Freakeyy - Ср. 07 марта 2018 г., 22:19] - Мне было интересно, в чем разница между "Bootkeyboard" и "Cheeboard ?
Bootkeyboard не может быть составлен с другим USB -устройством, но работает в System Bios.
Также возможно иметь возможность NKRO для клавиатуры ? Было бы интересно для строительства механических клавиатур. По умолчанию 6Kro. Вы можете попытаться увеличить это до любого числа, которое вы хотите, за счет замедления передачи данных и использования немного большего количества памяти. Чтобы увеличить его, отредактировать USBHID.h и изменить значение hid_keyboard_rollover. Это не проверено: дайте мне знать, если это работает для вас.

Возможно, вы столкнетесь с проблемами выше 62. Или выше 6. Как я уже сказал, это не проверяется.

CPT.Заслуживающий доверия
Чт, 08, 2018, 16:38
[Арпрос - Ср. 07, 2018, 14:55] - Обратите внимание, что уже есть призывы к композитном.Println () в обработчиках Noteon и NoteOff в примере.
Мы используем тот же пример? Я использую https: // github.com/arpruss/usbhid_stm32 ... Мидиин.Ино
Все, что я могу видеть в обработчиках в нотсоне и нотке, - это вызовы Tone () и Notone ()

Есть ли более недавняя версия библиотеки, которую я должен использовать?

Арпрос
Пт, 09 марта 2018 г., 3:54
[CPT.Заслуживающий доверия - Чт, 08, 2018, 16:38] -
[Арпрос - Ср. 07, 2018, 14:55] - Обратите внимание, что уже есть призывы к композитном.Println () в обработчиках Noteon и NoteOff в примере.
Мы используем тот же пример? Я использую https: // github.com/arpruss/usbhid_stm32 ... Мидиин.Ино
Все, что я могу видеть в обработчиках в нотсоне и нотке, - это вызовы Tone () и Notone ()

Есть ли более недавняя версия библиотеки, которую я должен использовать?
О, я думаю, у меня был вставлен код в целях тестирования, но не преданный.

Арпрос
Пн 12 марта 2018 г., 1:30 утра
Я добавил удобство USBComposite.Метод isReady () для проверки, подключено ли USB -устройство с хостом и настроено. Проверка этого перед отправкой данных предотвратит некоторые вины, если USB -соединение отключено. (Некоторые, но не все висят. Всегда есть вероятность разрыва между вызовом isReady () и передачей.)

Мадиас
Ср. 04, 2018, 10:56 утра
Я немного разыграл с этим превосходным подходом, спрятавшись с USB на работу
Доска: Maple Mini
  • Пример SD -карт работает лучше, как и ожидалось (достойная скорость, даже без «Ex» - я даже смог играть в mp3 с карты)
    Пример "потребителя" сложно на моем MacBook ;) (Нажав по двум маленьким кнопкам вправо (вечный загрузчик) перед выходом света!)
    Пример массового хранения не работает: даже в Windows или OSX сгенерированное устройство, содержащее устройство, пусто (нет файлов на нем). Кто -нибудь проверил это?
На OSX (El Captain 10.11.6, MacBook Pro Middle 2009) Игра с USB-HID может быть опасной. После некоторых примеров (я думаю, что «потребитель») я больше не смог общаться с Maple Mini (даже в режиме вечного загрузчика или перезагрузку системы). Поэтому я прошивал под Windows простой пустой код, чтобы снова заработать клен. Но это конкретная проблема OSX, поэтому она не должна иметь значения)

Но в целом: все работает правильно, и это большой шаг вперед, используя USB-HID.

SO: Спасибо, Арпусс!

Арпрос
Ср. 04, 2018, 14:56
[Мадиас - Ср. 04, 2018, 10:56] - Пример массового хранения не работает: даже в Windows или OSX сгенерированное устройство, содержащее устройство, пусто (нет файлов на нем). Кто -нибудь проверил это?[/список]
Я почти уверен, что изображение на изображении.H пусто. Но вы можете скопировать небольшой файл на диск с хоста. По крайней мере, последний я тестировал его на Win10, я мог. Однако меня не удивит, если бы у некоторых операционных систем были проблемы с изображением FAT-12, размером которого меньше 12 тыс.

Конечно, любой файл, который вы копируете, исчезнет при включении устройства, так как хранилище находится в ОЗУ.
На OSX (El Captain 10.11.6, MacBook Pro Middle 2009) Игра с USB-HID может быть опасной. После некоторых примеров (я думаю, что «потребитель») я больше не смог общаться с Maple Mini (даже в режиме вечного загрузчика или перезагрузку системы). Поэтому я прошивал под Windows простой пустой код, чтобы снова заработать клен. Но это конкретная проблема OSX, поэтому она не должна иметь значения) Может быть, установление другого идентификатора продукта USB с по умолчанию, когда экспериментирование поможет? Я предполагаю, что OSES запутывается при переключении типов USB -устройств без изменения идентификаторов поставщика/продукта.

Джон.Картер3
Ср 11 апреля 2018 г., 17:44
[michael_l - Пт. 02 февраля 2018 г., 16:22] - Я взломал ранее Speffs для работы с WDXXX SPI Flash Memories на STM32DUINO. Он работает, но код немного * диван * отрывочный. Это на самом деле не быстрый FS, но возможна для небольших проектов. Вместе с MSC, который сделает хорошее дополнение.

Интересно, есть ли у текущих Libmaple/STM32Duino готовые функции для чтения/письма из флэш -памяти ?
Вы делитесь взломанными Spiffs?

Арпрос
SAT 14 апреля 2018 г. 15:05
Краткое примечание: библиотека теперь связана с ядром Роджера.

Мадиас
SAT 14 апреля 2018 г., 19:54
+1
Для меня USB-HID (библиотека)-одна из лучших функций, что даже небольшой BluePill может предоставить это выдающемуся маленькому зверу.

CPT.Заслуживающий доверия
Пт 27 апреля 2018 г. 14:45
[Арпрос - Сб 14 апреля 2018 г. 15:05] - Краткое примечание: библиотека теперь связана с ядром Роджера.
сладкий

nicolas_soundforce
Сб 12 мая 2018 г., 7:16
Когда я использую обработчики MIDI -входов, синие таблетки, кажется, рухнут, даже когда ничего не делая в этих.
Поэтому, как только устройство MIDI Blue Pill получает сообщение MIDI, основная программа просто прекращается.

Любой, снято использовал вход USB MIDI ? Это проверяется ?

Я использую версию, в том числе в последнем репо.

Спасибо,
Николас.
class myMidi : public USBMidi { virtual void handleNoteOn(unsigned int channel, unsigned int note, unsigned int velocity) { } virtual void handleNoteOff(unsigned int channel, unsigned int note, unsigned int velocity) { } virtual void handleProgramChange(unsigned int channel, unsigned int program) { } };

Арпрос
Солнце 13 мая 2018 г. 13:37
Работает ли MIDI входной пример кода для вас?

Мирко
Чт, 07 июня 2018 г., 11:32
Позвольте мне начать с большого "спасибо" @ arpuss. Ваша библиотека HID USB работает для меня довольно хорошо .... Пришлось удалить серийный драйвер Maple, чтобы заставить его работать, но теперь он работает очень хорошо : D СПАСИБО!

Я строю коробку кнопок Sim Racing с ЖК -дисплеем, магнитными переключателями (кнопками джойстика) и двойными лодками сцепления (ось джойстика).
При тестировании оси джойстика я заметил, что могу отправлять значения только от 0 до 1023 для движения джойстика.
При чтении моей аналоговой муфты (анализа) у меня 12 -битное разрешение (от 0 до 4096), которое я хотел бы сохранить.

В «джойстике».CPP "у вас есть void HIDJoystick::X(uint16_t val){ if (val > 1023) val = 1023; joyReport.x = val; safeSendReport(); }

Пито
Пт, 08 июня 2018 г., 7:44
Начал играть с библиотекой HID (так что будьте терпеливы со мной, только стандартный пользователь).
Попробовал SDCARDREADER, MASS, ABSMOUSE, Jigglemouse и Mouse Jiggler.
С помощью Blue103Zet (SDCARDREADER, STLINK UPLOAD) и BluePill (другие, Stm32duino Bootloader Last).
Я удалил устройство Hid-Bootloader от своих предыдущих упражнений.

Я получил «USB -устройство, не распознанное», или оно установило сериал Maple с Sernum 00000000000000000001, и я не вижу никакой активности или какого -либо установленного специального устройства HID (наблюдаемое с USBDeview).
Win7 64 -битный здесь.
Может ли кто -нибудь подтвердить некоторые из примеров, работающих с 64 -битным и Bpill PLZ Win7?
Что я пропустил или сделал неправильный путь?

PS: Мне удалось работать «массой», он даже помнит контент диска при подключении порта USB (питается через Stlink) :)
Пока нет веселья с мышкой..

Пито
Пт, 08 июня 2018 г., 16:25
С помощью мышиной демонстрации мыши, когда я вставляю BPILL в свой ноутбук, стрела мыши всегда прыгает в середину, когда куда -то перемещается, так что кажется, что она каким -то образом работает.
Я получаю это usbdeview:
Maple Composite.jpg
Кленовый композит.JPG (59.32 киб) просмотрено 760 раз

AG123
Пт, 08 июня 2018 г., 17:08
Хотел бы начать играть с этим, о, кстати, я предполагаю, что если вы используете VID / PID, который из мыши / клавиатуры и отображаться в качестве скрытого, Windows может «автоматически установить» необходимые драйверы :)

Пито
Пт, 08 июня 2018 г. 18:46
Итак, попробовал еще раз с моим 103ZET (64 КБ+512 КБ SRAM и сокет SDCARD).
Вспыхнул в загрузчике STM32Duino (общий). Серийный серийный сериал (Driver удален).
Скомпилировано (Sloeber) Sdreader Demo (Установите правильно SDCard's /CS и светодиодные выводы, SDFAT (не EX)), загружен.

Вставка 16 -ГБ CL10 Samsung SDCARD в розетку 103ZET'ESES.

После повторного выпадения 103Zet (и очистки старого беспорядка с USBDeview), ожидая несколько секунд, я получил окно, в котором говорится, что SDCARD нужно переформатировать (используется в Android). Я отказал SDCARD и переформатировал под Win7 (SDFormatter). Вставьте SDCARD обратно в 103ZET, перепродал, и я снова получил окно, сказав, что SDCARD должны быть переформатированы.

Я нажал OK и получил стандартное окно форматирования победы, предлагая мне мясной 2.Размер 92 ГБ/FAT32. Хорошо, понял, Начал с форматирования. Примерно через минуту все закончилось нормально : шок: и я снова переплюнул 103Zet.

Примерно через 10 секунд в ожидании я получил окно с новым диском e:, открыл его, был пуст, поэтому я начал копировать на него большой файл Slaeber Slaeber Slaeber. Копирование началось со стандартного окна копирования, указывающего на 13 минут и скорость 216 кб/с/с. При хранении файла я написал этот отчет :)
Это закончилось хорошо.

Снова переоборудовал 103Zet. Открыто E: и проверил SHA-1 файла (потребовалось несколько минут, чтобы прочитать), и он прошел.. Хороший.. 8-)

PS: я отказался от SDCARD с 103ZETS SDCARD SOCKET и снова проверил под Win7, SHA-1 прошел прошел..

Арпрос
Пт, 08 июня 2018 г., 19:04
Я не уверен, почему переформатирование было необходимо. Если вы можете понять это, это было бы здорово.

Обратите внимание, что мой пример мыши является абсолютной, а не более обычной относительной мышью. (Пример JiggerMouse, который я добавил вчера, является относительной мышью.)

AG123
SAT 09 июня 2018 2:36
[Пито - Пт, 08 июня 2018 г. 18:46] - Итак, попробовал еще раз с моим 103ZET (64 КБ+512 КБ SRAM и сокет SDCARD).
Вспыхнул в загрузчике STM32Duino (общий). Серийный серийный сериал (Driver удален).
Скомпилировано (Sloeber) Sdreader Demo (Установите правильно SDCard's /CS и светодиодные выводы, SDFAT (не EX)), загружен.

Вставка 16 -ГБ CL10 Samsung SDCARD в розетку 103ZET'ESES.

После повторного выпадения 103Zet (и очистки старого беспорядка с USBDeview), ожидая несколько секунд, я получил окно, в котором говорится, что SDCARD нужно переформатировать (используется в Android). Я отказал SDCARD и переформатировал под Win7 (SDFormatter). Вставьте SDCARD обратно в 103ZET, перепродал, и я снова получил окно, сказав, что SDCARD должны быть переформатированы.

Я нажал OK и получил стандартное окно форматирования победы, предлагая мне мясной 2.Размер 92 ГБ/FAT32. Хорошо, понял, Начал с форматирования. Примерно через минуту все закончилось нормально : шок: и я снова переплюнул 103Zet.

Примерно через 10 секунд в ожидании я получил окно с новым диском e:, открыл его, был пуст, поэтому я начал копировать на него большой файл Slaeber Slaeber Slaeber. Копирование началось со стандартного окна копирования, указывающего на 13 минут и скорость 216 кб/с/с. При хранении файла я написал этот отчет :)
Это закончилось хорошо.

Снова переоборудовал 103Zet. Открыто E: и проверил SHA-1 файла (потребовалось несколько минут, чтобы прочитать), и он прошел.. Хороший.. 8-)

PS: я отказался от SDCARD с 103ZETS SDCARD SOCKET и снова проверил под Win7, SHA-1 прошел прошел..
Вау, это довольно хорошо, мне интересно, как далеко мы можем продвинуть скорость 216 кбит/с, в теории USB 2.0 Полная скорость способна составлять 10 Мбит / с, что я предполагаю, что могло бы дать ближе к 1 МБ за секунду : D

Пито
SAT 09 июня 2018 г., 7:14
Кажется, скорость каким -то образом ограничена USB и накладными расходом (STM32F103ZET при 72 МГц).
С sdfat или sdfatex, и if (sd.begin(SD_CHIP_SELECT, SD_SCK_MHZ(36)))

AG123
SAT 09 июня 2018 г., 16:30
Я думаю, что проблема «переформатирования», вероятно, связана с форматом, который окна не признают и не считают повреждением
У меня было несколько SD -карт с перегородками Linux, которые Windows дают эти «Recorкомт» подсказки с «обычными» считывателями SD -карт
Тем не менее, я не слишком уверен, есть ли что -то еще больше, чем формат раздела на диске/карте (данные), который может вызвать подсказки

Fredbox
SAT 09 июня 2018 г., 17:16
Еще в те дни, когда оригинальный Барнс и Нобл Укюш. В то время некоторые заметили, что карты SD класса 10 работали заметно хуже, чем некоторые карты класса 2. Хитрость в том, чтобы получить более короткое время загрузки, заключалась в том, чтобы использовать эталонный утилита, такую ​​как Crystaldiskmark, и найти карту, у которой была хорошая производительность чтения/записи 4K. У большинства всех карт была хорошая производительность в больших файлах, но лишь немногие имели хорошую 4K -производительность. Была карта Sandisk Class 2, которая опередила их всех. Это почти 10 лет назад, я подозреваю, что карты SD улучшились в то же время.

AG123
SAT 09 июня 2018 г., 17:46
Я думаю, что на этом этапе USB Mass Storage, вероятно, не является (пока) настроенным/оптимизированным на максимум, настройка его трудоемки, связанная с выяснением, где находятся «пространства», которые можно использовать лучше (E.глин. «автономное» массовое хранение, а не в сочетании с HID / Serial и т. Д.) . Я предполагаю, что если кто -то может запустить его на лучшем аппаратном обеспечении E.глин. STM32F103 с большим количеством SRAM - серией высокой плотности или даже в этом отношении A STM32F407 и увеличивая границы SPI, чтобы скорости между SD -картами и STM32 составляли не менее 1 МБ за секунду, мы, вероятно, увидели, как далеко 2 USB 2.0 Полная скорость может достичь для хранения массового хранения USB.

Настройка / оптимизация его на STM32F103 C8 или CB может быть довольно сложной, учитывая его ограничения SRAM 20K, если мы сохраним «буфер» 4K, остается 16 тыс. В настоящее время я предполагаю, что большинство классов и библиотек практически модульны, чем «оптимизирован для голого металла», в некотором смысле, если мы сделаем выделенную оптимизацию между SPI и USB и исключительно для хранения массы USB, оно может в значительной степени раздвинуть границы того, что возможно. Но сохранение модульного модуля упростило бы техническое обслуживание, сделать коды более читаемыми, меньше ошибок и т. Д., И что будет легче «подключить и воспроизводить» модули

Я думаю, что USB -автобус с несколькими устройствами также может быть очень занят и сам по себе может быть его собственным узким местом, а не STM32
всего 2 цента

Пито
Солнце 10 июня 2018 г. 8:40
Со старым 512 МБ SDCARD:
1. 10 МБ копия ПК->Bluezet: 33Secs, 303KB/SEC
2. 10 МБ Скопируйте блюз->ПК: 21 секунды, 476 КБ/сек
С файлом 10 МБ на SDCARD окно E: e: 3SECS после подключения Bluezet в порт USP.

AG123
Солнце 10 июня 2018 г. 13:23
Это выглядит довольно быстро даже в «неоптимизированном состоянии», но кажутся немного менее уверенным, так это то, что пропускная способность USB на 10 Мбит / с каждое устройство и т. Д.

f3flight
Пн 11 июня 2018 г. 12:53
Привет, Арпрос,

Я сталкиваюсь с проблемой при использовании вашей LIB, в основном устройство висит, как только оно вступает в любой код, связанный с USB. Прежде всего, независимо от того, какой пример я проверю, я вижу только «сериал Maple» в устройствах (с использованием Windows), поэтому не появляются дополнительные устройства. Если я просто использую пример Blink, он работает нормально, так что нет проблем с миганием чипа. Однако, если я использую какой -либо из примеров USBComposite, доска ничего не делает. Если я изменю пример на Blick несколько раз перед выполнением USB -функции (я.эн. Перед клавиатурой.print ()), он моргает, а затем висит. Комментируя использование такой USB -функции заставляет устройство запускать петлю без проблем.

Любые идеи, почему это может быть? Я думаю, что наиболее прямым показателем проблемы является то, что в системе нет дополнительного устройства. Может быть, потому что я не заменил резистор 10 кол R10 по умолчанию R10? Как я упоминал ранее, устройство отображается как DFU OK (при использовании загрузчика Bootloader_only Bootloader), а также последовательно (при использовании Bootlear+пустой тип Scketch BootLeader), и я могу перепрофировать его, используя режим Arduino IDE "STM32DUIN. Я загрузил BootLeader, используя J-Link, если это важно.

Пито
Пн 11 июня 2018 г., 9:06
..Вы должны удалить сериал Maple, а также удалить его драйвер..

ViewTopic.PHP?f = 13&t = 2926&начало = 120#P46139

f3flight
Пн 11 июня 2018 г., 16:32
Пито,

Спасибо, это помогло!

Arpruss, Pito,

Теперь я узнал, что USBMIDI не совместим с другими компонентами. Это не так у основных Arduino Libs, там они основаны на некотором модуле Pluggableusb, и я могу создать съемку серийного + клавиатура + Mouse + Midi, просто включив заголовки клавиатуры.H, мышь.H midiusb.h и иметь "клавиатуру.начинать()..."В моей настройке. С USBComposite у меня есть этот код:
#ifdef _LIBMAPLE_STM32_H_ //my goal is to make the same app compile on stm and arduino so I'm testing this #ifdef thing... works ok #include #include #endif void setup() { USBHID.setReportDescriptor(hidReportKeyboardMouse); // most likely this is not compatible as MIDIUSB is also a HID device? USBComposite.clear(); CompositeSerial.registerComponent(); USBHID.registerComponent(); //USBMIDI.registerComponent(); // if I uncomment this, the device is not recognized USBComposite.begin(); } void loop() { delay(10000); }

Арпрос
Вт 12 июня 2018 г. 14:04
Я бы экспериментировал с порядком и комбинацией компонентов. Попробуйте MIDI+Serial и MIDI+HID.
Я думаю, что Windows не распознает все возможные комбинации.

Арпрос
Ср 13 июня 2018 г. 15:32
Я провел несколько экспериментов с Win10.

HID+MIDI+Serial не может работать вместе.

MIDI+Serial Works.

MIDI+HID работает.

Serial+Mid и Hid+Midi не работал из -за ошибки в библиотеке, которая требовала, чтобы MIDI был первым зарегистрированным компонентом. Я только что исправил ошибку. Это не помогает с HID+MIDI+Serial. Может быть, это слишком много для окон, чтобы справиться.

Пито
Ср 13 июня 2018 г., 16:51
Статистически это более вероятно, проблема в библиотеке, чем в Winx :)

Я думаю, что наиболее привлекательной комбо было бы серийное + массовое хранилище..

Арпрос
Ср 13 июня 2018 г. 9:10 вечера
[Пито - Ср 13 июня 2018 г. 16:51] - Я думаю, что наиболее привлекательной комбо было бы серийное + массовое хранилище..
Это работает нормально.

Арпрос
Ср 13 июня 2018 г., 22:01
Я обнаружил, почему некоторые комбинации не работают, и добавили это в файл readme:

Есть 320 байт аппаратной буферной памяти, доступные после учета конечной точки 0. Следующее
Являются ли буферные потребности текущих компонентов:

* USB -сериал: 144 байта

* USB HID: 64 байта

* USB -массовое хранилище: 128 байтов

* USB MIDI: 128 байтов

* Xbox360 Контроллер: 64 байта

Это устанавливает ограничение на то, что комбинации можно использовать вместе. Например, Hid+Mass Storage+MIDI должно быть теоретически
OK (320 байтов), но серийный+HID+Mass Storage (336 байтов) потерпит неудачу (и вернет ложь от USBComposite.begin ()) из -за
Отсутствие памяти.

Арпрос
Чт 14 июня 2018 г. 9:33 утра
Я добавляю код для управления размерами буфера. Я только что добавил его в репозиторий в композитный последовательный код, и могу добавить его в другие плагины тоже. Например, теперь вы можете сделать: void setup() { USBHID.setReportDescriptor(hidReportKeyboardMouse); USBComposite.clear(); USBMIDI.registerComponent(); // 128 bytes of PMA USBHID.registerComponent(); // 64 bytes of PMA CompositeSerial.setRXPacketSize(32); CompositeSerial.setTXPacketSize(32); CompositeSerial.registerComponent(); // 80 bytes of PMA (cannot control size of control channel PMA) USBComposite.begin(); // total 272 bytes of PMA, out of 320 available }

Арпрос
Солнце 17 июня 2018 г., 19:57
Я добавил код, чтобы вы также могли контролировать размер пакета в HID и MIDI, и в Readme была добавлена ​​дополнительная информация о комбинированных плагинах.MD -файл.

Арпрос
Чт 16 августа 2018 г. 14:49
Я сделал серьезные изменения в библиотеку, чтобы сохранить Flash и RAM. Ранее было много удобных случаев, таких как Bootkeyboard и USBHID, определили. В новой версии единственный удобный объект - USBComposite. Все остальное должно быть явно индиунированным. Это требует незначительных переписываний ко всем коду, используя библиотеку.

Видеть: https: // github.com/arpruss/usbhid_stm32 ... O-0.90.текст

Кроме того, обратите внимание, что все примеры были обновлены до нового API.