This commit is contained in:
2026-01-13 23:11:58 +01:00
parent 0cb83157de
commit b8db847343
5 changed files with 24 additions and 39 deletions

View File

@@ -1,16 +1,17 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ShackMaster - F4BPO Shack</title> <title>ShackMaster - F4BPO Shack</title>
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap" rel="stylesheet">
<script type="module" crossorigin src="/assets/index-DfHlyr4L.js"></script> <script type="module" crossorigin src="/assets/index-BqlArLJ0.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-oYZfaWiS.css"> <link rel="stylesheet" crossorigin href="/assets/index-Bl7hatTL.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
</body>
</html> </html>

View File

@@ -119,7 +119,6 @@ func (dm *DeviceManager) Initialize() error {
dm.flexRadio = flexradio.New( dm.flexRadio = flexradio.New(
dm.config.Devices.FlexRadio.Host, dm.config.Devices.FlexRadio.Host,
dm.config.Devices.FlexRadio.Port, dm.config.Devices.FlexRadio.Port,
dm.config.Devices.FlexRadio.InterlockName,
) )
// Set callback for immediate frequency changes (no waiting for update cycle) // Set callback for immediate frequency changes (no waiting for update cycle)

View File

@@ -23,8 +23,9 @@ type Client struct {
} }
type Status struct { type Status struct {
Heading int `json:"heading"` Heading int `json:"heading"`
Connected bool `json:"connected"` TargetHeading int `json:"target_heading"`
Connected bool `json:"connected"`
} }
func New(host string, port int) *Client { func New(host string, port int) *Client {
@@ -211,6 +212,11 @@ func (c *Client) parseStatus(response string) *Status {
if err == nil { if err == nil {
status.Heading = heading status.Heading = heading
} }
targetStr := response[19:22]
targetHeading, err := strconv.Atoi(strings.TrimSpace(targetStr))
if err == nil {
status.TargetHeading = targetHeading
}
} }
return status return status

View File

@@ -53,7 +53,6 @@
} }
try { try {
hasTarget = true; // Mark that we have a target hasTarget = true; // Mark that we have a target
// Subtract 10 degrees to compensate for rotator momentum
const adjustedHeading = (targetHeading + 360) % 360; const adjustedHeading = (targetHeading + 360) % 360;
await api.rotator.setHeading(adjustedHeading); await api.rotator.setHeading(adjustedHeading);
} catch (err) { } catch (err) {

View File

@@ -164,14 +164,6 @@
<div class="card-header"> <div class="card-header">
<h2>Ultrabeam VL2.3</h2> <h2>Ultrabeam VL2.3</h2>
<div class="header-right"> <div class="header-right">
{#if interlockConnected && interlockState}
<div class="interlock-badge" style="border-color: {interlockColor}; color: {interlockColor}">
{interlockState === 'READY' ? '🔓 TX OK' :
interlockState === 'NOT_READY' ? '🔒 TX Block' :
interlockState === 'PTT_REQUESTED' ? '⏳ PTT' :
interlockState === 'TRANSMITTING' ? '📡 TX' : '❓'}
</div>
{/if}
<span class="status-dot" class:disconnected={!connected}></span> <span class="status-dot" class:disconnected={!connected}></span>
</div> </div>
</div> </div>
@@ -353,18 +345,6 @@
gap: 12px; gap: 12px;
} }
.interlock-badge {
padding: 4px 10px;
border-radius: 12px;
border: 2px solid;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.5px;
background: rgba(0, 0, 0, 0.3);
transition: all 0.2s;
}
h2 { h2 {
margin: 0; margin: 0;
font-size: 20px; font-size: 20px;