Здравствуйте друзья! Ардуино леонардо как HID

Тема в разделе "Arduino & Shields", создана пользователем Gregori, 14 ноя 2019.

  1. Gregori

    Gregori Нуб

    Купил ардуино леонардо, подключаю его к юсб порту подрубаю ему библиотеку keybord.h хочу чтоб он открывал текстовую консоль самостоятельно и выполнял кусок кода, все работает, НО.... как сделать так чтоб данная игрушка проверяла язык ввода символов, а то давал пару раз аборигенам, они были вшоке: - "что то выскакивает, что то выскакивает, а потом исчезает и лог тебе не отправлен в итоге." Помогите дилетанту...
     
  2. NikitOS

    NikitOS Король шутов Администратор

    Никак.
    У Вас клавиатура язык понимает? Не думаю
    Тут так же
     
  3. akl

    akl Гуру

    можно сделать через альт-коды

    но там вроде тоже может не сработать если нумлок выключен или типа того не помню уже.
     
    Последнее редактирование: 14 ноя 2019
  4. parovoZZ

    parovoZZ Гуру

    клава посылает коды клавиш. Ни про какой язык она никогда не слышала, да и что там на клавишах нарисовано ей глубоко фиолетово.
     
    DetSimen и NikitOS нравится это.
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Обработчик скан-кодов от клавы сторожит приход кода переключения языка, например "Ctrl+Shift". Устанавливает/сбрасывает флаг и перекодирует сканы по флагу.
     
    arkadyf нравится это.
  6. akl

    akl Гуру

    не очень понял - это как именно?
    допустим у ТС ардуина в виде клавиатуры, ему чтобы писать русскими буквами например надо знать какая раскладка в данный момент выбрана в компе. Как ардуина может это узнать, если это не она переключала? хотя наверно я не понял что имелось в виду.
    Насколько я помню клавиатура может получать только состояния капслока, нумлока и скроллока. (кстати можно для ввода аль-кодами таким образом отследить включен ли нум-лок)
     
  7. NikitOS

    NikitOS Король шутов Администратор

    Не знаю, как в винде, но моя убунта при русской раскладке включает индикатор ScrollLock, и при английской выключает...
    Можно было бы воспользоваться...
     
  8. parovoZZ

    parovoZZ Гуру

    Любыми другими за пределами стандартных.
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Говорил препод в универе - "В наличие отсутствие какого-либо присутствия". Короче, какой вопрос - такие ответы. Я понял,что к Ардуине подключают "магазинную" клаву, а Ардуину к компу. И задача Ардуины понимать переключение языка.
    Это как - сканирует матрицу кнопок ? Это что-то из пещерного века.
    Индикаторы КапсЛок, НумЛок и СкроллЛок - процессор клавиатуры включает по командам от компа. Сами скан-коды клавы не меняются (вроде...)..
     
    Последнее редактирование: 14 ноя 2019
  10. akl

    akl Гуру

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

    Daniil Гуру

    А через консоль можно в компорт отправить байт самой себе?
     
  12. timon

    timon Гик

    Всмысле?
    Послать, отловить на девайсе, отправить обратно? ))
     
  13. parovoZZ

    parovoZZ Гуру

    Надо два компорта замкнуть меж собой)
     
    Daniil нравится это.
  14. akl

    akl Гуру

    чет сложно получается.
    Если вопрос только во вводе нужных букв, то самое простое мне кажется альт-коды. ☺☻♥♦♣♠
    любый буквы можно вводить независимо от раскладки. возможно даже нумлок не будет мешать.
    Но для начала лучше узнать что конкретно делает ардуина Топикстартера
     
  15. Gregori

    Gregori Нуб

    Вы все верно поняли! Да взял на али экспрес ардуинку в виде флешки, комп определяет как леонардо,И вот это штука должна кнопки нажимать в системе сама, понимаю что можно .bat'ником оформить но жаль же потраченых 265 рублей:) У кого какие варианты будут, с отправкой самому себе и альт коды, обрисуйте реализацию.
     
  16. Daniil

    Daniil Гуру

    ага, это ж ардуина. Но я понял, тут ком-портов не хватает.
    Только, если присоединить к ней uart-usb, то можно такое провернуть и определить раскладку. (если вообще можно из консоли передавать данные)
     
  17. parovoZZ

    parovoZZ Гуру

    На леонарде можно и 2, и 3 компорта открыть. А рядом HID пристроить. А внутри из одного в другой посылать.
     
    Daniil нравится это.
  18. akl

    akl Гуру

    с альт-кодами вроде все просто - зажимаешь альт (то есть ставишь модификатор в 0x04), отправляешь нажатие, потом с тем же модификатором отправляешь нажатие с кнопкой кейпада (0x59-0x61 это 1-9, 0x62 это 0), так повторяешь для всех нужных цифр. потом все обнуляешь и отправляешь пустой репорт.

    я использовал v-usb, там делал такую корявую функцию:
    Код (C++):
    //if 1st digit=0(Ins) - set zero=0 else zero=1. e.g.:
    // alt_input(0,138); // Alt0138 - Љ
    // alt_input(1,138); // Alt138 - К
    static void alt_input(uint8_t zero , uint8_t code){
        uchar dig[4];
        int8_t i;
        for(i=0; i<4; i++){dig[i]=0;}
        for(i=3; (i>=0 && code!=0); i--){
            dig[i]=code%10;
            code=code/10;
        }
        i=0;
        while(dig[i]==0){i++;}
        if(zero==0){i--;}

        while(i<4){
            keyboard_report.report_id=1;
            keyboard_report.keycode[0] = 0;
            keyboard_report.modifier = (1<<2);
            send_report_once();
            if(dig[i] == 0){
                 keyboard_report.keycode[0] = 98;
                keyboard_report.modifier = (1<<2);
            }else{
                keyboard_report.keycode[0] = 88 + dig[i];
                keyboard_report.modifier = (1<<2);
            }
            send_report_once();
            i++;
        }
        keyboard_report_reset(); // release keys
        send_report_once();
        wdt_reset();

    }
     
    еще к этому желательно запилить функцию пересчета букв в альт-коды смотря в каком виде они поступают изначально. А еще там два способа - с нулем в начале и без, надо смотреть таблицы и разбираться.
    с ардуиновой библиотекой конечно будет не так как с в-юсб, но вроде там штуки аналогичные
    keyboard_report.keycode, keyboard_report.modifier, send_report_once(), keyboard_report_reset() и т.п. Вот их найти в библиотеке и из них склепать нужную функцию.

    Как отслеживать включенность нум-лока с адруиновой библиотекой не знаю, но скорее всего тоже можно.

    Но мне кажется в принципе не очень метод с ардуиной - а вдруг во время ввода на компе кто-то что-то будет вводить с клавиатуры или мышью ткнет - всё собьется нафиг
     
    Последнее редактирование: 15 ноя 2019
  19. Открываю одно консольное окно и получаю идентификатор процесса, отображаю его.
    Код (Bash):
    alex@lenovo-e480:~$ echo $BASHPID
    3138
    alex@lenovo-e480:~$
    Открываю другое консольное окно и делаю тоже самое
    Код (Bash):
    alex@lenovo-e480:~$ echo $BASHPID
    3195
    alex@lenovo-e480:~$
    Теперь из другого консольного окна отправлю пару строк, на кириллице и на английском, в stdout первого окна
    Код (Bash):
    alex@lenovo-e480:~$ echo $BASHPID
    3195
    alex@lenovo-e480:~$ printf "\nThe test\nЭто проверка\n" >/proc/3138/fd/1
    alex@lenovo-e480:~$
    А вот что получилось в первом окне
    Код (Bash):
    alex@lenovo-e480:~$ echo $BASHPID
    3138
    alex@lenovo-e480:~$
    The test
    Это проверка
     
     
    parovoZZ нравится это.
  20. SergeiL

    SergeiL Оракул Модератор

    Во, так перекидывали вывод в 1987 г.
    Только c Сишел. :)