Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

USBドライバが動かない環境について報告 #13

Open
HonokaNo opened this issue Apr 8, 2021 · 9 comments
Open

USBドライバが動かない環境について報告 #13

HonokaNo opened this issue Apr 8, 2021 · 9 comments

Comments

@HonokaNo
Copy link
Contributor

HonokaNo commented Apr 8, 2021

まだ全くと行っていいほど情報が集まってないのですが、USBドライバが動かない環境があるようです(本だとday06cのところで確認)

環境1では

return MAKE_ERROR(Error::kInvalidSlotID);

環境2では

return MAKE_ERROR(Error::kInvalidPhase);

にてエラーが起きています。

@uchan-nos
Copy link
Owner

そうですね、動かない機種はあると思います。
いくつかの機種でしか動作確認できていませんので。

実機で動かない系のバグのデバッグは手元に実機が必要ですから、私はそれらの機種への対応作業はできません。
HonokaNo さんがデバッグをして、MikanOS を修正していただけるのでしたら、とっても嬉しいです。

この Issue を、HonokaNo さんのデバッグ作業の記録用にお使いいただいても良いですが、
クローズせずに残しておきましょうか?
(クローズせずにおいておけば、もしかしたら協力者が現れるかもしれません)

@HonokaNo
Copy link
Contributor Author

HonokaNo commented Apr 9, 2021

すみません、お願いします。
もう少し情報集めて、目指せ実機動作!

@HonokaNo
Copy link
Contributor Author

もしかしたら無線マウスだと無線用で別ドライバが必要かもしれない
無線用の別クラス(って言い方でいいんだっけ)があるらしい。

@uchan-nos
Copy link
Owner

uchan-nos commented Jun 18, 2021

@HonokaNo
手元の Bluetooth ドングル LBT-UAN05C2/N のデバイスクラスは 0xE0 でした。
https://usb.org/defined-class-codes#anchor_BaseClassE0h

明らかに HID ではないので、この場合は専用のクラスドライバが必要ですね。

デバイスディスクリプタ(USBView で取得)

bLength:                           0x12
bDescriptorType:                   0x01
bcdUSB:                          0x0200
bDeviceClass:                      0xE0  -> This is a Wireless Controller(Bluetooth) Device
bDeviceSubClass:                   0x01
*!*ERROR:  bDeviceSubClass of 1 is invalid
bDeviceProtocol:                   0x01
bMaxPacketSize0:                   0x40 = (64) Bytes
idVendor:                        0x0A12 = Cambridge Silicon Radio Ltd.
idProduct:                       0x0001
bcdDevice:                       0x8891
iManufacturer:                     0x00
iProduct:                          0x02
String Descriptor for index 2 not available while device is in low power state.
iSerialNumber:                     0x00
bNumConfigurations:                0x01

@HonokaNo
Copy link
Contributor Author

一応無線通信は関係ありませんでした。申し訳ない。

どうやら、DeviceManager::AllocDeviceで、devices_[slot_id]がnullptrになっているのが原因っぽいです
Deviceクラスのコンストラクタに原因がありそう?

@HonokaNo
Copy link
Contributor Author

そもそもAllocArrayすらうまくいってない
原因の箇所が絞れてきた。

@HonokaNo
Copy link
Contributor Author

HonokaNo commented Jul 3, 2021

とりあえずバッファを拡張してAllocArrayはうまくいったっぽい。
次の問題としてOnEvent(

Error OnEvent(Controller& xhc, PortStatusChangeEventTRB& trb) {
) のswitch文で
ConfigPhase::WaitingAddressed,ConfigPhase::EnablingSlotが
渡されているからdefaultでエラーが出ているみたい。
もうちょっとlinuxのUSBドライバの解析とか
理解を進めなくちゃいけない

@newstylejava
Copy link

同じ問題に陥って解決したので記録として残しておきます。

私の環境では、 @HonokaNo さんがすでに挙げられているように、

static const size_t kMemoryPoolSize = 4096 * 32;

の値を4096*32から4096*128に変更して、バッファを拡張することで解決しました。

一方で、USBデバイスによって動作したりしなかったりする現象が見られました。

動作が確認できたデバイスとして、
・TK-FCM104 (キーボード)
・BSMBU04M (マウス)

逆に、動作しなかったデバイスとして、
・M500S (高機能なマウス)
・ノートPC内蔵キーボード
・ノートPC内蔵マウス

となりました。使用したノートPCの型番は ILeNXi-15FX064-i7_-RFSXB です。

USBViewやデバイスマネージャーを使ってデバイスの確認したところ、
・M500SはUSBデバイスクラスが0x00(USB Composite Device)で、マウスとキーボードが一体ということになっている?
・ノートPC内蔵のものはPS/2デバイス扱い(マウスはUSBデバイスとしても認識されていたように見えたが、実態は謎)

ということがわかりました。
そのため、USBデバイスに注意する(単純な構造のデバイスなら使えるかも?)か、XHCIのドライバを改造するなどの対応をすれば動作すると考えられます。

大雑把な調査の記録となりましたが、お役に立てば幸いです。

@edom18
Copy link

edom18 commented Jan 5, 2025

自分もまったく同じエラーで躓いております・・。
ちなみに実機テストしているデバイスは、書籍内で紹介されていたGPD MicroPCを利用しています。
マウスをUSBでつないだ状態でも、つながない状態でも同様のエラーが出ています。

上で書かれている処置や、こちらのWikiに書かれていることも試してみましたがダメでした・・。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants