from koko.lib.sam import *
from koko.lib.pcb import *
from koko.lib.shapes2d import *


class R_0805(Component):
    ''' 0805 Resistor
    '''
    pins = [
            Pin(-0.04, 0,  s2d.rectangle(-.023,.017, -.027, .027)),
            Pin(0.04, 0,  s2d.rectangle(-.017,.023, -.027, .027))
        ]
    prefix = 'R'
    vias = []

class R_1206(Component):
    ''' 1206 Resistor
    '''
    pins = [
        Pin(-0.06, 0, s2d.rectangle(-0.032, 0.03, -0.034, 0.034)), 
        Pin(0.06, 0, s2d.rectangle(-0.03, 0.032, -0.034, 0.034))]
    prefix = 'R'
    vias = []

def bot_chamfered_rectangle(x0,x1,y0,y1,c):
    r = rectangle(x0,x1,y0,y1)
    c1 = triangle(x0,y0,x0,y0+c,x0+c,y0)
    c2 = triangle(x1,y1, x1, y1-c, x1-c, y1)
    c3 = triangle(x0,y1, x0+c, y1, x0, y1-c)
    c4 = triangle(x1,y0, x1-c, y0, x1, y0+c)
    return r-c2-c3

class cap_UWT(Component):
    '''UWT series aluminum smd cap
    http://nichicon-us.com/english/products/pdfs/e-uwt.pdf
    '''
    _d = 8 #mm, diameter
    _h = 10.5 #mm, height
    _a = 2.9/25.4
    _e = 3.1/25.4
    _h = 1./25.4 + 2/25.4
    _pad = rectangle(-_h/2,_h/2,-_a/2-.03,_a/2+.03)
    pins = [Pin(0,-(_e+_a)/2-.01,_pad,'-'),Pin(0,(_e+_a)/2+.01,_pad,'+')]
    vias = []
    shadow = bot_chamfered_rectangle(-4/25.4,4/25.4,-4/25.4,4/25.4,1/25.4)


class Pheonix_WTB(Component):
    _pad = rectangle(-.4*1.2/25.4,.4*1.2/25.4, -.5*3.4/25.4,.5*3.4/25.4)
    _pad_big = chamfered_rectangle(-1.15/25.4,1.15/25.4,-2.8/25.4,2.8/25.4,.01)
    pins = [
        Pin(-1.5*2.5/25.4, -6.6/25.4,_pad,'1'),
        Pin(- .5*2.5/25.4, -6.6/25.4,_pad,'2'),
        Pin(  .5*2.5/25.4, -6.6/25.4,_pad,'3'),
        Pin( 1.5*2.5/25.4, -6.6/25.4,_pad,'4'),
        Pin( -12.7/25.4/2, 0, _pad_big),
        Pin( 12.7/25.4/2, 0, _pad_big),
    ]
    vias = []
    shadow = rectangle(-6/25.4,6/25.4,-8.3/25.4,2.8/25.4) 

class DRV8825(Component):
    '''Stepper driver'''
    _pad = rectangle(-.8/25.4,.8/25.4,-.17/25.4,.17/25.4)
    p = .65/25.4
    w = 5.6/25.4
    labels = ["CP1","CP2",'VCP','VMA','AOUT1','ISENA','AOUT2','BOUT2','ISENB','BOUT1','VMB','AVREF','BVREF','GND',
              "V3OUT",'nRST','nSLP','nFLT','DECAY','DIR','nEBL','STEP','NC','MODE0','MODE1','MODE2','nHOME','GND2']
    pins = [Pin(-.5*w,(6.5-i)*p,_pad,l,label_size=.02) for i,l in enumerate(labels[:14])]
    pins += [Pin(.5*w,(-6.5+i)*p,_pad,l,label_size=.02) for i,l in enumerate(labels[14:])]
    pins += [Pin(0,0,rectangle(-1.5/25.4,1.5/25.4,-4/25.4,4/25.4),'GND3',label_size=.02)]
    vias = []

