commit d1f116ac8012caf8da68136b85bac2971e26608c
parent 3c91f4918a706844d0ff5348b19b86cdbeb4d204
Author: fundamental <mark.d.mccurry@gmail.com>
Date: Mon, 1 Sep 2014 02:03:08 -0400
rtosc-dispatch: Fix More Connectivity Issues
Diffstat:
4 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/src/Misc/Bank.cpp b/src/Misc/Bank.cpp
@@ -47,7 +47,7 @@
using namespace std;
Bank::Bank()
- :defaultinsname(" ")
+ :bankpos(0), defaultinsname(" ")
{
clearbank();
bankfiletitle = dirname;
diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h
@@ -72,6 +72,7 @@ class Bank
};
std::vector<bankstruct> banks;
+ int bankpos;
struct ins_t {
ins_t(void);
diff --git a/src/Misc/Master.cpp b/src/Misc/Master.cpp
@@ -70,6 +70,13 @@ static Ports localports = {
d.reply("/free", "sb", "Part", sizeof(void*), &m->part[i]);
m->part[i] = p;
printf("part %d is now pointer %p\n", i, p);}},
+ {"Pvolume::c", rDoc("Master Volume"), 0,
+ [](const char *m, rtosc::RtData &d) {
+ if(rtosc_narguments(m)==0) {
+ d.reply(d.loc, "c", ((Master*)d.obj)->Pvolume);
+ } else if(rtosc_narguments(m)==1 && rtosc_type(m,0)=='c') {
+ ((Master*)d.obj)->setPvolume(limit<char>(rtosc_argument(m,0).i,0,127));
+ d.broadcast(d.loc, "c", ((Master*)d.obj)->Pvolume);}}},
{"volume::c", rDoc("Master Volume"), 0,
[](const char *m, rtosc::RtData &d) {
if(rtosc_narguments(m)==0) {
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -214,9 +214,21 @@ void rescanForBanks(Bank &bank, Fl_Osc_Interface *osc)
void loadBank(Bank &bank, int pos, Fl_Osc_Interface *osc)
{
- bank.loadbank(bank.banks[pos].dir);
- for(int i=0; i<BANK_SIZE; ++i)
- refreshBankView(bank, i, osc);
+ if(bank.bankpos != pos) {
+ bank.bankpos = pos;
+ bank.loadbank(bank.banks[pos].dir);
+ for(int i=0; i<BANK_SIZE; ++i)
+ refreshBankView(bank, i, osc);
+ }
+}
+
+void bankPos(Bank &bank, Fl_Osc_Interface *osc)
+{
+ char response[2048];
+
+ if(!rtosc_message(response, 2048, "/loadbank", "i", bank.bankpos))
+ errx(1, "Failure to handle bank update properly...");
+ osc->tryLink(response);
}
void createEffect(const char *msg)
@@ -684,6 +696,8 @@ public:
rescanForBanks(master->bank, osc);
} else if(!strcmp(msg, "/loadbank") && !strcmp(rtosc_argument_string(msg), "c")) {
loadBank(master->bank, rtosc_argument(msg, 0).i, osc);
+ } else if(!strcmp(msg, "/loadbank") && !strcmp(rtosc_argument_string(msg), "")) {
+ bankPos(master->bank, osc);
} else if(strstr(msg, "efftype") && !strcmp(rtosc_argument_string(msg), "c")) {
createEffect(msg);
} else if(objmap.find(obj_rl) != objmap.end()) {