#include "binary.hpp" #include "device.hpp" #include #include #include int main(int argc, char** argv) { std::string data; if(!binary::process_all(data, argc, argv)) { std::cerr << "Usage: " << argv[0] << " device [midifile ...]?\n\n"; return 1; } unsigned at = 0; Device device(argv[1]); device.put(Device::Mode::e_serial); for(;;) { Device::Mode mode = (Device::Mode)device.get(); switch(mode) { default: { std::cout << "device: unknown (" << mode << ")" << std::endl; break; } case Device::Mode::e_ready: { device.put(Device::Mode::e_serial); std::cout << "device: ready" << std::endl; break; } case Device::Mode::e_jump: { at = (device.get() & 0xff); at = (at << 8) | (device.get() & 0xff); at = (at << 8) | (device.get() & 0xff); at = (at << 8) | (device.get() & 0xff); std::cout << "device: jump (" << at << ")" << std::endl; break; } case Device::Mode::e_read: { unsigned len = (device.get() & 0xff); if(len + at > data.length()) { unsigned l = data.length() - at; device.write(data.c_str() + at, l); for(int i = 0; i < len - l; i++) { device.put(0); } at += l; } else { device.write(data.c_str() + at, len); at += len; } break; }} } }