class Regulator_SOT23(Component):
    ''' LM3480 100-mA, 3.3V
    '''
    _pad_SOT23 = s2d.rectangle(-.02,.02,-.012,.012)
    pins = [
        Pin(-0.045, -0.0375, _pad_SOT23,'IN'),
        Pin(-0.045,  0.0375, _pad_SOT23,'OUT'),
        Pin(0.045, 0, _pad_SOT23,'GND')
    ]
    prefix = 'U'
    vias = []

class AS5047D(Component):
    _pad_TSSOP = rectangle(-.7/25.4,.7/25.4, -.2/25.4,.2/25.4)
    hw = 5.55/25.4/2
    pitch = .65/25.4
    pins = [
        Pin(-hw, 3*pitch,_pad_TSSOP,'CSn',label_size=.02),
        Pin(-hw, 2*pitch,_pad_TSSOP,'CLK',label_size=.02),
        Pin(-hw, 1*pitch,_pad_TSSOP,'MISO',label_size=.02),
        Pin(-hw, 0*pitch,_pad_TSSOP,'MOSI',label_size=.02),
        Pin(-hw,-1*pitch,_pad_TSSOP,'TEST',label_size=.02),
        Pin(-hw,-2*pitch,_pad_TSSOP,'B',label_size=.02),
        Pin(-hw,-3*pitch,_pad_TSSOP,'A',label_size=.02),
        Pin( hw,-3*pitch,_pad_TSSOP,'W/PWM',label_size=.02),
        Pin( hw,-2*pitch,_pad_TSSOP,'V',label_size=.02),
        Pin( hw,-1*pitch,_pad_TSSOP,'U',label_size=.02),
        Pin( hw, 0*pitch,_pad_TSSOP,'VDD',label_size=.02),
        Pin( hw, 1*pitch,_pad_TSSOP,'VDD3V',label_size=.02),
        Pin( hw, 2*pitch,_pad_TSSOP,'GND',label_size=.02),
        Pin( hw, 3*pitch,_pad_TSSOP,'I/PWM',label_size=.02),
    ]
    vias = []
    prefix='IC'
    shadow = s2d.rectangle(-2.25/25.4,2.25/25.4, -2.95/25.4,2.95/25.4)
class AS5047D_FLIP(Component):
    _pad_TSSOP = rectangle(-.9/25.4,.9/25.4, -.2/25.4,.2/25.4)
    hw = 5.55/25.4/2
    pitch = .65/25.4
    pins = [
        Pin( hw, 3*pitch,_pad_TSSOP,'CSn',label_size=.02),
        Pin( hw, 2*pitch,_pad_TSSOP,'CLK',label_size=.02),
        Pin( hw, 1*pitch,_pad_TSSOP,'MISO',label_size=.02),
        Pin( hw, 0*pitch,_pad_TSSOP,'MOSI',label_size=.02),
        Pin( hw,-1*pitch,_pad_TSSOP,'TEST',label_size=.02),
        Pin( hw,-2*pitch,_pad_TSSOP,'B',label_size=.02),
        Pin( hw,-3*pitch,_pad_TSSOP,'A',label_size=.02),
        Pin(-hw,-3*pitch,_pad_TSSOP,'W/PWM',label_size=.02),
        Pin(-hw,-2*pitch,_pad_TSSOP,'V',label_size=.02),
        Pin(-hw,-1*pitch,_pad_TSSOP,'U',label_size=.02),
        Pin(-hw, 0*pitch,_pad_TSSOP,'VDD',label_size=.02),
        Pin(-hw, 1*pitch,_pad_TSSOP,'VDD3V',label_size=.02),
        Pin(-hw, 2*pitch,_pad_TSSOP,'GND',label_size=.02),
        Pin(-hw, 3*pitch,_pad_TSSOP,'I/PWM',label_size=.02),
    ]
    vias = [ Via(0,0, dogboned_rectangle( -2.75/25.4,2.75/25.4, -2.95/25.4,2.95/25.4, .017 ) ) ]
    prefix='IC'
    shadow = s2d.rectangle(-2.25/25.4,2.25/25.4, -2.95/25.4,2.95/25.4)

