reference = _reference;\r
\r
name = reference->getName();\r
- width = reference->getWidth();\r
+ type = reference->getType();\r
+ endianess = reference->getEndianess();\r
+ width = reference->getWidthString();\r
direction = reference->getDirection();\r
purpose = reference->getPurpose(); \r
connectedFrom = NULL; \r
int id = getInterfaceMultiplicity();\r
if (id < 0) return NULL;\r
FunctionalInterface *inter = new FunctionalInterface(owner, reference);\r
- inter->setWidth(width);\r
- inter->setDirection(direction);\r
- inter->setPurpose(purpose); \r
- inter->connectFrom(NULL);\r
+ inter->setWidth(width); \r
inter->setName(reference->getName()+"_"+QString::number(id+1));\r
return inter;\r
}\r
2 - iface is owned by the parent group of the block that owns this\r
2.1 - this is an output, iface is an output of the group\r
2.2 - both are inout\r
+ 3 - this is owned by a source block and iface is owned by the top group\r
\r
*/\r
if (direction == Input) return false;\r
if (iface->isReferenceInterface()) return false;\r
- if (iface->getConnectedFrom() != NULL) return false;\r
-\r
+ ConnectedInterface* connIface = AI_TO_CON(iface);\r
+ if (connIface->getConnectedFrom() != NULL) return false;\r
+ // first case: interface of blocks within the same group\r
if (getOwner()->getParent() == iface->getOwner()->getParent()) {\r
\r
if ((direction == Output) && (iface->getDirection() == Input)) return true;\r
if ((direction == InOut) && (iface->getDirection() == InOut)) return true;\r
}\r
+ // second case: iface = interface of the group that contains owner of this\r
else if (getOwner()->getParent() == iface->getOwner()) {\r
if ((direction == Output) && (iface->getDirection() == Output)) return true;\r
if ((direction == InOut) && (iface->getDirection() == InOut)) return true;\r
}\r
+ else if ((getOwner()->isSourceBlock()) && (iface->getOwner()->isTopGroupBlock())) {\r
+ if ((direction == Output) && (iface->getDirection() == Input)) return true;\r
+ }\r
\r
return false;\r
\r