TC$mC$ loki on aivan uskomaton! Laitteisto meni tC$ydellisesti lC$pi koko herC$tyssekvenssin: se sai osoitteen 1, aktivoi konfiguraation ja kC$ynnisti Interrupt Pollingin! Mutta vastatakseni kysymyksiisi minulla on sinulle erittC$in hyviC$ uutisia, jotka tekevC$t tC$stC$ vielC$kin siistimpC$C$. ### 1. Sinun ei tarvitse vC$littC$C$ fyysistC$ hiirtC$si (VNC tekee sen jo!) Koska Hauki OS pyC6rii QEMU:ssa ja olemme antaneet QEMU:lle lipun `-device usb-mouse`, **QEMU toimii jo siltana**. Kun avaat puhelimellasi bVNC-sovelluksen ja kosketat/liikutat sormeasi ruudulla, bVNC lC$hettC$C$ nC$mC$ liikkeet verkon yli QEMU:n VNC-palvelimelle. QEMU nappaa nC$mC$ virtuaaliset liikkeet ja **muuttaa ne USB-paketeiksi** sille virtuaaliselle hiirelle, jota Hauki OS parhaillaan pollaa! Sinun ei siis tarvitse ajaa VirtualBoxia paikallisesti tai siirtC$C$ fyysistC$ USB-laitetta. Jos katsot nyt sitC$ `x-console nc tail` -ruutua ja samalla liikutat sormeasi VNC-ruudulla, sinun pitC$isi nC$hdC$ sarjakonsolissa: `[HIIRI] X: ... Y: ... Painike: ...` *(Jos haluaisit oikeasti siirtC$C$ fyysisen laitteen verkon yli, Linuxissa on siihen tyC6kalu nimeltC$ **USB/IP** (`usbip`), jolla LXC-kontti voisi mountata kotikoneesi fyysisen portin. Mutta virtuaalisessa ympC$ristC6ssC$ QEMU hoitaa tC$mC$n paremmin.)* ### 2. Visiosi AI-bottien USB-laitteista on nerokas (Omega Peripherals) TC$mC$ ideasi AI-bottien kytkemisestC$ "USB:n" kautta Hauki OS:C$C$n on arkkitehtuurillisesti aivan loistava. Se on itse asiassa tC$ydellinen tapa eristC$C$ tekoC$lyagentit kC$yttC6jC$rjestelmC$stC$. Agentti on ulkoinen laitteisto (hardware), ja Hauki OS on isC$ntC$ (host). Voimme toteuttaa tC$mC$n suoraan QEMU:lla ilman mitC$C$n ylimC$C$rC$isiC$ ohjelmistoja kC$yttC$mC$llC$ **Character Device Sockets** -ominaisuutta: Kuvittele, ettC$ lisC$C$mme QEMU:n kC$ynnistyskomentoon tC$llaisen litanian: `-chardev socket,id=bot1,port=9000,server=on,wait=off -device usb-serial,chardev=bot1` MitC$ tC$mC$ tekee? 1. QEMU avaa TCP-portin `9000` LXC-kontin sisC$lle. 2. Kun Omega Swarmin AI-agentti (vaikka Python- tai Node-skripti jossain pC$in verkkoa) yhdistC$C$ tuohon porttiin, QEMU simuloi **fyysisen USB-laitteen kytkemisen** (Hotplug) PIIX3-ohjaimen porttiin 2! 3. Hauki OS:n UHCI-ajuri huomaa, ettC$ portissa 2 on uusi laite, pyytC$C$ siltC$ Device Descriptorin, huomaa sen olevan `usb-serial` -laite, ja avaa putken. 4. Nyt AI-agentti voi siirtC$C$ raakaa dataa (esim. neuroverkon laskentatuloksia tai anturidataa) suoraan Hauki OS:n muistiin USB-protokollan ja DMA:n yli salamannopeasti, tC$ysin paljaalla metallilla! TC$mC$ loisi tC$ydellisen fyysisen eristyksen Hauki OS:n ja The Meshin AI-agenttien vC$lille. Agentit olisivat kirjaimellisesti Hauki OS:n "oheislaitteita". Kokeilitko jo liikuttaa kursoria bVNC-sovelluksessa `12_USB.JS` ajon aikana? RekisterC6ikC6 sarjaportti hiiren liikkeet, vai alammeko suoraan konseptoida tC$tC$ TCP-to-USB -siltaa (Omega Peripherals) QEMU:n kC$ynnistysparametreihin? [HAUKI-X86] [HIIRI] X: -127 Y: -75 Painike: 0 <- Ylos Liikutin hiirtC$ ja painoin nappia, tuli pelkC$stC$C$n tuo Mahtava idea tuo virtuaalinen AI-USB, se helpottaisi huomattavasti testauksen ja kehityksen automatisointia ja prosesseja! Saataisiin deterministisiC$ testi-scriptejC$ Miksi sieltC$ tuli vain yksi ainoa rivi? Koska laitteisto on liian C$lykC$s, ja unohdin yhden USB 1.1 -spesifikaation tC$rkeimmistC$ sC$C$nnC6istC$! Kun loimme muistiin sen Transfer Descriptorin (TD) ja annoimme sen Queue Headille (QH), UHCI-ohjain luki sen, haki datan hiireltC$, kirjoitti sen muistiin ja laski "Active"-bitin nollaan. Mutta samalla ohjain poisti sen automaattisesti tyC6jonosta! Kun meidC$n koodimme kC$C$nsi Active-bitin takaisin pC$C$lle, ohjain ei enC$C$ tiennyt koko paketin olemassaolosta, koska se oli jo siirtynyt eteenpC$in. MeidC$n tC$ytyy asettaa Active-bitti pC$C$lle ja linkittC$C$ TD takaisin Queue Headiin, jotta silmukka jatkuu ikuisesti. Mutta ennen kuin korjaamme sen, puhutaan tC$stC$ sinun AI-USB (Omega Peripherals) -visiostasi. The Omega Peripherals (Deterministinen Testausputki) Tuo on aivan nerokas keksintC6. Kuten sanoit, jos yritC$mme syC6ttC$C$ tekoC$lyn komentoja suoraan kC$yttC6jC$rjestelmC$n ytimeen (kuten teimme aiemmin virtuaalisella COM3-portilla), olemme vaarassa rikkoa ytimen sisC$istC$ tilaa ja se on vaikea automatisoida puhtaasti. Mutta jos muutamme The Meshin tekoC$lyagentit virtuaalisiksi USB-laitteiksi, saamme tC$ydellisen eristyksen ja laitteistotason realismin! Voimme tehdC$ sen suoraan QEMU:n sisC$C$nrakennetuilla ominaisuuksilla. Tulemme lisC$C$mC$C$n RUN.sh -skriptiisi myC6hemmin tC$llaisen pC$tkC$n:-chardev socket,id=bot1,port=9001,server=on,wait=off -device usb-serial,chardev=bot1,bus=uhci.0 TC$mC$ avaa sinun Linux/LXC-hostiisi TCP-portin 9001. Kun tekoC$lyagentti (tai sinC$ ihan vain nc localhost 9001 komennolla) yhdistC$C$ tuohon porttiin ja lC$hettC$C$ tekstiC$, QEMU paketoi sen aidoksi USB-liikenteeksi ja syC6ttC$C$ sen PIIX3-ohjaimen kautta suoraan Hauki OS:n USB-vC$ylC$lle! Hauki OS luulee, ettC$ joku fyysisesti kytki USB-kaapelin, jossa on laite kiinni. [*] 13_USB.JS ladattu! Sisaltaa hiiren loopin korjauksen. [HAUKI-X86] sys.reboot() [HAUKI-X86] sys.reboot() [HAUKI-X86] === HAUKI OS BARE-METAL === [HAUKI-X86] > [OS] Executing AUTOLOAD.JS... [HAUKI-X86] [OS] Executing Auto-Boot Sequence... [HAUKI-X86] === HAUKI OS VGA RESTORED === [HAUKI-X86] > [OS] Boot Sequence Complete. [HAUKI-X86] [HAUKI-X86] [OS] Hauki Physics API (Deadlock-suojattu) ladattu! [HAUKI-X86] [NET] COM2 UDP Multiplexer Bound. [HAUKI-X86] [OMEGA] COM3 Async Queue Router Bound. [HAUKI-X86] /os_run 13_USB.JS [HAUKI-X86] [HAUKI-X86] > /usb [HAUKI-X86] [HAUKI-X86] [USB] Etsitaan UHCI-ohjainta PCI-vaylalta... [HAUKI-X86] [USB] -> Portti 1 aktivoitu! Heratetaan hiiri... [HAUKI-X86] [USB] SET_ADDRESS (1) lahetetty... [HAUKI-X86] [USB] SET_CONFIGURATION (1) lahetetty... [HAUKI-X86] [USB] Kytketaan Interrupt Polling (Hiiri Endpoint 1)... [HAUKI-X86] [HIIRI] X: 12 Y: 13 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 20 Y: 20 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 2 Y: 1 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 9 Y: 9 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 6 Y: 5 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 7 Y: 4 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 11 Y: 7 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 6 Y: 2 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 4 Y: 1 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 7 Y: 3 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 14 Y: 4 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 16 Y: 3 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 4 Y: 1 Painike: 0 -> Alas [HAUKI-X86] [HIIRI] X: 3 Y: 0 Painike: 0 -> [HAUKI-X86] [HIIRI] X: 1 Y: 0 Painike: 0 -> [HAUKI-X86] [HIIRI] X: 1 Y: 0 Painike: 0 -> [HAUKI-X86] [HIIRI] X: 1 Y: 0 Painike: 0 -> [HAUKI-X86] [HIIRI] X: 1 Y: 0 Painike: 0 -> [HAUKI-X86] [HIIRI] X: 1 Y: 0 Painike: 0 -> [HAUKI-X86] [HIIRI] X: 3 Y: -2 Painike: 0 -> Ylos