class Header_Stepper(Component):
    ''' For bipolar stepper
    '''
    _pad_header  = chamfered_rectangle(-0.06, 0.06, -0.022, 0.022,.007)
    pins = [
        Pin(0,  -0.15, _pad_header, 'A1'),
        Pin(0,  -0.05, _pad_header, 'A2'),
        Pin(0,   0.05, _pad_header, 'B1'),
        Pin(0,   0.15, _pad_header, 'B2'),
    ]
    prefix = 'J'
    vias = []
    shadow = s2d.rectangle(-.06,8/25.4,-.18,.18)


class Button(Component):
    ''' SW262CT-ND 
    '''
    rect = rectangle(-.75/25.4,.75/25.4,-.5/25.4,.5/25.4)
    pins = [
        Pin(-2/25.4,.8/25.4,rect),
        Pin( 2/25.4,.8/25.4,rect),
        Pin(-2/25.4,-.8/25.4,rect),
        Pin( 2/25.4,-.8/25.4,rect)
    ]
    prefix = 'button'
    vias = []
    shadow = rectangle(-2.1/25.4,2.1/25.4,-1.4/25.4,1.4/25.4)

class TagConnectSWD(Component):
    '''
    '''
    _pad = s2d.circle(0,0,.5*.031)
    _via = s2d.circle(0,0,.5*.039)
    pins = [
        Pin(-.05,-.025,_pad,'VCC',label_size=.012),
        Pin( .00,-.025,_pad,'TX',label_size=.012),
        Pin( .05,-.025,_pad,'RX',label_size=.012),
        Pin(-.05,.025,_pad,'GND',label_size=.012),
        Pin( .00,.025,_pad,'SWDIO',label_size=.012),
        Pin( .05,.025,_pad,'SWDCLK',label_size=.012)
    ]
    vias = [
        Via(-.1,0,_via),
        Via(.1,0.04,_via),
        Via(.1,-.04,_via),

    ]


class BC832(Component):
    #Fanstel BC832 micro nrf52 module
    p = 1.1/25.4
    pad_hw = .7/25.4
    pad_hh = .34/25.4
    _pad_lga = circle(0,0,.32/25.4)
    _pad = rectangle(-pad_hw,pad_hw,-pad_hh,pad_hh)
    c= 3.9/25.4
    start_y = .618/25.4
    y_os = .18
    names = [
        'GND','DFU','SWDIO','SWDCLK','P18','P13','P11','P12',
        'A1','RESET','XL1','XL2','A0','P27','P26','VDD',
        
    ]
    pins = [Pin(-c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[:8][::-1])]
    pins += [Pin(c,start_y+i*p-y_os,_pad,n,label_size=.018) for i,n in enumerate(names[8:16])]
    pins += [
        Pin(-c+2.15/25.4,-y_os+.519/25.4,_pad_lga,'P8',label_size=.01),
        Pin(-c+2.15/25.4,-y_os+(1.2+.519)/25.4,_pad_lga,'P6',label_size=.01),
        #Pin(-c+2.15/25.4,-y_os+(2*1.2+.519)/25.4,_pad_lga,'A2',label_size=.01),    
        #Pin(-c+2.15/25.4,-y_os+(4*1.2+.519)/25.4,_pad_lga,'A4',label_size=.01),    
        
        #Pin(-c+2.15/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01),        
        #Pin(-c+2.15/25.4+1.2/25.4,-y_os+(2*1.2+.519)/25.4,_pad_lga,'',label_size=.01),        
        #Pin(-c+2.15/25.4+1.2/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01),        
        #Pin(-c+2.15/25.4+1.2/25.4,-y_os+(4*1.2+.519)/25.4,_pad_lga,'',label_size=.01),        
        #Pin(-c+2.15/25.4+2*1.2/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01),        
        #Pin(-c+2.15/25.4+3*1.2/25.4,-y_os+(3*1.2+.519)/25.4,_pad_lga,'',label_size=.01)        
    ]
    vias = []
    shadow = rectangle(-c,c,-y_os,8.8/25.4-y_os)

