{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# start LighthouseConsole\n",
    "import builtins\n",
    "# absolute path to valve tools. modify for your machine\n",
    "builtins.valve_tools_path = r'C:\\Users\\decid\\Documents\\Projects\\valve-tools-wrapper\\steamvr\\tools\\bin\\win64\\\\'\n",
    "import steamvr\n",
    "\n",
    "lh = []\n",
    "instances = 4\n",
    "for i in range(instances):\n",
    "  lh.append(steamvr.LighthouseConsole.create())\n",
    "  lh[i].close()\n",
    "print('Started new LighthouseConsole instance')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# close LighthouseConsole\n",
    "\n",
    "if lh is not None:\n",
    "    for i in range(instances):\n",
    "        lh[i].close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# reboot LighthouseConsole\n",
    "\n",
    "if lh is not None:\n",
    "    for i in range(instances):\n",
    "        lh[i].close()\n",
    "        lh[i].open()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# testing stuff\n",
    "\n",
    "line = \"DEVICEINFO serial=LHR-365488CB device_class=hmd\"\n",
    "serial = line.split()[1].split('=')[1]\n",
    "device_class = line.split()[2].split('=')[1]\n",
    "print(serial, device_class)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# DO NOT SKIP: populate connected devices\n",
    "\n",
    "lh[0].open()\n",
    "devices = lh[0].list_hardware()\n",
    "devices"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# pair USB-connected controllers to the HMD\n",
    "\n",
    "radios = ['dyx', 'ryb']\n",
    "radioIndex = 0\n",
    "\n",
    "for device in devices:\n",
    "    if device['device_class'] == 'controller':\n",
    "        lh[radioIndex].open()\n",
    "        lh[radioIndex].select_device(device['serial'])\n",
    "        lh[radioIndex+2].open()\n",
    "        lh[radioIndex+2].select_device(radios[radioIndex])\n",
    "        lh[radioIndex].pair()\n",
    "        lh[radioIndex+2].pair()\n",
    "        radioIndex += 1\n",
    "        if radioIndex >= len(radios):\n",
    "            break\n",
    "for i in range(instances):\n",
    "    lh[i].reboot_device()\n",
    "    lh[i].close()\n",
    "    # lh[i].open()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# power off all controllers\n",
    "radioIndex = 0\n",
    "\n",
    "for device in devices:\n",
    "    if device['device_class'] == 'controller':\n",
    "        lh[radioIndex].open()\n",
    "        lh[radioIndex].select_device(device['serial'])\n",
    "        lh[radioIndex].shutdown_device()\n",
    "        radioIndex += 1\n",
    "for i in range(radioIndex):\n",
    "    lh[i].close()\n",
    "    # lh[i].open()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# controllers make funny sound\n",
    "import time\n",
    "\n",
    "frequencyAdd = 0\n",
    "frequencyStep = 20\n",
    "frequencyMaxAdd = 3000\n",
    "radioIndex = 0\n",
    "radioOpen = [False, False]\n",
    "\n",
    "while frequencyAdd < frequencyMaxAdd:\n",
    "    radioIndex = 0\n",
    "    for device in devices:\n",
    "        if device['device_class'] == 'controller':\n",
    "            if not radioOpen[radioIndex]:\n",
    "                lh[radioIndex].open()\n",
    "                lh[radioIndex].select_device(device['serial'])\n",
    "                radioOpen[radioIndex] = True\n",
    "            if radioIndex == 0:\n",
    "                lh[radioIndex].device_haptics(20 + frequencyAdd, 200)\n",
    "            else:\n",
    "                lh[radioIndex].device_haptics((20 + frequencyMaxAdd) - frequencyAdd, 200)\n",
    "            radioIndex += 1\n",
    "            if radioIndex > 1:\n",
    "                time.sleep(0.01)\n",
    "    frequencyAdd += frequencyStep\n",
    "for i in range(radioIndex):\n",
    "    lh[i].close()\n",
    "    # lh[i].open()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# run SteamVR\n",
    "from steamvr.steamvr import SteamVR\n",
    "\n",
    "# @patch.object(SteamVR, \"__enter__\")\n",
    "# @patch.object(SteamVR, \"__exit__\")\n",
    "vr = SteamVR()\n",
    "vr.start()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
