aboutsummaryrefslogtreecommitdiffhomepage
path: root/backends
diff options
context:
space:
mode:
authorcbdev <cb@cbcdn.com>2019-08-16 19:57:25 +0200
committercbdev <cb@cbcdn.com>2019-08-16 19:57:25 +0200
commit7997c74b421437c64ad3c25d5e7943470a6b9bc7 (patch)
tree8c2f8eb25e275e73108c3558845aba43e41aeba0 /backends
parentc2bf894835d01c648e3f64826e69944a2a27373f (diff)
downloadmidimonster-7997c74b421437c64ad3c25d5e7943470a6b9bc7.tar.gz
midimonster-7997c74b421437c64ad3c25d5e7943470a6b9bc7.tar.bz2
midimonster-7997c74b421437c64ad3c25d5e7943470a6b9bc7.zip
Implement dot2 specific workarounds
Diffstat (limited to 'backends')
-rw-r--r--backends/maweb.c16
-rw-r--r--backends/maweb.h10
-rw-r--r--backends/maweb.md35
3 files changed, 44 insertions, 17 deletions
diff --git a/backends/maweb.c b/backends/maweb.c
index 07fce12..4d93987 100644
--- a/backends/maweb.c
+++ b/backends/maweb.c
@@ -239,8 +239,7 @@ static channel* maweb_channel(instance* inst, char* spec){
}
}
- if(ident.fields.type && ident.fields.index && ident.fields.page
- && ident.fields.index <= 90){
+ if(ident.fields.type && ident.fields.index && ident.fields.page){
//actually, those are zero-indexed...
ident.fields.index--;
ident.fields.page--;
@@ -297,7 +296,7 @@ static int maweb_handle_message(instance* inst, char* payload, size_t payload_le
fprintf(stderr, "maweb sending user credentials\n");
snprintf(xmit_buffer, sizeof(xmit_buffer),
"{\"requestType\":\"login\",\"username\":\"%s\",\"password\":\"%s\",\"session\":%ld}",
- data->user, data->pass, data->session);
+ (data->peer_type == peer_dot2) ? "remote" : data->user, data->pass, data->session);
maweb_send_frame(inst, ws_text, (uint8_t*) xmit_buffer, strlen(xmit_buffer));
}
@@ -305,9 +304,10 @@ static int maweb_handle_message(instance* inst, char* payload, size_t payload_le
fprintf(stderr, "maweb connection established\n");
field = json_obj_str(payload, "appType", NULL);
if(!strncmp(field, "dot2", 4)){
- fprintf(stderr, "maweb peer detected as dot2, forcing user name 'remote'\n");
- free(data->user);
- data->user = strdup("remote");
+ data->peer_type = peer_dot2;
+ }
+ else if(!strncmp(field, "gma2", 4)){
+ data->peer_type = peer_ma2;
}
maweb_send_frame(inst, ws_text, (uint8_t*) "{\"session\":0}", 13);
}
@@ -573,7 +573,7 @@ static int maweb_set(instance* inst, size_t num, channel** c, channel_value* v){
"\"type\":0,"
"\"session\":%ld"
"}", ident.fields.index, ident.fields.page,
- (exec_flash - ident.fields.type),
+ (data->peer_type == peer_dot2) ? (ident.fields.type - 3) : (exec_flash - ident.fields.type),
(v[n].normalised > 0.9) ? "true" : "false",
(v[n].normalised > 0.9) ? "false" : "true",
data->session);
@@ -591,7 +591,7 @@ static int maweb_set(instance* inst, size_t num, channel** c, channel_value* v){
"\"released\":%s,"
"\"type\":0,"
"\"session\":%ld"
- "}", ident.fields.index + 100,
+ "}", ident.fields.index,
ident.fields.page,
0,
(v[n].normalised > 0.9) ? "true" : "false",
diff --git a/backends/maweb.h b/backends/maweb.h
index 6e6e652..5f59cc1 100644
--- a/backends/maweb.h
+++ b/backends/maweb.h
@@ -28,6 +28,13 @@ typedef enum /*_maweb_channel_type*/ {
cmdline_button
} maweb_channel_type;
+typedef enum /*_maweb_peer_type*/ {
+ peer_unidentified = 0,
+ peer_ma2,
+ peer_ma3,
+ peer_dot2
+} maweb_peer_type;
+
typedef enum /*_ws_conn_state*/ {
ws_new,
ws_http,
@@ -57,9 +64,10 @@ typedef struct /*_maweb_instance_data*/ {
char* port;
char* user;
char* pass;
-
+
uint8_t login;
int64_t session;
+ maweb_peer_type peer_type;
int fd;
maweb_state state;
diff --git a/backends/maweb.md b/backends/maweb.md
index dd13db9..6076f44 100644
--- a/backends/maweb.md
+++ b/backends/maweb.md
@@ -5,10 +5,15 @@ instances (GrandMA2 / GrandMA2 OnPC / GrandMA Dot2 / GrandMA Dot2 OnPC).
It grants read-write access to the console's playback faders and buttons as well as write access to
the command line buttons.
-To allow this backend to connect to the console, enter the console configuration (`Setup` key),
-select `Console`/`Global Settings` and set the `Remotes` option to `Login enabled`.
+#### Setting up the console
+
+For the GrandMA2 enter the console configuration (`Setup` key), select `Console`/`Global Settings` and
+set the `Remotes` option to `Login enabled`.
Create an additional user that is able to log into the Web Remote using `Setup`/`Console`/`User & Profiles Setup`.
+For the dot2, enter the console configuration using the `Setup` key, select `Global Settings` and enable the
+Web Remote. Set a web remote password using the option below the activation setting.
+
#### Global configuration
The `maweb` backend does not take any global configuration.
@@ -27,12 +32,23 @@ Currently, three types of channels can be assigned
##### Executors
-Executors are arranged in pages, with each page having 90 fader executors (numbered 1 through 90) and
-90 button executors (numbered 101 through 190).
-
-Note that when creating a new show, only the first page is created and active.
-
-A fader executor consists of a fader, two buttons (`upper`, `lower`) above it and one `flash` button below it.
+* For the GrandMA2, executors are arranged in pages, with each page having 90 fader executors (numbered 1 through 90)
+ and 90 button executors (numbered 101 through 190).
+ * A fader executor consists of a `fader`, two buttons above it (`upper`, `lower`) and one `flash` button below it.
+ * A button executor consists of a `button` control.
+* For the dot2, executors are also arranged in pages, but the controls are non-obviously numbered.
+ * For the faders, they are right-to-left from the Core Fader section (Faders 6 to 1) over the F-Wing 1 (Faders 13 to 6) to
+ F-Wing 2 (Faders 21 to 14).
+ * Above the fader sections are two rows of 21 `button` executors, numbered 122 through 101 (upper row) and 222 through 201 (lower row),
+ in the same order as the faders are.
+ * Fader executors have two buttons below them (`upper` and `lower`).
+ * The button executor section consists of six rows of 18 buttons, divided into two button wings. Buttons on the wings
+ are once again numbered right-to-left.
+ * B-Wing 1 has `button` executors 308 to 301 (top row), 408 to 401 (second row), and so on until 808 through 801 (bottom row)
+ * B-Wing 2 has 316 to 309 (top row) through 816 to 809 (bottom row)
+
+When creating a new show, only the first page is created and active. Additional pages have to be created explicitly within
+the console before being usable.
These controls can be addressed like
@@ -45,6 +61,7 @@ A button executor can likewise be mapped using the syntax
```
mw1.page2.button103 > mw1.page3.button101
+mw1.page2.button803 > mw1.page3.button516
```
##### Command line buttons
@@ -58,6 +75,8 @@ mw1.<button-name>
The following button names are recognized by the backend:
+| Supported | Command | Line | Keys | | | |
+|---------------|---------------|---------------|---------------|-----------------------|-------------------------------|---------------|
| `SET` | `PREV` | `NEXT` | `CLEAR` | `FIXTURE_CHANNEL` | `FIXTURE_GROUP_PRESET` | `EXEC_CUE` |
| `STORE_UPDATE`| `OOPS` | `ESC` | `OFF` | `ON` | `MA` | `STORE` |
| `0` | `1` | `2` | `3` | `4` | `5` | `6` |