diff options
Diffstat (limited to 'src/micro/micropackage.cpp')
-rw-r--r-- | src/micro/micropackage.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/src/micro/micropackage.cpp b/src/micro/micropackage.cpp new file mode 100644 index 0000000..9becbab --- /dev/null +++ b/src/micro/micropackage.cpp @@ -0,0 +1,109 @@ +/*************************************************************************** + * Copyright (C) 2003 by David Saxton * + * david@bluehaze.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ + +#include "micropackage.h" + +#include <kdebug.h> + +PicPin::PicPin() +{ + pinID = "INVALID"; + type = PicPin::type_bidir; + portName = "INVALID"; + portPosition = -1; +} + + +PicPin::PicPin( const QString &_pinID, PicPin::pin_type _type, const QString &_portName, int _portPosition ) +{ + pinID = _pinID; + type = _type; + portName = _portName; + portPosition = _portPosition; +} + +MicroPackage::MicroPackage( const int pinCount ) +{ + m_numPins = pinCount; +} + +MicroPackage::~MicroPackage() +{ +} + +void MicroPackage::assignPin( int pinPosition, PicPin::pin_type type, const QString& pinID, const QString& portName, int portPosition ) +{ + if ( m_picPinMap.find(pinPosition) != m_picPinMap.end() ) + { + kdError() << "PicDevice::assignBidirPin: Attempting to reset pin "<<pinPosition<<endl; + return; + } + if ( !m_portNames.contains(portName) && !portName.isEmpty() ) + { + m_portNames.append(portName); + m_portNames.sort(); + } + + m_picPinMap[pinPosition] = PicPin( pinID, type, portName, portPosition ); + +} + +PicPinMap MicroPackage::pins( uint pinType, const QString& portName ) +{ + if ( pinType == 0 ) pinType = (1<<30)-1; + + PicPinMap list; + + const PicPinMap::iterator picPinListEnd = m_picPinMap.end(); + for ( PicPinMap::iterator it = m_picPinMap.begin(); it != picPinListEnd; ++it ) + { + if ( (it.data().type & pinType) && + (portName.isEmpty() || it.data().portName == portName) ) + { + list[it.key()] = it.data(); + } + } + + return list; +} + +QStringList MicroPackage::pinIDs( uint pinType, const QString& portName ) +{ + if ( pinType == 0 ) pinType = (1<<30)-1; + QStringList list; + + const PicPinMap::iterator picPinListEnd = m_picPinMap.end(); + for ( PicPinMap::iterator it = m_picPinMap.begin(); it != picPinListEnd; ++it ) + { + if ( (it.data().type & pinType) && + (portName.isEmpty() || it.data().portName == portName) ) + { + list.append( it.data().pinID ); + } + } + + return list; +} + +int MicroPackage::pinCount( uint pinType, const QString& portName ) +{ + if ( pinType == 0 ) pinType = (1<<30)-1; + int count = 0; + + const PicPinMap::iterator picPinListEnd = m_picPinMap.end(); + for ( PicPinMap::iterator it = m_picPinMap.begin(); it != picPinListEnd; ++it ) + { + if ( (it.data().type & pinType) && + (portName.isEmpty() || it.data().portName == portName) ) count++; + } + + return count; +} + |