Commit aa9e61ed authored by charras's avatar charras
Browse files

Code cleanup about netlist, ERC and markers in eeschema ( work in progress )

parent a97a2b4b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
#include "appl_wxstruct.h"


#define BUILD_VERSION "(20090708-unstable)"
#define BUILD_VERSION "(20090712-unstable)"


#ifdef HAVE_SVN_VERSION
+1 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ set(EESCHEMA_SRCS
    class_libentry_fields.cpp
    class_library.cpp
    class_marker_sch.cpp
    class_netlist_object.cpp
    class_pin.cpp
    class_sch_cmp_field.cpp
    class_schematic_items.cpp
+0 −4
Original line number Diff line number Diff line
@@ -675,10 +675,6 @@ EDA_Rect EDA_LibComponentStruct::GetBoundaryBox( int Unit, int Convert )
        bBox.Merge( DrawEntry->GetBoundingBox() );
    }

    wxRect r = bBox;
    wxLogDebug( wxT( "New boundary box = (%d, %d, %d, %d)" ), r.GetLeft(),
                r.GetRight(), r.GetBottom(), r.GetTop() );

    return bBox;
}

+149 −0
Original line number Diff line number Diff line
/*************************************************************************************/
/* Class NETLIST_OBJECT to handle 1 item connected (in netlist and erc calculations) */
/*************************************************************************************/


#include "fctsys.h"
#include "common.h"
#include "program.h"
#include "libcmp.h"
#include "general.h"

#include "class_netlist_object.h"


#if defined(DEBUG)
#include <iostream>
const char* ShowType( NetObjetType aType )
{
    const char* ret;

    switch( aType )
    {
    case NET_SEGMENT:
        ret = "segment";            break;

    case NET_BUS:
        ret = "bus";                break;

    case NET_JONCTION:
        ret = "junction";           break;

    case NET_LABEL:
        ret = "label";              break;

    case NET_HIERLABEL:
        ret = "hierlabel";          break;

    case NET_GLOBLABEL:
        ret = "glabel";             break;

    case NET_BUSLABELMEMBER:
        ret = "buslblmember";       break;

    case NET_HIERBUSLABELMEMBER:
        ret = "hierbuslblmember";   break;

    case NET_GLOBBUSLABELMEMBER:
        ret = "gbuslblmember";      break;

    case NET_SHEETBUSLABELMEMBER:
        ret = "sbuslblmember";      break;

    case NET_SHEETLABEL:
        ret = "sheetlabel";         break;

    case NET_PINLABEL:
        ret = "pinlabel";           break;

    case NET_PIN:
        ret = "pin";                break;

    case NET_NOCONNECT:
        ret = "noconnect";          break;

    default:
        ret = "??";                 break;
    }

    return ret;
}


void NETLIST_OBJECT::Show( std::ostream& out, int ndx )
{
    wxString path = m_SheetList.PathHumanReadable();

    out << "<netItem ndx=\"" << ndx << '"' <<
    " type=\"" << ShowType( m_Type ) << '"' <<
    " netCode=\"" << GetNet() << '"' <<
    " sheet=\"" << CONV_TO_UTF8( path ) << '"' <<
    ">\n";

    out << " <start " << m_Start << "/> <end " << m_End << "/>\n";

    if( m_Label )
        out << " <label>" << m_Label->mb_str() << "</label>\n";

    if( m_Comp )
        m_Comp->Show( 1, out );
    else
        out << " m_Comp==NULL\n";

    out << "</netItem>\n";
}


#endif


NETLIST_OBJECT::NETLIST_OBJECT()
{
    m_Type = NET_ITEM_UNSPECIFIED;              /* Type of this item (see NetObjetType enum) */
    m_Comp = NULL;                              /* Pointer on the library item that created this net object (the parent)*/
    m_Link = NULL;       /* For Hierarchical_PIN_Sheet_Struct:
                          * Pointer to the hierarchy sheet that contains this Hierarchical_PIN_Sheet_Struct
                          *  For Pins: pointer to the component that contains this pin
                          */
    m_Flag = 0;                                 /* flag used in calculations */
    m_ElectricalType = 0;                       /* Has meaning only for Pins and hierachical pins: electrical type */
    m_NetCode    = 0;          /* net code for all items except BUS labels because a BUS label has
                                *  as many net codes as bus members
                                */
    m_BusNetCode = 0;                           /* Used for BUS connections */
    m_Member     = 0;       /* for labels type NET_BUSLABELMEMBER ( bus member created from the BUS label )
                             *  member number
                             */
    m_FlagOfConnection = UNCONNECTED;
    m_PinNum = 0;                   /* pin number ( 1 long = 4 bytes -> 4 ascii codes) */
    m_Label  = 0;                   /* For all labels:pointer on the text label */
}


// Copy constructor
NETLIST_OBJECT::NETLIST_OBJECT( NETLIST_OBJECT& aSource )
{
}


