lib_pad of struct Library
-
Merci à tous pour avoir contribué à faire avancer le cheumille, cheucheu, schmilblik!
Mon code fonctionne avec le KS3.1 (40) mais aussi en KS1.1 (31) (i.e. le truc fournit avec l’A1000, dont tout le monde se fiche vu qu’ils sont tous passés en KS1.3 (34))
Le device est bien chargé du disque, initialisé correctement, ne figure pas dans SysBase->DeviceList, et réponds aux DoIo USBIOReqHCD et se déalloue quand on ferme la pile. Donc ça roule!
Alors comment j’ai fait:
Mon device est normal, avec 3 (NT_DEVICE) dans le romtag type. c’est un module externe qui se trouve sur disque dans le même répertoire que la pile usb (il faudra que je prenne un répertoire dédié paramétrable, du genre anaiis:usb/hcd/#?.usbhcd)
Je charge le module avec LoadSeg(« module.usbhcd »)
Comme InitResident me cassait les pieds, je l’ai remplacé par un MakeLibrary + un saut à la fonction Init. Ca me donne un pointeur sur un device parfaitement initialisé.
J’ajoute ce device dans une liste privée de la pile. (il faut obligatoirement placer le device dans une liste, parce qu’en fin de vie la fonction LibExpunge utilise Remove)
Je crée un port + un iomessage compatible avec les HCD, puis j’appelle la fonction LibOpen privée (puisque l’on ne peut pas utiliser OpenDevice, vu qu’il n’est pas dans la devicelist exec)
Puis j’appelle la commande RESET avec DoIO, histoire d’initialiser quelques variables ou quelques registres du hard dans le HCD.
Ensuite on peut faire des DoIO sur des USBIOReq pour des devices au sens ‘USB’ qui sont enrichis pour être transformés en
USBIOReqHCD. C’est là que l’on voit la supériorité de Sirion vis à vis d’une autre pile que je ne citerais pas
A la fin, j’appelle AbortIO, LibClose et LibExpunge pour forcer le déchargement, puis un UnloadSeg.
Le plus compliqué, c’est de faire simple
Ensuite on peut faire des DoIO sur des USBIOReq pour des devices au sens ‘USB’ qui sont enrichis pour être transformés en
USBIOReqHCD. C’est là que l’on voit la supériorité de Sirion vis à vis d’une autre pile que je ne citerais pas
Tu peux préciser pour les non-éclairés comme moi stp ? Ca m’intéresse
leo a écrit :
Ensuite on peut faire des DoIO sur des USBIOReq pour des devices au sens ‘USB’ qui sont enrichis pour être transformés en
USBIOReqHCD. C’est là que l’on voit la supériorité de Sirion vis à vis d’une autre pile que je ne citerais pas
Tu peux préciser pour les non-éclairés comme moi stp ? Ca m’intéresse
C’est hors sujet par rapport au titre du fil, mais je suis de bonne humeur aujourd’hui.
Dans l’usb il y a 4 modes de dialogue: control, interrupt, bulk et iso
Si tu regardes l’include usb/system.h tu verras la description de USBIOReq et tu constateras que c’est une extension des IORequests connues depuis l’origine de l’Amiga. L’entrée importante est io_EndPoint. grâce à elle on sait quel ‘objet’ utilisé par l’usb demande la requête. Les commandes standard CMD_READ et CMD_WRITE sont utilisées pour lire ou écrire des données.
le mode control a besoin de io_SetupData et io_SetupLength, et sert pour envoyer des commandes usb (comme Setaddress, GetInterface, Setconfiguration…) cf docs usb.
le mode interrupt est utilisé par des périphériques comme les claviers, souris.
le mode bulk sert pour les imprimantes, disques,…
le mode iso pour les cameras, scanners,…
Beaucoup de monde critique Sirion, surtout sur l’absence de support du mode iso et du mode highspeed usb 2.0. Ben ça vient du fait que les hcd ne sont pas fait pour, mais il faudrait peu de modifs pour y arriver, car tout est décrit dans la structure USBIOReq.
Maintenant essaie de voir le code source de Poseidon dans Aros.
Ben… … … y’a pas photo, je garde l’API Sirion parce qu’elle est vraiment générique => seuls les hcd sont à faire évoluer et j’ai demandé à plusieurs pontes d’OS4 le code source d’un HCD pour voir et j’attends toujours.
Qu’est ce que la pile et les applications ont à fiche que les périphériques soit en low, full, ou highspeed ? Pourquoi vouloir différencier le mode iso (ce n’est qu’un vulgaire mode asynchrone sans aucun contrôle de validité, en utilisant deux buffers avec SendIO ça devrait le faire)?
- Vous devez être connecté pour répondre à ce sujet.
› Forums › AmigaOS, MorphOS et AROS › Développement › lib_pad of struct Library