79 Commits
Author SHA1 Message Date
dependabot[bot] 0ecc0ce5cd Bump colord from 2.9.3 to 2.10.0 (#61)
Bumps [colord](https://github.com/omgovich/colord) from 2.9.3 to 2.10.0.
- [Release notes](https://github.com/omgovich/colord/releases)
- [Changelog](https://github.com/omgovich/colord/blob/master/CHANGELOG.md)
- [Commits](https://github.com/omgovich/colord/commits/v2.10)

---
updated-dependencies:
- dependency-name: colord
  dependency-version: 2.10.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-09 01:00:33 +01:00
dependabot[bot] 04f2f4c905 Bump browserslist from 4.28.1 to 4.28.8 (#60)
Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.28.1 to 4.28.8.
- [Release notes](https://github.com/browserslist/browserslist/releases)
- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)
- [Commits](https://github.com/browserslist/browserslist/compare/4.28.1...4.28.8)

---
updated-dependencies:
- dependency-name: browserslist
  dependency-version: 4.28.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-03 23:01:36 +01:00
dependabot[bot] cb3867e1c6 Bump fast-uri from 3.1.5 to 3.1.7 (#59)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.5 to 3.1.7.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.5...v3.1.7)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-03 21:02:33 +01:00
Companion Module Bot 4093ba9e15 chore: update module tools 2026-08-28 10:49:51 +00:00
dependabot[bot] b4d59b6f25 Bump nanoid from 3.3.11 to 3.3.18 (#58)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.11 to 3.3.18.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/3.3.18/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.11...3.3.18)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-version: 3.3.18
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 15:02:04 +01:00
dependabot[bot] 5595066a5b Bump fast-uri from 3.1.4 to 3.1.5 (#57)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.4...v3.1.5)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-05 17:02:34 +01:00
dependabot[bot] 719b223bb3 Bump tar from 7.5.16 to 7.5.22 (#56)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.16 to 7.5.22.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.16...v7.5.22)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.22
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 19:01:57 +01:00
dependabot[bot] 7171557499 Bump fast-uri from 3.1.2 to 3.1.4 (#55)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to 3.1.4.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 17:01:29 +01:00
dependabot[bot] 3dc5c241f5 Bump tar from 7.5.11 to 7.5.16 (#53)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.11 to 7.5.16.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.11...v7.5.16)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-23 09:04:11 +01:00
dependabot[bot] 301fab210e Bump fast-uri from 3.0.6 to 3.1.2 (#52)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.0.6 to 3.1.2.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.0.6...v3.1.2)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-09 01:04:54 +01:00
dependabot[bot] 3a729004b0 Bump picomatch from 4.0.3 to 4.0.4 (#51)
Bumps [picomatch](https://github.com/micromatch/picomatch) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 4.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-26 12:04:58 +00:00
dependabot[bot] 20e9a5d3d3 Bump tar from 7.5.10 to 7.5.11 (#50)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.10 to 7.5.11.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.10...v7.5.11)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.11
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-12 09:33:58 +00:00
dependabot[bot] 56adb67b07 Bump tar from 7.5.9 to 7.5.10 (#49)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.9 to 7.5.10.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.9...v7.5.10)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.10
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 20:00:12 +00:00
dependabot[bot] fd7c70839c Bump ajv from 8.17.1 to 8.18.0 (#48)
Bumps [ajv](https://github.com/ajv-validator/ajv) from 8.17.1 to 8.18.0.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v8.17.1...v8.18.0)

---
updated-dependencies:
- dependency-name: ajv
  dependency-version: 8.18.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-19 22:04:22 +00:00
dependabot[bot] 0f32fd2f49 Bump tar from 7.5.7 to 7.5.9 (#47)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.7 to 7.5.9.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.7...v7.5.9)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-19 20:01:45 +00:00
Companion Module Bot 1fdd94e99f chore(deps): update @companion-module/tools to ^2.6.0 (#46) 2026-01-29 22:38:36 +00:00
Companion Module Bot c2966a7483 chore: remove accidental manual issue templates marker 2026-01-29 16:44:54 +00:00
dependabot[bot] 86d8266385 Bump tar from 7.5.6 to 7.5.7 (#45)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.6 to 7.5.7.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.6...v7.5.7)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 15:53:56 +00:00
dependabot[bot] 4f95ea9e9d Bump tar from 7.5.3 to 7.5.6 (#44)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.6.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.6)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-22 00:03:11 +00:00
dependabot[bot] 7ba9d1f84b Bump tar from 7.4.3 to 7.5.3 (#43)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.4.3 to 7.5.3.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.4.3...v7.5.3)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-17 20:01:58 +00:00
Companion Module Bot 7d96a05118 chore: add manual issue templates marker 2026-01-04 04:14:41 +00:00
Companion Module Bot f3bd1979fa chore: add issue templates 2025-12-31 15:45:37 +00:00
dependabot[bot] 0a262b0474 Bump zx from 8.5.2 to 8.8.5 (#42)
Bumps [zx](https://github.com/google/zx) from 8.5.2 to 8.8.5.
- [Release notes](https://github.com/google/zx/releases)
- [Commits](https://github.com/google/zx/compare/8.5.2...8.8.5)

---
updated-dependencies:
- dependency-name: zx
  dependency-version: 8.8.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-21 20:04:05 +00:00
Joseph Adams 5db4b5d6aa Merge pull request #40 from jreynolds67/master
Updated to allow for custom variables
2025-05-12 17:21:45 -04:00
jreynolds67 c1e9446515 Update actions.js 2025-05-10 21:16:24 -04:00
jreynolds67andPeter Newman c882a020a8 Update companion/manifest.json
Co-authored-by: Peter Newman <peternewman@users.noreply.github.com>
2025-04-21 20:54:46 -04:00
jreynolds67 2a3dc8596e Merge branch 'master' of https://github.com/jreynolds67/companion-module-rossvideo-rosstalk 2025-04-14 20:15:28 -04:00
jreynolds67 56a904bc2d Merge branch 'bitfocus:master' into master 2025-04-14 20:15:02 -04:00
jreynolds67 8fff561d17 Updated to remove package.json and updated companion-module/tools to 2.3.0
Updated to remove package.json and updated companion-module/tools to 2.3.0
2025-04-14 20:13:57 -04:00
Joseph Adams 3036ceb81b Merge pull request #33 from IAmTomahawkx/master
implement MVBOX rosstalk command
2025-04-14 15:04:44 -04:00
jreynolds67 1ca7d668b6 Updated to allow for custom variables
Updated to allow for custom variables
2025-04-13 23:02:26 -04:00
Companion Module Bot ae1e368149 chore: add 'Companion Module Checks' workflow 2024-12-19 10:12:51 +00:00
dependabot[bot] f10ce1c9dc Bump nanoid from 3.3.4 to 3.3.8 (#39)
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.4 to 3.3.8.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.4...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-12 00:00:12 +00:00
dependabot[bot] 0697c69017 Bump cross-spawn from 7.0.3 to 7.0.6 (#37)
Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-23 20:00:09 +00:00
dependabot[bot] c20f918258 Bump micromatch from 4.0.5 to 4.0.8 (#36)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-30 15:02:51 +01:00
dependabot[bot] c4e946e01b Bump webpack from 5.76.1 to 5.94.0 (#35)
Bumps [webpack](https://github.com/webpack/webpack) from 5.76.1 to 5.94.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.76.1...v5.94.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-30 13:00:42 +01:00
Companion Module Bot 6306606bf6 Merge pull request #34 from bitfocus/dependabot/npm_and_yarn/braces-3.0.3
Bump braces from 3.0.2 to 3.0.3
2024-07-13 03:00:03 +01:00
dependabot[bot] 14e4193e13 Bump braces from 3.0.2 to 3.0.3
Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/braces/compare/3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-13 01:12:22 +00:00
IAmTomahawkx 9c5078e330 implement MVBOX rosstalk command 2024-07-07 09:49:50 -07:00
Companion Module Bot d62633c54d Merge pull request #32 from bitfocus/dependabot/npm_and_yarn/tar-6.2.1
Bump tar from 6.1.13 to 6.2.1
2024-04-11 11:00:49 +01:00
dependabot[bot] c4f009d62c Bump tar from 6.1.13 to 6.2.1
Bumps [tar](https://github.com/isaacs/node-tar) from 6.1.13 to 6.2.1.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.1.13...v6.2.1)

---
updated-dependencies:
- dependency-name: tar
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-11 06:40:36 +00:00
Joseph Adams 2d875f1f26 Create FUNDING.yml 2023-09-14 10:15:23 -04:00
Companion Module Bot 75c1e2443a Merge pull request #30 from bitfocus/dependabot/npm_and_yarn/word-wrap-1.2.4
Bump word-wrap from 1.2.3 to 1.2.4
2023-07-20 17:25:53 +01:00
dependabot[bot] 8ed1db8e1d Bump word-wrap from 1.2.3 to 1.2.4
Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.
- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)
- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)

---
updated-dependencies:
- dependency-name: word-wrap
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-20 07:32:21 +00:00
Companion Module Bot 880719355d Merge pull request #29 from bitfocus/dependabot/npm_and_yarn/semver-6.3.1
Bump semver from 6.3.0 to 6.3.1
2023-07-13 10:00:47 +01:00
dependabot[bot] 046b1cf449 Bump semver from 6.3.0 to 6.3.1
Bumps [semver](https://github.com/npm/node-semver) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v6.3.1/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v6.3.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-13 00:32:49 +00:00
Joseph Adams cf8d952932 version bump 2023-05-03 11:10:08 -04:00
Joseph Adams b0d3e9df07 fix for keepalive and await/async
Did not work on actual hardware previously. Has now been tested on hardware and fixed. @caleb-wishart
2023-05-03 11:09:50 -04:00
Companion Module Bot 8c6f0a5ea4 Merge pull request #28 from bitfocus/dependabot/npm_and_yarn/yaml-2.2.2
Bump yaml from 2.2.1 to 2.2.2
2023-04-25 22:16:24 +01:00
dependabot[bot] cfaadc9a39 Bump yaml from 2.2.1 to 2.2.2
Bumps [yaml](https://github.com/eemeli/yaml) from 2.2.1 to 2.2.2.
- [Release notes](https://github.com/eemeli/yaml/releases)
- [Commits](https://github.com/eemeli/yaml/compare/v2.2.1...v2.2.2)

---
updated-dependencies:
- dependency-name: yaml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-25 21:08:33 +00:00
Julian Waller 4f2f11d50a Merge pull request #27 from bitfocus/dependabot/npm_and_yarn/webpack-5.76.1
Bump webpack from 5.75.0 to 5.76.1
2023-03-15 20:36:06 +01:00
dependabot[bot] 151292c602 Bump webpack from 5.75.0 to 5.76.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.1)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-03-15 11:53:37 +00:00
Joseph Adams db75a01f96 Merge pull request #26 from Caleb-Wishart/companion3.0
Companion 3 & Additional Features
2023-03-07 16:44:39 -05:00
caleb-wishart f41d8ac7b5 await config updated 2023-02-05 16:19:46 +10:00
caleb-wishart 9d8b111002 Add's variable parse to some actions
Solves bitfocus/companion-module-rossvideo-rosstalk#25

Fixes up some error feedback with TCPHelper
2023-02-03 14:54:01 +10:00
caleb-wishart bcfd6c08eb Update HELP.md 2023-01-30 23:25:27 +10:00
caleb-wishart 9a7f8019b9 Custom Command
Addresses bitfocus/companion-module-rossvideo-rosstalk#23
2023-01-30 21:58:43 +10:00
caleb-wishart ccfe00d6d5 Breakdown actions by device.
Attempts to solve bitfocus/companion-module-rossvideo-rosstalk#25 by only prepending '0' if it is a carbonite.

Adds some regex
2023-01-30 21:57:56 +10:00
caleb-wishart 31592bff60 Adds functionality to use a single or multiple sockets
Solves bitfocus/companion-module-rossvideo-rosstalk#25
2023-01-30 17:12:03 +10:00
caleb-wishart c0a9ae3ddc Overhaul main file
Change to ES6 format
Fixes TCPHelper
Updates REGEX and STATUS
Updates logs
removes old content
2023-01-30 16:59:47 +10:00
caleb-wishart f15500257a Added and converted upgrade scripts
Now returns anobject
2023-01-30 16:38:08 +10:00
caleb-wishart 95eaafc350 Add config file
Creates new option called model
2023-01-30 16:32:08 +10:00
caleb-wishart 815edc112a Add actions file 2023-01-30 16:28:36 +10:00
caleb-wishart 30088a83d9 package.json cleanup 2023-01-30 16:01:32 +10:00
caleb-wishart a40dc2ae84 Creates Companion manifest 2023-01-30 16:00:12 +10:00
caleb-wishart 34541d1a90 Add new dependencies & Update gitignore 2023-01-30 15:59:34 +10:00
peter 8e1da203af add end timer 2022-11-27 11:37:50 +00:00
peter 697ae4060b add timer end command 2022-11-27 11:36:31 +00:00
Peter Daniel df5118e75b update label 2022-11-26 12:27:32 +00:00
Peter Daniel 132fd92798 fix - parseint 2022-11-26 12:26:55 +00:00
Peter Daniel bf1be2b246 ultrix timer 2022-11-25 17:23:21 +00:00
Peter Daniel d0ea95e63b add timers 2022-11-25 17:15:47 +00:00
Julian Waller 0aaeb1fba6 v1.2.11 2022-02-02 18:43:40 +00:00
Julian Waller 6d19ddc881 bulk tidy package.json 2022-02-02 18:31:27 +00:00
Julian Waller 57457e22b9 v1.2.10 2022-02-02 17:10:17 +00:00
Julian Waller 87795e5b5d bulk replace system.emit calls 2022-02-02 16:43:57 +00:00
Joseph Adams d9288333c6 version bump 2022-01-26 13:17:04 -05:00
Joseph Adams 072f1cdf0c Merge pull request #20 from daniep01/patch-1
Update HELP.md
2022-01-26 13:15:54 -05:00
Peter 6af0d1b9d1 Update HELP.md
Add note on Ultrix control
2022-01-26 17:42:00 +00:00
15 changed files with 2155 additions and 716 deletions

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
# These are supported funding model platforms
github: josephdadams # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
+70
View File
@@ -0,0 +1,70 @@
name: Bug report
description: Create a bug report to help us improve.
labels:
- BUG
title: '[BUG]'
body:
- type: checkboxes
attributes:
label: Make sure you have updated to the latest version of the module
description: This may be a beta version of the module, or may require you to update your companion.
options:
- label: I have checked this on the latest version of the module
required: true
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Describe the bug
description: A clear and concise description of what the bug is. Screenshots are always helpful to understand the problem.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: false
- type: textarea
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: Environment (please complete the following information)
description: |
examples:
- **OS**: Windows 10
- **Browser**: Chrome 94
- **Companion Version**: 2.2.0-b177f8fb-3722
- **Module Version**: 1.0.0
- **Device Firmware/Software Version (If applicable)**: 3.0.6
- **Device Model (If applicable)**: My Device PRO
value: |
- OS:
- Browser:
- Companion Version:
- Module Version:
- Device Firmware/Software Version (If applicable):
- Device Model (If applicable):
render: markdown
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add any other context about the problem here.
validations:
required: false
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: BUG OR FEATURE REQUEST FOR COMPANION ITSELF
url: https://github.com/bitfocus/companion/issues
about: Report it against the companion itself, to get the relevant people notified.
@@ -0,0 +1,32 @@
name: Feature Request
description: Request a new feature within this module
title: '[Feature]: '
labels:
- enhancement
body:
- type: checkboxes
attributes:
label: Make sure you have updated to the latest version of the module
description: This may be a beta version of the module, or may require you to update your companion.
options:
- label: I have checked this on the latest version of the module
required: true
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the feature.
options:
- label: I have searched for similar existing issues
required: true
- type: textarea
attributes:
label: Describe the feature
description: A clear and concise description of what the feature does. Mocked up screenshots (no matter how rough) are always helpful in understanding.
validations:
required: false
- type: textarea
attributes:
label: Usecases
description: Add a couple of usecases for why this should be implemented and when/why to use it.
validations:
required: false
@@ -0,0 +1,18 @@
name: Companion Module Checks
on:
push:
jobs:
check:
name: Check module
if: ${{ !contains(github.repository, 'companion-module-template-') }}
permissions:
packages: read
uses: bitfocus/actions/.github/workflows/module-checks.yaml@main
# with:
# upload-artifact: true # uncomment this to upload the built package as an artifact to this workflow that you can download and share with others
+5
View File
@@ -1 +1,6 @@
node_modules/
# Companion 3
/pkg
/pkg.tgz
.DS_Store
-34
View File
@@ -1,34 +0,0 @@
## Ross Carbonite/Vision
To make sense of the input and output names available in the actions provided by this module, you might want to read the bottom of this [reference manual.](http://help.rossvideo.com/carbonite-device/Topics/Protocol/RossTalk/CNT/RT-CNT-Comm.html)
**Available commands for Ross Carbonite/Vision**
* Trigger GPI
* Fire custom control
* Load Set
* Cut
* Auto Transition
* XPT
* Transition Keyer
* Fade to black
**Available commands for Ross Xpression**
* CLFB buffer:layer
* CLRA
* CUE takeid:buffer:layer
* DOWN
* FOCUS takeid
* GPI gpi
* LAYEROFF buffer:layer
* NEXT
* READ
* RESUME buffer
* RESUME buffer:layer
* SEQI takeid:layer
* SEQO takeid
* SWAP buffer
* TAKE takeid:buffer:layer
* UP
* UPNEXT takeid
+30
View File
@@ -0,0 +1,30 @@
## Ross Carbonite/Vision
To make sense of the input and output names available in the actions provided by this module, you might want to read the bottom of this [reference manual.](http://help.rossvideo.com/carbonite-device/Topics/Protocol/RossTalk/CNT/RT-CNT-Comm.html)
**Available commands for All Versions**
* Trigger GPI
* Trigger GPI by Name
* Run Custom Command
**Available commands for Ross Carbonite / Vision**
* Fire custom control
* Load Set
* Cut
* Auto Transition
* XPT
* Transition Keyer
* Fade to black
**Available commands for Ross Xpression**
This module does not support Xpression, instead use the dedicated module: [companion-module-rossvideo-xpression](https://github.com/bitfocus/companion-module-rossvideo-xpression)
**Ultrix**
* RUN, PAUSE, STOP, END timers
If you wish to control the Ross Ultrix router crosspoints then the Companion SWP-08 module is the best method.
+34
View File
@@ -0,0 +1,34 @@
{
"id": "rossvideo-rosstalk",
"name": "rossvideo-rosstalk",
"shortname": "rosstalk",
"description": "rosstalk plugin for Companion",
"version": "0.0.0",
"license": "MIT",
"repository": "git+https://github.com/bitfocus/companion-module-rossvideo-rosstalk.git",
"bugs": "https://github.com/bitfocus/companion-module-rossvideo-rosstalk/issues",
"maintainers": [
{
"name": "William Viker",
"email": "william@bitfocus.io"
}
],
"legacyIds": [
"rosstalk"
],
"runtime": {
"type": "node18",
"api": "nodejs-ipc",
"apiVersion": "0.0.0",
"entrypoint": "../rosstalk.js"
},
"manufacturer": "Ross Video",
"products": [
"Rosstalk"
],
"keywords": [
"Protocol",
"Vision Mixer",
"Software"
]
}
+13 -17
View File
@@ -1,23 +1,19 @@
{
"name": "rossvideo-rosstalk",
"legacy": [
"rosstalk"
],
"version": "1.2.8",
"api_version": "1.0.0",
"keywords": [
"Protocol",
"Vision Mixer",
"Software"
],
"manufacturer": "Ross Video",
"product": "Rosstalk",
"shortname": "rosstalk",
"description": "rosstalk plugin for Companion",
"version": "2.1.0",
"main": "rosstalk.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "William Viker <william@bitfocus.io>",
"license": "MIT"
}
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/bitfocus/companion-module-rossvideo-rosstalk.git"
},
"dependencies": {
"@companion-module/base": "^1.5.0"
},
"devDependencies": {
"@companion-module/tools": "^2.8.0"
}
}
+84 -665
View File
@@ -1,683 +1,102 @@
var tcp = require('../../tcp');
var instance_skel = require('../../instance_skel');
var debug;
var log;
const { TCPHelper, InstanceBase, InstanceStatus, runEntrypoint } = require('@companion-module/base')
function instance(system, id, config) {
var self = this;
const config = require('./src/config')
const actions = require('./src/actions')
const upgrades = require('./src/upgrades')
// super-constructor
instance_skel.apply(this, arguments);
self.actions(); // export actions
return self;
}
instance.GetUpgradeScripts = function() {
return [
function (context, config, actions, feedbacks) {
let changed = false;
for(let actionsItem of actions){
if(actionsItem['action'] == 'transKey'){
if(actionsItem['options']['mle'] != undefined){
actionsItem['options']['mle'] = "ME:"+actionsItem['options']['mle'];
changed = true;
}
}
}
return changed;
}
]
}
instance.prototype.updateConfig = function (config) {
var self = this;
self.config = config;
self.init_tcp();
};
instance.prototype.init = function () {
var self = this;
debug = self.debug;
log = self.log;
self.status(self.STATE_UNKNOWN);
self.init_tcp();
};
instance.prototype.init_tcp = function () {
var self = this;
if (self.socket !== undefined) {
self.socket.destroy();
delete self.socket;
class RossTalkInstance extends InstanceBase {
constructor(internal) {
super(internal)
let self = this
// Assign the methods from the listed files to this class
Object.assign(self, {
...config,
...actions,
})
}
if (self.config.host) {
if (self.config.port === undefined) {
self.config.port = 7788;
}
self.socket = new tcp(self.config.host, self.config.port);
self.socket.on('status_change', function (status, message) {
self.status(status, message);
});
self.socket.on('error', function (err) {
debug("Network error", err);
self.status(self.STATE_ERROR, err);
self.log('error', "Network error: " + err.message);
});
self.socket.on('connect', function () {
self.status(self.STATE_OK);
debug("Connected");
});
self.socket.on('data', function (data) { });
}
};
// Return config fields for web config
instance.prototype.config_fields = function () {
var self = this;
return [
{
type: 'text',
id: 'info',
width: 12,
label: 'Information',
value: 'To make sense of the input and output names available in the actions provided by this module, you might want to read the bottom of <a href="http://help.rossvideo.com/carbonite-device/Topics/Protocol/RossTalk/CNT/RT-CNT-Comm.html" target="_new">this reference manual</a>.'
},
{
type: 'textinput',
id: 'host',
label: 'Switcher Frame/XPression IP',
width: 6,
regex: self.REGEX_IP
},
{
type: 'textinput',
id: 'port',
label: 'Switcher Frame/XPression Port',
width: 6,
default: "7788",
regex: self.REGEX_NUMBER
}
];
};
// When module gets deleted
instance.prototype.destroy = function () {
var self = this;
if (self.socket !== undefined) {
self.socket.destroy();
static GetUpgradeScripts() {
return [upgrades.legacy_upgrade]
}
debug("destroy", self.id);
};
async init(config) {
let self = this
self.config = config
instance.prototype.actions = function (system) {
var self = this;
self.system.emit('instance_actions', self.id, {
'gpi': {
label: 'Trigger GPI',
options: [
{
type: 'textinput',
label: 'Number',
id: 'gpi',
default: '1',
regex: self.REGEX_NUMBER
}
]
},
'gpiByName': {
label: 'Trigger GPI by Name',
options: [
{
type: 'textinput',
label: 'Name',
id: 'gpi',
},
{
type: 'textinput',
label: 'Parameter',
id: 'parameter',
}
]
},
'cc': {
label: 'Fire custom control',
options: [
{
type: 'textinput',
label: 'CC Bank',
id: 'bank',
default: '1',
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'CC Number',
id: 'cc',
default: '1',
regex: self.REGEX_NUMBER
}
]
},
'loadset': {
label: 'Load Set',
options: [
{
type: 'textinput',
label: 'Set name',
id: 'set',
default: 'set1'
}
]
},
'cut': {
label: 'Cut',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
default: 'ME:1'
}
]
},
'autotrans': {
label: 'Auto Transition',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
default: 'ME:1'
}
]
},
'xpt': {
label: 'XPT',
options: [
{
type: 'textinput',
label: 'Destination',
id: 'vidDest',
default: 'ME:1:PGM',
tooltip: 'Program - ME:(ME-number):PGM, AuxBus — AUX:(aux-number), Key — ME:(ME-number):KEY:(key-number), MiniME™ — MME:(ME-number), Preset — ME:(ME-number):PST'
},
{
type: 'textinput',
label: 'Source',
id: 'vidSource',
default: 'IN:20',
tooltip: 'Aux Bus — AUX:(aux-number), Black — BK, Clean — ME:(ME-number):CLN, Input Source — IN:(input-number), Key — ME:(ME-number):KEY:(key-number), Matte Color — BG, Media-Store — MS:(channel-number), MiniME™ — MME:(ME-number), Preview — ME:(ME-number):PV, Program — ME:(ME-number):PGM, XPression Alpha — XP:(channel-number):A [Graphite only], XPression Video — XP:(channel-number):V [Graphite only], Chroma Key Video — CK:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only], Chroma Key Alpha — CKA:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only]'
}
]
},
'transKey': {
label: 'Transition Keyer',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
default: "ME:1"
},
{
type: 'textinput',
label: 'Keyer',
id: 'key',
default: 1,
regex: self.REGEX_NUMBER
},
{
type: 'dropdown',
label: 'Transition On/Off Air (On & Off options may not be available in all switchers)',
id: 'transD',
default: 'TOGGLE',
choices: [
{ id: 'TOGGLE', label: 'Toggle Keyer' },
{ id: 'ON', label: 'Transition OnAir' },
{ id: 'OFF', label: 'Transition OffAir' }
]
},
{
type: 'dropdown',
label: 'Transition type',
id: 'transT',
default: 'CUT',
choices: [
{ id: 'AUTO', label: 'Auto Transition' },
{ id: 'CUT', label: 'Cut Transition ' }
]
}
]
},
'ftb': { label: 'Fade to black' },
'CLFB': {
label: 'Clear Framebuffer',
options: [
{
type: 'textinput',
label: 'Framebuffer',
id: 'fb',
default: 1,
regex: self.REGEX_NUMBER
}
]
},
'CLFB_layer': {
label: 'Clear Layer',
options: [
{
type: 'textinput',
label: 'Framebuffer',
id: 'fb',
default: 1,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'layer (OPTIONAL)',
id: 'layer',
default: '',
regex: self.REGEX_NUMBER
}
]
},
'CLRA': { label: 'Clear All Framebuffers' },
'CUE': {
label: 'CUE',
options: [
{
type: 'textinput',
label: 'Take ID',
id: 'takeID',
default: 0,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'frameBuffer',
id: 'fb',
default: 1,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'layer',
id: 'layer',
default: '',
regex: self.REGEX_NUMBER
}
]
},
'DOWN': { label: 'DOWN' },
'FOCUS': {
label: 'FOCUS',
options: [
{
type: 'textinput',
label: 'Take ID',
id: 'takeID',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'LAYEROFF': {
label: 'LAYEROFF',
options: [
{
type: 'textinput',
label: 'frameBuffer',
id: 'fb',
default: 1,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'Layer',
id: 'layer',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'MEM': {
label: 'MEM',
options: [
{
type: 'textinput',
label: 'Memory ID',
id: 'memID',
default: '1:1',
regex: self.REGEX_STRING
}
]
},
'NEXT': { label: 'NEXT' },
'READ': { label: 'READ' },
'RESUME': {
label: 'RESUME FRAMEBUFFER',
options: [
{
type: 'textinput',
label: 'Framebuffer',
id: 'fb',
default: 1,
regex: self.REGEX_NUMBER
}
]
},
'RESUME_layer': {
label: 'RESUME LAYER',
options: [
{
type: 'textinput',
label: 'Framebuffer',
id: 'fb',
default: 1,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'Layer',
id: 'layer',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'SEQI': {
label: 'SEQI',
options: [
{
type: 'textinput',
label: 'take ID',
id: 'takeID',
default: 0,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'Layer',
id: 'Layer',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'SEQO': {
label: 'SEQO',
options: [
{
type: 'textinput',
label: 'take ID',
id: 'takeID',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'SWAP': {
label: 'SWAP',
options: [
{
type: 'textinput',
label: 'Framebuffer',
id: 'fb',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'TAKE': {
label: 'TAKE',
options: [
{
type: 'textinput',
label: 'Take ID',
id: 'takeID',
default: 0,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'Framebuffer',
id: 'fb',
default: 0,
regex: self.REGEX_NUMBER
},
{
type: 'textinput',
label: 'Layer',
id: 'layer',
default: 0,
regex: self.REGEX_NUMBER
}
]
},
'UP': { label: 'UP' },
'UPNEXT': {
label: 'UPNEXT',
options: [
{
type: 'textinput',
label: 'Take ID',
id: 'takeID',
default: 0,
regex: self.REGEX_NUMBER
}
]
}
});
};
instance.prototype.action = function (action) {
var self = this;
var id = action.action;
var opt = action.options;
// parseInt(action.options.int)
var cmd;
switch (action.action) {
case 'gpi':
var gpi = parseInt(opt.gpi);
cmd = 'GPI ' + (gpi > 9 ? '' : '0') + gpi;
break;
case 'gpiByName':
if (opt.parameter === null) {
cmd = 'GPI ' + opt.gpi;
} else {
cmd = 'GPI ' + opt.gpi + ':' + opt.parameter;
}
break;
case 'cc':
var cc = parseInt(opt.cc);
cmd = 'CC ' + parseInt(opt.bank) + ':' + (cc > 9 ? '' : '0') + cc;
break;
case 'xpt':
var src = opt.vidSource;
var dst = opt.vidDest;
cmd = 'XPT ' + dst + ':' + src;
console.log('ross xpt:', cmd);
break;
case 'ftb':
cmd = 'FTB';
break;
case 'loadset':
cmd = 'LOADSET ' + opt.set;
break;
case 'cut':
cmd = 'MECUT ' + opt.mle;
break;
case 'autotrans':
cmd = 'MEAUTO ' + opt.mle;
break;
case 'transKey':
if (opt.transD === 'TOGGLE') {
cmd = 'KEY' + opt.transT + ' ' + opt.mle + ':' + opt.key;
} else {
cmd = 'KEY' + opt.transT + opt.transD + ' ' + opt.mle + ':' + opt.key;
}
break;
case 'CLFB':
var frameBuffer = parseInt(opt.fb) - 1; // Framebuffer is 0 index so framebuffer 1 is actually 0 in rosstalk
cmd = 'CLFB ' + frameBuffer;
break;
case 'CLFB_layer':
var frameBuffer = parseInt(opt.fb) - 1; // Framebuffer is 0 index so framebuffer 1 is actually 0 in rosstalk
var layer = opt.layer;
cmd = 'CLFB ' + frameBuffer + ':' + opt.layer;
break;
case 'CLRA':
cmd = 'CLRA';
break;
case 'DOWN':
cmd = 'DOWN';
break;
case 'MEM':
var memID = opt.memID;
cmd = 'MEM ' + memID;
break;
case 'FOCUS':
var takeID = opt.takeID;
cmd = 'FOCUS ' + takeID;
break;
case 'LAYEROFF':
var layer = opt.layer;
cmd = 'LAYEROFF ' + layer;
break;
case 'NEXT':
cmd = 'NEXT';
break;
case 'READ':
cmd = 'READ';
break;
case 'RESUME':
var frameBuffer = parseInt(opt.fb) - 1;
cmd = 'RESUME ' + frameBuffer;
break;
case 'RESUME_layer':
var frameBuffer = parseInt(opt.fb) - 1;
var layer = opt.layer;
cmd = 'RESUME ' + frameBuffer + ':' + layer;
break;
case 'SEQI':
var takeID = opt.takeID;
var layer = opt.layer;
cmd = 'SEQI ' + takeID + ':' + layer;
break;
case 'SEQO':
var takeID = opt.takeID;
cmd = 'SEQO ' + takeID;
break;
case 'SWAP':
var frameBuffer = parseInt(opt.fb) - 1;
cmd = 'SWAP ' + frameBuffer;
case 'TAKE':
var takeID = opt.takeID;
var frameBuffer = parseInt(opt.fb) - 1;
var layer = opt.layer;
cmd = 'TAKE ' + takeID + ':' + frameBuffer + ':' + layer;
break;
case 'UP':
cmd = 'UP';
break;
case 'UPNEXT':
var takeID = opt.takeID;
cmd = 'UPNEXT ' + takeID;
break;
self.updateStatus('connecting', 'Waiting To Connect')
await self.configUpdated(config)
}
if (cmd !== undefined) {
async configUpdated(config) {
let self = this
self.config = config
self.actions()
debug('sending tcp', cmd, "to", self.config.host);
if (self.socket !== undefined && self.socket.connected) {
self.socket.send(cmd + "\r\n");
if (self.config.keepAlive) {
self.init_tcp();
}
else {
debug('Socket not connected :(');
self.updateStatus(InstanceStatus.Ok);
}
}
debug('action():', action);
init_tcp(cmd) {
var self = this
if (self.socket !== undefined) {
self.socket.destroy()
delete self.socket
}
};
self.log('debug', 'Opening socket.');
instance_skel.extendedBy(instance);
exports = module.exports = instance;
if (self.config.host) {
if (self.config.port === undefined) {
self.config.port = 7788
}
self.socket = new TCPHelper(self.config.host, self.config.port)
self.socket.on('status_change', function (status, message) {
if (status !== 'unknown_error') {
self.updateStatus(status, message)
}
})
self.socket.on('error', function (err) {
self.log('debug', 'Network error', JSON.stringify(err))
self.updateStatus('error', err.code)
self.log('error', 'Network error: ' + err.message)
})
self.socket.on('connect', function () {
self.updateStatus(InstanceStatus.Ok)
self.log('debug', 'Connected')
if (cmd !== undefined) {
self.log('debug', `sending tcp ${cmd} to ${self.config.host}`);
self.socket.send(cmd + '\r\n');
if (!self.config.keepAlive) {
self.log('debug', 'Closing socket.');
self.socket.destroy()
delete self.socket
}
}
})
self.socket.on('data', function (data) {})
}
}
// When module gets deleted
async destroy() {
var self = this
if (self.socket !== undefined) {
self.socket.destroy()
}
self.log('debug', 'destroy', self.id)
}
}
runEntrypoint(RossTalkInstance, RossTalkInstance.GetUpgradeScripts())
+665
View File
@@ -0,0 +1,665 @@
const { Regex } = require('@companion-module/base')
module.exports = {
actions() {
let self = this
const re_meSource_meNumber = '/^(ME|MME|MSC):[0-9]{1,2}$/'
const sendCommand = (cmd) => {
if (cmd !== undefined) {
if (!self.config.keepAlive) {
self.init_tcp(cmd);
}
else if (self.socket !== undefined && self.socket.isConnected) {
self.log('debug', `sending tcp ${cmd} to ${self.config.host}`)
self.socket.send(cmd + '\r\n')
} else {
self.log('debug', 'Socket not connected :(')
}
}
}
let actions = {
gpi: {
name: 'Trigger GPI',
options: [
{
type: 'textinput',
label: 'Number',
id: 'gpi',
default: '1',
regex: Regex.NUMBER,
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
let gpiText = await context.parseVariablesInString(opt.gpi)
var gpi = parseInt(gpiText)
cmd =
'GPI ' + (gpi <= 9 && (self.config.model == 'carbonite' || self.config.model == 'acuity') ? '0' : '') + gpi
sendCommand(cmd)
},
},
gpiByName: {
name: 'Trigger GPI by Name',
options: [
{
type: 'textinput',
label: 'Name',
id: 'gpi',
useVariables: true,
},
{
type: 'textinput',
label: 'Parameter',
id: 'parameter',
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
if (opt.gpi) {
let gpi = await context.parseVariablesInString(opt.gpi)
let parameter = await context.parseVariablesInString(opt.parameter)
if (parameter === null) {
cmd = 'GPI ' + gpi
} else {
cmd = 'GPI ' + gpi + ':' + parameter
}
sendCommand(cmd)
}
},
},
custom: {
name: 'Send a custom command',
description: 'Refer to RossTalk Guide',
options: [
{
type: 'textinput',
label: 'Command',
id: 'cmd',
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
let cmd = await context.parseVariablesInString(opt.cmd)
sendCommand(cmd)
},
},
}
if (self.config.model == 'carbonite') {
actions.cc = {
name: 'Fire custom control',
options: [
{
type: 'textinput',
label: 'CC Bank',
id: 'bank',
default: '1',
regex: Regex.NUMBER,
useVariables: true,
},
{
type: 'textinput',
label: 'CC Number',
id: 'cc',
default: '1',
regex: Regex.NUMBER,
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
let bankText = await context.parseVariablesInString(opt.bank)
let ccText = await context.parseVariablesInString(opt.cc)
var cc = parseInt(ccText)
cmd = 'CC ' + parseInt(bankText) + ':' + (cc > 9 ? '' : '0') + cc
sendCommand(cmd)
},
}
actions.loadset = {
name: 'Load Set',
options: [
{
type: 'textinput',
label: 'Set name',
id: 'set',
useVariables: true,
default: 'set1',
},
],
callback: async (event, context) => {
let opt = event.options
let set = await context.parseVariablesInString(opt.set)
cmd = 'LOADSET ' + set
sendCommand(cmd)
},
}
actions.cut = {
name: 'Cut',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
useVariables: true,
default: 'ME:1',
regex: re_meSource_meNumber,
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
cmd = 'MECUT ' + mle
sendCommand(cmd)
},
}
actions.autotrans = {
name: 'Auto Transition',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
useVariables: true,
default: 'ME:1',
regex: re_meSource_meNumber,
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
cmd = 'MEAUTO ' + mle
sendCommand(cmd)
},
}
actions.xpt = {
name: 'XPT',
options: [
{
type: 'textinput',
label: 'Destination',
id: 'vidDest',
default: 'ME:1:PGM',
tooltip:
'Program - ME:(ME-number):PGM, AuxBus — AUX:(aux-number), Key — ME:(ME-number):KEY:(key-number), MiniME™ — MME:(ME-number), Preset — ME:(ME-number):PST',
useVariables: true,
},
{
type: 'textinput',
label: 'Source',
id: 'vidSource',
default: 'IN:20',
tooltip:
'Aux Bus — AUX:(aux-number), Black — BK, Clean — ME:(ME-number):CLN, Input Source — IN:(input-number), Key — ME:(ME-number):KEY:(key-number), Matte Color — BG, Media-Store — MS:(channel-number), MiniME™ — MME:(ME-number), Preview — ME:(ME-number):PV, Program — ME:(ME-number):PGM, [Graphite only], Chroma Key Video — CK:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only], Chroma Key Alpha — CKA:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only]',
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var src = await context.parseVariablesInString(opt.vidSource)
var dst = await context.parseVariablesInString(opt.vidDest)
cmd = 'XPT ' + dst + ':' + src
console.log('ross xpt:', cmd)
sendCommand(cmd)
},
}
actions.transKey = {
name: 'Transition Keyer',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
useVariables: true,
default: 'ME:1',
regex: re_meSource_meNumber,
},
{
type: 'textinput',
label: 'Keyer',
id: 'key',
default: 1,
regex: Regex.NUMBER,
useVariables: true,
},
{
type: 'dropdown',
label: 'Transition On/Off Air ',
id: 'transD',
default: 'TOGGLE',
choices: [
{ id: 'TOGGLE', label: 'Toggle Keyer' },
{ id: 'ON', label: 'Transition OnAir' },
{ id: 'OFF', label: 'Transition OffAir' },
],
},
{
type: 'dropdown',
label: 'Transition type',
id: 'transT',
default: 'CUT',
choices: [
{ id: 'AUTO', label: 'Auto Transition' },
{ id: 'CUT', label: 'Cut Transition ' },
],
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
let keyText = await context.parseVariablesInString(opt.key)
if (opt.transD === 'TOGGLE') {
cmd = 'KEY' + opt.transT + ' ' + mle + ':' + keyText
} else {
cmd = 'KEY' + opt.transT + opt.transD + ' ' + mle + ':' + keyText
}
sendCommand(cmd)
},
}
actions.ftb = {
label: 'Fade to black',
options: [],
callback: async (event, context) => {
cmd = 'FTB'
sendCommand(cmd)
},
}
actions.MEM = {
name: 'MEM',
options: [
{
type: 'textinput',
label: 'Memory ID',
id: 'memID',
default: '1:1',
regex: '/^[0-9]{1,2}(:(ME|MME|MSC):[0-9]{1,2})+$/',
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var memID = await context.parseVariablesInString(opt.memID)
cmd = 'MEM ' + memID
sendCommand(cmd)
},
}
actions.SEQI = {
name: 'SEQI',
options: [
{
type: 'textinput',
label: 'take ID',
id: 'takeID',
default: 0,
regex: Regex.NUMBER,
useVariables: true,
},
{
type: 'textinput',
label: 'Layer',
id: 'Layer',
default: 0,
regex: Regex.NUMBER,
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var takeID = await context.parseVariablesInString(opt.takeID)
var layer = await context.parseVariablesInString(opt.Layer)
cmd = 'SEQI ' + takeID + ':' + layer
sendCommand(cmd)
},
}
actions.SEQO = {
name: 'SEQO',
options: [
{
type: 'textinput',
label: 'take ID',
id: 'takeID',
default: 0,
regex: Regex.NUMBER,
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var takeID = await context.parseVariablesInString(opt.takeID)
cmd = 'SEQO ' + takeID
sendCommand(cmd)
},
}
actions.MVBOX = {
name: "Change multiviewer box",
options: [
{
type: 'textinput',
label: 'Multiviewer Number',
id: 'mvID',
default: 1,
regex: Regex.NUMBER,
},
{
type: 'textinput',
label: 'Box Number',
id: 'boxID',
default: 1,
regex: Regex.NUMBER,
},
{
type: 'textinput',
label: 'Source',
id: 'vidSource',
default: 'IN:5',
tooltip:
'Aux Bus — AUX:(aux-number), Black — BK, Clean — ME:(ME-number):CLN, Input Source — IN:(input-number), Key — ME:(ME-number):KEY:(key-number), Matte Color — BG, Media-Store — MS:(channel-number), MiniME™ — MME:(ME-number), Preview — ME:(ME-number):PV, Program — ME:(ME-number):PGM, [Graphite only], Chroma Key Video — CK:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only], Chroma Key Alpha — CKA:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only]',
useVariables: true
}
],
callback: async (event, context) => {
let opt = event.options
let mvID = parseInt(opt.mvID)
let boxID = parseInt(opt.boxID)
var src = await context.parseVariablesInString(opt.vidSource)
cmd = 'MVBOX:' + mvID + ":" + boxID + ":" + src
sendCommand(cmd)
}
}
}
if (self.config.model == 'acuity') {
actions.cc = {
name: 'Fire custom control',
options: [
{
type: 'textinput',
label: 'CC Bank',
id: 'bank',
default: '1',
regex: Regex.NUMBER,
useVariables: true,
},
{
type: 'textinput',
label: 'CC Number',
id: 'cc',
default: '1',
regex: Regex.NUMBER,
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
let bankText = await context.parseVariablesInString(opt.bank)
let ccText = await context.parseVariablesInString(opt.cc)
var cc = parseInt(ccText)
cmd = 'CC ' + parseInt(bankText) + ':' + (cc > 9 ? '' : '0') + cc
sendCommand(cmd)
},
}
actions.transKey = {
name: 'Transition Keyer',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
default: 'ME:1',
useVariables: true,
regex: re_meSource_meNumber,
},
{
type: 'textinput',
label: 'Keyer',
id: 'key',
default: 1,
regex: Regex.NUMBER,
useVariables: true,
},
{
type: 'dropdown',
label: 'Transition type',
id: 'transT',
default: 'CUT',
choices: [
{ id: 'AUTO', label: 'Auto Transition' },
{ id: 'CUT', label: 'Cut Transition ' },
],
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
let keyText = await context.parseVariablesInString(opt.key)
cmd = 'KEY' + opt.transT + ' ' + mle + ':' + keyText
sendCommand(cmd)
},
}
actions.loadset = {
name: 'Load Set',
options: [
{
type: 'dropdown',
label: 'Load Location',
id: 'location',
default: 'USB',
choices: [
{ id: 'USB', label: 'USB' },
{ id: 'HD', label: 'HD' },
],
},
{
type: 'textinput',
label: 'Set name',
useVariables: true,
id: 'set',
default: 'set1',
},
],
callback: async (event, context) => {
let opt = event.options
let set = await context.parseVariablesInString(opt.set)
let location = await context.parseVariablesInString(opt.location)
cmd = 'LOADSET ' + location + ':' + set
sendCommand(cmd)
},
}
actions.cut = {
name: 'Cut',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
useVariables: true,
default: '1',
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
cmd = 'MECUT ' + mle
sendCommand(cmd)
},
}
actions.ftb = {
label: 'Fade to black',
options: [],
callback: async (event, context) => {
cmd = 'FTB'
sendCommand(cmd)
},
}
actions.MEM = {
name: 'MEM',
options: [
{
type: 'textinput',
label: 'Memory ID',
id: 'memID',
default: '1:1',
regex: '/^[0-9]{1,2}|?(:[0-9]{1,2})+$/',
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var memID = await context.parseVariablesInString(opt.memID)
cmd = 'MEM ' + memID
sendCommand(cmd)
},
}
actions.autotrans = {
name: 'Auto Transition',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
useVariables: true,
default: '1',
regex: Regex.NUMBER,
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
cmd = 'MEAUTO ' + mle
sendCommand(cmd)
},
}
actions.xpt = {
name: 'XPT',
options: [
{
type: 'textinput',
label: 'Destination',
id: 'vidDest',
default: 'ME:1:PGM',
tooltip:
'Program - ME:(ME-number):PGM, AuxBus — AUX:(aux-number), Key — ME:(ME-number):KEY:(key-number), MiniME™ — MME:(ME-number), Preset — ME:(ME-number):PST',
useVariables: true,
},
{
type: 'textinput',
label: 'Source',
id: 'vidSource',
default: 'IN:20',
tooltip:
'Aux Bus — AUX:(aux-number), Black — BK, Clean — ME:(ME-number):CLN, Input Source — IN:(input-number), Key — ME:(ME-number):KEY:(key-number), Matte Color — BG, Media-Store — MS:(channel-number), MiniME™ — MME:(ME-number), Preview — ME:(ME-number):PV, Program — ME:(ME-number):PGM, [Graphite only], Chroma Key Video — CK:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only], Chroma Key Alpha — CKA:(chroma key number) [UltraChromeHR, or Carbonite Black v14.0 or higher only]',
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var src = await context.parseVariablesInString(opt.vidSource)
var dst = await context.parseVariablesInString(opt.vidDest)
cmd = 'XPT ' + dst + ':' + src
console.log('ross xpt:', cmd)
sendCommand(cmd)
},
}
}
if (self.config.model == 'ultrix') {
actions.TIMER = {
name: 'Ultrix Timer',
options: [
{
type: 'dropdown',
label: 'Action type',
id: 'timerAction',
default: 'RUN',
choices: [
{ id: 'RUN', label: 'Run Timer' },
{ id: 'PAUSE', label: 'Pause Timer' },
{ id: 'STOP', label: 'Stop Timer' },
{ id: 'END', label: 'End Timer' },
],
},
{
type: 'textinput',
label: 'Timer Number',
id: 'timerID',
default: 0,
regex: Regex.NUMBER,
useVariables: true,
},
],
callback: async (event, context) => {
let opt = event.options
var timerAction = opt.timerAction
var timerIDText = await context.parseVariablesInString(opt.timerID)
var timerID = parseInt(timerIDText)
cmd = 'TIMER ' + timerID + ':' + timerAction
sendCommand(cmd)
},
}
}
if (self.config.model == 'opengear') {
actions.ftb = {
label: 'Fade to black',
description: 'Not supported on the MDK-111A-K.',
options: [],
callback: async (event, context) => {
cmd = 'FTB'
sendCommand(cmd)
},
}
actions.transKey = {
name: 'Transition Keyer',
options: [
{
type: 'textinput',
label: 'MLE',
id: 'mle',
useVariables: true,
default: 'ME:1',
regex: re_meSource_meNumber,
},
{
type: 'textinput',
label: 'Keyer',
id: 'key',
default: 1,
regex: Regex.NUMBER,
useVariables: true,
},
{
type: 'dropdown',
label: 'Transition type',
id: 'transT',
default: 'CUT',
choices: [
{ id: 'AUTO', label: 'Auto Transition' },
{ id: 'CUT', label: 'Cut Transition ' },
],
},
],
callback: async (event, context) => {
let opt = event.options
let mle = await context.parseVariablesInString(opt.mle)
let keyText = await context.parseVariablesInString(opt.key)
cmd = 'KEY' + opt.transT + ' ' + mle + ':' + keyText
sendCommand(cmd)
},
}
}
this.setActionDefinitions(actions)
},
}
+59
View File
@@ -0,0 +1,59 @@
const { Regex } = require('@companion-module/base')
module.exports = {
getConfigFields() {
return [
{
type: 'static-text',
id: 'info',
width: 12,
label: 'Information',
value:
'To make sense of the input and output names available in the actions provided by this module, you might want to read the bottom of <a href="http://help.rossvideo.com/carbonite-device/Topics/Protocol/RossTalk/CNT/RT-CNT-Comm.html" target="_new">this reference manual</a>.',
},
{
type: 'static-text',
id: 'info',
width: 12,
label: 'Model',
value:
'This module does not support Xpression, instead use the dedicated module: <a href="https://github.com/bitfocus/companion-module-rossvideo-xpression">companion-module-rossvideo-xpression</a>',
},
{
type: 'dropdown',
id: 'model',
label: 'Model',
width: 12,
default: 'carbonite',
choices: [
{ id: 'carbonite', label: 'Carbonite/Graphite' },
{ id: 'ultrix', label: 'Ultrix' },
{ id: 'acuity', label: 'Acuity/Vision' },
{ id: 'opengear', label: 'openGear' },
],
},
{
type: 'textinput',
id: 'host',
label: 'Switcher Frame IP',
width: 6,
regex: Regex.IP,
},
{
type: 'textinput',
id: 'port',
label: 'Switcher Frame Port',
width: 6,
default: '7788',
regex: Regex.PORT,
},
{
type: 'checkbox',
id: 'keepAlive',
label: 'TCP Keep Alive',
tooltip: 'TCP Keep Alive: Use a single TCP connection instead of one per command',
width: 6,
default: false,
},
]
},
}
+28
View File
@@ -0,0 +1,28 @@
module.exports = {
legacy_upgrade(context, props) {
/* props
{
config: Object | null,
actions: [],
feedbacks: [],
}
*/
let result = {
updatedConfig: null, // the config does not need updating
updatedActions: [],
updatedFeedbacks: [],
}
let actions = props.actions
for (let actionsItem of actions) {
if (actionsItem['action'] == 'transKey') {
if (actionsItem['options']['mle'] != undefined) {
actionsItem['options']['mle'] = 'ME:' + actionsItem['options']['mle']
result.updatedActions.push(actionsItem)
}
}
}
return result
},
}
+1099
View File
File diff suppressed because it is too large. Load diff