00001 #include "iolayerbase.h"
00002 #include "serialconfigwidget.h"
00003 #include "comboboxhelper.h"
00004
00005 #include <qlabel.h>
00006 #include <qlayout.h>
00007 #include <qcombobox.h>
00008
00009
00010
00011 SerialConfigWidget::SerialConfigWidget( const QString& name,
00012 QWidget* parent,
00013 const char* na )
00014 : ProfileDialogConnectionWidget( name, parent, na ) {
00015
00016 m_lay = new QVBoxLayout(this );
00017 m_device = new QLabel(tr("Device"), this );
00018 m_deviceCmb = new QComboBox(this );
00019 m_deviceCmb->setEditable( TRUE );
00020
00021 m_base = new IOLayerBase(this, "base");
00022
00023 m_lay->addWidget( m_device );
00024 m_lay->addWidget( m_deviceCmb );
00025 m_lay->addWidget( m_base );
00026
00027 m_deviceCmb->insertItem( "/dev/ttyS0" );
00028 m_deviceCmb->insertItem( "/dev/ttyS1" );
00029 m_deviceCmb->insertItem( "/dev/ttySA0");
00030 m_deviceCmb->insertItem( "/dev/ttySA1");
00031
00032 }
00033 SerialConfigWidget::~SerialConfigWidget() {
00034
00035 }
00036 void SerialConfigWidget::load( const Profile& prof ) {
00037 int rad_flow = prof.readNumEntry("Flow");
00038 int rad_parity = prof.readNumEntry("Parity");
00039 int speed = prof.readNumEntry("Speed");
00040 int dbits = prof.readNumEntry("DataBits");
00041 int sbits = prof.readNumEntry("StopBits");
00042
00043 if (rad_flow == 1) {
00044 m_base->setFlow( IOLayerBase::Hardware );
00045 } else if (rad_flow == 2) {
00046 m_base->setFlow( IOLayerBase::Software );
00047 } else {
00048 m_base->setFlow( IOLayerBase::None );
00049 }
00050
00051 if (rad_parity == 1) {
00052 m_base->setParity( IOLayerBase::Even );
00053 } else if ( rad_parity == 2 ) {
00054 m_base->setParity( IOLayerBase::Odd );
00055 } else {
00056 m_base->setParity( IOLayerBase::NonePar );
00057 }
00058
00059 switch( speed ) {
00060 case 115200:
00061 m_base->setSpeed(IOLayerBase::Baud_115200 );
00062 break;
00063 case 57600:
00064 m_base->setSpeed( IOLayerBase::Baud_57600 );
00065 break;
00066 case 38400:
00067 m_base->setSpeed(IOLayerBase::Baud_38400 );
00068 break;
00069 case 19200:
00070 m_base->setSpeed( IOLayerBase::Baud_19200 );
00071 break;
00072 case 4800:
00073 m_base->setSpeed( IOLayerBase::Baud_4800 );
00074 break;
00075 case 2400:
00076 m_base->setSpeed( IOLayerBase::Baud_2400 );
00077 break;
00078 case 1200:
00079 m_base->setSpeed( IOLayerBase::Baud_1200 );
00080 break;
00081 case 9600:
00082 default:
00083 m_base->setSpeed(IOLayerBase::Baud_9600 );
00084 break;
00085 }
00086
00087 if ( dbits == 5) {
00088 m_base->setData( IOLayerBase::Data_Five );
00089 } else if (rad_flow == 6) {
00090 m_base->setData( IOLayerBase::Data_Six );
00091 } else if (rad_flow == 7) {
00092 m_base->setData( IOLayerBase::Data_Seven );
00093 } else {
00094 m_base->setData( IOLayerBase::Data_Eight );
00095 }
00096
00097 if ( sbits == 2) {
00098 m_base->setStop( IOLayerBase::Stop_Two );
00099 } else if ( sbits == 15 ) {
00100 m_base->setStop( IOLayerBase::Stop_OnePointFive );
00101 } else {
00102 m_base->setStop( IOLayerBase::Stop_One );
00103 }
00104
00105 if ( prof.readEntry("Device").isEmpty() ) return;
00106 ComboboxHelper::setCurrent( prof.readEntry("Device"), m_deviceCmb );
00107
00108 }
00109
00110
00111
00112
00113
00114 void SerialConfigWidget::save( Profile& prof ) {
00115 int flow, parity, speed, data, stop;
00116 flow = parity = speed = data = stop = 0;
00117 prof.writeEntry("Device", m_deviceCmb->currentText() );
00118
00119 switch( m_base->flow() ) {
00120 case IOLayerBase::None:
00121 flow = 0;
00122 break;
00123 case IOLayerBase::Software:
00124 flow = 2;
00125 break;
00126 case IOLayerBase::Hardware:
00127 flow = 1;
00128 break;
00129 }
00130
00131 switch( m_base->parity() ) {
00132 case IOLayerBase::Odd:
00133 parity = 2;
00134 break;
00135 case IOLayerBase::Even:
00136 parity = 1;
00137 break;
00138 case IOLayerBase::NonePar:
00139 parity = 0;
00140 break;
00141 }
00142
00143 switch( m_base->speed() ) {
00144 case IOLayerBase::Baud_115200:
00145 speed = 115200;
00146 break;
00147 case IOLayerBase::Baud_57600:
00148 speed = 57600;
00149 break;
00150 case IOLayerBase::Baud_38400:
00151 speed = 38400;
00152 break;
00153 case IOLayerBase::Baud_19200:
00154 speed = 19200;
00155 break;
00156 case IOLayerBase::Baud_4800:
00157 speed = 4800;
00158 break;
00159 case IOLayerBase::Baud_2400:
00160 speed = 2400;
00161 break;
00162 case IOLayerBase::Baud_1200:
00163 speed = 1200;
00164 break;
00165 default:
00166 case IOLayerBase::Baud_9600:
00167 speed = 9600;
00168 break;
00169 }
00170
00171 switch( m_base->data() ) {
00172 case IOLayerBase::Data_Five:
00173 data = 5;
00174 break;
00175 case IOLayerBase::Data_Six:
00176 data = 6;
00177 break;
00178 case IOLayerBase::Data_Seven:
00179 data = 7;
00180 break;
00181 case IOLayerBase::Data_Eight:
00182 data = 8;
00183 break;
00184 }
00185
00186 switch( m_base->stop() ) {
00187 case IOLayerBase::Stop_One:
00188 stop = 1;
00189 break;
00190 case IOLayerBase::Stop_OnePointFive:
00191 stop = 15;
00192 break;
00193 case IOLayerBase::Stop_Two:
00194 stop = 2;
00195 break;
00196 }
00197
00198 prof.writeEntry("Flow", flow);
00199 prof.writeEntry("Parity", parity);
00200 prof.writeEntry("Speed", speed);
00201 prof.writeEntry("DataBits", data);
00202 prof.writeEntry("StopBits", stop);
00203 }