summaryrefslogtreecommitdiff
Side-by-side diff
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
@@ -232,165 +232,172 @@ OPcmciaSocket::~OPcmciaSocket()
_ioctlarg.tuple.TupleOffset = 0;
int result;
result = ::ioctl(_fd, DS_GET_FIRST_TUPLE, &_ioctlarg);
if ( result != 0 )
{
qWarning( "OPcmciaSocket::getTuple() - DS_GET_FIRST_TUPLE failed (%s)", strerror( errno ) );
return false;
}
result = ::ioctl(_fd, DS_GET_TUPLE_DATA, &_ioctlarg);
if ( result != 0 )
{
qWarning( "OPcmciaSocket::getTuple() - DS_GET_TUPLE_DATA failed (%s)", strerror( errno ) );
return false;
}
result = ::ioctl( _fd, DS_PARSE_TUPLE, &_ioctlarg );
if ( result != 0 )
{
qWarning( "OPcmciaSocket::getTuple() - DS_PARSE_TUPLE failed (%s)", strerror( errno ) );
return false;
}
return true;
}
int OPcmciaSocket::number() const
{
return _socket;
}
QString OPcmciaSocket::identity() const
{
return ( strcmp( name(), "empty" ) == 0 ) ? "<Empty Socket>" : name();
}
const OPcmciaSocket::OPcmciaSocketCardStatus OPcmciaSocket::status() const
{
cs_status_t cs_status;
cs_status.Function = 0;
int result = ::ioctl( _fd, DS_GET_STATUS, &cs_status );
if ( result != 0 )
{
qWarning( "OPcmciaSocket::status() - DS_GET_STATUS failed (%s)", strerror( errno ) );
+ // return ( errno == -ENODEV ) ? Empty : Unknown;
return Unknown;
}
else
{
qDebug( " card status = 0x%08x", cs_status.CardState );
qDebug( " socket status = 0x%08x", cs_status.SocketState );
return (OPcmciaSocket::OPcmciaSocketCardStatus) (cs_status.CardState + cs_status.SocketState);
}
}
bool OPcmciaSocket::isUnsupported() const
{
return ( strcmp( name(), "unsupported card" ) == 0 );
}
bool OPcmciaSocket::isEmpty() const
{
- return ! status() && ( Occupied || OccupiedCardBus );
+ return !(status() & ( Occupied | OccupiedCardBus ));
}
bool OPcmciaSocket::isSuspended() const
{
- return status() && Suspended;
+ return status() & Suspended;
}
bool OPcmciaSocket::eject()
{
return ::ioctl( _fd, DS_EJECT_CARD ) != -1;
}
bool OPcmciaSocket::insert()
{
return ::ioctl( _fd, DS_INSERT_CARD ) != -1;
}
bool OPcmciaSocket::suspend()
{
return ::ioctl( _fd, DS_SUSPEND_CARD ) != -1;
}
bool OPcmciaSocket::resume()
{
return ::ioctl( _fd, DS_RESUME_CARD ) != -1;
}
bool OPcmciaSocket::reset()
{
return ::ioctl( _fd, DS_RESET_CARD ) != -1;
}
-QStringList OPcmciaSocket::productIdentity() const
+QStringList OPcmciaSocket::productIdentityVector() const
{
QStringList list;
cistpl_vers_1_t *vers = &_ioctlarg.tuple_parse.parse.version_1;
vers->ns = 0; // number of strings
if ( getTuple( CISTPL_VERS_1 ) )
{
qDebug( " NUMBER_OF_PRODIDs = %d", vers->ns );
for ( int i = 0; i < QMIN( CISTPL_VERS_1_MAX_PROD_STRINGS, vers->ns ); ++i )
{
qDebug( " PRODID = '%s'", vers->str+vers->ofs[i] );
list += vers->str+vers->ofs[i];
}
}
else
{
list += "<unknown>";
}
return list;
}
+QString OPcmciaSocket::productIdentity() const
+{
+ return productIdentityVector().join( " " ).stripWhiteSpace();
+}
+
+
QString OPcmciaSocket::manufacturerIdentity() const
{
cistpl_manfid_t *manfid = &_ioctlarg.tuple_parse.parse.manfid;
if ( getTuple( CISTPL_MANFID ) )
{
return QString().sprintf( "0x%04x, 0x%04x", manfid->manf, manfid->card );
}
else
return "<unknown>";
}
QString OPcmciaSocket::function() const
{
cistpl_funcid_t *funcid = &_ioctlarg.tuple_parse.parse.funcid;
if ( getTuple( CISTPL_FUNCID ) )
{
switch ( funcid->func )
{
case 0: return "Multifunction"; break;
case 1: return "Memory"; break;
case 2: return "Serial"; break;
case 3: return "Parallel"; break;
case 4: return "Fixed Disk"; break;
case 5: return "Video"; break;
case 6: return "Network"; break;
case 7: return "AIMS"; break;
case 8: return "SCSI"; break;
default: return "<unknown>"; break;
}
}
else
{
return "<unknown>";
}
}
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
@@ -143,79 +143,83 @@ class OPcmciaSocket : public QObject
*/
int number() const;
/**
* @returns the card managers idea of the cards' identy, or "<Empty Socket>"
*/
QString identity() const;
/**
* @returns the socket status
*/
const OPcmciaSocketCardStatus status() const;
/**
* @returns true, if the card is unsupported by the cardmgr
*/
bool isUnsupported() const;
/**
* @returns true, if the socket is empty
*/
bool isEmpty() const;
/**
* @returns true, if the socket is suspended
*/
bool isSuspended() const;
/**
* Eject card. @returns true, if operation succeeded
* @note: This operation needs root privileges
*/
bool eject();
/**
* Insert card. @returns true, if operation succeeded
* @note: This operation needs root privileges
*/
bool insert();
/**
* Suspend card. @returns true, if operation succeeded
* @note: This operation needs root privileges
*/
bool suspend();
/**
* Resume card. @returns true, if operation succeeded
* @note: This operation needs root privileges
*/
bool resume();
/**
* Reset card. @returns true, if operation succeeded
* @note: This operation needs root privileges
*/
bool reset();
/**
- * @returns a list of product IDs
+ * @returns the product ID vector
+ */
+ QStringList productIdentityVector() const;
+ /**
+ * @returns the product ID string
*/
- QStringList productIdentity() const;
+ QString productIdentity() const;
/**
* @returns the manufacturer ID string
*/
QString manufacturerIdentity() const;
/**
* @returns the function string
*/
QString function() const;
private:
void init();
void cleanup();
bool getTuple( cisdata_t tuple ) const;
int _major;
int _socket;
int _fd;
mutable ds_ioctl_arg_t _ioctlarg;
private:
class Private;
Private *d;
};
}
}
#endif // OPCMCIASYSTEM_H