@@ -1,106 +1,108 @@ | |||||
#N canvas 2220 331 805 580 12; | |||||
#X obj 112 43 adc~ 1 2 3 4 5 6, f 47; | |||||
#X obj 113 281 dac~ 1 2 3 4 5 6, f 47; | |||||
#X obj 112 127 *~ 1; | |||||
#X obj 137 94 r K1; | |||||
#X obj 178 126 *~ 1; | |||||
#X obj 242 128 *~ 1; | |||||
#X obj 308 127 *~ 1; | |||||
#X obj 372 127 *~ 1; | |||||
#X obj 438 126 *~ 1; | |||||
#X obj 203 93 r K2; | |||||
#X obj 267 93 r K3; | |||||
#X obj 333 94 r K4; | |||||
#X obj 397 93 r K5; | |||||
#X obj 463 93 r K6; | |||||
#X obj 290 502 print toVCV; | |||||
#X msg 267 315 L3 \$1 0 0; | |||||
#X msg 333 347 L4 \$1 0 0; | |||||
#X msg 463 348 L6 \$1 0 0; | |||||
#X msg 136 314 L1 \$1 0 0; | |||||
#X msg 203 346 L2 \$1 0 0; | |||||
#X msg 397 317 L5 \$1 0 0; | |||||
#X obj 112 230 *~ 1; | |||||
#X obj 178 229 *~ 1; | |||||
#X obj 242 231 *~ 1; | |||||
#X obj 308 230 *~ 1; | |||||
#X obj 372 230 *~ 1; | |||||
#X obj 438 229 *~ 1; | |||||
#X obj 147 158 r S1; | |||||
#X obj 213 157 r S2; | |||||
#X obj 277 157 r S3; | |||||
#X obj 343 158 r S4; | |||||
#X obj 407 157 r S5; | |||||
#X obj 473 158 r S6; | |||||
#X obj 473 197 - 1; | |||||
#X obj 407 196 - 1; | |||||
#X obj 343 194 - 1; | |||||
#X obj 277 195 - 1; | |||||
#X obj 213 196 - 1; | |||||
#X obj 147 195 - 1; | |||||
#X msg 146 404 S1 \$1 0 0; | |||||
#X msg 213 436 S2 \$1 0 0; | |||||
#X msg 277 405 S3 \$1 0 0; | |||||
#X msg 343 438 S4 \$1 0 0; | |||||
#X msg 407 407 S5 \$1 0 0; | |||||
#X msg 473 437 S6 \$1 0 0; | |||||
#N canvas 1187 297 729 742 12; | |||||
#X obj 153 257 adc~ 1 2 3 4 5 6, f 47; | |||||
#X obj 153 427 dac~ 1 2 3 4 5 6, f 47; | |||||
#X obj 154 297 *~ 1; | |||||
#X obj 218 296 *~ 1; | |||||
#X obj 282 298 *~ 1; | |||||
#X obj 348 297 *~ 1; | |||||
#X obj 412 297 *~ 1; | |||||
#X obj 478 296 *~ 1; | |||||
#X obj 330 663 print toVCV; | |||||
#X msg 307 476 L3 \$1 0 0; | |||||
#X msg 373 508 L4 \$1 0 0; | |||||
#X msg 503 509 L6 \$1 0 0; | |||||
#X msg 176 475 L1 \$1 0 0; | |||||
#X msg 243 507 L2 \$1 0 0; | |||||
#X msg 437 478 L5 \$1 0 0; | |||||
#X obj 154 376 *~ 1; | |||||
#X obj 218 375 *~ 1; | |||||
#X obj 282 377 *~ 1; | |||||
#X obj 348 376 *~ 1; | |||||
#X obj 412 376 *~ 1; | |||||
#X obj 478 375 *~ 1; | |||||
#X msg 186 565 S1 \$1 0 0; | |||||
#X msg 253 597 S2 \$1 0 0; | |||||
#X msg 317 566 S3 \$1 0 0; | |||||
#X msg 383 599 S4 \$1 0 0; | |||||
#X msg 447 568 S5 \$1 0 0; | |||||
#X msg 513 598 S6 \$1 0 0; | |||||
#X obj 179 104 r fromVCV; | |||||
#X obj 179 143 route K1 K2 K3 K4 K5 K6, f 56; | |||||
#X obj 188 198 route S1 S2 S3 S4 S5 S6, f 56; | |||||
#X obj 187 341 == 0; | |||||
#X obj 253 342 == 0; | |||||
#X obj 317 341 == 0; | |||||
#X obj 383 340 == 0; | |||||
#X obj 447 342 == 0; | |||||
#X obj 513 343 == 0; | |||||
#X msg 89 622 display \$1 \$2; | |||||
#X obj 80 582 pack f f; | |||||
#X obj 107 526 t b f; | |||||
#X connect 0 0 2 0; | #X connect 0 0 2 0; | ||||
#X connect 0 1 4 0; | |||||
#X connect 0 2 5 0; | |||||
#X connect 0 3 6 0; | |||||
#X connect 0 4 7 0; | |||||
#X connect 0 5 8 0; | |||||
#X connect 2 0 21 0; | |||||
#X connect 3 0 2 1; | |||||
#X connect 3 0 18 0; | |||||
#X connect 4 0 22 0; | |||||
#X connect 5 0 23 0; | |||||
#X connect 6 0 24 0; | |||||
#X connect 7 0 25 0; | |||||
#X connect 8 0 26 0; | |||||
#X connect 9 0 4 1; | |||||
#X connect 9 0 19 0; | |||||
#X connect 10 0 5 1; | |||||
#X connect 10 0 15 0; | |||||
#X connect 11 0 6 1; | |||||
#X connect 11 0 16 0; | |||||
#X connect 12 0 7 1; | |||||
#X connect 12 0 20 0; | |||||
#X connect 13 0 8 1; | |||||
#X connect 13 0 17 0; | |||||
#X connect 15 0 14 0; | |||||
#X connect 16 0 14 0; | |||||
#X connect 17 0 14 0; | |||||
#X connect 18 0 14 0; | |||||
#X connect 19 0 14 0; | |||||
#X connect 20 0 14 0; | |||||
#X connect 21 0 1 0; | |||||
#X connect 22 0 1 1; | |||||
#X connect 23 0 1 2; | |||||
#X connect 24 0 1 3; | |||||
#X connect 25 0 1 4; | |||||
#X connect 26 0 1 5; | |||||
#X connect 27 0 38 0; | |||||
#X connect 27 0 39 0; | |||||
#X connect 0 1 3 0; | |||||
#X connect 0 2 4 0; | |||||
#X connect 0 3 5 0; | |||||
#X connect 0 4 6 0; | |||||
#X connect 0 5 7 0; | |||||
#X connect 2 0 15 0; | |||||
#X connect 3 0 16 0; | |||||
#X connect 4 0 17 0; | |||||
#X connect 5 0 18 0; | |||||
#X connect 6 0 19 0; | |||||
#X connect 7 0 20 0; | |||||
#X connect 9 0 8 0; | |||||
#X connect 10 0 8 0; | |||||
#X connect 11 0 8 0; | |||||
#X connect 12 0 8 0; | |||||
#X connect 13 0 8 0; | |||||
#X connect 14 0 8 0; | |||||
#X connect 15 0 1 0; | |||||
#X connect 16 0 1 1; | |||||
#X connect 17 0 1 2; | |||||
#X connect 18 0 1 3; | |||||
#X connect 19 0 1 4; | |||||
#X connect 20 0 1 5; | |||||
#X connect 21 0 8 0; | |||||
#X connect 22 0 8 0; | |||||
#X connect 23 0 8 0; | |||||
#X connect 24 0 8 0; | |||||
#X connect 25 0 8 0; | |||||
#X connect 26 0 8 0; | |||||
#X connect 27 0 28 0; | |||||
#X connect 28 0 2 1; | |||||
#X connect 28 0 12 0; | |||||
#X connect 28 0 37 0; | #X connect 28 0 37 0; | ||||
#X connect 28 0 40 0; | |||||
#X connect 29 0 36 0; | |||||
#X connect 29 0 41 0; | |||||
#X connect 30 0 35 0; | |||||
#X connect 30 0 42 0; | |||||
#X connect 31 0 34 0; | |||||
#X connect 31 0 43 0; | |||||
#X connect 32 0 33 0; | |||||
#X connect 32 0 44 0; | |||||
#X connect 33 0 26 1; | |||||
#X connect 34 0 25 1; | |||||
#X connect 35 0 24 1; | |||||
#X connect 36 0 23 1; | |||||
#X connect 37 0 22 1; | |||||
#X connect 38 0 21 1; | |||||
#X connect 39 0 14 0; | |||||
#X connect 40 0 14 0; | |||||
#X connect 41 0 14 0; | |||||
#X connect 42 0 14 0; | |||||
#X connect 43 0 14 0; | |||||
#X connect 44 0 14 0; | |||||
#X connect 28 1 3 1; | |||||
#X connect 28 1 13 0; | |||||
#X connect 28 1 38 0; | |||||
#X connect 28 2 4 1; | |||||
#X connect 28 2 9 0; | |||||
#X connect 28 3 5 1; | |||||
#X connect 28 3 10 0; | |||||
#X connect 28 4 6 1; | |||||
#X connect 28 4 14 0; | |||||
#X connect 28 5 7 1; | |||||
#X connect 28 5 11 0; | |||||
#X connect 28 6 29 0; | |||||
#X connect 29 0 30 0; | |||||
#X connect 29 0 21 0; | |||||
#X connect 29 1 31 0; | |||||
#X connect 29 1 22 0; | |||||
#X connect 29 2 32 0; | |||||
#X connect 29 2 23 0; | |||||
#X connect 29 3 33 0; | |||||
#X connect 29 3 24 0; | |||||
#X connect 29 4 34 0; | |||||
#X connect 29 4 25 0; | |||||
#X connect 29 5 35 0; | |||||
#X connect 29 5 26 0; | |||||
#X connect 30 0 15 1; | |||||
#X connect 31 0 16 1; | |||||
#X connect 32 0 17 1; | |||||
#X connect 33 0 18 1; | |||||
#X connect 34 0 19 1; | |||||
#X connect 35 0 20 1; | |||||
#X connect 36 0 8 0; | |||||
#X connect 37 0 36 0; | |||||
#X connect 38 0 37 0; | |||||
#X connect 38 1 37 1; |
@@ -11,6 +11,8 @@ using namespace rack; | |||||
float g_lights[NUM_ROWS][3] = {}; | float g_lights[NUM_ROWS][3] = {}; | ||||
float g_switchLights[NUM_ROWS][3] = {}; | float g_switchLights[NUM_ROWS][3] = {}; | ||||
std::string g_utility[2] = {}; | |||||
bool g_display_is_valid = false; | |||||
std::vector<std::string> split (const std::string &s, char delim) { | std::vector<std::string> split (const std::string &s, char delim) { | ||||
std::vector<std::string> result; | std::vector<std::string> result; | ||||
@@ -52,6 +54,7 @@ struct LibPDEngine : ScriptEngine { | |||||
float _input[BUFFERSIZE] = {};// = (float*)malloc(1024*2*sizeof(float)); | float _input[BUFFERSIZE] = {};// = (float*)malloc(1024*2*sizeof(float)); | ||||
const static std::map<std::string, int> _light_map; | const static std::map<std::string, int> _light_map; | ||||
const static std::map<std::string, int> _switchLight_map; | const static std::map<std::string, int> _switchLight_map; | ||||
const static std::map<std::string, int> _utility_map; | |||||
std::string getEngineName() override { | std::string getEngineName() override { | ||||
return "Pure Data"; | return "Pure Data"; | ||||
@@ -131,6 +134,11 @@ struct LibPDEngine : ScriptEngine { | |||||
sendSwitch(i, block->switches[i]); | sendSwitch(i, block->switches[i]); | ||||
} | } | ||||
} | } | ||||
// display | |||||
if(g_display_is_valid){ | |||||
display(g_utility[1]); | |||||
} | |||||
// process samples in libpd | // process samples in libpd | ||||
_ticks = 1; | _ticks = 1; | ||||
libpd_process_float(_ticks, _input, _output); | libpd_process_float(_ticks, _input, _output); | ||||
@@ -158,7 +166,7 @@ void LibPDEngine::receiveLights(const char *s) { | |||||
std::vector<std::string> atoms = split (str, ' '); | std::vector<std::string> atoms = split (str, ' '); | ||||
if(atoms[0]=="toVCV:"){ | if(atoms[0]=="toVCV:"){ | ||||
// light list | |||||
// parse lights list | |||||
bool light_is_valid = true; | bool light_is_valid = true; | ||||
int light_idx = -1; | int light_idx = -1; | ||||
try { | try { | ||||
@@ -177,7 +185,7 @@ void LibPDEngine::receiveLights(const char *s) { | |||||
else { | else { | ||||
// error | // error | ||||
} | } | ||||
// parse switch lights list | |||||
bool switchLight_is_valid = true; | bool switchLight_is_valid = true; | ||||
int switchLight_idx = -1; | int switchLight_idx = -1; | ||||
try { | try { | ||||
@@ -196,9 +204,34 @@ void LibPDEngine::receiveLights(const char *s) { | |||||
else { | else { | ||||
// error | // error | ||||
} | } | ||||
// parse switch lights list | |||||
bool utility_is_valid = true; | |||||
int utility_idx = -1; | |||||
try { | |||||
utility_idx = _utility_map.at(atoms[1]); // map::at throws an out-of-range | |||||
} | |||||
catch (const std::out_of_range& oor) { | |||||
utility_is_valid = false; | |||||
//g_display_is_valid = true; | |||||
//display("Warning:"+atoms[1]+" not found!"); | |||||
} | |||||
//std::cout << v[1] << ", " << g_led_map[v[1]] << std::endl; | |||||
if(utility_is_valid && atoms.size()>=3){ | |||||
g_utility[0] = atoms[1]; // display | |||||
g_utility[1] = {""}; | |||||
for(int i=0; i<atoms.size()-2; i++){ | |||||
g_utility[1] += " " +atoms[i+2]; // concatenate message | |||||
} | |||||
g_display_is_valid = true; | |||||
} | |||||
else { | |||||
// error | |||||
} | |||||
} | } | ||||
else { | else { | ||||
// do nothing | |||||
// print out on command line | |||||
std::cout << std::string(s) << std::endl; | |||||
} | } | ||||
} | } | ||||
@@ -238,14 +271,23 @@ const std::map<std::string, int> LibPDEngine::_switchLight_map{ | |||||
{ "S6", 5 } | { "S6", 5 } | ||||
}; | }; | ||||
const std::map<std::string, int> LibPDEngine::_utility_map{ | |||||
{ "display", 0 } | |||||
}; | |||||
void LibPDEngine::sendKnob(const int idx, const float value){ | void LibPDEngine::sendKnob(const int idx, const float value){ | ||||
std::string knob = "K"+std::to_string(idx+1); | std::string knob = "K"+std::to_string(idx+1); | ||||
libpd_float(knob.c_str(), value); | |||||
libpd_start_message(1); | |||||
libpd_add_float(value); | |||||
libpd_finish_message("fromVCV", knob.c_str()); | |||||
} | } | ||||
void LibPDEngine::sendSwitch(const int idx, const bool value){ | void LibPDEngine::sendSwitch(const int idx, const bool value){ | ||||
std::string sw = "S"+std::to_string(idx+1); | std::string sw = "S"+std::to_string(idx+1); | ||||
libpd_float(sw.c_str(), value); | |||||
libpd_start_message(1); | |||||
libpd_add_float(value); | |||||
libpd_finish_message("fromVCV", sw.c_str()); | |||||
} | } | ||||
void LibPDEngine::sendInitialStates(const ProcessBlock* block){ | void LibPDEngine::sendInitialStates(const ProcessBlock* block){ | ||||