UNPKG

@signalk/n2k-signalk

Version:

NMEA 2000 to SignalK conversion library

421 lines (335 loc) 11.4 kB
import { timeToSeconds } from '../utils.js' import { PGN, PGN_130820_FusionMedia, PGN_130820_FusionDeviceName, PGN_130820_FusionPowerState, PGN_130820_FusionArtistName, PGN_130820_FusionAlbumName, PGN_130820_FusionTrackName, PGN_130820_FusionTrackNameMatchFields, PGN_130820_FusionTrackPosition, PGN_130820_FusionSiriusxmArtist, PGN_130820_FusionSiriusxmTitle, PGN_130820_FusionSiriusxmChannel, PGN_130820_FusionSiriusxmContentInfo, PGN_130820_FusionVolumes, PGN_130820_FusionZoneName, PGN_130820_FusionSource, PGN_130820_FusionMute, PGN_130820_FusionEq, PGN_130820_FusionTuner, FusionPlayStatus, ManufacturerCode, FusionPowerState, FusionStatusMessageId } from '@canboat/ts-pgns' let currentFusionSource: number | null = null const fusionSources: { [key: string]: string } = {} const isMuted = (n2k: PGN_130820_FusionMute) => n2k.fields.mute == 'Mute On' ? true : false module.exports = [ { pgnClass: PGN_130820_FusionDeviceName, node: 'entertainment.device.fusion1.name', value: (n2k: PGN_130820_FusionDeviceName) => n2k.fields.name }, { pgnClass: PGN_130820_FusionPowerState, node: 'entertainment.device.fusion1.state', value: (n2k: PGN_130820_FusionPowerState) => n2k.fields.state === FusionPowerState.On ? 'on' : 'off' }, { pgnClass: PGN_130820_FusionArtistName, value: (n2k: PGN_130820_FusionArtistName) => n2k.fields.artist, node: (n2k: PGN_130820_FusionArtistName) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.artistName', filter: (n2k: PGN_130820_FusionArtistName) => n2k.fields.artist != undefined && currentFusionSource != null }, { pgnClass: PGN_130820_FusionAlbumName, value: (n2k: PGN_130820_FusionAlbumName) => n2k.fields.album, node: (n2k: PGN_130820_FusionAlbumName) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.albumName', filter: (n2k: PGN_130820_FusionAlbumName) => n2k.fields.album != undefined && currentFusionSource != null }, { pgnClass: PGN_130820_FusionTrackName, value: (n2k: PGN_130820_FusionTrackName) => n2k.fields.track, node: (n2k: any) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.name', filter: (n2k: PGN_130820_FusionTrackName) => n2k.fields.track != undefined && currentFusionSource != null }, { pgnClass: PGN_130820_FusionTrackPosition, node: (n2k: PGN_130820_FusionTrackPosition) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.elapsedTime', filter: (n2k: PGN_130820_FusionTrackPosition) => currentFusionSource != null, value: (n2k: PGN_130820_FusionTrackPosition) => timeToSeconds(n2k.fields.progress) }, { pgnClass: PGN_130820_FusionMedia, node: (n2k: PGN_130820_FusionMedia) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.length', filter: (n2k: PGN_130820_FusionMedia) => currentFusionSource != null, value: (n2k: PGN_130820_FusionMedia) => timeToSeconds(n2k.fields.length) }, { pgnClass: PGN_130820_FusionSiriusxmArtist, value: (n2k: PGN_130820_FusionSiriusxmArtist) => n2k.fields.artist, node: (n2k: any) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.artistName', filter: (n2k: PGN_130820_FusionSiriusxmArtist) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionSiriusxmTitle, value: (n2k: PGN_130820_FusionSiriusxmTitle) => n2k.fields.title, node: (n2k: PGN_130820_FusionSiriusxmTitle) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.name', filter: (n2k: PGN_130820_FusionSiriusxmTitle) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionSiriusxmChannel, value: (n2k: PGN_130820_FusionSiriusxmChannel) => n2k.fields.channel, node: (n2k: PGN_130820_FusionSiriusxmChannel) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.tuner.stationName', filter: (n2k: PGN_130820_FusionSiriusxmChannel) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionSiriusxmContentInfo, value: (n2k: PGN_130820_FusionSiriusxmContentInfo) => n2k.fields.genre, node: (n2k: PGN_130820_FusionSiriusxmContentInfo) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.genre', filter: (n2k: any) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionMedia, value: (n2k: PGN_130820_FusionMedia) => n2k.fields.track, node: (n2k: PGN_130820_FusionMedia) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.number', filter: (n2k: PGN_130820_FusionMedia) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionMedia, value: (n2k: PGN_130820_FusionMedia) => n2k.fields.trackCount, node: (n2k: PGN_130820_FusionMedia) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.totalTracks', filter: (n2k: PGN_130820_FusionMedia) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionVolumes, node: 'entertainment.device.fusion1.output.zone1.volume.master', value: (n2k: PGN_130820_FusionVolumes) => n2k.fields.zone1 }, { pgnClass: PGN_130820_FusionVolumes, node: 'entertainment.device.fusion1.output.zone2.volume.master', value: (n2k: PGN_130820_FusionVolumes) => n2k.fields.zone2 }, { pgnClass: PGN_130820_FusionVolumes, node: 'entertainment.device.fusion1.output.zone3.volume.master', value: (n2k: PGN_130820_FusionVolumes) => n2k.fields.zone3 }, { pgnClass: PGN_130820_FusionVolumes, node: 'entertainment.device.fusion1.output.zone4.volume.master', value: (n2k: PGN_130820_FusionVolumes) => n2k.fields.zone4 }, { pgnClass: PGN_130820_FusionZoneName, node: (n2k: PGN_130820_FusionZoneName) => 'entertainment.device.fusion1.output.zone' + (n2k.fields.number + 1) + '.name', value: (n2k: PGN_130820_FusionZoneName) => n2k.fields.name }, { pgnClass: PGN_130820_FusionSource, node: 'entertainment.device.fusion1.output.zone1.source', value: (n2k: PGN_130820_FusionSource) => { if (n2k.fields.currentSourceId !== undefined) { currentFusionSource = n2k.fields.currentSourceId return ( 'entertainment.device.fusion1.avsource.source' + n2k.fields.currentSourceId ) } } }, { pgnClass: PGN_130820_FusionSource, node: 'entertainment.device.fusion1.output.zone2.source', value: (n2k: PGN_130820_FusionSource) => 'entertainment.device.fusion1.avsource.source' + n2k.fields.currentSourceId }, { pgnClass: PGN_130820_FusionSource, node: 'entertainment.device.fusion1.output.zone3.source', value: (n2k: PGN_130820_FusionSource) => 'entertainment.device.fusion1.avsource.source' + n2k.fields.currentSourceId }, { pgnClass: PGN_130820_FusionSource, node: 'entertainment.device.fusion1.output.zone4.source', value: (n2k: PGN_130820_FusionSource) => 'entertainment.device.fusion1.avsource.source' + n2k.fields.currentSourceId }, { pgnClass: PGN_130820_FusionSource, node: (n2k: PGN_130820_FusionSource) => 'entertainment.device.fusion1.avsource.source' + n2k.fields.sourceId + '.name', value: (n2k: PGN_130820_FusionSource) => { fusionSources[n2k.fields.sourceId!] = n2k.fields.source! return n2k.fields.source } }, { pgnClass: PGN_130820_FusionTuner, node: (n2k: PGN_130820_FusionTuner) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.tuner.frequency', value: (n2k: PGN_130820_FusionTuner) => { if (n2k.fields.sourceId == 'AM') { return n2k.fields.frequency! / 1000 } else { return n2k.fields.frequency! / 1000000 } }, filter: (n2k: PGN_130820_FusionTuner) => currentFusionSource != null && n2k.fields.frequency !== undefined }, { pgnClass: PGN_130820_FusionTuner, node: (n2k: PGN_130820_FusionTuner) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.tuner.signalStrength', value: (n2k: PGN_130820_FusionTuner) => n2k.fields.signalStrength, filter: (n2k: PGN_130820_FusionSource) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionTuner, node: (n2k: PGN_130820_FusionTuner) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.track.name', value: (n2k: PGN_130820_FusionTuner) => n2k.fields.track && n2k.fields.track.length > 0 ? n2k.fields.track : null, filter: (n2k: PGN_130820_FusionSource) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionMedia, node: (n2k: PGN_130820_FusionMedia) => 'entertainment.device.fusion1.avsource.source' + currentFusionSource + '.playbackState', value: function (n2k: PGN_130820_FusionMedia) { return n2k.fields.flags == FusionPlayStatus.Paused || n2k.fields.flags == FusionPlayStatus.Stopped ? 'Paused' : 'Playing' }, filter: (n2k: PGN_130820_FusionSource) => currentFusionSource != null }, { pgnClass: PGN_130820_FusionMute, node: 'entertainment.device.fusion1.output.zone1.isMuted', value: (n2k: PGN_130820_FusionMute) => isMuted(n2k) }, { pgnClass: PGN_130820_FusionMute, node: 'entertainment.device.fusion1.output.zone2.isMuted', value: (n2k: PGN_130820_FusionMute) => isMuted(n2k) }, { pgnClass: PGN_130820_FusionMute, node: 'entertainment.device.fusion1.output.zone3.isMuted', value: (n2k: PGN_130820_FusionMute) => isMuted(n2k) }, { pgnClass: PGN_130820_FusionMute, node: 'entertainment.device.fusion1.output.zone4.isMuted', value: (n2k: PGN_130820_FusionMute) => isMuted(n2k) }, { pgnClass: PGN_130820_FusionEq, node: 'entertainment.device.fusion1.output.zone1.equalizer', value: function (n2k: PGN_130820_FusionEq) { return { bass: n2k.fields.bass, mid: n2k.fields.mid, treble: n2k.fields.treble } } }, { pgnClass: PGN_130820_FusionEq, node: 'entertainment.device.fusion1.output.zone2.equalizer', value: function (n2k: PGN_130820_FusionEq) { return { bass: n2k.fields.bass, mid: n2k.fields.mid, treble: n2k.fields.treble } } }, { pgnClass: PGN_130820_FusionEq, node: 'entertainment.device.fusion1.output.zone3.equalizer', value: function (n2k: PGN_130820_FusionEq) { return { bass: n2k.fields.bass, mid: n2k.fields.mid, treble: n2k.fields.treble } } }, { pgnClass: PGN_130820_FusionEq, node: 'entertainment.device.fusion1.output.zone4.equalizer', value: function (n2k: PGN_130820_FusionEq) { return { bass: n2k.fields.bass, mid: n2k.fields.mid, treble: n2k.fields.treble } } } ]