Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-08-29 12:13:07

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

wysłać byte do urządzenia

Witam!
Używam ostatnio myszki Microsoft Arc Touch Mouse, niestety wibracje w tej myszce można wyłączyć tylko pod Windowsem. Trafiłem na ten blog http://julien.danjou.info/blog/2012/logitech-k750-linux-support ,zainstalowałem VirtualBoxa i udało mi się przechwycić Wiresharkiem pakiety, które wysyła host (Windows) do tej myszki, by wyłączyć/włączyć wibracje.

wygląda to mniej więcej tak;

Kod:

0000  00 18 dc f4 00 00 00 00  53 02 80 05 02 00 00 3c   ........ S......<
0010  8a a4 3b 50 00 00 00 00  8a 5b 06 00 8d ff ff ff   ..;P.... .[......
0020  1b 00 00 00 00 00 00 00  a1 01 22 03 02 00 1b 00   ........ ..".....
0030  00 00 00 00 00 00 00 00  00 02 00 00 00 00 00 00   ........ ........

teraz mam pytanie;
jest jakiś sposób na wysłanie tych czystych danych do urządzenia USB? lub jak analizować ten zapis?


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#2  2012-08-29 12:29:14

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: wysłać byte do urządzenia

Chyba odpowiedź masz w blogu, do którego link wkleiłeś. Czyż nie?

Offline

 

#3  2012-08-29 15:03:01

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: wysłać byte do urządzenia

No tak, chociaż myślałem, że jest inna droga na przesłanie tych bytów niż libusb/libhid. Będę musiał przeczytać dokumentacje może mi się uda coś wykombinować

Ostatnio edytowany przez dominbik (2012-08-29 15:07:29)


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#4  2012-08-29 15:48:41

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: wysłać byte do urządzenia

Po co inna skoro ta najprostsza bo gotowa?

Offline

 

#5  2012-08-29 21:53:41

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: wysłać byte do urządzenia

Racja, ale on tam odbiera dane z klawiatury i je analizuje. A ja chciałbym wysłać z hosta -> myszka ;/


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#6  2012-08-29 22:08:13

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: wysłać byte do urządzenia

strzelam: echo "coś" > /dev/input/mouseX?


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#7  2012-08-29 22:12:27

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: wysłać byte do urządzenia

Gdyby taki sposób zadziałał byłoby super. Myślałem o tym, ale wydaje mi się to za proste - po co zatem libusb, libhid?
Pytanie tylko czy zamiast "coś" mogę wpisać te swoje bajty z tego pakietu. Jutro się pewnie tym pobawię - mam nadzieję, że myszki to nie rozwali ;p


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#8  2012-08-30 11:12:36

  Graffi - Użytkownik

Graffi
Użytkownik
Skąd: Sulejówek
Zarejestrowany: 2005-10-03
Serwis

Re: wysłać byte do urządzenia

jak się zepsuje to wyserwisuj :)
softowo uwalona przejdzie bo przecież to nie jest uszkodzenie mechaniczne :P

Offline

 

#9  2012-08-30 12:19:06

  fervi - Użytkownik

fervi
Użytkownik
Zarejestrowany: 2010-03-14

Re: wysłać byte do urządzenia

Ja mam jedno pytanko (Offtopic)

Po cholerę w myszce wibracje?

Fervi

Offline

 

#10  2012-08-30 13:11:05

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: wysłać byte do urządzenia

Dowiesz się, jak będziesz duży. ;)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#11  2012-08-30 13:24:51

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: wysłać byte do urządzenia

Hhah nie, zamiast kółeczka jest panel dotykowy i jak przewijasz stronę to wibruje (Microsoft Arc Touch Mouse) imitując kółeczko. Niestety, nie zrobili możliwości wł/wył tego pod Linuxem (tylko pod Windowsem jak się zainstaluje program).

azhag napisał(-a):

strzelam: echo "coś" > /dev/input/mouseX?

a tym sposobem można wysyłać do urządzenia byte czy tekst? Jak byś to wkleił?

Wkleiłem jako skrypt, by wysyłał za porządkiem dokładnie to samo co host(windows) do myszki, ale nie działa, Podejrzewam, że nie można wysyłać po prostu przez echo wklejając te liczby/bajty z wiresharka (bez tych indexów na początku typu 0010, 0020, 0030, 0040). Jak dam

Kod:

cat /dev/input/mouse0

to też mi nie pokazuje bytów tylko jakieś dziwne znaczki.

skrypcik;

Kod:

#!/bin/bash
echo "00c005eb00000000530280050200003c95a43b50000000008a160d008dffffff1b00000000000000a101220302001b0000000000000000000002000000000000" > /dev/input/mouse0
echo "00c005eb00000000530280050200003c95a43b5000000000a5200d008dffffff1300000000000000a10120030200130000000000000000000002000000000000" > /dev/input/mouse0
echo "00c005eb00000000530200050200000095a43b5000000000e52a0d008dffffff1b0000001b0000002109220302001b0000000000000000000000000000000000228101001f00000000000000000000000000000000000000000000" > /dev/input/mouse0

