00001 #include <qlabel.h>
00002 #include <qlayout.h>
00003 #include <qcombobox.h>
00004 #include <qhbuttongroup.h>
00005 #include <qradiobutton.h>
00006
00007 #include "iolayerbase.h"
00008
00009 namespace {
00010 enum ParityIds {
00011 id_parity_none,
00012 id_parity_odd,
00013 id_parity_even
00014 };
00015
00016 enum FlowIds {
00017 id_flow_hw,
00018 id_flow_sw,
00019 id_flow_none,
00020 };
00021
00022 enum SpeedIds {
00023 id_baud_115200,
00024 id_baud_57600,
00025 id_baud_38400,
00026 id_baud_19200,
00027 id_baud_9600,
00028 id_baud_4800,
00029 id_baud_2400,
00030 id_baud_1200
00031 };
00032
00033 enum DataIds {
00034 id_data_5,
00035 id_data_6,
00036 id_data_7,
00037 id_data_8
00038 };
00039
00040 enum StopIds {
00041 id_stop_1,
00042 id_stop_1_5,
00043 id_stop_2
00044 };
00045
00046 }
00047
00048
00049 IOLayerBase::IOLayerBase( QWidget* par, const char* name )
00050 : QWidget( par, name )
00051 {
00052 m_speedLabel = new QLabel(tr("Speed"), this );
00053 m_speedBox = new QComboBox(this );
00054
00055 m_groupFlow = new QHButtonGroup(tr("Flow control"),this );
00056 m_flowHw = new QRadioButton(tr("Hardware"), m_groupFlow );
00057 m_flowSw = new QRadioButton(tr("Software"), m_groupFlow );
00058 m_flowNone = new QRadioButton( tr("None"), m_groupFlow );
00059
00060 m_groupParity = new QHButtonGroup(tr("Parity"), this );
00061 m_parityNone = new QRadioButton(tr("None"), m_groupParity );
00062 m_parityOdd = new QRadioButton(tr("Odd"), m_groupParity );
00063 m_parityEven = new QRadioButton(tr("Even"), m_groupParity );
00064
00065 m_groupData = new QHButtonGroup(tr("Data Bits"), this);
00066 m_data5 = new QRadioButton(tr("5"), m_groupData );
00067 m_data6 = new QRadioButton(tr("6"), m_groupData );
00068 m_data7 = new QRadioButton(tr("7"), m_groupData );
00069 m_data8 = new QRadioButton(tr("8"), m_groupData );
00070
00071 m_groupStop = new QHButtonGroup(tr("Stop Bits"), this );
00072 m_stop1 = new QRadioButton(tr("1"), m_groupStop );
00073 m_stop15 = new QRadioButton(tr("1.5"), m_groupStop );
00074 m_stop2 = new QRadioButton(tr("2"), m_groupStop );
00075
00076
00077 m_lroot = new QVBoxLayout( this );
00078 m_lroot->add(m_speedLabel );
00079 m_lroot->add(m_speedBox );
00080 m_lroot->add(m_groupFlow );
00081 m_lroot->add(m_groupParity );
00082 m_lroot->add( m_groupData );
00083 m_lroot->add( m_groupStop );
00084 m_lroot->addStretch(2);
00085
00086
00087 m_speedBox->insertItem(tr("115200 baud"), id_baud_115200 );
00088 m_speedBox->insertItem(tr("57600 baud"), id_baud_57600 );
00089 m_speedBox->insertItem(tr("38400 baud"), id_baud_38400 );
00090 m_speedBox->insertItem(tr("19200 baud"), id_baud_19200 );
00091 m_speedBox->insertItem(tr("9600 baud"), id_baud_9600 );
00092 m_speedBox->insertItem(tr("4800 baud"), id_baud_4800 );
00093 m_speedBox->insertItem(tr("2400 baud"), id_baud_2400 );
00094 m_speedBox->insertItem(tr("1200 baud"), id_baud_1200 );
00095 };
00096 IOLayerBase::~IOLayerBase() {
00097
00098 }
00099 void IOLayerBase::setFlow( Flow flo ) {
00100 switch ( flo ) {
00101 case Software:
00102 m_flowSw->setChecked( true );
00103 break;
00104 case Hardware:
00105 m_flowHw->setChecked( true );
00106 break;
00107 case None:
00108 m_flowNone->setChecked( true );
00109 break;
00110 }
00111 }
00112
00113 void IOLayerBase::setParity( Parity par ) {
00114 switch( par ) {
00115 case NonePar:
00116 m_parityNone->setChecked( true );
00117 break;
00118 case Odd:
00119 m_parityOdd->setChecked( true );
00120 break;
00121 case Even:
00122 m_parityEven->setChecked( true );
00123 break;
00124 }
00125 }
00126 void IOLayerBase::setSpeed( Speed sp ) {
00127 int index = -1;
00128 switch( sp ) {
00129 case Baud_115200:
00130 index = id_baud_115200;
00131 break;
00132 case Baud_57600:
00133 index = id_baud_57600;
00134 break;
00135 case Baud_38400:
00136 index = id_baud_38400;
00137 break;
00138 case Baud_19200:
00139 index = id_baud_19200;
00140 break;
00141 case Baud_4800:
00142 index = id_baud_4800;
00143 break;
00144 case Baud_2400:
00145 index = id_baud_2400;
00146 break;
00147 case Baud_1200:
00148 index = id_baud_1200;
00149 break;
00150 default:
00151 case Baud_9600:
00152 index = id_baud_9600;
00153 break;
00154 }
00155 m_speedBox->setCurrentItem(index );
00156 }
00157
00158 void IOLayerBase::setData( Data data ) {
00159 switch( data ) {
00160 case Data_Five:
00161 m_data5->setChecked( true );
00162 break;
00163 case Data_Six:
00164 m_data6->setChecked( true );
00165 break;
00166 case Data_Seven:
00167 m_data7->setChecked( true );
00168 break;
00169 default:
00170 m_data8->setChecked( true );
00171 break;
00172 }
00173 }
00174
00175
00176 void IOLayerBase::setStop( Stop stop ) {
00177 switch( stop ) {
00178 case Stop_Two:
00179 m_stop2->setChecked( true );
00180 break;
00181 case Stop_OnePointFive:
00182 m_stop15->setChecked( true );
00183 break;
00184 default:
00185 m_stop1->setChecked( true );
00186 break;
00187 }
00188 }
00189
00190
00191
00192 IOLayerBase::Flow IOLayerBase::flow()const {
00193 if (m_flowHw->isChecked() ) {
00194 return Hardware;
00195 }else if( m_flowSw->isChecked() ) {
00196 return Software;
00197 } else {
00198 return None;
00199 }
00200 }
00201 IOLayerBase::Parity IOLayerBase::parity()const {
00202 if ( m_parityOdd->isChecked() ) {
00203 return Odd;
00204 } else if ( m_parityEven->isChecked() ) {
00205 return Even;
00206 } else {
00207 return NonePar;
00208 }
00209
00210 }
00211 IOLayerBase::Speed IOLayerBase::speed()const{
00212 switch( m_speedBox->currentItem() ) {
00213 case id_baud_115200:
00214 return Baud_115200;
00215 break;
00216 case id_baud_57600:
00217 return Baud_57600;
00218 break;
00219 case id_baud_38400:
00220 return Baud_38400;
00221 break;
00222 case id_baud_19200:
00223 return Baud_19200;
00224 break;
00225 case id_baud_4800:
00226 return Baud_4800;
00227 break;
00228 case id_baud_2400:
00229 return Baud_2400;
00230 break;
00231 case id_baud_1200:
00232 return Baud_1200;
00233 break;
00234 default:
00235 case id_baud_9600:
00236 return Baud_9600;
00237 break;
00238 }
00239 }
00240 IOLayerBase::Data IOLayerBase::data()const {
00241 if ( m_data5->isChecked() ) {
00242 return Data_Five;
00243 } else if ( m_data6->isChecked() ) {
00244 return Data_Six;
00245 } else if ( m_data7->isChecked() ) {
00246 return Data_Seven;
00247 } else {
00248 return Data_Eight;
00249 }
00250 }
00251 IOLayerBase::Stop IOLayerBase::stop()const {
00252 if ( m_stop2->isChecked() ) {
00253 return Stop_Two;
00254 } else if ( m_stop15->isChecked() ) {
00255 return Stop_OnePointFive;
00256 } else {
00257 return Stop_One;
00258 }
00259 }
00260