summaryrefslogtreecommitdiff
Unidiff
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
@@ -268,50 +268,51 @@ QString OPcmciaSocket::identity() const
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;
@@ -327,46 +328,52 @@ bool OPcmciaSocket::suspend()
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
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
@@ -179,27 +179,31 @@ class OPcmciaSocket : public QObject
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();