From d4fa6a9b8f7ea8c3a6328c461eb7428f12ed6e36 Mon Sep 17 00:00:00 2001 From: Elco Jacobs Date: Fri, 28 Jun 2024 13:22:36 +0200 Subject: [PATCH 1/5] merge gpio module and analog gpio module --- dev/makecert.sh | 2 +- firmware.ini | 12 +- package.json | 2 +- .../components/QuickstartChannelField.vue | 2 +- .../components/QuickstartDiscoveryTask.vue | 6 +- src/plugins/quickstart/utils.ts | 12 +- .../GpioModuleWidget.vue} | 6 +- .../{AnalogGpioModule => GpioModule}/index.ts | 14 +- .../OneWireGpioModuleWidget.vue | 164 ------------------ .../spark/features/OneWireGpioModule/index.ts | 76 -------- src/plugins/spark/features/index.ts | 8 +- src/plugins/spark/utils/formatting.ts | 6 +- yarn.lock | 8 +- 13 files changed, 37 insertions(+), 281 deletions(-) rename src/plugins/spark/features/{AnalogGpioModule/AnalogGpioModuleWidget.vue => GpioModule/GpioModuleWidget.vue} (97%) rename src/plugins/spark/features/{AnalogGpioModule => GpioModule}/index.ts (85%) delete mode 100644 src/plugins/spark/features/OneWireGpioModule/OneWireGpioModuleWidget.vue delete mode 100644 src/plugins/spark/features/OneWireGpioModule/index.ts diff --git a/dev/makecert.sh b/dev/makecert.sh index 7bbf86869..eae3b62f7 100644 --- a/dev/makecert.sh +++ b/dev/makecert.sh @@ -1,5 +1,5 @@ #! /usr/bin/env bash -set -euo pipefail +set -euox pipefail pushd "$(git rev-parse --show-toplevel)" >/dev/null mkdir -p dev/traefik/ diff --git a/firmware.ini b/firmware.ini index da4129369..d58bbfd1a 100644 --- a/firmware.ini +++ b/firmware.ini @@ -1,8 +1,8 @@ [FIRMWARE] -firmware_version=7debb0ff -firmware_date=2024-05-17 -firmware_sha=7debb0ff847e26973987fe974b96443f0de06eb4 -proto_version=085aa575 -proto_date=2024-05-17 -proto_sha=085aa5756728fe8815c434d6d2a61976b642f4b4 +firmware_version=1b1103d4 +firmware_date=2024-06-27 +firmware_sha=1b1103d46643d6b3f26dc3a8ca5754cb6afcd40a +proto_version=e50c045c +proto_date=2024-06-27 +proto_sha=e50c045c341e570e1fd141f54979e9e5ce9bd62e system_version=3.2.0 diff --git a/package.json b/package.json index feebac19f..894bd0de0 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "dependencies": { "@quasar/extras": "^1.16.11", "axios": "^1.6.8", - "brewblox-proto": "https://github.com/brewblox/brewblox-proto#commit=4f015c84245de0cc0dbf07c8f23e90e4ba1b1779", + "brewblox-proto": "https://github.com/brewblox/brewblox-proto#commit=e50c045c341e570e1fd141f54979e9e5ce9bd62e", "buffer": "^6.0.3", "cm6-theme-basic-dark": "^0.2.0", "codemirror": "^6.0.1", diff --git a/src/plugins/quickstart/components/QuickstartChannelField.vue b/src/plugins/quickstart/components/QuickstartChannelField.vue index 83d19b16c..eabc9482f 100644 --- a/src/plugins/quickstart/components/QuickstartChannelField.vue +++ b/src/plugins/quickstart/components/QuickstartChannelField.vue @@ -73,7 +73,7 @@ const opts = computed[]>(() => { .filter( (block): block is IoArrayInterfaceBlock => isCompatible(block.type, BlockIntfType.IoArrayInterface) && - block.type !== BlockType.OneWireGpioModule, + block.type !== BlockType.GpioModule, ) .flatMap((block): IoChannelAddress[] => block.data.channels.map((channel: IoChannel) => ({ diff --git a/src/plugins/quickstart/components/QuickstartDiscoveryTask.vue b/src/plugins/quickstart/components/QuickstartDiscoveryTask.vue index e5fdc29fd..f94fbbff0 100644 --- a/src/plugins/quickstart/components/QuickstartDiscoveryTask.vue +++ b/src/plugins/quickstart/components/QuickstartDiscoveryTask.vue @@ -5,7 +5,7 @@ import { BlockType, DS2408Block, DS2413Block, - OneWireGpioModuleBlock, + GpioModuleBlock, TempSensorOneWireBlock, } from 'brewblox-proto/ts'; import { computed, onBeforeMount } from 'vue'; @@ -37,7 +37,7 @@ const discoveredBlocks = computed( .filter((block) => isCompatible(block.type, [ BlockIntfType.OneWireDeviceInterface, - BlockType.OneWireGpioModule, + BlockType.GpioModule, ]), ) .sort(makeObjectSorter('id')) ?? [], @@ -48,7 +48,7 @@ function about(block: Block): string { return prettyQty(block.data.value); } - if (matchesType(BlockType.OneWireGpioModule, block)) { + if (matchesType(BlockType.GpioModule, block)) { return `Position ${block.data.modulePosition}`; } diff --git a/src/plugins/quickstart/utils.ts b/src/plugins/quickstart/utils.ts index de1888493..6ecc38124 100644 --- a/src/plugins/quickstart/utils.ts +++ b/src/plugins/quickstart/utils.ts @@ -1,7 +1,7 @@ import { BlockType, DigitalActuatorBlock, - OneWireGpioModuleBlock, + GpioModuleBlock, PidBlock, } from 'brewblox-proto/ts'; import cloneDeep from 'lodash/cloneDeep'; @@ -26,14 +26,12 @@ const digitalActuatorFilter = makeTypeFilter( BlockType.DigitalActuator, ); -const oneWireGpioFilter = makeTypeFilter( - BlockType.OneWireGpioModule, -); +const GpioFilter = makeTypeFilter(BlockType.GpioModule); export function resetGpioChanges(serviceId: string): GpioChange[] { return useSparkStore() .blocksByService(serviceId) - .filter(oneWireGpioFilter) + .filter(GpioFilter) .sort((a, b) => a.data.modulePosition - b.data.modulePosition) .map((block) => ({ blockId: block.id, @@ -69,7 +67,7 @@ export function unlinkedActuators( export function changedIoModules( serviceId: string, changes: GpioChange[], -): QuickstartPatch[] { +): QuickstartPatch[] { return changes.map((change) => { const { blockId, channels } = change; return { blockId, patch: { channels } }; @@ -210,4 +208,4 @@ export const makeFridgeHeatConfig = (): PidConfig => ({ kp: inverseTempQty(20), ti: bloxQty('2h'), td: bloxQty('10m'), -}); +}); \ No newline at end of file diff --git a/src/plugins/spark/features/AnalogGpioModule/AnalogGpioModuleWidget.vue b/src/plugins/spark/features/GpioModule/GpioModuleWidget.vue similarity index 97% rename from src/plugins/spark/features/AnalogGpioModule/AnalogGpioModuleWidget.vue rename to src/plugins/spark/features/GpioModule/GpioModuleWidget.vue index 3dc8c4a00..7a52c751c 100644 --- a/src/plugins/spark/features/AnalogGpioModule/AnalogGpioModuleWidget.vue +++ b/src/plugins/spark/features/GpioModule/GpioModuleWidget.vue @@ -1,7 +1,7 @@ - - diff --git a/src/plugins/spark/features/OneWireGpioModule/index.ts b/src/plugins/spark/features/OneWireGpioModule/index.ts deleted file mode 100644 index 3380107ce..000000000 --- a/src/plugins/spark/features/OneWireGpioModule/index.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { - BlockType, - GpioErrorFlags, - GpioPins, - OneWireGpioModuleBlock, -} from 'brewblox-proto/ts'; -import { Plugin } from 'vue'; -import { discoveredBlockFeature } from '@/plugins/spark/generic'; -import { useBlockSpecStore } from '@/plugins/spark/store'; -import { BlockSpec } from '@/plugins/spark/types'; -import { useFeatureStore, WidgetFeature } from '@/store/features'; -import { cref } from '@/utils/component-ref'; -import widget from './OneWireGpioModuleWidget.vue'; - -const type = BlockType.OneWireGpioModule; -const title = 'OneWire GPIO Module'; - -const plugin: Plugin = { - install(app) { - const specStore = useBlockSpecStore(); - const featureStore = useFeatureStore(); - - const blockSpec: BlockSpec = { - type, - title, - hasRelations: true, - generate: (): OneWireGpioModuleBlock['data'] => ({ - channels: [], - modulePosition: 0, - useExternalPower: false, - status: { - moduleStatus: GpioErrorFlags.NONE, - pullUpDesired: GpioPins.NONE, - pullUpStatus: GpioPins.NONE, - pullUpWhenActive: GpioPins.NONE, - pullUpWhenInactive: GpioPins.NONE, - pullDownDesired: GpioPins.NONE, - pullDownStatus: GpioPins.NONE, - pullDownWhenActive: GpioPins.NONE, - pullDownWhenInactive: GpioPins.NONE, - overCurrent: GpioPins.NONE, - openLoad: GpioPins.NONE, - faultsHistory5m: GpioErrorFlags.NONE, - faultsHistory60m: GpioErrorFlags.NONE, - }, - }), - analyze: (block: OneWireGpioModuleBlock) => { - const { moduleStatus } = block.data.status; - switch (moduleStatus) { - case GpioErrorFlags.NONE: - case GpioErrorFlags.OPEN_LOAD: - return 'Active'; - default: - return 'Invalid'; - } - }, - }; - - const feature: WidgetFeature = { - ...discoveredBlockFeature, - id: type, - title, - role: 'Output', - component: cref(app, widget), - widgetSize: { - cols: 4, - rows: 4, - }, - }; - - specStore.addBlockSpec(blockSpec); - featureStore.addWidgetFeature(feature); - }, -}; - -export default plugin; diff --git a/src/plugins/spark/features/index.ts b/src/plugins/spark/features/index.ts index 3867f2b02..cbcb9a3b0 100644 --- a/src/plugins/spark/features/index.ts +++ b/src/plugins/spark/features/index.ts @@ -3,7 +3,6 @@ import ActuatorAnalogMock from './ActuatorAnalogMock'; import ActuatorLogic from './ActuatorLogic'; import ActuatorOffset from './ActuatorOffset'; import ActuatorPwm from './ActuatorPwm'; -import AnalogGpioModule from './AnalogGpioModule'; import Balancer from './Balancer'; import DeprecatedObject from './DeprecatedObject'; import DigitalActuator from './DigitalActuator'; @@ -12,11 +11,11 @@ import DisplaySettings from './DisplaySettings'; import DS2408 from './DS2408'; import DS2413 from './DS2413'; import FastPwm from './FastPwm'; +import GpioModule from './GpioModule'; import InactiveObject from './InactiveObject'; import MockPins from './MockPins'; import MotorValve from './MotorValve'; import Mutex from './Mutex'; -import OneWireGpioModule from './OneWireGpioModule'; import Pid from './Pid'; import QuickActions from './QuickActions'; import QuickValues from './QuickValues'; @@ -39,7 +38,6 @@ const plugins: Plugin[] = [ ActuatorLogic, ActuatorOffset, ActuatorPwm, - AnalogGpioModule, Balancer, DigitalActuator, DigitalInput, @@ -53,7 +51,7 @@ const plugins: Plugin[] = [ Pid, MotorValve, Mutex, - OneWireGpioModule, + GpioModule, Sequence, SetpointProfile, SetpointSensorPair, @@ -71,4 +69,4 @@ const plugins: Plugin[] = [ Variables, ]; -export default plugins; +export default plugins; \ No newline at end of file diff --git a/src/plugins/spark/utils/formatting.ts b/src/plugins/spark/utils/formatting.ts index 8b85d5634..5c89c14cf 100644 --- a/src/plugins/spark/utils/formatting.ts +++ b/src/plugins/spark/utils/formatting.ts @@ -9,7 +9,7 @@ import { CHANNEL_NAMES_SPARK_3, DigitalConstraints, DS2408Block, - OneWireGpioModuleBlock, + GpioModuleBlock, } from 'brewblox-proto/ts'; import { Enum } from 'typescript-string-enums'; import { BlockAddress } from '@/plugins/spark/types'; @@ -47,7 +47,7 @@ export function channelName( if (matchesType(BlockType.DS2408, block)) { return CHANNEL_NAMES_DS2408[block.data.connectMode][id]; } - if (matchesType(BlockType.OneWireGpioModule, block)) { + if (matchesType(BlockType.GpioModule, block)) { return block.data.channels.find((c) => c.id === id)?.name; } return undefined; @@ -148,4 +148,4 @@ export function prettyLimitations( } return output.join(', '); -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 34fced1e1..b4404128c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3060,12 +3060,12 @@ __metadata: languageName: node linkType: hard -"brewblox-proto@https://github.com/brewblox/brewblox-proto#commit=4f015c84245de0cc0dbf07c8f23e90e4ba1b1779": +"brewblox-proto@https://github.com/brewblox/brewblox-proto#commit=e50c045c341e570e1fd141f54979e9e5ce9bd62e": version: 1.0.0 - resolution: "brewblox-proto@https://github.com/brewblox/brewblox-proto.git#commit=4f015c84245de0cc0dbf07c8f23e90e4ba1b1779" + resolution: "brewblox-proto@https://github.com/brewblox/brewblox-proto.git#commit=e50c045c341e570e1fd141f54979e9e5ce9bd62e" dependencies: typescript-string-enums: "npm:^1.0.0" - checksum: 10c0/8cb1404a290d8b237069a110c5162b2314acd0733ba551c515a07f1dbcffbefa4377a3b60152d04d6b0f737559090283d29fdfbb958509a14ca967c50ae6ad48 + checksum: 10c0/a54432c9d80bef06e4c4027db9c0ba9425a2bf9fe64d875fcd1a5a9ffa81600f58ae7cba807026847b658dd82d8e973e3924eba84ade4e87c69020caa59f6123 languageName: node linkType: hard @@ -3096,7 +3096,7 @@ __metadata: "@vue/test-utils": "npm:^2.4.6" autoprefixer: "npm:^10.4.19" axios: "npm:^1.6.8" - brewblox-proto: "https://github.com/brewblox/brewblox-proto#commit=4f015c84245de0cc0dbf07c8f23e90e4ba1b1779" + brewblox-proto: "https://github.com/brewblox/brewblox-proto#commit=e50c045c341e570e1fd141f54979e9e5ce9bd62e" buffer: "npm:^6.0.3" cm6-theme-basic-dark: "npm:^0.2.0" codemirror: "npm:^6.0.1" From 4ea07d1b96a8b08304a5519777fdd41fc843bab7 Mon Sep 17 00:00:00 2001 From: Elco Jacobs Date: Mon, 1 Jul 2024 12:55:13 +0200 Subject: [PATCH 2/5] update analog channels in GPIO module --- firmware.ini | 12 +- package.json | 2 +- .../components/widget/AnalogArrayEditor.vue | 126 +++++++++++++++--- src/plugins/spark/const.ts | 10 +- .../features/GpioModule/GpioModuleWidget.vue | 40 +++--- yarn.lock | 8 +- 6 files changed, 143 insertions(+), 55 deletions(-) diff --git a/firmware.ini b/firmware.ini index d58bbfd1a..323fbb65a 100644 --- a/firmware.ini +++ b/firmware.ini @@ -1,8 +1,8 @@ [FIRMWARE] -firmware_version=1b1103d4 -firmware_date=2024-06-27 -firmware_sha=1b1103d46643d6b3f26dc3a8ca5754cb6afcd40a -proto_version=e50c045c -proto_date=2024-06-27 -proto_sha=e50c045c341e570e1fd141f54979e9e5ce9bd62e +firmware_version=3396d383 +firmware_date=2024-07-01 +firmware_sha=3396d383f8b05a1a096b5f9fc7c2f31efcc07f96 +proto_version=7a7cafa4 +proto_date=2024-07-01 +proto_sha=7a7cafa46705bfe03945a6cd3978b88f37d28102 system_version=3.2.0 diff --git a/package.json b/package.json index 894bd0de0..9c8a95c9a 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "dependencies": { "@quasar/extras": "^1.16.11", "axios": "^1.6.8", - "brewblox-proto": "https://github.com/brewblox/brewblox-proto#commit=e50c045c341e570e1fd141f54979e9e5ce9bd62e", + "brewblox-proto": "https://github.com/brewblox/brewblox-proto#commit=7a7cafa46705bfe03945a6cd3978b88f37d28102", "buffer": "^6.0.3", "cm6-theme-basic-dark": "^0.2.0", "codemirror": "^6.0.1", diff --git a/src/plugins/spark/components/widget/AnalogArrayEditor.vue b/src/plugins/spark/components/widget/AnalogArrayEditor.vue index 42333a3df..1334d0389 100644 --- a/src/plugins/spark/components/widget/AnalogArrayEditor.vue +++ b/src/plugins/spark/components/widget/AnalogArrayEditor.vue @@ -1,30 +1,126 @@