<script lang="ts"> import { SoundSettingsItemType, type RfidInfo } from "@mmote/niimbluelib"; import { printerClient, connectedPrinterName, connectionState, initClient, heartbeatData, printerInfo, printerMeta } from "../stores"; import type { ConnectionType } from "../types"; import FaIcon from "./FaIcon.svelte"; let connectionType: ConnectionType = "bluetooth"; let rfidInfo: RfidInfo|undefined = undefined; const onConnectClicked = async () => { initClient(connectionType); connectionState.set("connecting"); try { await $printerClient.connect(); } catch (e) { connectionState.set("disconnected"); alert(e); } }; const onDisconnectClicked = () => { $printerClient.disconnect(); }; const getRfidInfo = async () => { rfidInfo = await $printerClient.abstraction.rfidInfo(); }; const startHeartbeat = async () => { $printerClient.startHeartbeat(); }; const stopHeartbeat = async () => { $printerClient.stopHeartbeat(); }; const soundOn = async () => { await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.BluetoothConnectionSound, true); await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.PowerSound, true); }; const soundOff = async () => { await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.BluetoothConnectionSound, false); await $printerClient.abstraction.setSoundEnabled(SoundSettingsItemType.PowerSound, false); }; const fetchInfo = async () => { await $printerClient.fetchPrinterInfo() }; </script> <div class="input-group flex-nowrap justify-content-end"> {#if $connectionState === "connected"} <button class="btn btn-secondary" data-bs-toggle="dropdown" data-bs-auto-close="outside" ><FaIcon icon="gear" /> </button> <div class="dropdown-menu p-1"> <div> Model metadata: <pre>{JSON.stringify($printerMeta, null, 1)}</pre> </div> <div> Printer info: <pre>{JSON.stringify($printerInfo, null, 1)}</pre> </div> <div> Rfid info: <pre>{JSON.stringify(rfidInfo || {}, null, 1)}</pre> </div> <div> Heartbeat data: <pre>{JSON.stringify($heartbeatData, null, 1)}</pre> </div> <div> Tests </div> <button class="btn btn-sm btn-primary" on:click={getRfidInfo}>Rfid</button> <button class="btn btn-sm btn-primary" on:click={startHeartbeat}>Heartbeat on</button> <button class="btn btn-sm btn-primary" on:click={stopHeartbeat}>Heartbeat off</button> <button class="btn btn-sm btn-primary" on:click={soundOn}>Sound on</button> <button class="btn btn-sm btn-primary" on:click={soundOff}>Sound off</button> <button class="btn btn-sm btn-primary" on:click={fetchInfo}>Fetch info again</button> </div> <span class="input-group-text">{$printerMeta?.model ?? $connectedPrinterName}</span> {:else} <select class="form-select" disabled={$connectionState === "connecting"} bind:value={connectionType}> <option value="bluetooth">Bluetooth</option> <option value="serial">Serial</option> </select> {/if} {#if $connectionState !== "connected"} <button class="btn btn-primary" disabled={$connectionState === "connecting"} on:click={onConnectClicked}> <FaIcon icon="plug" /> </button> {/if} {#if $connectionState === "connected"} <button class="btn btn-danger" on:click={onDisconnectClicked}> <FaIcon icon="plug-circle-xmark" /> </button> {/if} </div> <style> </style>