Помогите с кодом для arduino_leonardo

kurales
Offline
Зарегистрирован: 24.06.2017

Здравствуйте, есть arduinoLeonardo его функция быть клавиатурой которая напечатает и скачает файл
но при подключении его к компу Windows начинает поиск драйверов для неизвестного устройства и вот
задача что бы он не начинал печатать пока винда не прекратит свой поиск и даст ему права действовать
как клава, но пока идет поиск дров леонардо отрабатывает свой код.
Нужно сделать так ч тобы он нажимал кнопку CapsLock пока не изменится состояние светодиода на клаве
тогда он выключает caps_lock и начинает выполнение кода.
Дак вот этот код:

int ledkeys(void) {return int(keyboard_leds);}
boolean is_caps_on(void) {return ((ledkeys() & 2) == 2) ? true : false;}

void wait_for_drivers()
{
    boolean CapsLockTrap = is_caps_on();
    while(CapsLockTrap == is_caps_on())  //нажимаем клавишу CapsLock пока не изменится ее состояние
    {
            Keyboard.press(KEY_CAPS_LOCK);        //нажали CapsLock
            delay(200);        
            Keyboard.releaseAll();        //отпустили
            delay(200);
    }

Но вылазит ошибка вот она:

http://pixs.ru/showimage/screen1jpg_6624538_26639120.jpg

Замучился решать этот вопрос, перепробывал патчи для файлов /usr/share/arduino/hardware/arduino/cores/arduino/HID.cpp и USBAPI.h менял на разные библиотеки не получается ничего, посоветуйти как победить эту ситуацию.
Спасибо.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

kurales
Offline
Зарегистрирован: 24.06.2017

Кстати да спасибо за совет, я ещё думал как сменить название Леонардо которое определяется в Винде на название флешки например, а тут оказывается его вообще можно удалить)

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

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

Atmega32u4 пишут вроде как шьется через юсб, вроде как и программатор не нужен.

И тут вот еще что обратная связь с CapsLock я хотел её использовать как проверку на то какой язык включен в Винде и в случае русского языка чтоб нажимал кнопки Alt+Shift и только если проверка пройдена тогда запускать код.

Спасибо.

 

kurales
Offline
Зарегистрирован: 24.06.2017

Всё перерыл, везде написано как прошить мк, а как удалить бутлоадер не могу найти.

Может прошивку.hex забить нулями и перезаписать загрузчик, получится так?

Разобрать не могу её если программатором шить.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales, не вводите людей в заблуждение вот ардуино леонардо:

Если МК mega32u4 запихали в флэшку, то это не делает её ардуиной Леонардо. С ней вы обречены на мучение с дровами..

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Что хоть это за девайс-то такой? Просто любопытно. Флэшка-убийца? Типа втыкаешь, а она какой-нибудь Format C: набирает. Более полезного что-то ничего на ум не идёт...

kurales
Offline
Зарегистрирован: 24.06.2017

Вот что внутри, вроде пишут что леонардо, но я не особо в этом разбираюсь.

А возможности достаточно большие, вопрос только в чем заинтересованность)

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

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Ну, я похоже недалёк был от истинного назначения этого девайса. Тут вот прямо написано - Плохой жук, плохой! :)

1PCS BadUsb Beetle Bad USB ATMEGA32U4 Development Board virtual keyboard

Сам-то Beetle может и представляет интерес, как маленькая ардуинка. Но в виде флэшки, однозначно пакостничать! :)

kurales
Offline
Зарегистрирован: 24.06.2017

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

Может реферат быстро накатать)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

kurales пишет:

Вот что внутри, вроде пишут что леонардо

Хорош нести пургу, перечитайте ещё раз сообщение #4

kurales
Offline
Зарегистрирован: 24.06.2017

В чём пурга, изложи?

Сказал же что не разбираюсь, не леонардо дак не леонардо)

В чем проблема?)

 

kurales
Offline
Зарегистрирован: 24.06.2017

kalapanga Не помешает такую при себе иметь, вдруг пригодится)

kalapanga
Offline
Зарегистрирован: 23.10.2016

kurales пишет:

В чём пурга, изложи?

Сказал же что не разбираюсь, не леонардо дак не леонардо)

В чем проблема?)

Имеется ввиду, что Ардуино Леонардо - это всё-таки конкретный конструктив. Другое дело, что здесь контроллер такой же и соответственно в IDE эта платка как Леонардо программируется. Вот продавцы его и обзывают иногда smallest Leonardo.

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

kurales
Offline
Зарегистрирован: 24.06.2017

kalapanga как то полюбому разбирается но сидит всё плотно, если только корпус разгибать, а платка этаже которя на фото потому что и цвет и буквы видно в начале разъема, я вот только думаю эти выводы срезаны потому что по размерам она меньше в ширину покрайне мере, но припаятся не проблема, если она не прошивается через юсб то придется в любом случае разбирать, потому что стереть бут это идеальное решение, а то дрова от 20 до 30 секунд устанавливаюстя.

kurales
Offline
Зарегистрирован: 24.06.2017

Тоесть по сути я могу выствить фьюз BOOTRST  в 1 и этот мк будет начинать загрузку сразу с программы.

А бутлоадер будет загружаться в конце или будет игнорироваться?

И смогу ли я менять скетч привычным способом на этом устройстве при такой настройке фьюза?

Посути даже если нет то не страшно.