_pad_SOIC = s2d.rectangle(-.041,.041,-.015,.015)
class A4950(Component):
    _pad_SOIC = chamfered_rectangle(-.041,.041,-.015,.015,.008)
    pins = [
        Pin(-.11, .075,_pad_SOIC,"GND"),
        Pin(-.11, .025,_pad_SOIC,"IN2"),
        Pin(-.11,-.025,_pad_SOIC,"IN1"),
        Pin(-.11,-.075,_pad_SOIC,"VREF"),
        Pin( .11,-.075,_pad_SOIC,"VBB"),
        Pin( .11,-.025,_pad_SOIC,"OUT1"),
        Pin( .11, .025,_pad_SOIC,"LSS"),
        Pin( .11, .075,_pad_SOIC,"OUT2"),
        Pin( 0,0,s2d.rectangle(-.04,.04,-.075,.075),"")
    ]
    prefix = 'U'
    vias = []

class Regulator_SOT23(Component):
    '''  SOT23 voltage regulator
    '''
    _pad_SOT23 = s2d.rectangle(-.02,.02,-.012,.012)
    pins = [
        Pin(-0.045, -0.0375, _pad_SOT23,'IN'),
        Pin(-0.045,  0.0375, _pad_SOT23,'OUT'),
        Pin(0.045, 0, _pad_SOT23,'GND')
    ]
    prefix = 'U'
    vias = []

class BarrelJackSMD(Component):
    pw = 2.8/25.4
    ph = 2.4/25.4
    _pad = chamfered_rectangle(-.5*pw,.5*pw,-.5*ph,.5*ph,.01)
    _via = s2d.circle(0,0,.065)
    pins = [
        Pin(.192,.177+.5*ph,_pad,'V'),
        Pin(.437,.177+.5*ph,_pad,'V2'),
        Pin(.192,-.177-.5*ph,_pad,'GND'),
        Pin(.437,-.177-.5*ph,_pad,'GND2'),
        ]
    vias = [Via(.197,0,s2d.circle(0,0,.5*.065)), 
            Via(.374,0,s2d.circle(0,0,.5*.073))]
    shadow = s2d.rectangle(0,.58,-.18,.18)

class Header_Female_R_SMD(Component):
    _pad = s2d.rectangle(-.045,.045,-.03,.03)
    pins = [Pin(-.178,0,_pad),Pin(.178,0,_pad)]
    shadow = s2d.rectangle(-.178,.178,-.05,.05)
    vias = []

class R_2010(Component):
    _pad_2010 = s2d.rectangle(-0.032, 0.032, -0.045, 0.045)
    ''' 2010 Resistor
    '''
    pins = [Pin(-0.096, 0, _pad_2010), Pin(0.096, 0, _pad_2010)]
    prefix = 'R'
    vias = []
class R_2512(Component):
    _pad_2010 = chamfered_rectangle(-0.032, 0.032, -0.0625, 0.0625, .01)
    ''' 2010 Resistor
    '''
    pins = [Pin(-0.125, 0, _pad_2010), Pin(0.125, 0, _pad_2010)]
    prefix = 'R'
    vias = []

class M3_Hole(Component):
    pins = [Pin(0,0,circle(0,0,.001))]
    prefix='V'
    vias = [Via(0,0,circle(0,0,1.55/25.4))]
    shadow = circle(0,0,5.5/25.4/2)

