diff --git a/.gitattributes b/hardware/braille_xr/.gitattributes similarity index 100% rename from .gitattributes rename to hardware/braille_xr/.gitattributes diff --git a/.gitignore b/hardware/braille_xr/.gitignore similarity index 100% rename from .gitignore rename to hardware/braille_xr/.gitignore diff --git a/.vscode/arduino.json b/hardware/braille_xr/.vscode/arduino.json similarity index 100% rename from .vscode/arduino.json rename to hardware/braille_xr/.vscode/arduino.json diff --git a/.vscode/c_cpp_properties.json b/hardware/braille_xr/.vscode/c_cpp_properties.json similarity index 100% rename from .vscode/c_cpp_properties.json rename to hardware/braille_xr/.vscode/c_cpp_properties.json diff --git a/_wifi_config.h b/hardware/braille_xr/_wifi_config.h similarity index 100% rename from _wifi_config.h rename to hardware/braille_xr/_wifi_config.h diff --git a/braille_xr.ino b/hardware/braille_xr/braille_xr.ino similarity index 100% rename from braille_xr.ino rename to hardware/braille_xr/braille_xr.ino diff --git a/debug.cfg b/hardware/braille_xr/debug.cfg similarity index 100% rename from debug.cfg rename to hardware/braille_xr/debug.cfg diff --git a/debug_custom.json b/hardware/braille_xr/debug_custom.json similarity index 100% rename from debug_custom.json rename to hardware/braille_xr/debug_custom.json diff --git a/git-workshop.pdf b/hardware/braille_xr/git-workshop.pdf similarity index 100% rename from git-workshop.pdf rename to hardware/braille_xr/git-workshop.pdf diff --git a/libs/AsyncUDP/examples/AsyncUDPClient/.skip.esp32h2 b/hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPClient/.skip.esp32h2 similarity index 100% rename from libs/AsyncUDP/examples/AsyncUDPClient/.skip.esp32h2 rename to hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPClient/.skip.esp32h2 diff --git a/libs/AsyncUDP/examples/AsyncUDPClient/AsyncUDPClient.ino b/hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPClient/AsyncUDPClient.ino similarity index 100% rename from libs/AsyncUDP/examples/AsyncUDPClient/AsyncUDPClient.ino rename to hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPClient/AsyncUDPClient.ino diff --git a/libs/AsyncUDP/examples/AsyncUDPMulticastServer/.skip.esp32h2 b/hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPMulticastServer/.skip.esp32h2 similarity index 100% rename from libs/AsyncUDP/examples/AsyncUDPMulticastServer/.skip.esp32h2 rename to hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPMulticastServer/.skip.esp32h2 diff --git a/libs/AsyncUDP/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino b/hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino similarity index 100% rename from libs/AsyncUDP/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino rename to hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPMulticastServer/AsyncUDPMulticastServer.ino diff --git a/libs/AsyncUDP/examples/AsyncUDPServer/.skip.esp32h2 b/hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPServer/.skip.esp32h2 similarity index 100% rename from libs/AsyncUDP/examples/AsyncUDPServer/.skip.esp32h2 rename to hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPServer/.skip.esp32h2 diff --git a/libs/AsyncUDP/examples/AsyncUDPServer/AsyncUDPServer.ino b/hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPServer/AsyncUDPServer.ino similarity index 100% rename from libs/AsyncUDP/examples/AsyncUDPServer/AsyncUDPServer.ino rename to hardware/braille_xr/libs/AsyncUDP/examples/AsyncUDPServer/AsyncUDPServer.ino diff --git a/libs/AsyncUDP/keywords.txt b/hardware/braille_xr/libs/AsyncUDP/keywords.txt similarity index 100% rename from libs/AsyncUDP/keywords.txt rename to hardware/braille_xr/libs/AsyncUDP/keywords.txt diff --git a/libs/AsyncUDP/library.properties b/hardware/braille_xr/libs/AsyncUDP/library.properties similarity index 100% rename from libs/AsyncUDP/library.properties rename to hardware/braille_xr/libs/AsyncUDP/library.properties diff --git a/libs/AsyncUDP/src/AsyncUDP.cpp b/hardware/braille_xr/libs/AsyncUDP/src/AsyncUDP.cpp similarity index 100% rename from libs/AsyncUDP/src/AsyncUDP.cpp rename to hardware/braille_xr/libs/AsyncUDP/src/AsyncUDP.cpp diff --git a/libs/AsyncUDP/src/AsyncUDP.h b/hardware/braille_xr/libs/AsyncUDP/src/AsyncUDP.h similarity index 100% rename from libs/AsyncUDP/src/AsyncUDP.h rename to hardware/braille_xr/libs/AsyncUDP/src/AsyncUDP.h diff --git a/libs/ESP32Servo/AddDoxygenToGHPages.sh b/hardware/braille_xr/libs/ESP32Servo/AddDoxygenToGHPages.sh similarity index 100% rename from libs/ESP32Servo/AddDoxygenToGHPages.sh rename to hardware/braille_xr/libs/ESP32Servo/AddDoxygenToGHPages.sh diff --git a/libs/ESP32Servo/README.md b/hardware/braille_xr/libs/ESP32Servo/README.md similarity index 100% rename from libs/ESP32Servo/README.md rename to hardware/braille_xr/libs/ESP32Servo/README.md diff --git a/libs/ESP32Servo/doxy.doxyfile b/hardware/braille_xr/libs/ESP32Servo/doxy.doxyfile similarity index 100% rename from libs/ESP32Servo/doxy.doxyfile rename to hardware/braille_xr/libs/ESP32Servo/doxy.doxyfile diff --git a/libs/ESP32Servo/examples/Knob/Knob.ino b/hardware/braille_xr/libs/ESP32Servo/examples/Knob/Knob.ino similarity index 100% rename from libs/ESP32Servo/examples/Knob/Knob.ino rename to hardware/braille_xr/libs/ESP32Servo/examples/Knob/Knob.ino diff --git a/libs/ESP32Servo/examples/Multiple-Servo-Example-Arduino/Multiple-Servo-Example-Arduino.ino b/hardware/braille_xr/libs/ESP32Servo/examples/Multiple-Servo-Example-Arduino/Multiple-Servo-Example-Arduino.ino similarity index 100% rename from libs/ESP32Servo/examples/Multiple-Servo-Example-Arduino/Multiple-Servo-Example-Arduino.ino rename to hardware/braille_xr/libs/ESP32Servo/examples/Multiple-Servo-Example-Arduino/Multiple-Servo-Example-Arduino.ino diff --git a/libs/ESP32Servo/examples/PWMExample/PWMExample.ino b/hardware/braille_xr/libs/ESP32Servo/examples/PWMExample/PWMExample.ino similarity index 100% rename from libs/ESP32Servo/examples/PWMExample/PWMExample.ino rename to hardware/braille_xr/libs/ESP32Servo/examples/PWMExample/PWMExample.ino diff --git a/libs/ESP32Servo/examples/Sweep/Sweep.ino b/hardware/braille_xr/libs/ESP32Servo/examples/Sweep/Sweep.ino similarity index 100% rename from libs/ESP32Servo/examples/Sweep/Sweep.ino rename to hardware/braille_xr/libs/ESP32Servo/examples/Sweep/Sweep.ino diff --git a/libs/ESP32Servo/examples/ToneExample/ToneExample.ino b/hardware/braille_xr/libs/ESP32Servo/examples/ToneExample/ToneExample.ino similarity index 100% rename from libs/ESP32Servo/examples/ToneExample/ToneExample.ino rename to hardware/braille_xr/libs/ESP32Servo/examples/ToneExample/ToneExample.ino diff --git a/libs/ESP32Servo/examples/analogWriteExample/analogWriteExample.ino b/hardware/braille_xr/libs/ESP32Servo/examples/analogWriteExample/analogWriteExample.ino similarity index 100% rename from libs/ESP32Servo/examples/analogWriteExample/analogWriteExample.ino rename to hardware/braille_xr/libs/ESP32Servo/examples/analogWriteExample/analogWriteExample.ino diff --git a/libs/ESP32Servo/keywords.txt b/hardware/braille_xr/libs/ESP32Servo/keywords.txt similarity index 100% rename from libs/ESP32Servo/keywords.txt rename to hardware/braille_xr/libs/ESP32Servo/keywords.txt diff --git a/libs/ESP32Servo/library.properties b/hardware/braille_xr/libs/ESP32Servo/library.properties similarity index 100% rename from libs/ESP32Servo/library.properties rename to hardware/braille_xr/libs/ESP32Servo/library.properties diff --git a/libs/ESP32Servo/src/ESP32PWM.cpp b/hardware/braille_xr/libs/ESP32Servo/src/ESP32PWM.cpp similarity index 100% rename from libs/ESP32Servo/src/ESP32PWM.cpp rename to hardware/braille_xr/libs/ESP32Servo/src/ESP32PWM.cpp diff --git a/libs/ESP32Servo/src/ESP32PWM.h b/hardware/braille_xr/libs/ESP32Servo/src/ESP32PWM.h similarity index 100% rename from libs/ESP32Servo/src/ESP32PWM.h rename to hardware/braille_xr/libs/ESP32Servo/src/ESP32PWM.h diff --git a/libs/ESP32Servo/src/ESP32Servo.cpp b/hardware/braille_xr/libs/ESP32Servo/src/ESP32Servo.cpp similarity index 100% rename from libs/ESP32Servo/src/ESP32Servo.cpp rename to hardware/braille_xr/libs/ESP32Servo/src/ESP32Servo.cpp diff --git a/libs/ESP32Servo/src/ESP32Servo.h b/hardware/braille_xr/libs/ESP32Servo/src/ESP32Servo.h similarity index 100% rename from libs/ESP32Servo/src/ESP32Servo.h rename to hardware/braille_xr/libs/ESP32Servo/src/ESP32Servo.h diff --git a/libs/WiFi/examples/FTM/FTM_Initiator/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Initiator/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/FTM/FTM_Initiator/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Initiator/.skip.esp32h2 diff --git a/libs/WiFi/examples/FTM/FTM_Initiator/FTM_Initiator.ino b/hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Initiator/FTM_Initiator.ino similarity index 100% rename from libs/WiFi/examples/FTM/FTM_Initiator/FTM_Initiator.ino rename to hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Initiator/FTM_Initiator.ino diff --git a/libs/WiFi/examples/FTM/FTM_Initiator/README.md b/hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Initiator/README.md similarity index 100% rename from libs/WiFi/examples/FTM/FTM_Initiator/README.md rename to hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Initiator/README.md diff --git a/libs/WiFi/examples/FTM/FTM_Responder/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Responder/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/FTM/FTM_Responder/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Responder/.skip.esp32h2 diff --git a/libs/WiFi/examples/FTM/FTM_Responder/FTM_Responder.ino b/hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Responder/FTM_Responder.ino similarity index 100% rename from libs/WiFi/examples/FTM/FTM_Responder/FTM_Responder.ino rename to hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Responder/FTM_Responder.ino diff --git a/libs/WiFi/examples/FTM/FTM_Responder/README.md b/hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Responder/README.md similarity index 100% rename from libs/WiFi/examples/FTM/FTM_Responder/README.md rename to hardware/braille_xr/libs/WiFi/examples/FTM/FTM_Responder/README.md diff --git a/libs/WiFi/examples/SimpleWiFiServer/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/SimpleWiFiServer/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/SimpleWiFiServer/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/SimpleWiFiServer/.skip.esp32h2 diff --git a/libs/WiFi/examples/SimpleWiFiServer/SimpleWiFiServer.ino b/hardware/braille_xr/libs/WiFi/examples/SimpleWiFiServer/SimpleWiFiServer.ino similarity index 100% rename from libs/WiFi/examples/SimpleWiFiServer/SimpleWiFiServer.ino rename to hardware/braille_xr/libs/WiFi/examples/SimpleWiFiServer/SimpleWiFiServer.ino diff --git a/libs/WiFi/examples/WPS/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WPS/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WPS/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WPS/.skip.esp32h2 diff --git a/libs/WiFi/examples/WPS/README.md b/hardware/braille_xr/libs/WiFi/examples/WPS/README.md similarity index 100% rename from libs/WiFi/examples/WPS/README.md rename to hardware/braille_xr/libs/WiFi/examples/WPS/README.md diff --git a/libs/WiFi/examples/WPS/WPS.ino b/hardware/braille_xr/libs/WiFi/examples/WPS/WPS.ino similarity index 100% rename from libs/WiFi/examples/WPS/WPS.ino rename to hardware/braille_xr/libs/WiFi/examples/WPS/WPS.ino diff --git a/libs/WiFi/examples/WiFiAccessPoint/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiAccessPoint/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiAccessPoint/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiAccessPoint/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino similarity index 100% rename from libs/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiAccessPoint/WiFiAccessPoint.ino diff --git a/libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32s2 b/hardware/braille_xr/libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32s2 similarity index 100% rename from libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32s2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiBlueToothSwitch/.skip.esp32s2 diff --git a/libs/WiFi/examples/WiFiBlueToothSwitch/WiFiBlueToothSwitch.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiBlueToothSwitch/WiFiBlueToothSwitch.ino similarity index 100% rename from libs/WiFi/examples/WiFiBlueToothSwitch/WiFiBlueToothSwitch.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiBlueToothSwitch/WiFiBlueToothSwitch.ino diff --git a/libs/WiFi/examples/WiFiClient/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiClient/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiClient/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiClient/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiClient/README.md b/hardware/braille_xr/libs/WiFi/examples/WiFiClient/README.md similarity index 100% rename from libs/WiFi/examples/WiFiClient/README.md rename to hardware/braille_xr/libs/WiFi/examples/WiFiClient/README.md diff --git a/libs/WiFi/examples/WiFiClient/WiFiClient.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiClient/WiFiClient.ino similarity index 100% rename from libs/WiFi/examples/WiFiClient/WiFiClient.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiClient/WiFiClient.ino diff --git a/libs/WiFi/examples/WiFiClientBasic/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiClientBasic/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiClientBasic/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientBasic/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino similarity index 100% rename from libs/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientBasic/WiFiClientBasic.ino diff --git a/libs/WiFi/examples/WiFiClientConnect/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiClientConnect/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiClientConnect/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientConnect/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiClientConnect/README.md b/hardware/braille_xr/libs/WiFi/examples/WiFiClientConnect/README.md similarity index 100% rename from libs/WiFi/examples/WiFiClientConnect/README.md rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientConnect/README.md diff --git a/libs/WiFi/examples/WiFiClientConnect/WiFiClientConnect.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiClientConnect/WiFiClientConnect.ino similarity index 100% rename from libs/WiFi/examples/WiFiClientConnect/WiFiClientConnect.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientConnect/WiFiClientConnect.ino diff --git a/libs/WiFi/examples/WiFiClientEnterprise/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiClientEnterprise/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiClientEnterprise/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientEnterprise/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiClientEnterprise/README.md b/hardware/braille_xr/libs/WiFi/examples/WiFiClientEnterprise/README.md similarity index 100% rename from libs/WiFi/examples/WiFiClientEnterprise/README.md rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientEnterprise/README.md diff --git a/libs/WiFi/examples/WiFiClientEnterprise/WiFiClientEnterprise.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiClientEnterprise/WiFiClientEnterprise.ino similarity index 100% rename from libs/WiFi/examples/WiFiClientEnterprise/WiFiClientEnterprise.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientEnterprise/WiFiClientEnterprise.ino diff --git a/libs/WiFi/examples/WiFiClientEvents/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiClientEvents/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiClientEvents/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientEvents/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino similarity index 100% rename from libs/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino diff --git a/libs/WiFi/examples/WiFiClientStaticIP/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiClientStaticIP/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiClientStaticIP/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientStaticIP/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiClientStaticIP/WiFiClientStaticIP.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiClientStaticIP/WiFiClientStaticIP.ino similarity index 100% rename from libs/WiFi/examples/WiFiClientStaticIP/WiFiClientStaticIP.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiClientStaticIP/WiFiClientStaticIP.ino diff --git a/libs/WiFi/examples/WiFiIPv6/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiIPv6/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiIPv6/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiIPv6/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiIPv6/WiFiIPv6.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiIPv6/WiFiIPv6.ino similarity index 100% rename from libs/WiFi/examples/WiFiIPv6/WiFiIPv6.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiIPv6/WiFiIPv6.ino diff --git a/libs/WiFi/examples/WiFiMulti/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiMulti/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiMulti/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiMulti/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiMulti/WiFiMulti.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiMulti/WiFiMulti.ino similarity index 100% rename from libs/WiFi/examples/WiFiMulti/WiFiMulti.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiMulti/WiFiMulti.ino diff --git a/libs/WiFi/examples/WiFiMultiAdvanced/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiMultiAdvanced/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiMultiAdvanced/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiMultiAdvanced/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiMultiAdvanced/WiFiMultiAdvanced.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiMultiAdvanced/WiFiMultiAdvanced.ino similarity index 100% rename from libs/WiFi/examples/WiFiMultiAdvanced/WiFiMultiAdvanced.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiMultiAdvanced/WiFiMultiAdvanced.ino diff --git a/libs/WiFi/examples/WiFiScan/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiScan/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiScan/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiScan/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiScan/README.md b/hardware/braille_xr/libs/WiFi/examples/WiFiScan/README.md similarity index 100% rename from libs/WiFi/examples/WiFiScan/README.md rename to hardware/braille_xr/libs/WiFi/examples/WiFiScan/README.md diff --git a/libs/WiFi/examples/WiFiScan/WiFiScan.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiScan/WiFiScan.ino similarity index 100% rename from libs/WiFi/examples/WiFiScan/WiFiScan.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiScan/WiFiScan.ino diff --git a/libs/WiFi/examples/WiFiScanAsync/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiScanAsync/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiScanAsync/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiScanAsync/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiScanAsync/README.md b/hardware/braille_xr/libs/WiFi/examples/WiFiScanAsync/README.md similarity index 100% rename from libs/WiFi/examples/WiFiScanAsync/README.md rename to hardware/braille_xr/libs/WiFi/examples/WiFiScanAsync/README.md diff --git a/libs/WiFi/examples/WiFiScanAsync/WiFiScanAsync.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiScanAsync/WiFiScanAsync.ino similarity index 100% rename from libs/WiFi/examples/WiFiScanAsync/WiFiScanAsync.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiScanAsync/WiFiScanAsync.ino diff --git a/libs/WiFi/examples/WiFiScanDualAntenna/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiScanDualAntenna/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiScanDualAntenna/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiScanDualAntenna/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiScanDualAntenna/README.md b/hardware/braille_xr/libs/WiFi/examples/WiFiScanDualAntenna/README.md similarity index 100% rename from libs/WiFi/examples/WiFiScanDualAntenna/README.md rename to hardware/braille_xr/libs/WiFi/examples/WiFiScanDualAntenna/README.md diff --git a/libs/WiFi/examples/WiFiScanDualAntenna/WiFiScanDualAntenna.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiScanDualAntenna/WiFiScanDualAntenna.ino similarity index 100% rename from libs/WiFi/examples/WiFiScanDualAntenna/WiFiScanDualAntenna.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiScanDualAntenna/WiFiScanDualAntenna.ino diff --git a/libs/WiFi/examples/WiFiSmartConfig/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiSmartConfig/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiSmartConfig/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiSmartConfig/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino similarity index 100% rename from libs/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino diff --git a/libs/WiFi/examples/WiFiTelnetToSerial/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiTelnetToSerial/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiTelnetToSerial/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiTelnetToSerial/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino similarity index 100% rename from libs/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiTelnetToSerial/WiFiTelnetToSerial.ino diff --git a/libs/WiFi/examples/WiFiUDPClient/.skip.esp32h2 b/hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/.skip.esp32h2 similarity index 100% rename from libs/WiFi/examples/WiFiUDPClient/.skip.esp32h2 rename to hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/.skip.esp32h2 diff --git a/libs/WiFi/examples/WiFiUDPClient/WiFiUDPClient.ino b/hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/WiFiUDPClient.ino similarity index 100% rename from libs/WiFi/examples/WiFiUDPClient/WiFiUDPClient.ino rename to hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/WiFiUDPClient.ino diff --git a/libs/WiFi/examples/WiFiUDPClient/udp_server.py b/hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/udp_server.py similarity index 100% rename from libs/WiFi/examples/WiFiUDPClient/udp_server.py rename to hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/udp_server.py diff --git a/libs/WiFi/examples/WiFiUDPClient/udp_server.rb b/hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/udp_server.rb similarity index 100% rename from libs/WiFi/examples/WiFiUDPClient/udp_server.rb rename to hardware/braille_xr/libs/WiFi/examples/WiFiUDPClient/udp_server.rb diff --git a/libs/WiFi/keywords.txt b/hardware/braille_xr/libs/WiFi/keywords.txt similarity index 100% rename from libs/WiFi/keywords.txt rename to hardware/braille_xr/libs/WiFi/keywords.txt diff --git a/libs/WiFi/library.properties b/hardware/braille_xr/libs/WiFi/library.properties similarity index 100% rename from libs/WiFi/library.properties rename to hardware/braille_xr/libs/WiFi/library.properties diff --git a/libs/WiFi/src/WiFi.cpp b/hardware/braille_xr/libs/WiFi/src/WiFi.cpp similarity index 100% rename from libs/WiFi/src/WiFi.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFi.cpp diff --git a/libs/WiFi/src/WiFi.h b/hardware/braille_xr/libs/WiFi/src/WiFi.h similarity index 100% rename from libs/WiFi/src/WiFi.h rename to hardware/braille_xr/libs/WiFi/src/WiFi.h diff --git a/libs/WiFi/src/WiFiAP.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiAP.cpp similarity index 100% rename from libs/WiFi/src/WiFiAP.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiAP.cpp diff --git a/libs/WiFi/src/WiFiAP.h b/hardware/braille_xr/libs/WiFi/src/WiFiAP.h similarity index 100% rename from libs/WiFi/src/WiFiAP.h rename to hardware/braille_xr/libs/WiFi/src/WiFiAP.h diff --git a/libs/WiFi/src/WiFiClient.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiClient.cpp similarity index 100% rename from libs/WiFi/src/WiFiClient.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiClient.cpp diff --git a/libs/WiFi/src/WiFiClient.h b/hardware/braille_xr/libs/WiFi/src/WiFiClient.h similarity index 100% rename from libs/WiFi/src/WiFiClient.h rename to hardware/braille_xr/libs/WiFi/src/WiFiClient.h diff --git a/libs/WiFi/src/WiFiGeneric.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiGeneric.cpp similarity index 100% rename from libs/WiFi/src/WiFiGeneric.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiGeneric.cpp diff --git a/libs/WiFi/src/WiFiGeneric.h b/hardware/braille_xr/libs/WiFi/src/WiFiGeneric.h similarity index 100% rename from libs/WiFi/src/WiFiGeneric.h rename to hardware/braille_xr/libs/WiFi/src/WiFiGeneric.h diff --git a/libs/WiFi/src/WiFiMulti.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiMulti.cpp similarity index 100% rename from libs/WiFi/src/WiFiMulti.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiMulti.cpp diff --git a/libs/WiFi/src/WiFiMulti.h b/hardware/braille_xr/libs/WiFi/src/WiFiMulti.h similarity index 100% rename from libs/WiFi/src/WiFiMulti.h rename to hardware/braille_xr/libs/WiFi/src/WiFiMulti.h diff --git a/libs/WiFi/src/WiFiSTA.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiSTA.cpp similarity index 100% rename from libs/WiFi/src/WiFiSTA.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiSTA.cpp diff --git a/libs/WiFi/src/WiFiSTA.h b/hardware/braille_xr/libs/WiFi/src/WiFiSTA.h similarity index 100% rename from libs/WiFi/src/WiFiSTA.h rename to hardware/braille_xr/libs/WiFi/src/WiFiSTA.h diff --git a/libs/WiFi/src/WiFiScan.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiScan.cpp similarity index 100% rename from libs/WiFi/src/WiFiScan.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiScan.cpp diff --git a/libs/WiFi/src/WiFiScan.h b/hardware/braille_xr/libs/WiFi/src/WiFiScan.h similarity index 100% rename from libs/WiFi/src/WiFiScan.h rename to hardware/braille_xr/libs/WiFi/src/WiFiScan.h diff --git a/libs/WiFi/src/WiFiServer.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiServer.cpp similarity index 100% rename from libs/WiFi/src/WiFiServer.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiServer.cpp diff --git a/libs/WiFi/src/WiFiServer.h b/hardware/braille_xr/libs/WiFi/src/WiFiServer.h similarity index 100% rename from libs/WiFi/src/WiFiServer.h rename to hardware/braille_xr/libs/WiFi/src/WiFiServer.h diff --git a/libs/WiFi/src/WiFiType.h b/hardware/braille_xr/libs/WiFi/src/WiFiType.h similarity index 100% rename from libs/WiFi/src/WiFiType.h rename to hardware/braille_xr/libs/WiFi/src/WiFiType.h diff --git a/libs/WiFi/src/WiFiUdp.cpp b/hardware/braille_xr/libs/WiFi/src/WiFiUdp.cpp similarity index 100% rename from libs/WiFi/src/WiFiUdp.cpp rename to hardware/braille_xr/libs/WiFi/src/WiFiUdp.cpp diff --git a/libs/WiFi/src/WiFiUdp.h b/hardware/braille_xr/libs/WiFi/src/WiFiUdp.h similarity index 100% rename from libs/WiFi/src/WiFiUdp.h rename to hardware/braille_xr/libs/WiFi/src/WiFiUdp.h diff --git a/sk_demo/.gitignore b/sk_demo/.gitignore new file mode 100644 index 0000000..0fc8209 --- /dev/null +++ b/sk_demo/.gitignore @@ -0,0 +1,484 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +.vscode +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +bin/ +obj/ +.vscode/ + +tracker_log.txt \ No newline at end of file diff --git a/sk_demo/dofbox.csproj b/sk_demo/dofbox.csproj new file mode 100644 index 0000000..bf07b5d --- /dev/null +++ b/sk_demo/dofbox.csproj @@ -0,0 +1,23 @@ + + + + Exe + net8 + enable + enable + + res + res + + true + + + + + + + PreserveNewest + + + + diff --git a/sk_demo/dofbox.sln b/sk_demo/dofbox.sln new file mode 100644 index 0000000..23a2b1f --- /dev/null +++ b/sk_demo/dofbox.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "dofbox", "dofbox.csproj", "{FFC00048-7289-4D14-A409-ECCC8EBABD94}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FFC00048-7289-4D14-A409-ECCC8EBABD94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFC00048-7289-4D14-A409-ECCC8EBABD94}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFC00048-7289-4D14-A409-ECCC8EBABD94}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFC00048-7289-4D14-A409-ECCC8EBABD94}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EDD834D9-A059-4CA7-B670-43DC10BDA6FD} + EndGlobalSection +EndGlobal diff --git a/sk_demo/raw/room.blend b/sk_demo/raw/room.blend new file mode 100644 index 0000000..2657084 Binary files /dev/null and b/sk_demo/raw/room.blend differ diff --git a/sk_demo/raw/room.blend1 b/sk_demo/raw/room.blend1 new file mode 100644 index 0000000..34bed81 Binary files /dev/null and b/sk_demo/raw/room.blend1 differ diff --git a/sk_demo/readme.md b/sk_demo/readme.md new file mode 100644 index 0000000..19a4e14 --- /dev/null +++ b/sk_demo/readme.md @@ -0,0 +1,33 @@ + + +https://github.com/spatialfree/dofbox/assets/49330364/3470d708-eded-4872-926b-24cfef3e51e0 + +```shell +cls && dotnet run --dev + + +# debug publish +dotnet publish -r win-x64 --no-self-contained +cd bin/Debug/net7/win-x64/publish +delete old zip +compress all files in folder to oriel.zip +go to the steamworks http portal and upload the zip and set it live +``` + +loc : +IGame.cs : 6 +Mat.cs : 49 +Mono.cs : 94 +Rig.cs : 33 +SKs.cs : 81 +silo/Mono.cs : 60 +snek/Mono.cs : 52 +spes/Mono.cs : 64 += src/ : 439 + +fireball.hlsl : 57 +mono.hlsl : 75 +unlit.hlsl : 47 += res/shaders/ : 179 + += total : 618 \ No newline at end of file diff --git a/sk_demo/res/LDR_RGB1_0.png b/sk_demo/res/LDR_RGB1_0.png new file mode 100644 index 0000000..973c6e7 Binary files /dev/null and b/sk_demo/res/LDR_RGB1_0.png differ diff --git a/sk_demo/res/bake.png b/sk_demo/res/bake.png new file mode 100644 index 0000000..006becf Binary files /dev/null and b/sk_demo/res/bake.png differ diff --git a/sk_demo/res/room.glb b/sk_demo/res/room.glb new file mode 100644 index 0000000..7485d4b Binary files /dev/null and b/sk_demo/res/room.glb differ diff --git a/sk_demo/res/shaders/dofdev.hlsli b/sk_demo/res/shaders/dofdev.hlsli new file mode 100644 index 0000000..7b8ef2e --- /dev/null +++ b/sk_demo/res/shaders/dofdev.hlsli @@ -0,0 +1,82 @@ +#ifndef _DOFDEV_HLSLI +#define _DOFDEV_HLSLI + +float sum(float4 v) { // *used in firball.hlsl + return dot(v, float4(1,1,1,1)); +} + +// color space conversions +float4 gamma_linear(float4 gamma_col) { + return float4(pow(gamma_col.rgb, 0.454545), gamma_col.a); +} +float4 linear_gamma(float4 linear_col) { + return float4(pow(linear_col.rgb, 2.2), linear_col.a); +} + +struct psOut { + float4 color : SV_TARGET; + float depth : SV_Depth; +}; + +// oriel +struct oriel_data { + float4x4 m4; + float4x4 m4_inv; + float3 size; + float pad; +}; +cbuffer oriel_buffer : register(b3) { + oriel_data oriels[455]; // UINT16_MAX(65535) / sizeof(oriel 144) = 455 +}; + +float2 face_dist(oriel_data oriel, float3 cam_pos, float3 dir) { + float3 box = oriel.size / 2.0; + float3 boxMin = -box; + float3 boxMax = box; + + float3 tMin = (boxMin - cam_pos) / dir; + float3 tMax = (boxMax - cam_pos) / dir; + float3 t1 = min(tMin, tMax); + float3 t2 = max(tMin, tMax); + float tNear = max(max(t1.x, t1.y), t1.z); + float tFar = min(min(t2.x, t2.y), t2.z); + return float2(tNear, tFar); +}; + +float oriel(int id, float depth, int view_id, float3 world_pos) { + if (id == -1) return depth; // optimal? + + oriel_data oriel = oriels[id]; + + float3 cam_pos = sk_camera_pos[view_id].xyz; + cam_pos = mul(float4(cam_pos, 1), oriel.m4).xyz; + world_pos = mul(float4(world_pos, 1), oriel.m4).xyz; + + float3 dir = normalize(world_pos - cam_pos); + float2 faces = face_dist(oriel, cam_pos, dir); + clip(faces.y - faces.x); // no intersection + + // is a distance call cheaper than just transforming the input depth? + float dist = distance(cam_pos, world_pos); + clip(dist - faces.x); // near clip + + // far depth *flatten + float pad = 0.01; // 1cm ? + if (dist > faces.y) { + float bleed = (dist - faces.y) / (100.0 - faces.y); + dist = faces.y + (bleed * pad); + } + // gotta be a better way to do this than having two matrices... + float3 new_pos = mul(float4(cam_pos + (dir * dist), 1), oriel.m4_inv).xyz; + float4 og = mul(float4(new_pos, 1), sk_viewproj[view_id]); + depth = (og * rcp(og.w)).z; + + return depth; +} + +// !!! +// for the build process to include new changes: +// you need to edit another shader that uses it + + +#endif \ No newline at end of file diff --git a/sk_demo/res/shaders/fireball.hlsl b/sk_demo/res/shaders/fireball.hlsl new file mode 100644 index 0000000..722d140 --- /dev/null +++ b/sk_demo/res/shaders/fireball.hlsl @@ -0,0 +1,65 @@ +#include "stereokit.hlsli" +#include "dofdev.hlsli" + +//--name = dofdev/fireball + +//--oriel_id = -1 +//--tex_scale = 1 +//--diffuse = white + +int oriel_id; + +float tex_scale; +Texture2D diffuse : register(t0); +SamplerState diffuse_s : register(s0); + +struct vsIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 col : COLOR0; +}; +struct psIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 world : WORLD; + float4 color : COLOR0; + float3 campos : TEXCOORD1; + uint view_id : SV_RenderTargetArrayIndex; +}; + +psIn vs(vsIn input, uint id : SV_InstanceID) { + psIn o; + o.view_id = id % sk_view_count; + id = id / sk_view_count; + + o.campos = sk_camera_pos[o.view_id].xyz; + + float squish = sin( + (sk_time * 3.14) + ( + sum(float4(input.norm, 1)) + ) * 24 + ); + input.pos.xyz *= 1 - squish * 0.1; + o.world = mul(input.pos, sk_inst[id].world); + o.pos = mul(o.world, sk_viewproj[o.view_id]); + + o.norm = normalize(mul(input.norm, (float3x3)sk_inst[id].world)); + + o.uv = input.uv * tex_scale; + o.color = input.col * sk_inst[id].color; + o.color.rgb *= sk_lighting(o.norm); + return o; +} + +psOut ps(psIn input) { + psOut o; + + o.depth = oriel(oriel_id, input.pos.z, input.view_id, input.world.xyz); + o.color = input.color; + + return o; + // float4 noise = diffuse.Sample(diffuse_s, input.uv); + // return noise; +} \ No newline at end of file diff --git a/sk_demo/res/shaders/mono.hlsl b/sk_demo/res/shaders/mono.hlsl new file mode 100644 index 0000000..c2f863f --- /dev/null +++ b/sk_demo/res/shaders/mono.hlsl @@ -0,0 +1,78 @@ +#include "stereokit.hlsli" +#include "dofdev.hlsli" + +//--name = dofdev/mono + +//--oriel_id = -1 +//--diffuse = white + +int oriel_id; + +Texture2D diffuse : register(t0); +SamplerState diffuse_s : register(s0); + +struct vsIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 col : COLOR0; +}; +struct psIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 world : WORLD; + float4 color : COLOR0; + uint view_id : SV_RenderTargetArrayIndex; +}; + +psIn vs(vsIn input, uint id : SV_InstanceID) { + psIn o; + o.view_id = id % sk_view_count; + id = id / sk_view_count; + + o.world = mul(input.pos, sk_inst[id].world); + o.pos = mul(o.world, sk_viewproj[o.view_id]); + + o.norm = normalize(mul(input.norm, (float3x3)sk_inst[id].world)); + + o.uv = input.uv; + o.color = input.col; + o.color *= linear_gamma(sk_inst[id].color); + // o.color.rgb *= Lighting(o.norm); + return o; +} + +psOut ps(psIn input) { + psOut o; + + o.depth = oriel(oriel_id, input.pos.z, input.view_id, input.world.xyz); + o.color = input.color * diffuse.Sample(diffuse_s, input.uv); + + + float test = 1 - (o.depth * 0.5 + 0.5); + + return o; + + + // // clip(input.world.y); + // col = col * input.color; + + + // if (input.world.y < 0) { + // col.r = col.r * 0.0; + // col.g = col.g * 0.0; + // col.b = col.b * 0.3; + + // col.rgb *= 0.1; + // } + + // // dist magnitude from center X0Z + // float dist = max(1 - (length(input.world.xz) / 10.0), 0.0); + // float4 color = lerp(clearcolor, col, 1 - ((1 - dist) * (1 - dist))); + + // // float glow = FingerGlow(input.world.xyz, input.norm); + // // color.rgb += glow * 0.5; + + // return color; +} \ No newline at end of file diff --git a/sk_demo/res/shaders/room.hlsl b/sk_demo/res/shaders/room.hlsl new file mode 100644 index 0000000..2fd3d25 --- /dev/null +++ b/sk_demo/res/shaders/room.hlsl @@ -0,0 +1,40 @@ +#include "stereokit.hlsli" +#include "dofdev.hlsli" + +//--name = dofdev/room + +//--diffuse = white + +Texture2D diffuse : register(t0); +SamplerState diffuse_s : register(s0); + +struct vsIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; +}; +struct psIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 world : WORLD; + uint view_id : SV_RenderTargetArrayIndex; +}; + +psIn vs(vsIn input, uint id : SV_InstanceID) { + psIn o; + o.view_id = id % sk_view_count; + id = id / sk_view_count; + + o.world = mul(input.pos, sk_inst[id].world); + o.pos = mul(o.world, sk_viewproj[o.view_id]); + + o.norm = normalize(mul(input.norm, (float3x3)sk_inst[id].world)); + + o.uv = input.uv; + return o; +} + +float4 ps(psIn input) : SV_Target { + return diffuse.Sample(diffuse_s, input.uv); +} \ No newline at end of file diff --git a/sk_demo/res/shaders/sky.hlsl b/sk_demo/res/shaders/sky.hlsl new file mode 100644 index 0000000..37c2362 --- /dev/null +++ b/sk_demo/res/shaders/sky.hlsl @@ -0,0 +1,57 @@ +#include "stereokit.hlsli" +#include "dofdev.hlsli" + +//--name = dofdev/sky + +//--oriel_id = -1 +//--diffuse = white + +int oriel_id; + +Texture2D diffuse : register(t0); +SamplerState diffuse_s : register(s0); + +struct vsIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 col : COLOR0; +}; +struct psIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 world : WORLD; + float4 color : COLOR0; + uint view_id : SV_RenderTargetArrayIndex; +}; + +psIn vs(vsIn input, uint id : SV_InstanceID) { + psIn o; + o.view_id = id % sk_view_count; + id = id / sk_view_count; + + o.world = mul(input.pos, sk_inst[id].world); + o.pos = mul(o.world, sk_viewproj[o.view_id]); + + o.norm = normalize(mul(input.norm, (float3x3)sk_inst[id].world)); + + o.uv = input.uv; + o.color = input.col; + o.color *= linear_gamma(sk_inst[id].color); + // o.color.rgb *= Lighting(o.norm); + return o; +} + +psOut ps(psIn input) { + psOut o; + + // o.depth = oriel(input.pos.z, input.view_id, input.world.xyz); + o.depth = oriel(oriel_id, 0.999, input.view_id, input.world.xyz); + + // float4 col = diffuse.Sample(diffuse_s, input.uv); + + o.color = input.color;// * diffuse.Sample(diffuse_s, input.uv); + + return o; +} \ No newline at end of file diff --git a/sk_demo/res/shaders/unlit.hlsl b/sk_demo/res/shaders/unlit.hlsl new file mode 100644 index 0000000..bcea33b --- /dev/null +++ b/sk_demo/res/shaders/unlit.hlsl @@ -0,0 +1,47 @@ +#include "stereokit.hlsli" +#include "dofdev.hlsli" + +//--name = dofdev/unlit + +//--diffuse = white + +Texture2D diffuse : register(t0); +SamplerState diffuse_s : register(s0); + +struct vsIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 col : COLOR0; +}; +struct psIn { + float4 pos : SV_Position; + float3 norm : NORMAL0; + float2 uv : TEXCOORD0; + float4 world : WORLD; + float4 color : COLOR0; + float3 campos : TEXCOORD1; + uint view_id : SV_RenderTargetArrayIndex; +}; + +psIn vs(vsIn input, uint id : SV_InstanceID) { + psIn o; + o.view_id = id % sk_view_count; + id = id / sk_view_count; + + o.campos = sk_camera_pos[o.view_id].xyz; + + o.world = mul(input.pos, sk_inst[id].world); + o.pos = mul(o.world, sk_viewproj[o.view_id]); + + o.norm = normalize(mul(input.norm, (float3x3)sk_inst[id].world)); + + o.uv = input.uv; + o.color = input.col; + o.color *= linear_gamma(sk_inst[id].color); + return o; +} + +float4 ps(psIn input) : SV_TARGET { + return input.color * diffuse.Sample(diffuse_s, input.uv); +} \ No newline at end of file diff --git a/sk_demo/src/Mat.cs b/sk_demo/src/Mat.cs new file mode 100644 index 0000000..b9d6d67 --- /dev/null +++ b/sk_demo/src/Mat.cs @@ -0,0 +1,55 @@ +namespace Main; + +using System.Runtime.InteropServices; +[StructLayout(LayoutKind.Sequential)] +struct oriel_data { + public Matrix m4; + public Matrix m4_inv; + public Vec3 size; + public float pad; // padding (16 byte alignment) +} +[StructLayout(LayoutKind.Sequential)] +unsafe struct oriel_buffer { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 455)] // 455 *see dofdev.hlsli + public oriel_data[] oriels; +} + +public class Mat { + MaterialBuffer buffer = new (3); + oriel_buffer data = new (); + public void SetOriel(int id, Matrix m4, Vec3 size) { + data.oriels[id].m4 = (Matrix)System.Numerics.Matrix4x4.Transpose( + m4.Inverse + ); + data.oriels[id].m4_inv = (Matrix)System.Numerics.Matrix4x4.Transpose( + m4 + ); + data.oriels[id].size = size; + buffer.Set(data); + } + + public Material mono = new (Shader.FromFile("shaders/mono.hlsl")); + public void SetAtlas(string name, Material mat) { + Tex tex = Tex.FromFile($"{name}/{name}.png"); + tex.SampleMode = TexSample.Point; + mat.SetTexture("diffuse", tex); + } + + public Material sky = new (Shader.FromFile("shaders/sky.hlsl")); + + public Material unlit = new (Shader.FromFile("shaders/unlit.hlsl")); + + public void Init() { + data.oriels = new oriel_data[455]; // 455 *see dofdev.hlsli + + mono.FaceCull = Cull.None; + sky.FaceCull = Cull.Front; + } + + public void Run() { + Rig rig = Main.Mono.inst.rig; + + + // Log.Info($"{rig.perch_pos.z}"); + } +} \ No newline at end of file diff --git a/sk_demo/src/Mono.cs b/sk_demo/src/Mono.cs new file mode 100644 index 0000000..990e56f --- /dev/null +++ b/sk_demo/src/Mono.cs @@ -0,0 +1,102 @@ +using System.Security.AccessControl; + +namespace Main; +public class Mono { + private static readonly Lazy lazy = new(() => new Mono()); + public static Mono inst { get { return lazy.Value; } } + + public static readonly bool dev = Environment.CommandLine.Contains("--dev"); + + public MonoNet monoNet = new(); + + public Rig rig = new(); + + + public Mat mat = new(); + Mesh mesh_floor = Mesh.Quad; + + Material mat_room = new (Shader.FromFile("shaders/room.hlsl")); + Model model_room = Model.FromFile("room.glb"); + Mesh mesh_room = Mesh.Quad; + + int last_xi = 0; + + // alphabet a-z + string[] characters = new string[] { + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", + "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", + "u", "v", "w", "x", "y", "z" + }; + + + public void Init() { + rig.Init(); + + mat.Init(); + mesh_floor = Mesh.GenerateCircle(1, 64); + + mat_room.SetTexture("diffuse", Tex.FromFile("bake.png")); + mesh_room = model_room.Nodes.First(n => n.Name == "Room").Mesh; + } + + public void Run() { + rig.Run(); + + mat.Run(); // run here or at the end?... or maybe both? + + if (Input.Key(Key.Left).IsJustActive()) { + monoNet.value = 1; + monoNet.send = true; + } + + if (Input.Key(Key.Right).IsJustActive()) { + monoNet.value = 2; + monoNet.send = true; + } + + int xi = (int)(rig.hand_1.palm.position.x * 20f); + xi = Math.Clamp(xi + 10, 0, 26); + Log.Info($"xi: {xi}"); + if (xi != last_xi) { + last_xi = xi; + monoNet.value = xi; + monoNet.send = true; + } + + // HUD + // void Text.Add(string text, Matrix transform, TextAlign position = TextAlign.Center, TextAlign align = TextAlign.Center, float offX = 0, float offY = 0, float offZ = 0) + Text.Add( + characters[last_xi], + Matrix.TRS( + rig.hand_1.palm.position + V.XYZ(0, 0.1f, 0), + rig.head_ori * Quat.FromAngles(0, 180, 0), + 2f + ), + TextAlign.Center, + TextAlign.Center, + 0, 0, 0 + ); + + // WORLD + mesh_room.Draw( + mat_room, + Matrix.T(V.XYZ(0, 0, 0)) + ); + + + mesh_floor.Draw( + mat.unlit, + Matrix.TS( + V.XYZ(0, 0, 0), + 1*U.cm + ), + Color.Hex(0x666666FF) + ); + + Vec3[] offsets = new Vec3[] { + V.XYZ(-2, -2f, -2f) * U.cm, + V.XYZ(2, 2f, 2f) * U.cm, + V.XYZ(0, 0, 0) + }; + } +} \ No newline at end of file diff --git a/sk_demo/src/MonoNet.cs b/sk_demo/src/MonoNet.cs new file mode 100644 index 0000000..120c1ea --- /dev/null +++ b/sk_demo/src/MonoNet.cs @@ -0,0 +1,46 @@ +using System.Net; +using System.Net.Http; +using System.Net.Sockets; +using System.Threading; + +public class MonoNet { + public Socket socket; + int bufferSize = 180; // ? + byte[] wData; int wHead; + + public bool send = true; + public int value = 0; + + + public MonoNet() { + + socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); + string ip = "192.168.1.81"; + + EndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(ip), 1234); + socket.Connect(serverEndPoint); + wData = new byte[bufferSize]; + + Thread.Sleep(1000); // useful? + + // Thread readThread = new Thread(Read); + // readThread.Start(); + Thread writeThread = new Thread(Write); + writeThread.Start(); + } + + void Write() { + bool running = true; + while (running) { + Thread.Sleep(60); + if (send) { + wHead = 0; + BitConverter.GetBytes(value).CopyTo(wData, wHead); + socket.Send(wData); + + Log.Info($"Sent {value}"); + send = false; // for testing + } + } + } +} \ No newline at end of file diff --git a/sk_demo/src/Rig.cs b/sk_demo/src/Rig.cs new file mode 100644 index 0000000..2f4c7f0 --- /dev/null +++ b/sk_demo/src/Rig.cs @@ -0,0 +1,33 @@ +public class Rig { + public Vec3 head_pos = Vec3.Zero; + public Quat head_ori = Quat.Identity; + public Vec3 view_pos = Vec3.Zero; + + public Hand hand_0 = new(); + public Hand hand_1 = new(); + public Vec3 palm_pos = Vec3.Zero; + public Quat palm_ori = Quat.Identity; + + public Vec3 perch_pos = Vec3.Zero; + + public void Init() { + } + + public void Run() { + hand_0 = Input.Hand(Handed.Left); + hand_1 = Input.Hand(Handed.Right); + + head_pos = Main.Mono.dev && Time.Totalf > 0.5f ? head_pos : Input.Head.position; + head_ori = Main.Mono.dev && Time.Totalf > 0.5f ? head_ori : Input.Head.orientation; + view_pos = head_pos + V.XYZ(0, -6*U.cm, 0); + + + + // Position is specifically defined as the middle of the middle finger's root (metacarpal) bone. + palm_pos = hand_1.palm.position; + // For orientation, Forward is the direction the flat of the palm is facing, "Iron Man" style. X+ is to the outside of the right hand, and to the inside of the left hand. + palm_ori = hand_1.palm.orientation; + + perch_pos = palm_pos + Vec3.Up * 8 * U.cm; + } +} \ No newline at end of file diff --git a/sk_demo/src/SKs.cs b/sk_demo/src/SKs.cs new file mode 100644 index 0000000..42c9853 --- /dev/null +++ b/sk_demo/src/SKs.cs @@ -0,0 +1,39 @@ +global using System; +global using StereoKit; + +Log.Filter = LogLevel.Info; +Log.Info("hello log!"); + +SKSettings settings = new() { + appName = "dofbox", + assetsFolder = "res", + depthMode = DepthMode.D32, + disableUnfocusedSleep = true, + flatscreenWidth = 1280, + flatscreenHeight = 720, + // displayPreference = DisplayMode.Flatscreen, + // disableFlatscreenMRSim = true, + origin = OriginMode.Floor, + overlayApp = true, + overlayPriority = 1, + blendPreference = DisplayBlend.AnyTransparent, +}; +if (!SK.Initialize(settings)) + Environment.Exit(1); + +// Input.HandSolid(Handed.Max, false); +// Input.HandVisible(Handed.Max, true); +// Input.HandMaterial(Handed.Max, Material.Default); + +Renderer.Scaling = 2; +Renderer.Multisample = 0; +Renderer.SetClip(0.02f, 100f); +Renderer.EnableSky = false; +Renderer.ClearColor = Color.Hex(0x808080FF); +Renderer.SetFOV(60f); + +Main.Mono mono = Main.Mono.inst; +mono.Init(); +SK.Run(() => { + mono.Run(); +});