#include #include "util.hpp" #include "commands.hpp" #include "serial.hpp" #include "tones.hpp" #include "scheduler.hpp" static void help() { Serial.println("OK help"); Serial.println(" s: set :s,index,freq,amplitude,"); Serial.println(" c: clear :c,index,"); Serial.println(" g: get :g,index,"); Serial.println(" w: write :w,[v|s|c,...]...;,"); Serial.println(" v: volume v,level,"); Serial.println(" s: set s,timestamp,index,freq,"); Serial.println(" c: clear v,timestamp,index,"); Serial.println(" p: play :p,"); Serial.println(" r: reset :r,"); Serial.println(" h: help :h,"); } static bool get() { int index = serial::read_int(); if(index < 0 || index >= size(tones::all)) { return true; } if(index >= tones::active) { tones::active = index + 1; } Serial.print("OK "); Serial.print(index); Serial.print(','); Serial.print(tones::all[index].frequency); Serial.print(','); Serial.print(tones::all[index].amplitude); Serial.print(','); Serial.println(); return false; } static bool write() { scheduler::clear(); for(;;) { serial::read_until(); switch(serial::buffer[0]) { case 'v': scheduler::add_volume(serial::read_float()); break; case 's': scheduler::add_set(serial::read_int(), serial::read_int(), serial::read_int()); break; case 'c': scheduler::add_clear(serial::read_int(), serial::read_int()); break; case ';': return false; default: return true; } } scheduler::finalize(); } void commands::process() { serial::read_until(); switch(serial::buffer[0]) { case 'w': if(write()) break; Serial.println("OK"); return; case 's': tones::set(serial::read_int(), serial::read_int(), serial::read_int()); Serial.println("OK"); return; case 'c': tones::clear(serial::read_int()); Serial.println("OK"); return; case 'g': if(get()) break; return; case 'p': scheduler::running = false; scheduler::do_next(); Serial.println("OK"); break; case 'r': tones::clear_all(); Serial.println("OK"); return; case 'h': help(); return; } Serial.println("ERROR"); }