File indexing completed on 2024-06-16 11:34:37

0001 /***************************************************************************
0002  *   Copyright (C) 2003 by David Saxton                                    *
0003  *   david@bluehaze.org                                                    *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  ***************************************************************************/
0010 
0011 #include "micropackage.h"
0012 
0013 #include <ktechlab_debug.h>
0014 
0015 PicPin::PicPin()
0016 {
0017     pinID = QString::fromLatin1("INVALID");
0018     type = PicPin::type_bidir;
0019     portName = QString::fromLatin1("INVALID");
0020     portPosition = -1;
0021 }
0022 
0023 PicPin::PicPin(const QString &_pinID, PicPin::pin_type _type, const QString &_portName, int _portPosition)
0024 {
0025     pinID = _pinID;
0026     type = _type;
0027     portName = _portName;
0028     portPosition = _portPosition;
0029 }
0030 
0031 MicroPackage::MicroPackage(const int pinCount)
0032 {
0033     m_numPins = pinCount;
0034 }
0035 
0036 MicroPackage::~MicroPackage()
0037 {
0038 }
0039 
0040 void MicroPackage::assignPin(int pinPosition, PicPin::pin_type type, const QString &pinID, const QString &portName, int portPosition)
0041 {
0042     if (m_picPinMap.find(pinPosition) != m_picPinMap.end()) {
0043         qCCritical(KTL_LOG) << "PicDevice::assignBidirPin: Attempting to reset pin " << pinPosition;
0044         return;
0045     }
0046     if (!m_portNames.contains(portName) && !portName.isEmpty()) {
0047         m_portNames.append(portName);
0048         m_portNames.sort();
0049     }
0050 
0051     m_picPinMap[pinPosition] = PicPin(pinID, type, portName, portPosition);
0052 }
0053 
0054 PicPinMap MicroPackage::pins(uint pinType, const QString &portName)
0055 {
0056     if (pinType == 0)
0057         pinType = (1 << 30) - 1;
0058 
0059     PicPinMap list;
0060 
0061     const PicPinMap::iterator picPinListEnd = m_picPinMap.end();
0062     for (PicPinMap::iterator it = m_picPinMap.begin(); it != picPinListEnd; ++it) {
0063         if ((it.value().type & pinType) && (portName.isEmpty() || it.value().portName == portName)) {
0064             list[it.key()] = it.value();
0065         }
0066     }
0067 
0068     return list;
0069 }
0070 
0071 QStringList MicroPackage::pinIDs(uint pinType, const QString &portName)
0072 {
0073     if (pinType == 0)
0074         pinType = (1 << 30) - 1;
0075     QStringList list;
0076 
0077     const PicPinMap::iterator picPinListEnd = m_picPinMap.end();
0078     for (PicPinMap::iterator it = m_picPinMap.begin(); it != picPinListEnd; ++it) {
0079         if ((it.value().type & pinType) && (portName.isEmpty() || it.value().portName == portName)) {
0080             list.append(it.value().pinID);
0081         }
0082     }
0083 
0084     return list;
0085 }
0086 
0087 int MicroPackage::pinCount(uint pinType, const QString &portName)
0088 {
0089     if (pinType == 0)
0090         pinType = (1 << 30) - 1;
0091     int count = 0;
0092 
0093     const PicPinMap::iterator picPinListEnd = m_picPinMap.end();
0094     for (PicPinMap::iterator it = m_picPinMap.begin(); it != picPinListEnd; ++it) {
0095         if ((it.value().type & pinType) && (portName.isEmpty() || it.value().portName == portName))
0096             count++;
0097     }
0098 
0099     return count;
0100 }