class Hole(Component):
    pins = [Pin(0,0,circle(0,0,0.01))]
    vias = [Via(0,0,circle(0,0,.5*2.1/25.4))]
    tap = circle(0,0,.5*1.9/25.5)

width = 42.3/25.4
height = 42.3/25.4
mid = width/2.
pcb = PCB(0,0,width,height,chamfer_distance=.12)

hole = M3_Hole(mid-15.5/25.4, mid-15.5/25.4)
pcb += hole
hole = M3_Hole(mid+15.5/25.4, mid-15.5/25.4)
pcb += hole
hole = M3_Hole(mid-15.5/25.4, mid+15.5/25.4)
pcb += hole
hole = M3_Hole(mid+15.5/25.4, mid+15.5/25.4)
pcb += hole

def connectG(pin,dx,dy,width=.014,pts=[]):
    '''
    Convenience function for connecting to ground plane
    '''
    sides = [0 for p in pts]+[0,1,1]
    pts = [pin] + pts + [[pin.x+dx,pin.y+dy],[pin.x+dx-.0001,pin.y+dy]]
    pcb.connectD(*pts,width=width,sides=sides)
def connectGf(pin,dx,dy,width=.014,pts=[]):
    sides = [1,0] + [0 for p in pts]+ [1]
    pts = [[pin.x+dx,pin.y+dy],[pin.x+dx-.0001,pin.y+dy]] + pts + [pin] 
    pcb.connectD(*pts,width=width,sides=sides)
def connectS(pin,dx,dy,width=.014):
    pcb.connectD(pin,[pin.x+dx+.0001,pin.y+dy],width=width)
def connectM(pin1,pin2,dx,width=.014):
    pcb.connectD(pin1,[pin1.x+dx,pin1.y],pin2,width=width)


step = Pheonix_WTB(.11,.66,90,'step')
pcb += step


pow = BarrelJackSMD(.63,height+.1,-90,'12V') 
pcb += pow
#connectG(pow['GND'],-.1,0.01,width=.06)
pcb.connectV(pow['GND'],pow['GND2'],width=.09)



C_bulk = cap_UWT(pow.x-.4, pow.y-.63,-90,'100uF')
pcb += C_bulk
connectG(C_bulk['-'],-.02,.18,width=.05)
pcb.connectV(pow['V2'],pow['V'],width=.05)
pcb.connectD(pow['V2'],C_bulk['+'],width=.05)
pcb.connectV(C_bulk['-'],[pow['GND2'].x,pow['GND2'].y-.04],pow['GND2'],width=.06)



bc = BC832(width-.2,height-.62,-90,'Fanstel\nBC832\nNRF52')
pcb += bc

#reg = Regulator_SOT23(bc.x-.465,bc.y-.09,-180,'3.3v')
reg = Regulator_SOT23(pow.x+.39,pow.y-.28,-90,'3.3v')
pcb += reg

pcb.connectV(pow['V'],reg['IN'],width=.05)
connectG(reg['GND'],-.07,-.02,width=.03)
#pcb.connectD(reg['IN'],[reg['IN'].x-.09,reg['IN'].y+.02],pow['VCC'],width=.02)

C_in = C_1206(reg.x-.01,reg.y+.13,180,'Cin\n.1uF',label_size=.02)
pcb += C_in
C_out = C_1206(reg.x+.0,reg.y-.12,0,'Cout\n.1uF',label_size=.02)
pcb += C_out
pcb.connectD(C_in[1],[C_in[1].x,C_in[1].y+.01],reg['GND'])
pcb.connectV(reg['IN'],C_in[0],width=.02)
pcb.connectH(reg['OUT'],C_out[0],width=.02)
pcb.connectD(reg['GND'],C_out[1],width=.02)