w sumie, by wyłączyć hibernacje ten windowsowy program wysyła te 3 pakiety, myszka na każdy odpowiada jednym. wysyłam dokładnie to samo i gó*** ;/


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#12  2012-08-30 13:29:28

  djjanek - Użytkownik

djjanek
Użytkownik
Skąd: whereis
Zarejestrowany: 2007-11-15
Serwis

Re: wysłać byte do urządzenia

echo wysyla ciag znakow w ascii lub utf8 a ty podajesz hex jak to ma zadzialac? poszukaj w opcjach a ciag byl traktowany jako hex.

Offline

 

#13  2012-08-30 14:31:36

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: wysłać byte do urządzenia

dominbik napisał(-a):

azhag napisał(-a):

strzelam: echo "coś" > /dev/input/mouseX?

a tym sposobem można wysyłać do urządzenia byte czy tekst? Jak byś to wkleił?

echo służy do tekstów. Musisz skorzystać z jakiegoś polecenia, który wysyła w innym "formacie" (od biedy możesz utworzyć odpowiedni plik i użyć cat).

Zaznaczam też, że nie wiem czy w ten sposób można wysłać coś do myszki. Ale zmodemami w każdy razie tak się to robi :)


Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#14  2012-08-31 20:17:03

  gindek - Zubr, bydle na etacie.

gindek
Zubr, bydle na etacie.
Skąd: Z puszczy.
Zarejestrowany: 2008-12-08

Re: wysłać byte do urządzenia

wciaz nie rozumiem po co sie jebac z bash skoro typek wrzucil gotowy kod programu ktory to robi ....
wystarczy skopiowac do "jakis_tam_plik.c" potem daj

Kod:

gcc jakis_tam_plik.c -o nazwa_programiku_jaki_chcesz_uzyskac

jedyne co musisz zrobic to zmienic wysylany ciag bajtow na "twoj" i vendor i dev ID na zgodne z twoim.

jedyne sensowne wyjasnienie dlaczego "odbiera i analizuje dane" to:
zeby wyświetlic napis " light on " , ... sadze ze logu "girls fun tool " nie bedziesz potrzebowal bo poczujesz wibracje.

wasniejsze tutaj jest twoje lenistwo i wyslanie calego syfnego pakietu.
( zamiast odebrac dwa, kiedy wlaczasz, kiedy wylaczasz i zrobic diff na nich ).

[edit]
ale zeby nie bylo , drugi link google
http://stackoverflow.com/questions/1604765/linux-sh … ring-to-bytes

pytanie:
http://www.google.pl/search?client=opera&rls=en … 7&bih=957

Ostatnio edytowany przez gindek (2012-08-31 20:28:01)


" Wojny przychodzą i odchodzą, a moi żołnierze są wieczni"


"Zbuduj mały, dziarski router z udostępnionych przez prowadzącego części od Kamaza?"

Offline

 

#15  2012-09-03 14:27:41

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: wysłać byte do urządzenia

