summaryrefslogtreecommitdiff
path: root/libs/surfaces/osc/osc.cc
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2017-05-04 15:50:24 -0700
committerLen Ovens <len@ovenwerks.net>2017-05-04 15:52:09 -0700
commita3c70696b67d746155d6d139c9de418a74c1cf37 (patch)
tree8800b72e361be58146244151904630f016dc9b94 /libs/surfaces/osc/osc.cc
parent0d7e9987b388680b6f6ab049ae40dac164c1aafa (diff)
OSC: personal monitoring, fix crash and minor bugs
Diffstat (limited to 'libs/surfaces/osc/osc.cc')
-rw-r--r--libs/surfaces/osc/osc.cc50
1 files changed, 37 insertions, 13 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index 282873053e..5fe8e25f41 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -1335,7 +1335,8 @@ OSC::clear_devices ()
for (CueObservers::iterator x = cue_observers.begin(); x != cue_observers.end();) {
OSCCueObserver* co;
if ((co = dynamic_cast<OSCCueObserver*>(*x)) != 0) {
- delete co;
+ delete *x;
+ x = cue_observers.erase (x);
} else {
++x;
}
@@ -4034,18 +4035,24 @@ OSC::cue_parse (const char *path, const char* types, lo_arg **argv, int argc, lo
ret = 0;
}
else if (!strncmp (path, "/cue/connect", 12)) {
- // switch to next Aux bus
- cue_set (0, msg);
+ // Connect to default Aux bus
+ if (argv[0]->i) {
+ cue_set (1, msg);
+ }
ret = 0;
}
else if (!strncmp (path, "/cue/next_aux", 13)) {
// switch to next Aux bus
- cue_next (msg);
+ if (argv[0]->i) {
+ cue_next (msg);
+ }
ret = 0;
}
else if (!strncmp (path, "/cue/previous_aux", 17)) {
// switch to previous Aux bus
- cue_previous (msg);
+ if (argv[0]->i) {
+ cue_previous (msg);
+ }
ret = 0;
}
else if (!strncmp (path, "/cue/send/fader/", 16) && strlen (path) > 16) {
@@ -4067,18 +4074,14 @@ OSC::cue_parse (const char *path, const char* types, lo_arg **argv, int argc, lo
ret = 0;
}
- if ((ret && _debugmode == Unhandled)) {
- debugmsg (_("Unhandled OSC cue message"), path, types, argv, argc);
- } else if ((!ret && _debugmode == All)) {
- debugmsg (_("OSC cue"), path, types, argv, argc);
- }
-
return ret;
}
int
OSC::cue_set (uint32_t aux, lo_message msg)
{
+ std::cout << "cue set\n";
+
return _cue_set (aux, get_address (msg));
}
@@ -4091,12 +4094,19 @@ OSC::_cue_set (uint32_t aux, lo_address addr)
s->feedback = 0;
s->gainmode = 1;
s->cue = true;
- s->aux = aux;
s->strips = get_sorted_stripables(s->strip_types, s->cue);
s->nstrips = s->strips.size();
+
+ if (aux < 1) {
+ aux = 1;
+ } else if (aux > s->nstrips) {
+ aux = s->nstrips;
+ }
+ s->aux = aux;
+
// get rid of any old CueObsevers for this address
- cueobserver_connections.drop_connections ();
+ //cueobserver_connections.drop_connections ();
CueObservers::iterator x;
for (x = cue_observers.begin(); x != cue_observers.end();) {
@@ -4121,6 +4131,7 @@ OSC::_cue_set (uint32_t aux, lo_address addr)
for (uint32_t n = 0; n < s->nstrips; ++n) {
boost::shared_ptr<Stripable> stp = s->strips[n];
if (stp) {
+ std::cout << "Aux: " << stp->name() << " number: " << n+1 << " requested: " << aux << "\n";
text_message (string_compose ("/cue/name/%1", n+1), stp->name(), addr);
if (aux == n+1) {
// aux must be at least one
@@ -4130,6 +4141,7 @@ OSC::_cue_set (uint32_t aux, lo_address addr)
// make a list of stripables with sends that go to this bus
s->sends = cue_get_sorted_stripables(stp, aux, addr);
// start cue observer
+ std::cout << "starting cue obsever\n";
OSCCueObserver* co = new OSCCueObserver (stp, s->sends, addr);
cue_observers.push_back (co);
}
@@ -4144,6 +4156,14 @@ int
OSC::cue_next (lo_message msg)
{
OSCSurface *s = get_surface(get_address (msg));
+
+ std::cout << "cue next\n";
+ if (!s->cue) {
+ std::cout << "cue next init\n";
+ cue_set (1, msg);
+ return 0;
+ }
+ std::cout << "cue next no init\n";
if (s->aux < s->nstrips) {
cue_set (s->aux + 1, msg);
} else {
@@ -4156,6 +4176,10 @@ int
OSC::cue_previous (lo_message msg)
{
OSCSurface *s = get_surface(get_address (msg));
+ if (!s->cue) {
+ cue_set (1, msg);
+ return 0;
+ }
if (s->aux > 1) {
cue_set (s->aux - 1, msg);
}