NETLIST_OBJECT::~NETLIST_OBJECT()
{
    /* NETLIST_OBJECT is owner of m_Label only if its type is
     *  NET_HIERBUSLABELMEMBER, NET_GLOBBUSLABELMEMBER, NET_SHEETBUSLABELMEMBER or NET_BUSLABELMEMBER
     *  So we must delete m_Label only for these cases
     *  ( see the note in ConvertBustToMembers)
     */

    switch( m_Type )
    {
    default:
        break;

    case NET_HIERBUSLABELMEMBER:
    case NET_GLOBBUSLABELMEMBER:
    case NET_SHEETBUSLABELMEMBER:
    case NET_BUSLABELMEMBER:
        SAFE_DELETE( m_Label );
        break;
    }
}
+80 −0
Original line number Diff line number Diff line
/*************************************************************************************/
/* Class NETLIST_OBJECT to handle 1 item connected (in netlist and erc calculations) */
/*************************************************************************************/

#ifndef _CLASS_NETLIST_OBJECT_H_
#define _CLASS_NETLIST_OBJECT_H_

/* Type of Net objects (wires, labels, pins...) */
enum NetObjetType {
    NET_ITEM_UNSPECIFIED,           // only for not yet initialized instances
    NET_SEGMENT,                    // connection by wire
    NET_BUS,                        // connection by bus
    NET_JONCTION,                   // connection by junction: can connect to or more crossing wires
    NET_LABEL,                      // this is a local label
    NET_GLOBLABEL,                  // this is a global label that connect all others global label in whole hierrachy
    NET_HIERLABEL,                  // element to indicate connection to a higher-level sheet
    NET_SHEETLABEL,                 // element to indicate connection to a lower-level sheet.
    NET_BUSLABELMEMBER,         /* created when a bus label is found:
                                 *  the bus label (like DATA[0..7] is converted to n single labels like DATA0, DATA1 ...
                                 */
    NET_GLOBBUSLABELMEMBER,         // see NET_BUSLABELMEMBER, used when a global bus label is found
    NET_HIERBUSLABELMEMBER,         // see NET_BUSLABELMEMBER, used when a hierarchical bus label is found
    NET_SHEETBUSLABELMEMBER,        // see NET_BUSLABELMEMBER, used when a pin sheet label using bus notation is found
    NET_PINLABEL,   /* created when a pin is POWER (IN or OUT) with invisible attribute is found:
                     *  these pins are equivalent to a global label and are automatically connected
                     */
    NET_PIN,                        // this is an usual pin
    NET_NOCONNECT                   // this is a no connect symbol
};

/* Values for .m_FlagOfConnection member */
enum  ConnectType {
    UNCONNECTED = 0,        /* Pin or Label not connected (error) */
    NOCONNECT_SYMBOL_PRESENT,              /* Pin not connected but have a  NoConnect symbol on it (no error) */
    PAD_CONNECT             /* Normal connection (no error) */
};


class NETLIST_OBJECT
{
public:
    NetObjetType    m_Type;             /* Type of this item (see NetObjetType enum) */
    EDA_BaseStruct* m_Comp;             /* Pointer on the library item that created this net object (the parent)*/
    SCH_ITEM*       m_Link;      /* For Hierarchical_PIN_Sheet_Struct:
                                  * Pointer to the hierarchy sheet that contains this Hierarchical_PIN_Sheet_Struct
                                  *  For Pins: pointer to the component that contains this pin
                                  */
    int           m_Flag;               /* flag used in calculations */
    DrawSheetPath m_SheetList;
    int           m_ElectricalType;     /* Has meaning only for Pins and hierachical pins: electrical type */
private:
    int           m_NetCode;            /* net code for all items except BUS labels because a BUS label has
                                         *  as many net codes as bus members
                                         */
public:
    int             m_BusNetCode;       /* Used for BUS connections */
    int             m_Member;        /* for labels type NET_BUSLABELMEMBER ( bus member created from the BUS label )
                                      *  member number
                                      */
    ConnectType     m_FlagOfConnection;
    DrawSheetPath   m_SheetListInclude;     /* sheet that the hierarchal label connects to.*/
    long            m_PinNum;               /* pin number ( 1 long = 4 bytes -> 4 ascii codes) */
    const wxString* m_Label;                /* For all labels:pointer on the text label */
    wxPoint         m_Start;                // Position of object or for segments: starting point
    wxPoint         m_End;                  // For segments (wire and busses): ending point

#if defined(DEBUG)
    void Show( std::ostream& out, int ndx );

#endif
    NETLIST_OBJECT();
    NETLIST_OBJECT( NETLIST_OBJECT& aSource );       // Copy constructor

    ~NETLIST_OBJECT();

    void SetNet( int aNetCode ) { m_NetCode = aNetCode; }
    int GetNet() const { return m_NetCode; }
};

#endif  // _CLASS_NETLIST_OBJECT_H_
Loading