TSI_Config/dc_outputs.cpp
2025-08-04 16:29:14 +08:00

133 lines
5.2 KiB
C++

#include "dc_outputs.h"
#include "ui_dc_outputs.h"
#include <QListView>
#include "dc_output_channel.h"
#include <QDebug>
#include "config_mgr.h"
#include "data_config.h"
#include "vibrationdata.h"
DC_Outputs::DC_Outputs(int slot_no_,int cardtype,QWidget *parent) :
QWidget(parent),
ui(new Ui::DC_Outputs)
{
ui->setupUi(this);
ui->comboBox_ch_output->setView(new QListView());
slot_no = slot_no_;
car_type = static_cast<CardType>(cardtype);
memset(channel_used,0,sizeof(channel_used));
current_index = ui->comboBox_ch_output->currentIndex();
Init();
}
DC_Outputs::~DC_Outputs()
{
delete ui;
}
void DC_Outputs::Init(){
std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no);
if (base_ptr == nullptr) {
qCritical() << "[Acceleration::Init] should not be here";
return;
}
std::shared_ptr<VibrationData> ptr = std::dynamic_pointer_cast<VibrationData>(base_ptr);
std::shared_ptr<VariableBase> variable_base = ptr->GetChannelPtr(current_index + 1);
if (variable_base == nullptr) {
qDebug() << "[DC_Outputs::Init] no channel ptr";
return;
}
if(variable_base->dc_output[0].output_channel == 1){
ui->label_ch_1->setText("通道1");
ui->label_ch_1_min->setText(QString::number(variable_base->dc_output[0].minmum));
ui->label_ch_1_max->setText(QString::number(variable_base->dc_output[0].maxmum));
}
if(variable_base->dc_output[0].output_channel == 2){
ui->label_ch_2->setText("通道2");
ui->label_ch_2_min->setText(QString::number(variable_base->dc_output[1].minmum));
ui->label_ch_2_max->setText(QString::number(variable_base->dc_output[1].maxmum));
}
if(variable_base->dc_output[0].output_channel == 3){
ui->label_ch_3->setText("通道3");
ui->label_ch_3_min->setText(QString::number(variable_base->dc_output[2].minmum));
ui->label_ch_3_max->setText(QString::number(variable_base->dc_output[2].maxmum));
}
if(variable_base->dc_output[0].output_channel == 4){
ui->label_ch_4->setText("通道4");
ui->label_ch_4_min->setText(QString::number(variable_base->dc_output[3].minmum));
ui->label_ch_4_max->setText(QString::number(variable_base->dc_output[3].maxmum));
}
}
void DC_Outputs::on_comboBox_ch_output_activated(int index)
{
DC_Output_Channel *dc_output_channel = new DC_Output_Channel();
dc_output_channel->setWindowModality(Qt::ApplicationModal);
connect(dc_output_channel,SIGNAL(output_channel_data_sg(int,float,float)),this,SLOT(output_channel_data(int,float,float)));
dc_output_channel->show();
}
void DC_Outputs::output_channel_data(int channel,float minmun,float maxmum){
qDebug() << channel << minmun << maxmum ;
if(channel == 1){
ui->label_ch_1->setText("通道1");
ui->label_ch_1_min->setText(QString::number(minmun));
ui->label_ch_1_max->setText(QString::number(maxmum));
}else if(channel == 2){
ui->label_ch_2->setText("通道2");
ui->label_ch_2_min->setText(QString::number(minmun));
ui->label_ch_2_max->setText(QString::number(maxmum));
}else if(channel == 3){
ui->label_ch_3->setText("通道3");
ui->label_ch_3_min->setText(QString::number(minmun));
ui->label_ch_3_max->setText(QString::number(maxmum));
}else if(channel == 4){
ui->label_ch_4->setText("通道4");
ui->label_ch_4_min->setText(QString::number(minmun));
ui->label_ch_4_max->setText(QString::number(maxmum));
}
}
void DC_Outputs::on_pushButton_confirm_clicked()
{
std::shared_ptr<CardBase> base_ptr = ConfigMgr::Instance()->GetSlotPtr(slot_no);
if (base_ptr == nullptr) {
qCritical() << "[Acceleration::Init] should not be here";
return;
}
std::shared_ptr<VibrationData> ptr = std::dynamic_pointer_cast<VibrationData>(base_ptr);
std::shared_ptr<VariableBase> variable_base = ptr->GetChannelPtr(current_index);
if (variable_base == nullptr ) {
return ;
}
if(ui->label_ch_1->text() != "未使用"){
variable_base->dc_output[0].output_channel = 1;
variable_base->dc_output[0].minmum = ui->label_ch_1_min->text().toFloat();
variable_base->dc_output[0].maxmum = ui->label_ch_1_max->text().toFloat();
}
if(ui->label_ch_2->text() != "未使用"){
variable_base->dc_output[1].output_channel = 2;
variable_base->dc_output[1].minmum = ui->label_ch_2_min->text().toFloat();
variable_base->dc_output[1].maxmum = ui->label_ch_2_max->text().toFloat();
}
if(ui->label_ch_3->text() != "未使用"){
variable_base->dc_output[2].output_channel = 3;
variable_base->dc_output[2].minmum = ui->label_ch_3_min->text().toFloat();
variable_base->dc_output[2].maxmum = ui->label_ch_3_max->text().toFloat();
}
if(ui->label_ch_4->text() != "未使用"){
variable_base->dc_output[3].output_channel = 4;
variable_base->dc_output[3].minmum = ui->label_ch_4_min->text().toFloat();
variable_base->dc_output[3].maxmum = ui->label_ch_4_max->text().toFloat();
}
ptr->variables_.push_back(variable_base);
this->close();
}
void DC_Outputs::on_pushButton_cancel_clicked()
{
this->close();
}