refactoring
This commit is contained in:
parent
a1db7dd9ba
commit
28e62667e0
15
Boolean.go
Normal file
15
Boolean.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
type Boolean string
|
||||||
|
|
||||||
|
func True() Boolean {
|
||||||
|
return "yes"
|
||||||
|
}
|
||||||
|
|
||||||
|
func False() Boolean {
|
||||||
|
return "no"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b Boolean) ToBool() bool {
|
||||||
|
return b == "yes" || b == "on"
|
||||||
|
}
|
27
Grid.go
Normal file
27
Grid.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
type GridUnit string
|
||||||
|
|
||||||
|
// Grid Units
|
||||||
|
const (
|
||||||
|
GRID_INCH GridUnit = "inch" // inch
|
||||||
|
GRID_MIL = "mil" // milli inch
|
||||||
|
|
||||||
|
GRID_MM = "mm" // milli meter
|
||||||
|
GRID_MICRONS = "mic" // micrometer
|
||||||
|
)
|
||||||
|
|
||||||
|
// Grid definition
|
||||||
|
type Grid struct {
|
||||||
|
Distance float32 `xml:"distance,attr"`
|
||||||
|
Unitdist GridUnit `xml:"unitdist,attr"`
|
||||||
|
Unit GridUnit `xml:"unit,attr"`
|
||||||
|
Style string `xml:"style,attr"`
|
||||||
|
Multiple int `xml:"multiple,attr"`
|
||||||
|
Display Boolean `xml:"display,attr"`
|
||||||
|
|
||||||
|
// Alternative Grid Information
|
||||||
|
AlternativeDistance float32 `xml:"altdistance,attr"`
|
||||||
|
AlternativeDistanceUnit GridUnit `xml:"altunitdist,attr"`
|
||||||
|
AlternativeUnit GridUnit `xml:"altunit,attr"`
|
||||||
|
}
|
12
Layer.go
Normal file
12
Layer.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
// Layer definition
|
||||||
|
type Layer struct {
|
||||||
|
Number int `xml:"number,attr"`
|
||||||
|
Name string `xml:"name,attr"`
|
||||||
|
Color int `xml:"color,attr"`
|
||||||
|
|
||||||
|
Fill int `xml:"fill,attr"`
|
||||||
|
Visible Boolean `xml:"visible,attr"`
|
||||||
|
Active Boolean `xml:"active,attr"`
|
||||||
|
}
|
157
Library.go
157
Library.go
@ -3,173 +3,40 @@ package geagle
|
|||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"io"
|
"io"
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Boolean string
|
// A Gate
|
||||||
|
// multiple gates form a device
|
||||||
func True() Boolean {
|
|
||||||
return "yes"
|
|
||||||
}
|
|
||||||
|
|
||||||
func False() Boolean {
|
|
||||||
return "no"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b Boolean) ToBool() bool {
|
|
||||||
return b == "yes" || b == "on"
|
|
||||||
}
|
|
||||||
|
|
||||||
type Rotation string
|
|
||||||
|
|
||||||
func (r Rotation) Angle() int {
|
|
||||||
s := strings.TrimPrefix(string(r), "R")
|
|
||||||
v, _ := strconv.Atoi(s)
|
|
||||||
return v
|
|
||||||
}
|
|
||||||
|
|
||||||
// Layer definition
|
|
||||||
type Layer struct {
|
|
||||||
Number int `xml:"number,attr"`
|
|
||||||
Name string `xml:"name,attr"`
|
|
||||||
Color int `xml:"color,attr"`
|
|
||||||
|
|
||||||
Fill int `xml:"fill,attr"`
|
|
||||||
Visible Boolean `xml:"visible,attr"`
|
|
||||||
Active Boolean `xml:"active,attr"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Grid definition
|
|
||||||
type Grid struct {
|
|
||||||
Distance float32 `xml:"distance,attr"`
|
|
||||||
Unitdist string `xml:"unitdist,attr"`
|
|
||||||
Unit string `xml:"unit,attr"`
|
|
||||||
Style string `xml:"style,attr"`
|
|
||||||
Multiple int `xml:"multiple,attr"`
|
|
||||||
Display Boolean `xml:"display,attr"`
|
|
||||||
|
|
||||||
// Alternative Grid Information
|
|
||||||
AlternativeDistance float32 `xml:"altdistance,attr"`
|
|
||||||
AlternativeDistanceUnit string `xml:"altunitdist,attr"`
|
|
||||||
AlternativeUnit string `xml:"altunit,attr"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Point struct {
|
|
||||||
X float32 `xml:"x,attr"`
|
|
||||||
Y float32 `xml:"y,attr"`
|
|
||||||
}
|
|
||||||
type Hole struct {
|
|
||||||
Point
|
|
||||||
Drill string `xml:"drill,attr"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Line struct {
|
|
||||||
X1 float32 `xml:"x1,attr"`
|
|
||||||
X2 float32 `xml:"x2,attr"`
|
|
||||||
Y1 float32 `xml:"y1,attr"`
|
|
||||||
Y2 float32 `xml:"y2,attr"`
|
|
||||||
}
|
|
||||||
type Wire struct {
|
|
||||||
Line
|
|
||||||
Width float32 `xml:"width,attr"`
|
|
||||||
Layer int `xml:"layer,attr"`
|
|
||||||
Curve float64 `xml:"curve,attr,omitempty"`
|
|
||||||
Cap string `xml:"cap,attr,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Pad struct {
|
|
||||||
Point
|
|
||||||
Name string `xml:"name,attr"`
|
|
||||||
Drill float32 `xml:"drill,attr"`
|
|
||||||
Shape string `xml:"shape,attr"`
|
|
||||||
Rotation Rotation `xml:"rot,attr,omitempty"`
|
|
||||||
}
|
|
||||||
type SmdPad struct {
|
|
||||||
Point
|
|
||||||
Name string `xml:"name,attr"`
|
|
||||||
Width float32 `xml:"dx,attr"`
|
|
||||||
Height float32 `xml:"dy,attr"`
|
|
||||||
Layer int `xml:"layer,attr"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Text struct {
|
|
||||||
Point
|
|
||||||
Size float32 `xml:"size,attr"`
|
|
||||||
Layer int `xml:"layer,attr"`
|
|
||||||
Alignment string `xml:"align,attr,omitempty"`
|
|
||||||
Ratio int `xml:"ratio,attr,omitempty"`
|
|
||||||
Text string `xml:",innerxml"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Circle struct {
|
|
||||||
Point
|
|
||||||
Radius float32 `xml:"radius,attr"`
|
|
||||||
Width float32 `xml:"width,attr"`
|
|
||||||
Layer int `xml:"layer,attr"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Rectangle struct {
|
|
||||||
Line
|
|
||||||
Layer int `xml:"layer,attr"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Primitives struct {
|
|
||||||
Wires []Wire `xml:"wire"`
|
|
||||||
Circles []Circle `xml:"circle"`
|
|
||||||
Texts []Text `xml:"text"`
|
|
||||||
Rectangle []Rectangle `xml:"rectangle"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Package struct {
|
|
||||||
Name string `xml:"name,attr"`
|
|
||||||
Description string `xml:"description"`
|
|
||||||
Urn string `xml:"urn,attr,omitempty"`
|
|
||||||
|
|
||||||
Primitives
|
|
||||||
Holes []Hole `xml:"hole"`
|
|
||||||
Pads []Pad `xml:"pad"`
|
|
||||||
SmdPads []SmdPad `xml:"smd"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Pin struct {
|
|
||||||
Point
|
|
||||||
Name string `xml:"name,attr"`
|
|
||||||
Visible string `xml:"visible,attr,omitempty"`
|
|
||||||
Length string `xml:"length,attr,omitempty"`
|
|
||||||
Direction string `xml:"direction,attr,omitempty"`
|
|
||||||
Rotation Rotation `xml:"rot,attr,omitempty"`
|
|
||||||
Function string `xml:"function,attr,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Symbol struct {
|
|
||||||
Name string `xml:"name,attr"`
|
|
||||||
Urn string `xml:"urn,attr,omitempty"`
|
|
||||||
|
|
||||||
Primitives
|
|
||||||
Pins []Pin `xml:"pin"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type Gate struct {
|
type Gate struct {
|
||||||
Point
|
Point
|
||||||
Name string `xml:"name,attr"`
|
Name string `xml:"name,attr"`
|
||||||
Symbol string `xml:"symbol,attr"`
|
Symbol string `xml:"symbol,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A list of technologies
|
||||||
type Technology struct {
|
type Technology struct {
|
||||||
Name string `xml:"name,attr"`
|
Name string `xml:"name,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A connection
|
||||||
|
// Connectes Pads of one package with the pins of
|
||||||
|
// all gates a device posseses
|
||||||
type Connection struct {
|
type Connection struct {
|
||||||
Gate string `xml:"gate,attr"`
|
Gate string `xml:"gate,attr"`
|
||||||
Pin string `xml:"pin,attr"`
|
Pin string `xml:"pin,attr"`
|
||||||
Pad string `xml:"pad,attr"`
|
Pad string `xml:"pad,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A 3d package
|
||||||
|
// new in Eagle 8 and above
|
||||||
|
// only contains a urn for the autodesk library service
|
||||||
type Package3d struct {
|
type Package3d struct {
|
||||||
Urn string `xml:"package3d_urn,attr"`
|
Urn string `xml:"package3d_urn,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A device
|
||||||
|
// bundles multiple gates and packages
|
||||||
|
// then defines how they are connected
|
||||||
type Device struct {
|
type Device struct {
|
||||||
Name string `xml:"name,attr"`
|
Name string `xml:"name,attr"`
|
||||||
Package string `xml:"package,attr"`
|
Package string `xml:"package,attr"`
|
||||||
|
48
Package.go
Normal file
48
Package.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
// A drill hole
|
||||||
|
type Hole struct {
|
||||||
|
Point
|
||||||
|
Drill string `xml:"drill,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PadShape string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PAD_LONG PadShape = "long"
|
||||||
|
PAD_SQUARE = "square"
|
||||||
|
PAD_ROUND = "round"
|
||||||
|
PAD_OCTAGONAL = "octagon"
|
||||||
|
PAD_OFFSET = "offset"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A drilled pad
|
||||||
|
type Pad struct {
|
||||||
|
Point
|
||||||
|
Name string `xml:"name,attr"`
|
||||||
|
Drill float32 `xml:"drill,attr"`
|
||||||
|
Shape PadShape `xml:"shape,attr"`
|
||||||
|
Rotation Rotation `xml:"rot,attr,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// An undrilled smd pad
|
||||||
|
type SmdPad struct {
|
||||||
|
Point
|
||||||
|
Name string `xml:"name,attr"`
|
||||||
|
Width float32 `xml:"dx,attr"`
|
||||||
|
Height float32 `xml:"dy,attr"`
|
||||||
|
Layer int `xml:"layer,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A package
|
||||||
|
// bundles all kinds of geometry shapes
|
||||||
|
type Package struct {
|
||||||
|
Name string `xml:"name,attr"`
|
||||||
|
Description string `xml:"description"`
|
||||||
|
Urn string `xml:"urn,attr,omitempty"`
|
||||||
|
|
||||||
|
Primitives
|
||||||
|
Holes []Hole `xml:"hole"`
|
||||||
|
Pads []Pad `xml:"pad"`
|
||||||
|
SmdPads []SmdPad `xml:"smd"`
|
||||||
|
}
|
56
Primitves.go
Normal file
56
Primitves.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
// An abstract Point
|
||||||
|
type Point struct {
|
||||||
|
X float32 `xml:"x,attr"`
|
||||||
|
Y float32 `xml:"y,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// An abstract line
|
||||||
|
type Line struct {
|
||||||
|
X1 float32 `xml:"x1,attr"`
|
||||||
|
X2 float32 `xml:"x2,attr"`
|
||||||
|
Y1 float32 `xml:"y1,attr"`
|
||||||
|
Y2 float32 `xml:"y2,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A Wire (line with thickness)
|
||||||
|
type Wire struct {
|
||||||
|
Line
|
||||||
|
Width float32 `xml:"width,attr"`
|
||||||
|
Layer int `xml:"layer,attr"`
|
||||||
|
Curve float64 `xml:"curve,attr,omitempty"`
|
||||||
|
Cap string `xml:"cap,attr,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A text field
|
||||||
|
type Text struct {
|
||||||
|
Point
|
||||||
|
Size float32 `xml:"size,attr"`
|
||||||
|
Layer int `xml:"layer,attr"`
|
||||||
|
Alignment string `xml:"align,attr,omitempty"`
|
||||||
|
Ratio int `xml:"ratio,attr,omitempty"`
|
||||||
|
Text string `xml:",innerxml"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A circle
|
||||||
|
type Circle struct {
|
||||||
|
Point
|
||||||
|
Radius float32 `xml:"radius,attr"`
|
||||||
|
Width float32 `xml:"width,attr"`
|
||||||
|
Layer int `xml:"layer,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A rectangle with two corner-points
|
||||||
|
type Rectangle struct {
|
||||||
|
Line
|
||||||
|
Layer int `xml:"layer,attr"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// bundles all geometry shapes
|
||||||
|
type Primitives struct {
|
||||||
|
Wires []Wire `xml:"wire"`
|
||||||
|
Circles []Circle `xml:"circle"`
|
||||||
|
Texts []Text `xml:"text"`
|
||||||
|
Rectangle []Rectangle `xml:"rectangle"`
|
||||||
|
}
|
18
Rotation.go
Normal file
18
Rotation.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Rotation string
|
||||||
|
|
||||||
|
func (r Rotation) Angle() int {
|
||||||
|
s := strings.TrimPrefix(string(r), "R")
|
||||||
|
v, _ := strconv.Atoi(s)
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
func FromAngle(degrees int) Rotation {
|
||||||
|
return Rotation("R" + strconv.Itoa(degrees))
|
||||||
|
}
|
35
Symbol.go
Normal file
35
Symbol.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package geagle
|
||||||
|
|
||||||
|
type PinDirection string
|
||||||
|
|
||||||
|
const (
|
||||||
|
PinNotConnected PinDirection = "nc"
|
||||||
|
PinInput = "in"
|
||||||
|
PinOutput = "out"
|
||||||
|
PinInputOutput = "io"
|
||||||
|
PinOC = "oc"
|
||||||
|
PinPower = "pwr"
|
||||||
|
PinPassiv = "pas"
|
||||||
|
PinHighz = "hiz"
|
||||||
|
PinSupply = "sup"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A schematic pin
|
||||||
|
type Pin struct {
|
||||||
|
Point
|
||||||
|
Name string `xml:"name,attr"`
|
||||||
|
Visible string `xml:"visible,attr,omitempty"`
|
||||||
|
Length string `xml:"length,attr,omitempty"`
|
||||||
|
Direction string `xml:"direction,attr,omitempty"`
|
||||||
|
Rotation Rotation `xml:"rot,attr,omitempty"`
|
||||||
|
Function string `xml:"function,attr,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A schematic symbol
|
||||||
|
type Symbol struct {
|
||||||
|
Name string `xml:"name,attr"`
|
||||||
|
Urn string `xml:"urn,attr,omitempty"`
|
||||||
|
|
||||||
|
Primitives
|
||||||
|
Pins []Pin `xml:"pin"`
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user