00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "init.h"
00022
00023 namespace SaX {
00024
00025
00026
00027 SaXInit::SaXInit ( QList<const char*> opt ) {
00028
00033
00034 mOptions.append ((const char*)"--quiet");
00035 mOptions.append ((const char*)"no");
00036 const char* it;
00037 foreach (it,opt) {
00038 mOptions.append ( it );
00039 }
00040 }
00041
00042
00043
00044
00045 SaXInit::SaXInit ( void ) {
00046
00050
00051 mOptions.append ((const char*)"--quiet");
00052 mOptions.append ((const char*)"no");
00053 }
00054
00055
00056
00057
00058 bool SaXInit::needInit (void) {
00059
00063
00064 if (! setLock()) {
00065 return false;
00066 }
00067 QFileInfo info (CACHE_CONFIG);
00068 if (! info.exists()) {
00069 unsetLock();
00070 return true;
00071 }
00072 unsetLock();
00073 return false;
00074 }
00075
00076
00077
00078
00079 void SaXInit::ignoreProfile (void) {
00080
00084
00085 mOptions.append ((const char*)"-i");
00086 }
00087
00088
00089
00090
00091 void SaXInit::setValidBusID (void) {
00092
00096
00097 SaXProcessCall* proc = new SaXProcessCall ();
00098 QString sysp = "/usr/sbin/sysp -c | wc -l";
00099 proc -> addArgument ( GET_BASH );
00100 proc -> addArgument ( "-c" );
00101 proc -> addArgument ( sysp.ascii() );
00102 if ( ! proc -> start() ) {
00103 excProcessFailed();
00104 qError (errorString(),EXC_PROCESSFAILED);
00105 return;
00106 }
00107 QString optc;
00108 QString data = proc->readStdout().at(0);
00109 int count = data.toInt();
00110 if (count < 2) {
00111 mOptions.append ((const char*)"-b");
00112 mOptions.append ((const char*)"nobus");
00113 }
00114 }
00115
00116
00117
00118
00119 void SaXInit::setPrimaryChip (void) {
00120
00125
00126 SaXProcessCall* proc = new SaXProcessCall ();
00127 proc -> addArgument ( GET_PRIMARY );
00128 if ( ! proc -> start() ) {
00129 excProcessFailed();
00130 qError (errorString(),EXC_PROCESSFAILED);
00131 return;
00132 }
00133 QString* optc = new QString;
00134 QString data = proc->readStdout().at(0);
00135 int id = data.toInt();
00136 QTextOStream (optc) << id;
00137 mOptions.append ((const char*)"-c");
00138 mOptions.append ((const char*)optc->ascii());
00139 setValidBusID();
00140 }
00141
00142
00143
00144
00145 void SaXInit::doInit (void) {
00146
00149
00150 if (! havePrivileges()) {
00151 excPermissionDenied();
00152 qError (errorString(),EXC_PERMISSIONDENIED);
00153 return;
00154 }
00155 if (setenv ("HW_UPDATE","1",1) != 0) {
00156 excInvalidArgument ( errno );
00157 qError (errorString(),EXC_INVALIDARGUMENT);
00158 return;
00159 }
00160 SaXProcessCall* proc = new SaXProcessCall ();
00161 proc -> addArgument ( SAX_INIT );
00162 const char* it;
00163 foreach (it,mOptions) {
00164 proc -> addArgument ( it );
00165 }
00166 if ( ! proc -> start() ) {
00167 excProcessFailed();
00168 qError (errorString(),EXC_PROCESSFAILED);
00169 return;
00170 }
00171 }
00172 }