tone-generator/commands.cpp

103 lines
2.1 KiB
C++
Raw Normal View History

2024-08-19 22:43:24 +10:00
#include <Arduino.h>
#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");
}