Skip to content

Commit 8229be1

Browse files
author
dirkwa
committed
feat(streams): native canboat sources for YDWG-02, NavLink2 and W2K-1
The native N2K path covered NGT-1, SocketCAN, iKonvert-serial and the Maretron IPG100; the network gateways stayed canboatjs-only. canboat's interface command now bridges them (canboat/canboat#807), so each is one spawn: - ydwg02 / ydwg02-udp: Yacht Devices RAW over TCP (default 1457) or receive-only UDP, fast-packets reassembled and fragmented in the bridge - navlink2: the iKonvert protocol over TCP (default 6001) - w2k-1-ascii: Actisense N2K ASCII over TCP (default 60002) Admin UI options are gated on hasAnalyzer like the existing native entries and reuse their canboatjs counterparts' host/port field sets.
1 parent 1c21238 commit 8229be1

2 files changed

Lines changed: 33 additions & 3 deletions

File tree

packages/server-admin-ui/src/views/ServerConfig/BasicProvider.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,12 +1697,21 @@ function NMEA2000({ value, onChange, hasAnalyzer }: TypeComponentProps) {
16971697
iKonvert (canboat)
16981698
</option>
16991699
<option value="navlink2-tcp-canboatjs">NavLink2 (canboatjs)</option>
1700+
<option value="navlink2" disabled={!hasAnalyzer}>
1701+
NavLink2 (canboat)
1702+
</option>
17001703
<option value="canboat-csv-canboatjs">
17011704
canboat-pipeline CSV R/W (canboatjs)
17021705
</option>
17031706
<option value="ydwg02-canboatjs">
17041707
Yacht Devices RAW TCP (canboatjs)
17051708
</option>
1709+
<option value="ydwg02" disabled={!hasAnalyzer}>
1710+
Yacht Devices RAW TCP (canboat)
1711+
</option>
1712+
<option value="ydwg02-udp" disabled={!hasAnalyzer}>
1713+
Yacht Devices RAW UDP (canboat)
1714+
</option>
17061715
<option value="ydwg02-udp-canboatjs">
17071716
Yacht Devices RAW UDP (canboatjs)
17081717
</option>
@@ -1719,6 +1728,9 @@ function NMEA2000({ value, onChange, hasAnalyzer }: TypeComponentProps) {
17191728
<option value="w2k-1-n2k-actisense-canboatjs">
17201729
W2K-1 N2K ACTISENSE (canboatjs)
17211730
</option>
1731+
<option value="w2k-1-ascii" disabled={!hasAnalyzer}>
1732+
W2K-1 N2K ASCII (canboat)
1733+
</option>
17221734
<option value="maretron-ipg-canboatjs">
17231735
Maretron IPG 100 (canboatjs)
17241736
</option>
@@ -1741,7 +1753,9 @@ function NMEA2000({ value, onChange, hasAnalyzer }: TypeComponentProps) {
17411753
<BaudRateInputCanboat value={value.options} onChange={onChange} />
17421754
</div>
17431755
)}
1744-
{value.options.type === 'ydwg02-canboatjs' && (
1756+
{(value.options.type === 'ydwg02-canboatjs' ||
1757+
value.options.type === 'ydwg02' ||
1758+
value.options.type === 'navlink2') && (
17451759
<div>
17461760
<HostInput value={value.options} onChange={onChange} />
17471761
<PortInput value={value.options} onChange={onChange} />
@@ -1751,7 +1765,8 @@ function NMEA2000({ value, onChange, hasAnalyzer }: TypeComponentProps) {
17511765
/>
17521766
</div>
17531767
)}
1754-
{value.options.type === 'ydwg02-udp-canboatjs' && (
1768+
{(value.options.type === 'ydwg02-udp-canboatjs' ||
1769+
value.options.type === 'ydwg02-udp') && (
17551770
<div>
17561771
<HostInput value={value.options} onChange={onChange} />
17571772
<PortInput value={value.options} onChange={onChange} />
@@ -1817,7 +1832,8 @@ function NMEA2000({ value, onChange, hasAnalyzer }: TypeComponentProps) {
18171832
<CollectNetworkStatsInput value={value.options} onChange={onChange} />
18181833
)}
18191834
{(value.options.type === 'w2k-1-n2k-ascii-canboatjs' ||
1820-
value.options.type === 'w2k-1-n2k-actisense-canboatjs') && (
1835+
value.options.type === 'w2k-1-n2k-actisense-canboatjs' ||
1836+
value.options.type === 'w2k-1-ascii') && (
18211837
<div>
18221838
<HostInput value={value.options} onChange={onChange} />
18231839
<PortInput value={value.options} onChange={onChange} />

packages/streams/src/simple.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,20 @@ function nmea2000input(
430430
(password ? ` --password=${shellescape(password)}` : '') +
431431
` tcp://${subOptions.host}:${subOptions.port ?? 6543}`
432432
toChildProcess = 'nmea2000out'
433+
} else if (subOptions.type === 'ydwg02') {
434+
command = `canboat interface --kind ydwg tcp://${subOptions.host}:${subOptions.port ?? 1457}`
435+
toChildProcess = 'nmea2000out'
436+
} else if (subOptions.type === 'ydwg02-udp') {
437+
// The YDWG-02's UDP mode is receive-only; the bridge drops
438+
// outbound frames with a warning.
439+
command = `canboat interface --kind ydwg udp://${subOptions.port ?? 1457}`
440+
toChildProcess = 'nmea2000out'
441+
} else if (subOptions.type === 'navlink2') {
442+
command = `canboat interface --kind ikonvert tcp://${subOptions.host}:${subOptions.port ?? 6001}`
443+
toChildProcess = 'nmea2000out'
444+
} else if (subOptions.type === 'w2k-1-ascii') {
445+
command = `canboat interface --kind w2k-ascii tcp://${subOptions.host}:${subOptions.port ?? 60002}`
446+
toChildProcess = 'nmea2000out'
433447
} else {
434448
throw new Error(`unknown NMEA2000 type ${subOptions.type}`)
435449
}

0 commit comments

Comments
 (0)