-
Data: 2018-03-07 12:17:39
Temat: Re: resetowanie urządzenia USB
Od: Zbych <a...@o...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 07.03.2018 o 10:37, Adam Wysocki pisze:
> Zbych <a...@o...pl> wrote:
>
>> Ja zazwyczaj używam IO w wersji nieblokującej (O_NONBLOCK), z ciekawości
>> muszę sprawdzić czy bez tej flagi też jest problem z sygnalizacją błędów.
>
> W sumie nie powinno to nic zmieniać. Spodziewałbym się, że po odpięciu
> urządzenia select() zwróci odczytywalność, a read() zwróci 0 (ale nie
> sprawdzałem).
>
> Tak się składa, że mam teraz na tapecie program, który gada z ttyACM
> (moduł cdc_acm) blokującym I/O (naprzemiennie pisze do portu i czeka na
> odpowiedź). Po odpięciu kabelka blokujący read() zwrócił 0 (EOF), a
> późniejszy tcdrain (wywołujący ioctl TCSBRK) -1 (errno = EIO).
>
> Dodatkowy test pokazał, że gdy read() zwróci EOF, to kolejny read()
> również zwraca EOF, ale kolejny write() zwraca -1 z errno = EIO. Kołacze
> mi się po głowie, że w przypadku socketów zachowanie read() było inne (gdy
> zwrócił EOF, to kolejny read() zwracał błąd), ale głowy za to uciąć nie
> dam -- może mi się coś przywidziało.
>
> Nie wiem czy cokolwiek zmienia fakt, że urządzenie nie jest podłączone
> bezpośrednio, tylko przez "przejęcie" portu w VirtualBox (ten Linux chodzi
> w wirtualce na Windows 7). Niby nie powinien.
Zacząłem to jeszcze raz sprawdzać i na ubuntu 14 (kernel 4.4.0) mam tak:
1. write zwraca błąd i errno=5 (EIO, Input/output error) jeśli
urządzenie zniknie, niezależnie czy używam trybu blokującego czy nie.
2. read w trybie blokującym czeka na dane, jak wypnę w trakcie czekania
wtyczkę to przerywa czekanie zwracając 0, czego nie traktuję jako błąd.
Kolejne wywoływania read zwracają cały czas 0
3. read w trybie nieblokującym zwraca mi błąd i errno=11 (EAGAIN,
Resource temporarily unavailable) gdy wtyczka jest wpięta i nie ma
danych do odbioru czyli zachwuje się prawidłowo. Ale za to zwraca 0
(brak błędu) jak wtyczkę wypnę.
Testy z read powtórzyłem też na ubuntu 16 z kernelem 4.4, zachowanie
identyczne.
Problem polega na tym, że mam urządzenia z który tylko czytam dane
(skanery, klawiatury) i takie zachowanie read jest delikatnie mówiąc
irytujące.
Następne wpisy z tego wątku
- 08.03.18 00:10 Adam Wysocki
- 08.03.18 08:32 Zbych
- 08.03.18 11:05 Adam Wysocki
- 08.03.18 11:42 Zbych
- 08.03.18 13:29 Adam Wysocki
Najnowsze wątki z tej grupy
- 60 mA dużo czy spoko?
- Dziwne zachowanie magistrali adresowej w 8085
- Współczesne mierniki zniekształceń nieliniowych THD audio, produkują jakieś?
- Jaki silikon lub może klej?
- Smar do video
- Litowe baterie AA Li/FeS2 a alkaliczne
- "ogrodowa linia napowietrzna"
- jaki zasilacz laboratoryjny
- jaki zasilacz laboratoryjny
- Puszka w ziemię
- T-1000 was here
- Ściąganie hasła frezem
- Koszyk okrągły, walec 3x AA, na duże paluszki R6
- Brak bolca ochronnego ładowarki oznacza pożar
- AMS spalony szybkim zasilaczem USB
Najnowsze wątki
- 2025-02-14 Ściemniacze na parkingach
- 2025-02-13 kilka pytań o klimę
- 2025-02-13 genialny pomysł
- 2025-02-12 diesel z otwartą komorą
- 2025-02-14 60 mA dużo czy spoko?
- 2025-02-13 Jaka moc wi-fi ?
- 2025-02-12 Drabina rozsuwana
- 2025-02-13 Dęblin => Node.js / Fullstack Developer <=
- 2025-02-13 Błonie => Analityk Systemów Informatycznych (TMS SPEED) <=
- 2025-02-13 Warszawa => Staż w dziale Sprzedaży B2B <=
- 2025-02-13 Warszawa => MENA New Buissnes Manager <=
- 2025-02-13 Łódź => NodeJS Developer <=
- 2025-02-13 Gdańsk => Solution Architect (Java background) <=
- 2025-02-13 Zielona Góra => Senior Field Sales (system ERP) <=
- 2025-02-13 Warszawa => Specjalista ds. Sprzedaży (transport drogowy) <=