Skip to content

Commit 6040b6a

Browse files
committed
added simple tutorial
1 parent a7d06da commit 6040b6a

File tree

3 files changed

+71
-61
lines changed

3 files changed

+71
-61
lines changed

README.md

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,6 @@
22

33
See also HELP.md and LICENSE
44

5-
## Custom Control Surfaces
6-
7-
This module supports creating virtual Satellite surfaces that respond to Custom Control button presses on your Behringer Wing console. This is an advanced feature that allows you to trigger Companion actions directly from the console's Custom Control (CC) buttons.
8-
9-
### How It Works
10-
11-
When enabled, the module creates virtual Satellite surfaces that appear in your Companion Surfaces configuration. When you press a Custom Control button on your Wing console, the corresponding button press is sent to Companion, where you can program any action you want.
12-
13-
### Configuration
14-
15-
To set up Custom Control Surfaces:
16-
17-
1. **Enable Custom Control Surfaces** - Check the master toggle in the module configuration
18-
2. **Select Surface Types** - Choose which surface types you want to create:
19-
20-
- **User Pages (CC)** - Creates surfaces for User Pages (U1-U16) with encoders and buttons. You can select specific pages to create (1-16).
21-
- **GPIO Buttons** - Creates a surface for GPIO buttons
22-
- **User Buttons** - Creates a surface for User buttons (8 buttons)
23-
- **DAW Buttons** - Creates surfaces for DAW buttons (4 sets of 8 buttons)
24-
25-
3. **Configure in Companion** - After enabling, the surfaces will appear in Companion's **Surfaces** tab where you can assign them to pages
26-
27-
### Recommended Page Mapping
28-
29-
It is advisable to dedicate one Companion page per Wing User Page surface. This provides a clear one-to-one relationship between your console and Companion.
30-
31-
**In the Surfaces section:**
32-
33-
- Assign each surface to a page number with a matching last digit
34-
- For example:
35-
- `WING_CC_01` → Page 71
36-
- `WING_CC_02` → Page 72
37-
- `WING_CC_03` → Page 73
38-
- And so on...
39-
40-
This numbering scheme makes it easy to identify which Companion page corresponds to which User Page on your Wing console.
41-
42-
**In the Buttons section:**
43-
44-
- Configure the actual button actions for each page
45-
- Each button on the virtual surface can trigger any Companion action
46-
47-
### Requirements
48-
49-
- Companion must have the Satellite service running (enabled by default)
50-
- The Wing console must be configured to send Custom Control messages to Companion's IP address
51-
- Make sure your firewall allows the connection on the Satellite port (default: 16623)
52-
535
# Changelog
546

557
## 2.2.0

src/config.ts

