@@ -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 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 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_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> result; | |||
@@ -52,6 +54,7 @@ struct LibPDEngine : ScriptEngine { | |||
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> _switchLight_map; | |||
const static std::map<std::string, int> _utility_map; | |||
std::string getEngineName() override { | |||
return "Pure Data"; | |||
@@ -131,6 +134,11 @@ struct LibPDEngine : ScriptEngine { | |||
sendSwitch(i, block->switches[i]); | |||
} | |||
} | |||
// display | |||
if(g_display_is_valid){ | |||
display(g_utility[1]); | |||
} | |||
// process samples in libpd | |||
_ticks = 1; | |||
libpd_process_float(_ticks, _input, _output); | |||
@@ -158,7 +166,7 @@ void LibPDEngine::receiveLights(const char *s) { | |||
std::vector<std::string> atoms = split (str, ' '); | |||
if(atoms[0]=="toVCV:"){ | |||
// light list | |||
// parse lights list | |||
bool light_is_valid = true; | |||
int light_idx = -1; | |||
try { | |||
@@ -177,7 +185,7 @@ void LibPDEngine::receiveLights(const char *s) { | |||
else { | |||
// error | |||
} | |||
// parse switch lights list | |||
bool switchLight_is_valid = true; | |||
int switchLight_idx = -1; | |||
try { | |||
@@ -196,9 +204,34 @@ void LibPDEngine::receiveLights(const char *s) { | |||
else { | |||
// 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 { | |||
// 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 } | |||
}; | |||
const std::map<std::string, int> LibPDEngine::_utility_map{ | |||
{ "display", 0 } | |||
}; | |||
void LibPDEngine::sendKnob(const int idx, const float value){ | |||
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){ | |||
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){ | |||