kandy
atcommand.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "atcommand.h"
00026
00027 #include <kdebug.h>
00028 #include <klocale.h>
00029
00030 ATParameter::ATParameter()
00031 {
00032 mUserInput = false;
00033 }
00034
00035 ATParameter::ATParameter(const QString &value,const QString &name,
00036 bool userInput)
00037 {
00038 mName = name;
00039 mValue = value;
00040 mUserInput = userInput;
00041 }
00042
00043
00044 ATCommand::ATCommand()
00045 {
00046 mHexOutput = false;
00047
00048 construct();
00049 }
00050
00051 ATCommand::ATCommand(const QString &cmdString)
00052 {
00053 setCmdName(i18n("New Command"));
00054 setCmdString(cmdString);
00055 mHexOutput = false;
00056
00057 extractParameters();
00058
00059 construct();
00060 }
00061
00062 ATCommand::ATCommand(const QString &cmdName,const QString &cmdString,
00063 bool hexOutput)
00064 {
00065 setCmdName(cmdName);
00066 setCmdString(cmdString);
00067 mHexOutput = hexOutput;
00068
00069 construct();
00070 }
00071
00072 void ATCommand::construct()
00073 {
00074 mAutoDelete = false;
00075 mResultFieldsList.setAutoDelete(true);
00076 mParameters.setAutoDelete(true);
00077 }
00078
00079 ATCommand::~ATCommand()
00080 {
00081
00082 }
00083
00084
00085 void ATCommand::setCmdName(const QString &cmdName)
00086 {
00087 mCmdName = cmdName;
00088 }
00089
00090 QString ATCommand::cmdName()
00091 {
00092 return mCmdName;
00093 }
00094
00095
00096 void ATCommand::setCmdString(const QString &cmdString)
00097 {
00098 mCmdString = cmdString;
00099
00100 mId = cmdString;
00101 if (mId.startsWith("at")) mId = mId.mid(2);
00102 else mCmdString.prepend("at");
00103
00104
00105 }
00106
00107 QString ATCommand::cmdString()
00108 {
00109 return mCmdString;
00110 }
00111
00112 QString ATCommand::cmd()
00113 {
00114 if (mParameters.count() > 0) {
00115 QString cmd = cmdString().left(cmdString().find("=") + 1);
00116
00117 for(uint i=0;i<mParameters.count();++i) {
00118 cmd += mParameters.at(i)->value();
00119 if (i < mParameters.count() - 1) cmd += ",";
00120 }
00121
00122 return cmd;
00123 } else {
00124 return cmdString();
00125 }
00126 }
00127
00128 QString ATCommand::id()
00129 {
00130 return mId;
00131 }
00132
00133 void ATCommand::setHexOutput(bool hexOutput)
00134 {
00135 mHexOutput = hexOutput;
00136 }
00137
00138 bool ATCommand::hexOutput()
00139 {
00140 return mHexOutput;
00141 }
00142
00143 void ATCommand::setResultString(const QString &resultString)
00144 {
00145 mResultString = resultString;
00146
00147 mResultFieldsList.clear();
00148
00149 QStringList resultFields = QStringList::split("\n",mResultString);
00150
00151 for(QStringList::Iterator it = resultFields.begin();
00152 it != resultFields.end(); ++it) {
00153 setResultFields(*it);
00154 }
00155 }
00156
00157
00158 void ATCommand::setResultFields( QString fieldsString )
00159 {
00160 QString id = mId.upper().left( mId.find( '=' ) );
00161
00162
00163
00164 if ( fieldsString.startsWith( id ) )
00165 fieldsString = fieldsString.mid( id.length() + 2 );
00166
00167
00168 if ( ( fieldsString[ 0 ] == '(' ) && ( fieldsString[ fieldsString.length() - 1 ] == ')' ) )
00169 fieldsString = fieldsString.mid( 1, fieldsString.length() - 2 );
00170
00171 QStringList *fields = new QStringList;
00172 QStringList TmpFields = QStringList::split( ',', fieldsString );
00173 QString TmpString = "";
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184 for ( QStringList::Iterator it = TmpFields.begin(); it != TmpFields.end(); it++ )
00185 {
00186
00187 if ( ( (*it)[ 0 ] == '\"' ) && ( (*it)[ (*it).length() - 1 ] != '\"' ) )
00188 TmpString = (*it).copy();
00189 else
00190
00191 if ( ( (*it)[ 0 ] != '\"' ) && ( (*it)[ (*it).length() - 1 ] == '\"' ) )
00192 {
00193 TmpString += "," + (*it).copy();
00194 (*fields).append( TmpString.copy() );
00195 TmpString = "";
00196 } else
00197
00198 if (TmpString.isEmpty())
00199 (*fields).append( *it );
00200 else
00201
00202 TmpString += "," + (*it).copy();
00203 }
00204
00205 mResultFieldsList.append( fields );
00206 }
00207
00208
00209 QString ATCommand::resultString()
00210 {
00211 return mResultString;
00212 }
00213
00214 QString ATCommand::resultField(int index)
00215 {
00216 if (mResultFieldsList.count() == 0) return "";
00217
00218 QStringList *resultFields = mResultFieldsList.at(0);
00219
00220 QStringList::Iterator it = resultFields->at(index);
00221 if (it == resultFields->end()) {
00222 kdDebug() << "ATCommand::resultField: index " << index << " out of range."
00223 << endl;
00224 return "";
00225 }
00226
00227 return *it;
00228 }
00229
00230
00231 QPtrList<QStringList> *ATCommand::resultFields()
00232 {
00233 return &mResultFieldsList;
00234 }
00235
00236 void ATCommand::addParameter(ATParameter *p)
00237 {
00238 mParameters.append(p);
00239 }
00240
00241 void ATCommand::clearParameters()
00242 {
00243 mParameters.clear();
00244 }
00245
00246 QPtrList<ATParameter> ATCommand::parameters()
00247 {
00248 return mParameters;
00249 }
00250
00251 void ATCommand::setParameter(int index,const QString &value)
00252 {
00253 if (mParameters.count() <= (unsigned int)index) {
00254 kdDebug() << "ATCommand " << cmdName() << " has no Parameter " << index
00255 << endl;
00256 return;
00257 }
00258
00259 mParameters.at(index)->setValue(value);
00260 }
00261
00262 void ATCommand::setParameter(int index,int value)
00263 {
00264 setParameter(index,QString::number(value));
00265 }
00266
00267 QString ATCommand::processOutput(const QString &output)
00268 {
00269 if (hexOutput()) {
00270 QString hexString = output.mid(output.find('\n')+1);
00271 int i=0;
00272 QString aChar = hexString.mid(i,2);
00273 QString result;
00274 while(!aChar.isEmpty()) {
00275 int charValue = aChar.toInt(0,16);
00276 QChar charEncoded(charValue);
00277
00278 result += charEncoded;
00279 i += 2;
00280 aChar = hexString.mid(i,2);
00281 }
00282 result += "\n";
00283 return result;
00284 } else {
00285 return output;
00286 }
00287 }
00288
00289 QString ATCommand::processOutput()
00290 {
00291 return processOutput(mResultString);
00292 }
00293
00294 void ATCommand::extractParameters()
00295 {
00296
00297
00298 int pos = cmdString().find("=");
00299 if (pos < 0) return;
00300
00301 QString paraString = cmdString().mid(pos+1);
00302
00303 QStringList paraList = QStringList::split(",",paraString);
00304
00305 QStringList::ConstIterator it = paraList.begin();
00306 QStringList::ConstIterator end = paraList.end();
00307 int argNum = 1;
00308 while(it != end) {
00309 addParameter(new ATParameter(*it,i18n("Arg %1").arg(QString::number(argNum++)),
00310 false));
00311 ++it;
00312 }
00313 }
|