swd = TagConnectSWD(bc.x-.27,bc.y+.25,-90,'swd')
pcb += swd
pcb.connectD(swd['SWDCLK'],[swd['SWDCLK'].x+.02,swd['SWDCLK'].y],[bc['SWDCLK'].x-.02,bc['SWDCLK'].y+.05],bc['SWDCLK'],width=.012)
pcb.connectD(swd['SWDIO'],[swd['SWDIO'].x+.02,swd['SWDIO'].y],[bc['SWDIO'].x-.03,bc['SWDIO'].y+.079],bc['SWDIO'],width=.012)
pcb.connectD(swd['GND'],[bc['GND'].x-.06,bc['GND'].y+.11],bc['GND'],width=.012)

pcb.connectD(bc['P6'],[bc['P6'].x,bc['P6'].y+.02],[swd['RX'].x+.05,swd['RX'].y-.1],[swd['RX'].x+.02,swd['RX'].y-.03],swd['RX'],width=.012)
pcb.connectD(bc['P8'],[swd['TX'].x+.02,bc['P8'].y-.0],[swd['TX'].x-.05,swd['TX'].y-.02],swd['TX'],width=.012)

connectG(swd['GND'],.05,.03)


button = Button(bc.x-.33,bc.y-.02,0)
pcb += button
#pcb.connectH(pow['GND'],[button[1].x-.06,button[1].y],button[1])

pcb.connectV(button[3],button[0])
pcb.connectV(button[1],button[2])

C2 = C_1206(reg.x+.12,reg.y+.07,-90,'C2\n10uF',label_size=.02)
pcb += C2
pcb.connectV(C2[1],C_in[1],width=.02)
pcb.connectH(C2[0],C_out[0],width=.02)

pcb.connectD(C2[0],[C2[0].x+.05,C2[0].y],[width-.1,height-.08],[bc['VDD'].x+.04,bc['VDD'].y+.03],bc['VDD'])


R1 = R_1206(button.x-.08,button[1].y+.18,90,'10k',label_size=.03)
pcb += R1
pcb.connectH(bc['RESET'],[bc['RESET'].x,bc['RESET'].y+.05],[button[2].x+.06,button[2].y],button[2],width=.012)
pcb.connectD(swd['VCC'],[swd['VCC'].x-.03,swd['VCC'].y],R1[0])
pcb.connectD(swd['VCC'],[swd['VCC'].x-.03,swd['VCC'].y],C_out[0])
pcb.connectD(R1[1],button[1])
pcb.connectD(button[3],[button[3].x-.04,button[3].y],C_out[1],width=.03)

#stepper
drv = DRV8825(step.x+.88,step.y-.02,0)
pcb += drv

pcb.connectD(drv['AOUT1'],[drv['AOUT1'].x-.15,drv['AOUT1'].y],step[4],width=.014)
pcb.connectD(drv['AOUT2'],[step.x+.33,drv['AOUT2'].y],step[3],width=.014)
pcb.connectD(drv['BOUT2'],[step.x+.33,drv['BOUT2'].y],step[2],width=.014)
pcb.connectD(drv['BOUT1'],[drv['BOUT1'].x-.06,drv['BOUT1'].y],step[1],width=.014)

RA = R_2512(drv['ISENA'].x-.34,drv['ISENA'].y-.1,90,'RA\n200mOhm',label_size=.03)
pcb += RA
RB = R_2512(drv['ISENB'].x-.20,drv['ISENB'].y-.15,90,'RB\n200mOhm',label_size=.03)
pcb += RB
pcb.connectD(drv['ISENA'],[drv['ISENA'].x-.2,drv['ISENA'].y],RA[0],width=.014)
pcb.connectD(drv['ISENB'],[drv['ISENB'].x-.2,drv['ISENB'].y],RB[0],width=.014)
pcb.connectV(RA[1],RB[1],width=.06)
connectG(RA[1],-.05,-.06)

