summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-06-25 15:29:59 (UTC)
committer mickeyl <mickeyl>2005-06-25 15:29:59 (UTC)
commit790aeb8898d635468c2b9e24fd16a70aab64b1dd (patch) (unidiff)
tree72139f02106b88325efbb39fc11f5ccd79ce29fb
parent3d434ac35915afe7f7035468ca18656264a91c52 (diff)
downloadopie-790aeb8898d635468c2b9e24fd16a70aab64b1dd.zip
opie-790aeb8898d635468c2b9e24fd16a70aab64b1dd.tar.gz
opie-790aeb8898d635468c2b9e24fd16a70aab64b1dd.tar.bz2
- fix logic in isEmpty() and isSuspended()
- add convenience API productIdentityVendor()
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/linux/opcmciasystem.cpp13
-rw-r--r--libopie2/opiecore/linux/opcmciasystem.h8
2 files changed, 16 insertions, 5 deletions
diff --git a/libopie2/opiecore/linux/opcmciasystem.cpp b/libopie2/opiecore/linux/opcmciasystem.cpp
index a5725f1..21c5a84 100644
--- a/libopie2/opiecore/linux/opcmciasystem.cpp
+++ b/libopie2/opiecore/linux/opcmciasystem.cpp
@@ -256,129 +256,136 @@ OPcmciaSocket::~OPcmciaSocket()
256 return true; 256 return true;
257} 257}
258 258
259 259
260int OPcmciaSocket::number() const 260int OPcmciaSocket::number() const
261{ 261{
262 return _socket; 262 return _socket;
263} 263}
264 264
265 265
266QString OPcmciaSocket::identity() const 266QString OPcmciaSocket::identity() const
267{ 267{
268 return ( strcmp( name(), "empty" ) == 0 ) ? "<Empty Socket>" : name(); 268 return ( strcmp( name(), "empty" ) == 0 ) ? "<Empty Socket>" : name();
269} 269}
270 270
271 271
272const OPcmciaSocket::OPcmciaSocketCardStatus OPcmciaSocket::status() const 272const OPcmciaSocket::OPcmciaSocketCardStatus OPcmciaSocket::status() const
273{ 273{
274 cs_status_t cs_status; 274 cs_status_t cs_status;
275 cs_status.Function = 0; 275 cs_status.Function = 0;
276 int result = ::ioctl( _fd, DS_GET_STATUS, &cs_status ); 276 int result = ::ioctl( _fd, DS_GET_STATUS, &cs_status );
277 if ( result != 0 ) 277 if ( result != 0 )
278 { 278 {
279 qWarning( "OPcmciaSocket::status() - DS_GET_STATUS failed (%s)", strerror( errno ) ); 279 qWarning( "OPcmciaSocket::status() - DS_GET_STATUS failed (%s)", strerror( errno ) );
280 // return ( errno == -ENODEV ) ? Empty : Unknown;
280 return Unknown; 281 return Unknown;
281 } 282 }
282 else 283 else
283 { 284 {
284 qDebug( " card status = 0x%08x", cs_status.CardState ); 285 qDebug( " card status = 0x%08x", cs_status.CardState );
285 qDebug( " socket status = 0x%08x", cs_status.SocketState ); 286 qDebug( " socket status = 0x%08x", cs_status.SocketState );
286 return (OPcmciaSocket::OPcmciaSocketCardStatus) (cs_status.CardState + cs_status.SocketState); 287 return (OPcmciaSocket::OPcmciaSocketCardStatus) (cs_status.CardState + cs_status.SocketState);
287 } 288 }
288} 289}
289 290
290 291
291bool OPcmciaSocket::isUnsupported() const 292bool OPcmciaSocket::isUnsupported() const
292{ 293{
293 return ( strcmp( name(), "unsupported card" ) == 0 ); 294 return ( strcmp( name(), "unsupported card" ) == 0 );
294} 295}
295 296
296 297
297bool OPcmciaSocket::isEmpty() const 298bool OPcmciaSocket::isEmpty() const
298{ 299{
299 return ! status() && ( Occupied || OccupiedCardBus ); 300 return !(status() & ( Occupied | OccupiedCardBus ));
300} 301}
301 302
302 303
303bool OPcmciaSocket::isSuspended() const 304bool OPcmciaSocket::isSuspended() const
304{ 305{
305 return status() && Suspended; 306 return status() & Suspended;
306} 307}
307 308
308 309
309bool OPcmciaSocket::eject() 310bool OPcmciaSocket::eject()
310{ 311{
311 return ::ioctl( _fd, DS_EJECT_CARD ) != -1; 312 return ::ioctl( _fd, DS_EJECT_CARD ) != -1;
312} 313}
313 314
314 315
315bool OPcmciaSocket::insert() 316bool OPcmciaSocket::insert()
316{ 317{
317 return ::ioctl( _fd, DS_INSERT_CARD ) != -1; 318 return ::ioctl( _fd, DS_INSERT_CARD ) != -1;
318} 319}
319 320
320 321
321bool OPcmciaSocket::suspend() 322bool OPcmciaSocket::suspend()
322{ 323{
323 return ::ioctl( _fd, DS_SUSPEND_CARD ) != -1; 324 return ::ioctl( _fd, DS_SUSPEND_CARD ) != -1;
324} 325}
325 326
326 327
327bool OPcmciaSocket::resume() 328bool OPcmciaSocket::resume()
328{ 329{
329 return ::ioctl( _fd, DS_RESUME_CARD ) != -1; 330 return ::ioctl( _fd, DS_RESUME_CARD ) != -1;
330} 331}
331 332
332 333
333bool OPcmciaSocket::reset() 334bool OPcmciaSocket::reset()
334{ 335{
335 return ::ioctl( _fd, DS_RESET_CARD ) != -1; 336 return ::ioctl( _fd, DS_RESET_CARD ) != -1;
336} 337}
337 338
338 339
339QStringList OPcmciaSocket::productIdentity() const 340QStringList OPcmciaSocket::productIdentityVector() const
340{ 341{
341 QStringList list; 342 QStringList list;
342 cistpl_vers_1_t *vers = &_ioctlarg.tuple_parse.parse.version_1; 343 cistpl_vers_1_t *vers = &_ioctlarg.tuple_parse.parse.version_1;
343 vers->ns = 0; // number of strings 344 vers->ns = 0; // number of strings
344 if ( getTuple( CISTPL_VERS_1 ) ) 345 if ( getTuple( CISTPL_VERS_1 ) )
345 { 346 {
346 qDebug( " NUMBER_OF_PRODIDs = %d", vers->ns ); 347 qDebug( " NUMBER_OF_PRODIDs = %d", vers->ns );
347 for ( int i = 0; i < QMIN( CISTPL_VERS_1_MAX_PROD_STRINGS, vers->ns ); ++i ) 348 for ( int i = 0; i < QMIN( CISTPL_VERS_1_MAX_PROD_STRINGS, vers->ns ); ++i )
348 { 349 {
349 qDebug( " PRODID = '%s'", vers->str+vers->ofs[i] ); 350 qDebug( " PRODID = '%s'", vers->str+vers->ofs[i] );
350 list += vers->str+vers->ofs[i]; 351 list += vers->str+vers->ofs[i];
351 } 352 }
352 } 353 }
353 else 354 else
354 { 355 {
355 list += "<unknown>"; 356 list += "<unknown>";
356 } 357 }
357 return list; 358 return list;
358} 359}
359 360
360 361
362QString OPcmciaSocket::productIdentity() const
363{
364 return productIdentityVector().join( " " ).stripWhiteSpace();
365}
366
367
361QString OPcmciaSocket::manufacturerIdentity() const 368QString OPcmciaSocket::manufacturerIdentity() const
362{ 369{
363 cistpl_manfid_t *manfid = &_ioctlarg.tuple_parse.parse.manfid; 370 cistpl_manfid_t *manfid = &_ioctlarg.tuple_parse.parse.manfid;
364 if ( getTuple( CISTPL_MANFID ) ) 371 if ( getTuple( CISTPL_MANFID ) )
365 { 372 {
366 return QString().sprintf( "0x%04x, 0x%04x", manfid->manf, manfid->card ); 373 return QString().sprintf( "0x%04x, 0x%04x", manfid->manf, manfid->card );
367 } 374 }
368 else 375 else
369 return "<unknown>"; 376 return "<unknown>";
370} 377}
371 378
372 379
373QString OPcmciaSocket::function() const 380QString OPcmciaSocket::function() const
374{ 381{
375 cistpl_funcid_t *funcid = &_ioctlarg.tuple_parse.parse.funcid; 382 cistpl_funcid_t *funcid = &_ioctlarg.tuple_parse.parse.funcid;
376 if ( getTuple( CISTPL_FUNCID ) ) 383 if ( getTuple( CISTPL_FUNCID ) )
377 { 384 {
378 switch ( funcid->func ) 385 switch ( funcid->func )
379 { 386 {
380 case 0: return "Multifunction"; break; 387 case 0: return "Multifunction"; break;
381 case 1: return "Memory"; break; 388 case 1: return "Memory"; break;
382 case 2: return "Serial"; break; 389 case 2: return "Serial"; break;
383 case 3: return "Parallel"; break; 390 case 3: return "Parallel"; break;
384 case 4: return "Fixed Disk"; break; 391 case 4: return "Fixed Disk"; break;
diff --git a/libopie2/opiecore/linux/opcmciasystem.h b/libopie2/opiecore/linux/opcmciasystem.h
index 0fd43cf..23d8c41 100644
--- a/libopie2/opiecore/linux/opcmciasystem.h
+++ b/libopie2/opiecore/linux/opcmciasystem.h
@@ -167,51 +167,55 @@ class OPcmciaSocket : public QObject
167 * @note: This operation needs root privileges 167 * @note: This operation needs root privileges
168 */ 168 */
169 bool eject(); 169 bool eject();
170 /** 170 /**
171 * Insert card. @returns true, if operation succeeded 171 * Insert card. @returns true, if operation succeeded
172 * @note: This operation needs root privileges 172 * @note: This operation needs root privileges
173 */ 173 */
174 bool insert(); 174 bool insert();
175 /** 175 /**
176 * Suspend card. @returns true, if operation succeeded 176 * Suspend card. @returns true, if operation succeeded
177 * @note: This operation needs root privileges 177 * @note: This operation needs root privileges
178 */ 178 */
179 bool suspend(); 179 bool suspend();
180 /** 180 /**
181 * Resume card. @returns true, if operation succeeded 181 * Resume card. @returns true, if operation succeeded
182 * @note: This operation needs root privileges 182 * @note: This operation needs root privileges
183 */ 183 */
184 bool resume(); 184 bool resume();
185 /** 185 /**
186 * Reset card. @returns true, if operation succeeded 186 * Reset card. @returns true, if operation succeeded
187 * @note: This operation needs root privileges 187 * @note: This operation needs root privileges
188 */ 188 */
189 bool reset(); 189 bool reset();
190 /** 190 /**
191 * @returns a list of product IDs 191 * @returns the product ID vector
192 */
193 QStringList productIdentityVector() const;
194 /**
195 * @returns the product ID string
192 */ 196 */
193 QStringList productIdentity() const; 197 QString productIdentity() const;
194 /** 198 /**
195 * @returns the manufacturer ID string 199 * @returns the manufacturer ID string
196 */ 200 */
197 QString manufacturerIdentity() const; 201 QString manufacturerIdentity() const;
198 /** 202 /**
199 * @returns the function string 203 * @returns the function string
200 */ 204 */
201 QString function() const; 205 QString function() const;
202 206
203 private: 207 private:
204 void init(); 208 void init();
205 void cleanup(); 209 void cleanup();
206 bool getTuple( cisdata_t tuple ) const; 210 bool getTuple( cisdata_t tuple ) const;
207 int _major; 211 int _major;
208 int _socket; 212 int _socket;
209 int _fd; 213 int _fd;
210 mutable ds_ioctl_arg_t _ioctlarg; 214 mutable ds_ioctl_arg_t _ioctlarg;
211 215
212 private: 216 private:
213 class Private; 217 class Private;
214 Private *d; 218 Private *d;
215}; 219};
216 220
217 221