00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <m9803r.h>
00021
00022 #include <iostream>
00023
00024 M9803R::M9803R() :
00025 DMMClass()
00026 {
00027 }
00028
00029 M9803R::~M9803R()
00030 {
00031 m_port.close();
00032 }
00033
00034 Port::Error M9803R::open_impl( const std::string & config )
00035 {
00036 return m_port.open( config );
00037 }
00038
00039 Port::Error M9803R::close()
00040 {
00041 return m_port.close();
00042 }
00043
00044 void M9803R::run()
00045 {
00046 char data[64];
00047
00048 while (m_run)
00049 {
00050 int cnt = readData( &m_port, (unsigned char *)data,
00051 0x0a, 11, 3*11 );
00052
00053 if (-1 != cnt)
00054 {
00055 char *byte = data+cnt-11;
00056
00057 m_mutex.lock();
00058
00059 if (byte[0] & 0x01) m_overflow = true;
00060 else m_overflow = false;
00061
00062
00063 std::string digits;
00064
00065 if (byte[0] & 0x08) digits = "-";
00066
00067 digits += (char)('0'+byte[4]);
00068 digits += (char)('0'+byte[3]);
00069 digits += (char)('0'+byte[2]);
00070 digits += (char)('0'+byte[1]);
00071
00072 double d_val;
00073 Util::fromString( &d_val, digits );
00074
00075
00076 switch (byte[5])
00077 {
00078 case 0x00:
00079 m_mode[0] = "DC";
00080 switch (byte[6])
00081 {
00082 case 0x00:
00083 m_unit[0] = "mV";
00084 d_val /= 10.0;
00085 break;
00086 case 0x01:
00087 m_unit[0] = "V";
00088 d_val /= 1000.0;
00089 break;
00090 case 0x02:
00091 m_unit[0] = "V";
00092 d_val /= 100.0;
00093 break;
00094 case 0x03:
00095 m_unit[0] = "V";
00096 d_val /= 10.0;
00097 break;
00098 case 0x04:
00099 m_unit[0] = "V";
00100 break;
00101 }
00102 break;
00103 case 0x01:
00104 m_mode[0] = "AC";
00105 switch (byte[6])
00106 {
00107 case 0x00:
00108 m_unit[0] = "mV";
00109 d_val /= 10.0;
00110 break;
00111 case 0x01:
00112 m_unit[0] = "V";
00113 d_val /= 1000.0;
00114 break;
00115 case 0x02:
00116 m_unit[0] = "V";
00117 d_val /= 100.0;
00118 break;
00119 case 0x03:
00120 m_unit[0] = "V";
00121 d_val /= 10.0;
00122 break;
00123 case 0x04:
00124 m_unit[0] = "V";
00125 break;
00126 }
00127 break;
00128 case 0x02:
00129 m_mode[0] = "DC";
00130 switch (byte[6])
00131 {
00132 case 0x00:
00133 m_unit[0] = "mA";
00134 d_val /= 1000.0;
00135 break;
00136 case 0x01:
00137 m_unit[0] = "mA";
00138 d_val /= 100.0;
00139 break;
00140 case 0x02:
00141 m_unit[0] = "mA";
00142 d_val /= 10.0;
00143 break;
00144 }
00145 break;
00146 case 0x03:
00147 m_mode[0] = "AC";
00148 switch (byte[6])
00149 {
00150 case 0x00:
00151 m_unit[0] = "mA";
00152 d_val /= 1000.0;
00153 break;
00154 case 0x01:
00155 m_unit[0] = "mA";
00156 d_val /= 100.0;
00157 break;
00158 case 0x02:
00159 m_unit[0] = "mA";
00160 d_val /= 10.0;
00161 break;
00162 }
00163 break;
00164 case 0x04:
00165 m_mode[0] = "OH";
00166 switch (byte[6])
00167 {
00168 case 0x00:
00169 m_unit[0] = "Ohm";
00170 d_val /= 10.0;
00171 break;
00172 case 0x01:
00173 m_unit[0] = "kOhm";
00174 d_val /= 1000.0;
00175 break;
00176 case 0x02:
00177 m_unit[0] = "kOhm";
00178 d_val /= 100.0;
00179 break;
00180 case 0x03:
00181 m_unit[0] = "kOhm";
00182 d_val /= 10.0;
00183 break;
00184 case 0x04:
00185 m_unit[0] = "kOhm";
00186 break;
00187 case 0x05:
00188 m_unit[0] = "MOhm";
00189 d_val /= 100.0;
00190 break;
00191 }
00192 break;
00193 case 0x05:
00194 m_mode[0] = "OH";
00195 switch (byte[6])
00196 {
00197 case 0x00:
00198 m_unit[0] = "Ohm";
00199 d_val /= 10.0;
00200 break;
00201 }
00202 break;
00203 case 0x06:
00204 m_mode[0] = "DI";
00205 m_unit[0] = "V";
00206 d_val /= 1000.0;
00207 break;
00208 case 0x08:
00209 m_mode[0] = "DC";
00210 m_unit[0] = "A";
00211 d_val /= 100.0;
00212 break;
00213 case 0x09:
00214 m_mode[0] = "AC";
00215 m_unit[0] = "A";
00216 d_val /= 100.0;
00217 break;
00218 case 0x0A:
00219 m_mode[0] = "FR";
00220 switch (byte[6])
00221 {
00222 case 0x00:
00223 m_unit[0] = "kHz";
00224 d_val /= 1000.0;
00225 break;
00226 case 0x01:
00227 m_unit[0] = "kHz";
00228 d_val *= 10.0;
00229 break;
00230 case 0x05:
00231 m_unit[0] = "Hz";
00232 d_val /= 100.0;
00233 break;
00234 case 0x06:
00235 m_unit[0] = "Hz";
00236 d_val /= 10.0;
00237 break;
00238 }
00239 break;
00240 case 0x0C:
00241 m_mode[0] = "CA";
00242 switch (byte[6])
00243 {
00244 case 0x00:
00245 m_unit[0] = "nF";
00246 d_val /= 1000.0;
00247 break;
00248 case 0x01:
00249 m_unit[0] = "nF";
00250 d_val /= 100.0;
00251 break;
00252 case 0x02:
00253 m_unit[0] = "nF";
00254 d_val /= 10.0;
00255 break;
00256 case 0x03:
00257 m_unit[0] = "uF";
00258 d_val /= 1000.0;
00259 break;
00260 case 0x04:
00261 m_unit[0] = "uF";
00262 d_val /= 100.0;
00263 break;
00264 }
00265 break;
00266 }
00267
00268 addValue( d_val, 0 );
00269
00270 m_hasValue = true;
00271 m_mutex.unlock();
00272 }
00273 else m_hasValue = false;
00274 }
00275 }