Спасибо

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales, FUSE вы не исправите без программатора. Но это не единственная проблема, есть ещё одна. В ардуинах на этом чипе ком порт создаётся дважды - в бутлоадере и в основной программе, причём во втором случае насильно, даже если вы не используете Serial. Зачем? -а эта штука обеспечивает программную перезагрузку ардуины, без неё пришлось бы давить на ресет. И вот теперь самое интересное -этот ком порт просто так не  отключается, он прописан в дуриновский библиотеке, и придётся изрядно повозиться, что б найти как его отключить не отключив при этом возможность эмулировать клавиатуру.

kurales
Offline
Зарегистрирован: 24.06.2017

Программатор у меня есть, флеху разобрал, программатор подключил, у самого у меня линукс, так что пробую через виртуальную машину, но пока что то не получается.

kurales
Offline
Зарегистрирован: 24.06.2017

А если просто фьюз BOOTRST выставить чтобы программа начиналась не с бутолоадера, тоже будет заморочка с портами?

Можно вообще просто фьюз один изменить и болше ничего не трогать или для этого все равно нужна хекс бутлоадера?

В Винду закачал несколько программ Algorithm Builder, UniProf и еще какая-то прога не помню, пытаюсь просто прочитать фьюзы, но походу нет драйверов программатора, не видят программы его.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales, ну а к чему я это писал -именно будет. Поэтому нет смысла отключать, обойдя одни грабли вы тотчас наступите на другие. Так что начинайте копать потроха библиотеки..

kurales
Offline
Зарегистрирован: 24.06.2017

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

Как разобраться в потрохах библиотек?Что искать нужно?

Спасибо.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales, место, откуда вызывается Communication Device Class. Нужно запретить этот вызов.

kurales
Offline
Зарегистрирован: 24.06.2017

dimax  вас не затруднит объяснить поподробнее, а то я не чего не понял.

Через какую программу вообще посоветуете работать со фьюзами, arduino-IDE?

И где это запретить, а то пробую сейчас в виндос, драйвера для программатора "USBASP USBISP AVR" установил, но программы не хотят читать фьюзы, пишут что-то про не верный порт.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales, универсальная программа одна -avrdude. Есть в составе arduinoIDE , а так же на оффсайте есть версии под другие ОС.  Есть для неё какие-то  GUI, но это уже дело вкуса. Я из командной строки работаю. мой добрый совет забить на это. Вам эта задача не плечам, по крайней мере сейчас.

kurales
Offline
Зарегистрирован: 24.06.2017

Сейчас попробывал залить скетч через программатор в Linux все сработало нормально и порт почему то один показыват или я не там смотрю?

Легко сказать забить на это)

Почему не по плечам?В чем трудность, надо знать программирование?

 

 

kurales
Offline
Зарегистрирован: 24.06.2017

Что-то напартачил я с этой флешкой, в Винду втыкаю не нажимает клавиши Win+r, а код отписывает если блокнот открыть.

Хотя ни чего не делал, просто пытался диагностировать, а что-то изменилось в этой флешке.

По моги dimax что сделать, как вопрос решить.

Пробывал вчера программу avrdude, окликается нормально, какую команду вбить чтобы всё было хорошо?)

Вчера еще программатор перепрошил, он ошибку показывал при заливки скетча, хотя скетч заливал.

Через что вообще лучше шить через программатор или arduino_UNO?

Спасибо.

 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales, помочь больше нечем. Основную задачу я вам описал в #20, программатор для работы в этом направлении не нужен. Он понадобится в самом конце, что б удалить/запретить бутлоадер.

kurales
Offline
Зарегистрирован: 24.06.2017

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

Communication Device Class  запретить его нужно через программу avrdude?Или в самом коде нужно чтото дополнить?

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

kurales пишет:

Communication Device Class  запретить его нужно через программу avrdude?Или в самом коде нужно чтото дополнить?

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

kurales
Offline
Зарегистрирован: 24.06.2017

Пока не могу забить, надо как то решить этот вопрос.

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

Как вообще компьютер понимает что устройство это клавиатура? Из залитого скечта со всеми прилигающими библиотеками?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Цитата:

Как вообще компьютер понимает что устройство это клавиатура?

По дескрипторам.

Цитата:

Из залитого скечта со всеми прилигающими библиотеками?

Да, весь функционал программируется в коде (скетче).

kurales
Offline
Зарегистрирован: 24.06.2017

Спасибо,  ща понял куда копать)

kurales
Offline
Зарегистрирован: 24.06.2017

dimax Подскажите пожалуйста, нашел я похожие классы в таких файлах USBAPI.h, USBCore.h, CDC.cpp в этой папке /usr/share/arduino/hardware/arduino/cores/arduino# Это те файлы в которых надо запретить вызов Communication Device Class?

И ещё когда хотел проверить программатор, то прошил тот же скетч про скачке файла через программатор и с этого времени эта "флешка" не хочет нажимать кнопку Win и 'r' по каоманде Keyboard.press('r');

Прочитал что при использовании программатора usbapi он стирает всю flesh память вместе с бутлоадером, дак как стирание бутлоадера могло повлиять на поведение "флешки"?

Может быть изминились фьюзы? Вообще изменение фьюзов могло повлиять на определение  устройства операционной системой?

Спасибо.

kurales
Offline
Зарегистрирован: 24.06.2017

dimax со всем что я спрашивал,  разобрался но с отключением вызова Communication Device Class не могу найти инфу и работы много не хватает не времени не сил разобраться в кодах и библах.

За деньги поделись информацией в каких файлах что нужно изменить.

Спасибо.