Lines changed: 68 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export interface WingConfig {
2323
/** When enabled, the module will request values for all variables on startup */
2424
prefetchVariablesOnStartup?: boolean
2525
useCcSurfaces?: boolean
26+
showCcTutorial?: boolean
2627
useCcUserPages?: boolean
2728
ccUserPagesToCreate?: number[]
2829
useCcGpio?: boolean
@@ -129,27 +130,81 @@ export function GetConfigFields(_self: InstanceBaseExt<WingConfig>): SomeCompani
129130
width: 6,
130131
default: true,
131132
},
133+
spacer,
132134
{
133135
type: 'checkbox',
134136
id: 'useCcSurfaces',
135-
label: 'Enable Custom Control Surfaces (Advanced)',
137+
label: 'Enable Virtual Control Surfaces',
136138
tooltip:
137-
'Master toggle for Custom Control surface support. This is an advanced feature - see documentation for setup details.',
139+
'Master toggle for Virtual Control surface support. This is an advanced feature - see tutorial below for setup details.',
138140
width: 12,
139141
default: false,
140142
},
141143
{
142144
type: 'static-text',
143145
id: 'cc-surfaces-info',
144146
width: 12,
145-
label: 'Custom Control Surfaces',
147+
label: 'Advanced Feature',
146148
value:
147-
'<strong>Advanced Feature:</strong> Creates virtual Satellite surfaces that respond to Custom Control button presses on your Wing console. ' +
148-
"This allows you to trigger Companion actions directly from the console's CC buttons. " +
149-
'Requires proper network configuration and Satellite service running. ' +
150-
'<a href="https://github.com/bitfocus/companion-module-behringer-wing#custom-control-surfaces" target="_blank">View setup documentation</a>',
149+
'Creates virtual Satellite surfaces that respond to Custom Control button presses on your Wing console. ' +
150+
"This allows you to trigger Companion actions directly from the console's CC buttons. ",
151+
isVisible: (config) => config.useCcSurfaces === true,
152+
},
153+
{
154+
type: 'checkbox',
155+
id: 'showCcTutorial',
156+
label: 'Show Tutorial',
157+
tooltip: 'Display detailed setup instructions for Custom Control Surfaces.',
158+
width: 12,
159+
default: false,
151160
isVisible: (config) => config.useCcSurfaces === true,
152161
},
162+
{
163+
type: 'static-text',
164+
id: 'cc-tutorial',
165+
width: 12,
166+
label: 'Setup Tutorial',
167+
value:
168+
'<h3>How It Works</h3>' +
169+
'<p>When you press a Custom Control button on your Wing console, the corresponding button press is sent to Companion, where you can program any action you want.</p>' +
170+
'<h3>Configuration Steps</h3>' +
171+
'<ol>' +
172+
'<li><strong>Enable Custom Control Surfaces</strong> - Check the master toggle above</li>' +
173+
'<li><strong>Select Surface Types</strong> - Choose which surface types you want to create:' +
174+
'<ul>' +
175+
'<li><strong>User Pages (CC)</strong> - Creates surfaces for User Pages (U1-U16) with encoders and buttons. You can select specific pages to create (1-16).</li>' +
176+
'<li><strong>GPIO Buttons</strong> - Creates a surface for GPIO buttons</li>' +
177+
'<li><strong>User Buttons</strong> - Creates a surface for User buttons (8 buttons)</li>' +
178+
'<li><strong>DAW Buttons</strong> - Creates surfaces for DAW buttons (4 sets of 8 buttons)</li>' +
179+
'</ul>' +
180+
'</li>' +
181+
"<li><strong>Configure in Companion</strong> - After enabling, the surfaces will appear in Companion's <strong>Surfaces</strong> tab where you can assign them to pages</li>" +
182+
'</ol>' +
183+
'<h3>Recommended Page Mapping</h3>' +
184+
'<p>It is advisable to dedicate one Companion page per Wing User Page surface. This provides a clear one-to-one relationship between your console and Companion.</p>' +
185+
'<p><strong>In the Surfaces section:</strong></p>' +
186+
'<ul>' +
187+
'<li>Assign each surface to a page number with a matching last digit. Deactivate "Use last page at startup" and select the desired page number for "Startup Page" and "Current Page"</li>' +
188+
'<li>For example:' +
189+
'<ul>' +
190+
'<li><code>WING_CC_01</code> → Page 71</li>' +
191+
'<li><code>WING_CC_02</code> → Page 72</li>' +
192+
'<li><code>WING_CC_03</code> → Page 73</li>' +
193+
'<li>And so on...</li>' +
194+
'</ul>' +
195+
'</li>' +
196+
'</ul>' +
197+
'<p>This numbering scheme makes it easy to identify which Companion page corresponds to which User Page on your Wing console.</p>' +
198+
'<p><strong>In the Buttons section:</strong></p>' +
199+
'<ul>' +
200+
'<li>Configure the actual button actions for each page (e.g. 71) in the "Buttons" section of Companion</li>' +
201+
'</ul>' +
202+
'<h3>Requirements</h3>' +
203+
'<ul>' +
204+
'<li><strong>Important:</strong> On the Wing console, each Custom Control button must have a MIDI command assigned for it to send OSC event updates to Companion. The same MIDI command can be used for all buttons.</li>' +
205+
'</ul>',
206+
isVisible: (config) => config.useCcSurfaces === true && config.showCcTutorial === true,
207+
},
153208
{
154209
type: 'checkbox',
155210
id: 'useCcUserPages',
@@ -163,21 +218,21 @@ export function GetConfigFields(_self: InstanceBaseExt<WingConfig>): SomeCompani
163218
type: 'multidropdown',
164219
id: 'ccUserPagesToCreate',
165220
label: 'User Pages to Create',
166-
tooltip: 'Select which User Pages (1-16) to create as CC surfaces.',
221+
tooltip: 'Select which User Pages (1-16) to create as virtual surfaces.',
167222
width: 12,
168223
choices: Array.from({ length: 16 }, (_, i) => ({
169224
id: i + 1,
170-
label: `Page ${i + 1}`,
225+
label: `CC Page ${i + 1}`,
171226
})),
172-
default: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
227+
default: [16],
173228
minSelection: 0,
174229
isVisible: (config) => config.useCcSurfaces === true && config.useCcUserPages === true,
175230
},
176231
{
177232
type: 'checkbox',
178233
id: 'useCcGpio',
179234
label: 'Enable GPIO Buttons',
180-
tooltip: 'Create surface for GPIO buttons.',
235+
tooltip: 'Create a virtual surface for GPIO buttons.',
181236
width: 6,
182237
default: false,
183238
isVisible: (config) => config.useCcSurfaces === true,
@@ -186,7 +241,7 @@ export function GetConfigFields(_self: InstanceBaseExt<WingConfig>): SomeCompani
186241
type: 'checkbox',
187242
id: 'useCcUser',
188243
label: 'Enable User Buttons',
189-
tooltip: 'Create surface for User buttons (8 buttons).',
244+
tooltip: 'Create a virtual surface for User buttons (8 buttons).',
190245
width: 6,
191246
default: false,
192247
isVisible: (config) => config.useCcSurfaces === true,
@@ -195,7 +250,7 @@ export function GetConfigFields(_self: InstanceBaseExt<WingConfig>): SomeCompani
195250
type: 'checkbox',
196251
id: 'useCcDaw',
197252
label: 'Enable DAW Buttons',
198-
tooltip: 'Create surfaces for DAW buttons (4 sets of 8 buttons).',
253+
tooltip: 'Create virtual surfaces for DAW buttons (4 sets of 8 buttons).',
199254
width: 6,
200255
default: false,
201256
isVisible: (config) => config.useCcSurfaces === true,

src/satellite-client.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,10 @@ export class SatelliteClient {
6868
}
6969
})
7070
}
71+
7172
disconnect(): void {
7273
if (this.socket) {
74+
this.sendCommand('QUIT')
7375
this.socket.close()
7476
this.socket = null
7577
}
@@ -78,6 +80,7 @@ export class SatelliteClient {
7880
this.heartbeatInterval = null
7981
}
8082
}
83+
8184
/**
8285
* Sends a command to the connected WebSocket server.
8386
*

0 commit comments

Comments
 (0)