Masz rację. Nie doczytałem, że ten program również wysyła pakiet do urządzenia.
na początku miałem problem z biblioteką libusb (#include <libusb.h>)
doinstalowałem libusb-dev libusb-1.0-0-dev kompiluje poleceniem;

Kod:

gcc program.cpp -o program -I/usr/include/libusb-1.0/ -lusb

to jest ten kod;

Kod:

/* Written by Julien Danjou  in 2012 */

#include <linux/hid.h>

#include <libusb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>z

int main(void)
{
    libusb_context *ctx;
    libusb_init(&ctx);
    libusb_set_debug(ctx, 3);

    /* Look at the keyboard based on vendor and device id */
    libusb_device_handle *device_handle = libusb_open_device_with_vid_pid(ctx, 0x046d, 0xc52b);

    fprintf(stderr, "Found keyboard 0x%p\n", device_handle);

    libusb_device *device = libusb_get_device(device_handle);

    struct libusb_device_descriptor desc;

    libusb_get_device_descriptor(device, &desc);

    for(uint8_t config_index = 0; config_index < desc.bNumConfigurations; config_index++)
    {
        struct libusb_config_descriptor *config;

        libusb_get_config_descriptor(device, config_index, &config);

        /* We know we want interface 2 */
        int iface_index = 2;
        const struct libusb_interface *iface = &config->interface[iface_index];

        for (int altsetting_index = 0; altsetting_index < iface->num_altsetting; altsetting_index++)
        {
            const struct libusb_interface_descriptor *iface_desc = &iface->altsetting[al>tsetting_index]; 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LINIA 39^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            if (iface_desc->bInterfaceClass == LIBUSB_CLASS_HID)
            {
                libusb_detach_kernel_driver(device_handle, iface_index);
                libusb_claim_interface(device_handle, iface_index);

                unsigned char ret[65535];

                unsigned char payload[] = "\x10\x02\x09\x03\x78\x01\x00";

                if(libusb_control_transfer(device_handle,
                                           LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
                                           HID_REQ_SET_REPORT,
                                           0x0210, iface_index, payload, sizeof(payload) - 1, 10000))
                {
                    int actual_length = 0;

                    while(actual_length != 20 || strncmp((const char *) &ret[9], "GOOD", 4))
                        libusb_interrupt_transfer(device_handle,
                                                  iface_desc->endpoint[0].bEndpointAddress,
                                                  ret, sizeof(ret), &actual_length, 100000);

                    uint16_t lux = ret[5] << 8 | ret[6];

                    fprintf(stderr, "Charge: %d %%\nLight: %d lux\n", ret[4], lux);
                }

                libusb_release_interface(device_handle, iface_index);
                libusb_attach_kernel_driver(device_handle, iface_index);
            }
        }
    }

    libusb_close(device_handle);
    libusb_exit(ctx);
}

i mam błąd w kompilacji;
program.cpp: In function ‘int main()’:
program.cpp:39:87: error: ‘al’ was not declared in this scope
program.cpp:39:90: error: ‘tsetting_index’ was not declared in this scope
chodzi o linię 39

co do echo

Kod:

#!/bin/bash
echo -e "\x00\xc0\x05\xeb\x00\x00\x00\x00\x53\x02\x80\x05\x02\x00\x00\x3c\x95\xa4\x3b\x50\x00\x00\x00\x00\x8a\x16\x0d\x00\x8d\xff\xff\xff\x1b\x00\x00\x00\x00\x00\x00\x00\xa1\x01\x22\x03\x02\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" > /dev/input/mouse0
echo -e "\x00\xc0\x05\xeb\x00\x00\x00\x00\x53\x02\x80\x05\x02\x00\x00\x3c\x95\xa4\x3b\x50\x00\x00\x00\x00\xa5\x20\x0d\x00\x8d\xff\xff\xff\x13\x00\x00\x00\x00\x00\x00\x00\xa1\x01\x20\x03\x02\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00" > /dev/input/mouse0
echo -e "\x00\xc0\x05\xeb\x00\x00\x00\x00\x53\x02\x00\x05\x02\x00\x00\x00\x95\xa4\x3b\x50\x00\x00\x00\x00\xe5\x2a\x0d\x00\x8d\xff\xff\xff\x1b\x00\x00\x00\x1b\x00\x00\x00\x21\x09\x22\x03\x02\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x81\x01\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" > /dev/input/mouse0

niestety nie działa. Zna się ktoś może na C++?

Ostatnio edytowany przez dominbik (2012-09-03 14:30:07)


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#16  2012-09-03 15:55:55

  TheAnt - Użytkownik

TheAnt
Użytkownik
Skąd: Silesia Moloch
Zarejestrowany: 2012-01-24
Serwis

Re: wysłać byte do urządzenia

dominbik napisał(-a):

Kod:

for (int altsetting_index = 0; altsetting_index < iface->num_altsetting; altsetting_index++)
        {
            const struct libusb_interface_descriptor *iface_desc = &iface->altsetting[al>tsetting_index]; 
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!LINIA 39^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

i mam błąd w kompilacji;
program.cpp: In function ‘int main()’:
program.cpp:39:87: error: ‘al’ was not declared in this scope
program.cpp:39:90: error: ‘tsetting_index’ was not declared in this scope
chodzi o linię 39

Ekspertem od kodowania nie jestem, ale wygląda mi na to, że ma tam być "altsetting_index" zamiast "al>tsetting_index".
Tym bardziej, że powyżej masz taką właśnie nazwę zadeklarowaną:

Kod:

int altsetting_index = 0

Spróbuj usunąć ten ">" i zobaczyć czy się uda.
Jeśli sam do tego doszedłeś to przepraszam za zwrócenie uwagi.

Pozdrawiam
TheAnt

Ostatnio edytowany przez TheAnt (2012-09-03 15:57:54)


If I go insane please don't put your wires in my brain...

Offline

 

#17  2012-09-04 14:57:33

  dominbik - Członek DUG

dominbik
Członek DUG
Zarejestrowany: 2011-07-25

Re: wysłać byte do urządzenia

Ok. Po edycji rzeczywiście kompilacja poleceniem;

Kod:

g++ -Wall -c Roboczy/program.cpp -I/usr/include/libusb-1.0/

się udała.

Niestety po uruchomieniu programu

Kod:

./program.o: 5: ./program.o: Syntax error: Unterminated quoted string

będę dalej nad tym kombinować, jak się uda dam znać.


http://img34.imageshack.us/img34/5092/zw9m.png http://img29.imageshack.us/img29/219/pibw.png

Offline

 

#18  2012-09-04 18:07:00

  sicko - Użytkownik

sicko
Użytkownik
Zarejestrowany: 2012-05-17

Re: wysłać byte do urządzenia

Specjalistą nie jestem, ale usunąłbym "z" z końca linijki "#include <string.h>", być może to jest właśnie błąd, który wywala program.

Offline

 

#19  2012-09-04 20:57:21

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: wysłać byte do urządzenia

plik .o to nie binarka! Tego się nie uruchamia! To dopiero plik obiektowy. Musisz go zminkować, albo wywal -c z lini poleceń g++, to od razu zlinkuje.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)