pcb.connectH(drv['GND'],drv['GND3'],width=.014)
pcb.connectH(drv['GND2'],drv['GND3'],width=.014)
pcb.connectH(drv['MODE2'],drv['GND3'],width=.014)

CP = C_1206(drv['CP1'].x-.015,drv['CP1'].y+.12,0,'.01uF')
pcb += CP
pcb.connectD(drv['CP2'],[drv['CP2'].x-.05,drv['CP2'].y],CP[1],width=.014)
pcb.connectD(drv['CP1'],CP[0],width=.014)

pcb.connectD(drv['VMA'],[drv['VMA'].x-.12,drv['VMA'].y],[C_bulk['+'].x+.2,C_bulk['+'].y],C_bulk['+'],width=.014)

RCP = R_1206(C_bulk['+'].x+.25,C_bulk['+'].y-.1,0,'1MOhm')
pcb += RCP
CCP = R_1206(RCP.x,RCP.y-.1,0,'.1uF')
pcb += CCP

pcb.connectV(RCP[0],CCP[0],width=.05)
pcb.connectV(CCP[1],C_bulk['+'],width=.05)
pcb.connectD(drv['VCP'],[drv['VCP'].x-.08,drv['VCP'].y],CCP[0],width=.014)

pcb.connectD(drv['MODE1'],[drv['MODE1'].x+.05,drv['MODE1'].y],[bc['A1'].x-.02,bc['A1'].y-.05],bc['A1'],width=.014)
pcb.connectD(drv['MODE0'],[drv['MODE0'].x+.08,drv['MODE0'].y],[bc['XL1'].x-.03,bc['XL1'].y-.09],bc['XL1'],width=.014)
pcb.connectD(drv['STEP'],[drv['STEP'].x+.11,drv['STEP'].y],[bc['XL2'].x-.05,bc['XL2'].y-.13],bc['XL2'],width=.014)
pcb.connectD(drv['DIR'],[drv['DIR'].x+.11,drv['DIR'].y],[bc['A0'].x-.07,bc['A0'].y-.17],bc['A0'],width=.014)
pcb.connectD(drv['nSLP'],[drv['nSLP'].x+.11,drv['nSLP'].y],[bc['P27'].x-.09,bc['P27'].y-.21],bc['P27'],width=.014)

pcb.connectV(drv['nSLP'],drv['nRST'],width=.014)
pcb.connectV(drv['AVREF'],drv['BVREF'],width=.014)

pcb.connectD(drv['VMB'],[drv['VMB'].x-.04,drv['VMB'].y],[RB.x+.1,RB.y-.2],[step.x+.3,RB.y-.2],[step.x+.15,step.y+.25],C_bulk['+'],width=.014)
pcb.connectD([RB.x+.1,RB.y-.18],[step.x+.3,RB.y-.2],[step.x+.15,step.y+.25],C_bulk['+'],width=.04)

R_lp = R_1206(bc['P26'].x+.02,bc['P26'].y-.2,90,'Rlp')
pcb += R_lp
C_lp = R_1206(R_lp.x-.06,R_lp.y-.15,0,'Clp')
pcb += C_lp
pcb.connectV(R_lp[1],C_lp[0])
pcb.connectV(bc['P26'],R_lp[0])
pcb.connectD(drv['BVREF'],[drv['BVREF'].x-.05,drv['BVREF'].y],[drv['BVREF'].x-.07,drv.y-.2],[C_lp.x-.02,drv.y-.25],C_lp[0],width=.014)
pcb.connectD(drv['GND3'],[drv.x,drv.y-.15],[drv.x+.2,drv.y-.21],C_lp[1])
connectG(drv['GND3'],0,.2,width=.05)
pcb.connectD(button[3],[button[3].x,button[3].y-.1],drv['GND3'],width=.04)

cad.shapes = pcb.layout()
cad.shape = pcb.traces+(pcb.cutout-pcb.cutout)
#cad.shape = pcb.cutout+(pcb.traces-pcb.traces)