X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.cpp;h=07a2215c4cfb4386940acdf185530cbefd9204e5;hb=0bfaea65cfa324dfbb517b551709219529ef24b8;hp=8c17234051752e2527295016e197d2b8d8e5237c;hpb=971d9b523807d5d1c626a00bfb22b9d13f5edfc0;p=r2c2.git diff --git a/source/libr2c2/arducontrol.cpp b/source/libr2c2/arducontrol.cpp index 8c17234..07a2215 100644 --- a/source/libr2c2/arducontrol.cpp +++ b/source/libr2c2/arducontrol.cpp @@ -848,6 +848,8 @@ void ArduControl::ControlThread::exit() void ArduControl::ControlThread::main() { + init_baud_rate(); + while(!done) { PendingCommand cmd; @@ -864,6 +866,51 @@ void ArduControl::ControlThread::main() } } +void ArduControl::ControlThread::init_baud_rate() +{ + static unsigned rates[] = { 57600, 9600, 19200, 38400, 0 }; + unsigned rate = 0; + control.serial.set_data_bits(8); + control.serial.set_parity(IO::Serial::NONE); + control.serial.set_stop_bits(1); + for(unsigned i=0; rates[i]; ++i) + { + control.serial.set_baud_rate(rates[i]); + control.serial.put('\xFF'); + if(IO::poll(control.serial, IO::P_INPUT, 500*Time::msec)) + { + int c = control.serial.get(); + if(c==0xFF) + { + rate = rates[i]; + break; + } + } + } + + if(control.debug>=1) + IO::print("ArduControl detected at %d bits/s\n", rate); + + if(rate!=rates[0]) + { + PendingCommand cmd; + cmd.command[0] = SET_BAUD_RATE; + cmd.command[1] = rates[0]>>8; + cmd.command[2] = rates[0]; + cmd.length = 3; + if(do_command(cmd)==COMMAND_OK) + { + control.serial.set_baud_rate(rates[0]); + if(do_command(cmd)==COMMAND_OK) + { + Time::sleep(Time::sec); + if(control.debug>=1) + IO::print("Rate changed to %d bits/s\n", rates[0]); + } + } + } +} + bool ArduControl::ControlThread::get_work(PendingCommand &cmd) { if(control.pop_command(cmd))