diff --git a/main.cpp b/main.cpp index 0e82aa5..24bceea 100644 --- a/main.cpp +++ b/main.cpp @@ -37,6 +37,7 @@ static std::atomic freq_setpoint; static std::atomic freq_peak; static std::atomic tec_bias; static std::atomic tec_p; +static std::atomic tec_current; static std::atomic fps; @@ -45,7 +46,7 @@ static void dsp_thread() { net::io_context io_context; net::ip::tcp::socket tec_socket(io_context); - tec_socket.connect(net::ip::tcp::endpoint(net::ip::make_address("192.168.1.91"), 5555)); + tec_socket.connect(net::ip::tcp::endpoint(net::ip::make_address("192.168.1.27"), 23)); size_t len = 16384; std::vector> frames(len); @@ -84,10 +85,20 @@ static void dsp_thread() { float freq_peak_local; freq_peak_local = 40.0f*float(distance(frames_mag.begin(), max_element(frames_mag.begin(), frames_mag.end())))/float(len); freq_peak = freq_peak_local; - // FIXME: net::write seems unimplemented as of libstdc++ 13 float freq_error = freq_peak_local - freq_setpoint; - tec_socket.write_some(net::buffer(std::format(":SOUR2:VOLT {:.3f}\n", - std::max(tec_bias+tec_p*freq_error, 0.0f)))); + float tec_current_local = std::max(tec_bias+tec_p*freq_error, 0.0f); + tec_current = tec_current_local; + // FIXME: net::write seems unimplemented as of libstdc++ 13 + tec_socket.write_some(net::buffer(std::format("pwm 0 i_set {:.6f}\n", tec_current_local))); + std::string reply; + net::read(tec_socket, net::dynamic_buffer(reply), + [&reply](auto ec, auto n) -> std::size_t + { + if(ec || (reply.size() > 0 && reply.compare(reply.size()-1, 1, "\n") == 0)) + return 0; + else + return 1; + }); last_tec += 100ms; tick = true; } @@ -243,14 +254,15 @@ int main(int argc, char* argv[]) ImGui::TableSetupColumn("", 0, 280.0f); ImGui::TableSetupColumn("", 0, 1000.0f); ImGui::TableNextColumn(); - ImGui::Checkbox("Update", &update); - ImGui::Text("Peak: %.3f", (float)freq_peak); + ImGui::Checkbox("Update waterfall", &update); + ImGui::Text("Baseband peak: %.3f MHz", (float)freq_peak); + ImGui::Text("TEC current: %.6f mA", (float)tec_current); ImGui::SliderFloat("Setpoint", &freq_setpoint_local, 0.0f, 40.0f); ImGui::SliderFloat("TEC bias", &tec_bias_local, 0.0f, 0.5f); - ImGui::SliderFloat("TEC P", &tec_p_local, -0.05f, 0.05f); + ImGui::SliderFloat("TEC P", &tec_p_local, -1.0f, 1.0f); freq_setpoint = freq_setpoint_local; tec_bias = tec_bias_local; - tec_p = tec_p_local; + tec_p = 0.05f*tec_p_local; if(ImGui::Button("Exit")) exit = true; ImGui::Text("FPS: %d", (int)fps);