§
    …ñjœT  ã            '      ó¤  — U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ej
                             dd¦  «         ddlZddlmZ  e	e¦  «                             ¦   «         j        ZdZd	Zd
ZdZdZdZdZ ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z�dd„Z edddd eddd d!d"d#d$¦  «        ¦  «         ed%d&d'd( ed)d*¦  «        ¦  «         ed+d,d-d. ed/d0¦  «        ¦  «         ed1d2d3d4 ed5d6¦  «        ¦  «         ed7d8d9d: ed5d6¦  «        ¦  «         ed;d<d=d> ed?d@dAdB¦  «        ¦  «         edCdDdEdF ed5d6¦  «        ¦  «         edGd8d9dH ed5d6¦  «        ¦  «         edIdJd9dK edLdM¦  «        ¦  «         edNdOd9dP edQdR¦  «        ¦  «         edSdTd9dU edLdM¦  «        ¦  «         edVdWdXdY ed5d6¦  «        ¦  «         edZd[d9d\ edLdM¦  «        ¦  «         ed]d[d9d^ edLdM¦  «        ¦  «         ed_d`dadb edcdddedfdg¦  «        ¦  «         edhdidjdk edQdldmdndo¦  «        ¦  «         edpd8d9dq ed5d6¦  «        ¦  «         edrdsd9dt edLdM¦  «        ¦  «         edudvdwdx edydzd{d|d}d~dd€¦  «        ¦  «         ed�d8d9d‚ ed5d6¦  «        ¦  «         edƒd„d…d† edLdM¦  «        ¦  «         ed‡d„d…dˆ edLdM¦  «        ¦  «         ed‰dŠd‹dŒ ed�dŽd�¦  «        ¦  «         ed�d‘d’d“ edQd”d•¦  «        ¦  «         ed–d—d9d˜ edLdM¦  «        ¦  «         ed™dšd›dœ edLdM¦  «        ¦  «         ed�džd9dŸ edLdM¦  «        ¦  «         ed d¡d›d¢ edLdM¦  «        ¦  «         ed£džd9d¤ edLdM¦  «        ¦  «         ed¥d¦d›d§ edLdM¦  «        ¦  «        fZd¨ed©<   dª„ eD ¦   «         Z d«ed¬<   i d­d®“d¯d°“d±d²“d³d´“dµd¶“d·d¸“d¹dº“d»d¼“d½d¾“d¿dÀ“dÁdÂ“dÃdÄ“dÅdÆ“dÇdÈ“dÉdÊ“dËdÌ“dÍdÎ“dÏdÐdÑœ¥Z!dÒedÓ<   dÔZ"dÕedÖ<   �ddØ„Z#�ddÜ„Z$�ddÞ„Z%	 �d�ddç„Z&�d	dï„Z'	 	 �d
�ddù„Z(�ddú„Z)�ddý„Z*�ddÿ„Z+�d�d „Z,�d�d„Z-e.�dk    r e-¦   «          dS dS (  as  Generate the SN65BC184 RS-485 schematic with SchemDraw.

Requirements:
    python -m pip install -r hardware/requirements.txt

Run:
    python hardware/rs485_schemdraw.py --format svg

The design data is deliberately separate from the drawing commands.  This
keeps the electrical definition reviewable and lets the script emit a netlist
and BOM as well as the schematic.
é    )ÚannotationsN)Ú	dataclass)ÚPathÚMPLCONFIGDIRz/tmp/schemdraw-matplotlib-cachez#17223bz#64748bz#2563ebz#16845bz#c45f0az#c53b3bz#7c3aedT)Úfrozenc                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚPinDefÚstrÚnumberÚnameÚsideN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úhardware/rs485_schemdraw.pyr	   r	   *   s+   € € € € € € à€K€K�KØ€I€I�IØ€I€I�I€I€Ir   r	   c                  óB   — e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	Ú	Componentr
   ÚrefÚvalueÚpackageÚdescriptionútuple[PinDef, ...]ÚpinsNr   r   r   r   r   r   1   sE   € € € € € € à€H€H�HØ€J€J�JØ€L€L�LØÐÐÑØÐÐÑÐÐr   r   Úitemsútuple[str, str, str]Úreturnr   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3  ó(   K  — | ]}t          |Ž V — Œd S ©N)r	   )Ú.0Úitems     r   ú	<genexpr>zpins.<locals>.<genexpr>;   s&   è è € Ð1Ð1 4•˜�Ð1Ð1Ð1Ð1Ð1Ð1r   )Útuple)r   s    r   r   r   :   s   € ÝÐ1Ð1¨5Ð1Ñ1Ô1Ñ1Ô1Ð1r   ÚJ1zUSB-C 5Vz16-pin receptaclezUSB Type-C sink, 5 V power only)zA4/B4/A9/B9ÚVBUSÚright)ÚA5ÚCC1r*   )ÚB5ÚCC2r*   )zA6/B6ÚDPr*   )zA7/B7ÚDNr*   )ÚSHELLÚSHIELDr*   )zA1/B1/A12/B12ÚGNDr*   ÚF1ú0.5AzPTC 6VzResettable VBUS fuse)Ú1ÚINÚleft)Ú2ÚOUTr*   ÚD1úSMBJ5.0AÚSMBzVBUS transient clamp)r6   ÚKÚtop)r9   ÚAÚbottomÚC1Ú10uFÚ0805zVBUS bulk capacitor)r6   r6   r?   )r9   r9   rA   ÚC2Ú100nFÚ0603zVBUS bypassÚU1zAMS1117-3.3zSOT-223z31 A fixed 3.3 V LDO; Pin 4/tab is electrically VOUT)Ú3ÚVINr8   )r9   ÚVOUTr*   )r6   r3   rA   )z4/TABÚVOUT_TABr?   ÚC3Ú22uFz3528 tantalumz"AMS1117 output stability capacitorÚC4z LDO output high-frequency bypassÚR5Ú1kzPower LED current limit)r6   r6   r8   )r9   r9   r*   ÚD3ÚGREENz3.3 V power LED)r6   r@   r8   )r9   r>   r*   ÚR1Ú1MzUSB shield to GNDÚC7ú4.7nFz0603 1kVzUSB shield AC returnÚR2ú5.1kzUSB-C CC1 RdÚR3zUSB-C CC2 RdÚJ2ÚLVTTLz
1x5 2.54mmzLogic-side interface connector)r6   r3   r*   )r9   ÚV33r*   )rI   ÚTXDr*   )Ú4ÚRXDr*   )Ú5ÚDIRr*   ÚU3Ú	74LVC1G04zSC-70-5zDirection inverter)r_   ÚYr*   )rI   ÚNCr*   )ra   ÚVCCr?   )r9   r3   rA   ÚC6z	U3 bypassÚR4Ú10kzDIR power-up pulldownÚU2Ú	SN65BC184zSOIC-8z$3.3 V half-duplex RS-485 transceiver)r6   ÚROr8   )r9   ÚRE_Nr8   )rI   ÚDEr8   )r_   ÚDIr8   )Ú8rg   r?   )ra   r3   rA   )Ú6r@   r*   )Ú7ÚBr*   ÚC5zU2 bypass at VCC/GNDÚR6Ú10Rz0603 pulse-proofzA-line series resistorÚR7zB-line series resistorÚD2ÚPESD2CANzSOT-23zRS-485 connector ESD clamp)r6   r@   r?   )r9   rt   r?   )rI   r3   rA   ÚJ3zRS-485z3-pin 5.08mmzA(+), B(-), signal ground)r9   rt   r8   )rI   r3   r8   ÚR8Ú120RzOptional bus terminationÚJP1ÚTERMz
1x2 2.54mmzEnd-node termination jumperÚR9Ú560RzFail-safe bias pull-upÚJP2ÚBIAS_AzEnable fail-safe bias to AÚR10zFail-safe bias pull-downÚJP3ÚBIAS_BzEnable fail-safe bias to Bztuple[Component, ...]Ú
COMPONENTSc                ó   — i | ]
}|j         |“ŒS r   ©r   ©r$   Ú	components     r   ú
<dictcomp>rŒ   «   s)   € ð %ð %ð %Ø!*€I„M�9ð%ð %ð %r   zdict[str, Component]ÚPART_BY_REFÚVBUS_RAW)zJ1.VBUSzF1.INú+5V)zF1.OUTzD1.KzC1.1zC2.1zU1.VINú+3V3)zU1.VOUTzU1.VOUT_TABzC3.1zC4.1zR5.1zC5.1zC6.1zU2.VCCzU3.VCCzJ2.V33zR9.1r3   )zJ1.GNDzD1.AzC1.2zC2.2zU1.GNDzC3.2zC4.2zD3.KzR1.2zC7.2zR2.2zR3.2zJ2.GNDzU3.GNDzC6.2zR4.2zU2.GNDzC5.2zD2.GNDzJ3.GNDzJP3.2r,   )zJ1.CC1zR2.1r.   )zJ1.CC2zR3.1Ú
USB_SHIELD)z	J1.SHIELDzR1.1zC7.1ÚPWR_LED)zR5.2zD3.AÚRO_3V3)zU2.ROzJ2.RXDÚDI_3V3)zU2.DIzJ2.TXDÚDIR_3V3)zJ2.DIRzU2.DEzU3.AzR4.1ÚRX_EN_N)zU2.RE_NzU3.YÚ	U2_A_NODE)zU2.AzR6.1Ú	U2_B_NODE)zU2.BzR7.1ÚBUS_A)zR6.2zR8.1zJP2.2zD2.AzJ3.AÚBUS_B)zR7.2zJP1.2zR10.1zD2.BzJ3.BÚTERM_SW)zR8.2zJP1.1)zR9.2zJP2.1)zR10.2zJP3.1)Ú	BIAS_A_SWÚ	BIAS_B_SWzdict[str, tuple[str, ...]]ÚNETS)zJ1.DPzJ1.DNzU3.NCztuple[str, ...]ÚNO_CONNECTSú	list[str]c            	     óV  — g } i }t          ¦   «         }t          d„ t          D ¦   «         ¦  «        t          t          ¦  «        k    r|                      d¦  «         t          D ]g}|j        D ]]}|j        › d|j        › �}||v r|                      d|› �¦  «         |                     |¦  «         |||<   |||j        › d|j        › �<   Œ^Œhi }t           
                    ¦   «         D ]�\  }}t          |¦  «        dk     r|                      d|› d�¦  «         |D ]i}	|	|vr|                      d|	› d	|› �¦  «         Œ"||	         }|                     |¦  «        }
|
�#|
|k    r|                      |	› d
|
› d|› �¦  «         |||<   ŒjŒžt          D ]Q}	|	|vr|                      d|	› �¦  «         Œ||	         }||v r!|                      d|	› d||         › �¦  «         d||<   ŒRt          |t          |¦  «        z
  ¦  «        }|r+|                      dd                     |¦  «        z   ¦  «         | S )Nc                ó   — h | ]	}|j         ’Œ
S r   r‰   rŠ   s     r   ú	<setcomp>z"validate_design.<locals>.<setcomp>õ   s   € Ð6Ð6Ð6˜iˆIŒMÐ6Ð6Ð6r   zDuplicate reference designatorsú.zDuplicate logical pin é   zNet z has fewer than two memberszUnknown pin z on net z is on both z and zUnknown no-connect pin zNo-connect pin z is assigned to z<NC>zUnassigned pins: ú, )ÚsetÚlenr‡   Úappendr   r   r   Úaddr   rž   r   ÚgetrŸ   ÚsortedÚjoin)ÚerrorsÚpin_aliasesÚlogical_pinsr‹   ÚpinÚ
logical_idÚassignedÚnetÚmembersÚmemberÚpreviousÚmissings               r   Úvalidate_designr¹   ð   s¶  € Ø€FØ"$€KÝ ™UœU€Lå
Ð6Ð6­:Ð6Ñ6Ô6Ñ7Ô7½3½z¹?¼?ÒJÐJØ�ŠÐ7Ñ8Ô8Ð8åð Dð Dˆ	Ø”>ð 	Dð 	DˆCØ%œMÐ8Ð8¨C¬JÐ8Ð8ˆJØ˜\Ð)Ð)Ø—’ÐC°zÐCÐCÑDÔDÐDØ×Ò˜ZÑ(Ô(Ð(Ø&0ˆK˜
Ñ#Ø9CˆK˜9œ=Ð5Ð5¨3¬8Ð5Ð5Ñ6Ð6ð	Dð  "€HÝŸ
š
™œð 'ð '‰ˆˆWÝˆw‰<Œ<˜!ÒÐØ�MŠMÐA ÐAÐAÐAÑBÔBÐBØð 	'ð 	'ˆFØ˜[Ð(Ð(Ø—’ÐB¨VÐBÐB¸SÐBÐBÑCÔCÐCØØ$ VÔ,ˆJØ—|’| JÑ/Ô/ˆHØÐ#¨°Cª¨Ø—’ ÐIÐI°XÐIÐIÀCÐIÐIÑJÔJÐJØ#&ˆH�ZÑ Ð ð	'õ ð &ð &ˆØ˜Ð$Ð$Ø�MŠMÐ<°FÐ<Ð<Ñ=Ô=Ð=ØØ  Ô(ˆ
Ø˜Ð!Ð!Ø�MŠMÐZ¨FÐZÐZÀHÈZÔDXÐZÐZÑ[Ô[Ð[Ø%ˆ�ÑÐå�\¥C¨¡M¤MÑ1Ñ2Ô2€GØð @Ø�ŠÐ)¨D¯IªI°gÑ,>Ô,>Ñ>Ñ?Ô?Ð?Ø€Mr   r´   ú
str | Noner
   c                óœ   — | dv rt           S | dk    rt          S | dk    rt          S | dv rt          S | dv rt          S | dv rt
          S t          S )N>   rŽ   r�   r�   r3   >   r™   rš   r›   r—   r˜   >   r•   r–   >   r”   r“   )ÚREDÚORANGEÚINKÚBLUEÚPURPLErS   ÚMUTED)r´   s    r   Ú	net_colorrÂ     sg   € Ø
Ð!Ð!Ð!Ýˆ
Ø
ˆf‚}€}ÝˆØ
ˆe‚|€|Ýˆ
Ø
ÐEÐEÐEÝˆØ
Ð$Ð$Ð$ÝˆØ
Ð"Ð"Ð"ÝˆÝ€Lr   údict[str, str]c                 óH   — d„ t                                ¦   «         D ¦   «         S )Nc                ó$   — i | ]\  }}|D ]}||“ŒŒS r   r   )r$   r´   rµ   r¶   s       r   rŒ   znet_lookup.<locals>.<dictcomp>/  sE   € ð ð ð áˆC�Øðð ð ð 	�ðð ð ð r   )rž   r   r   r   r   Ú
net_lookuprÆ   .  s+   € ðð å ŸJšJ™LœLðñ ô ð r   Údrawingúschemdraw.DrawingÚpointútuple[float, float]Ú	directionÚlengthúfloat | NoneÚNonec                ó®  — |€'|€dn"t          dddt          |¦  «        z  z   ¦  «        }t          j        ¦   «                              |¦  «        }|dk    r|                     ¦   «         }n_|dk    r|                     ¦   «         }nD|dv r|                     ¦   «         }n+|d	v r|                     ¦   «         }nt          d
|› �¦  «        ‚|€t          nt          |¦  «        }| |                     |¦  «                             |¦  «        z  } | t          j        ¦   «                              |j        ¦  «                             |€dn||d¬¦  «        z  } dS )zDDraw a short labeled stub; equal labels are the same electrical net.Ngš™™™™™ñ?g      ð?g
×£p=
ç?g)\�Âõ(¬?r8   r*   >   Úupr?   >   ÚdownrA   zUnknown stub direction: rf   ç      @)ÚcolorÚfontsize)Úmaxr¨   ÚelmÚLineÚatr8   r*   rÐ   rÑ   Ú
ValueErrorr¼   rÂ   rÌ   rÓ   ÚLabelÚendÚlabel)rÇ   rÉ   rË   r´   rÌ   ÚstubrÓ   s          r   Úadd_net_stubrÞ   6  sH  € ð €~Ø˜��­¨S°$¸ÅÀSÁÄÑ9IÑ2IÑ)JÔ)JˆåŒ8‰:Œ:�=Š=˜ÑÔ€DØ�FÒÐØ�yŠy‰{Œ{ˆˆØ	�gÒ	Ð	Ø�zŠz‰|Œ|ˆˆØ	�mÐ	#Ð	#Ø�wŠw‰yŒyˆˆØ	Ð(Ð	(Ð	(Ø�yŠy‰{Œ{ˆˆåÐ?°IÐ?Ð?Ñ@Ô@Ð@à�;�CˆC¥I¨c¡N¤N€EØˆt�{Š{˜6Ñ"Ô"×(Ò(¨Ñ/Ô/Ñ/€GØ�sŒy‰{Œ{�~Š~˜dœhÑ'Ô'×-Ò-Ø�ˆˆ ØØð .ñ ô ñ €G€G€Gr   r‹   ÚxÚfloatÚyÚwidthÚheightÚnetsc                ó   — d„ |j         D ¦   «         }t          j        ||f|ddddddd¬¦	  «	                             ||f¦  «                             d	¦  «        }| |z  } | t          j        ¦   «                              ||d
z  z
  dz   ||d
z  z   dz   f¦  «                             |j        › d|j        › �ddt          ¬¦  «        z  } | t          j        ¦   «                              ||d
z  z
  dz   ||d
z  z   dz   f¦  «                             |j
        ddt          ¬¦  «        z  } |j         D ]R}	t          ||	j        ¦  «        }
|                     |j        › d|	j        › �¦  «        }t          | |
|	j        |¦  «         ŒSd S )Nc                óZ   — g | ](}t          j        |j        |j        |j        ¬ ¦  «        ‘Œ)S )©r   r±   r   )rÖ   ÚIcPinr   r   r   )r$   r±   s     r   ú
<listcomp>zdraw_ic.<locals>.<listcomp>_  s?   € ð ð ð àõ 	Œ	�s”x S¤Z°c´hÐ?Ñ?Ô?ðð ð r   gÍÌÌÌÌÌÜ?gffffffÖ?g¸…ëQ¸¾?é   g{®Gáz¤?é   ©	Úsizer   ÚedgepadHÚedgepadWÚleadlenÚlofstÚlsizeÚplblofstÚplblsizeÚcenterr¥   ç333333Ã?g×£p=
×ã?z  r8   ©ÚlocrÔ   rÓ   ç333333Ó?ç      @r¤   )r   rÖ   ÚIcrØ   ÚanchorrÚ   rÜ   r   r   r¾   r   rÁ   Úgetattrr   r«   rÞ   r   )rÇ   r‹   rß   rá   râ   rã   rä   Úic_pinsÚicr±   rü   r´   s               r   Údraw_icr   V  sÄ  € ðð à”>ðñ ô €Gõ
 	ŒØ˜�ØØØØØØØØð
	
ñ 
	
ô 
	
÷ 
ŠˆQ�ˆF‰Œß	Š�Ñ	Ô	ð ð ˆr�M€GØ�sŒy‰{Œ{�~Š~˜q 5¨1¡9™}¨tÑ3°Q¸À!¹±^ÀdÑ5JÐKÑLÔL×RÒRØŒ=Ð-Ð-˜IœOÐ-Ð-ØØÝð	 Sñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜q 5¨1¡9™}¨tÑ3°Q¸À!¹±^ÀdÑ5JÐKÑLÔL×RÒRØÔØØÝð	 Sñ ô ñ €Gð Œ~ð 5ð 5ˆÝ˜˜SœXÑ&Ô&ˆØ�hŠh˜)œ-Ð4Ð4¨#¬(Ð4Ð4Ñ5Ô5ˆÝ�W˜f c¤h°Ñ4Ô4Ð4Ð4ð5ð 5r   çš™™™™™@r?   Úelement_typeútype[elm.Element]r   r   Únet_aÚnet_bÚ	label_locc                óÐ  —  |¦   «                               ||f¦  «        }|dk    r-|                     ¦   «                              |	¦  «        }d\  }}nE|dk    r-|                     ¦   «                              |	¦  «        }d\  }}nt	          d|› �¦  «        ‚| |                     |› d|› �|
d¬¦  «        z  } t          | |j        ||¦  «         t          | |j        ||¦  «         d S )	Nr*   )r8   r*   rÑ   )rÐ   rÑ   z!Unsupported passive orientation: ú rÒ   ©rø   rÔ   )	rØ   r*   rÌ   rÑ   rÙ   rÜ   rÞ   ÚstartrÛ   )rÇ   r  r   r   rß   rá   rË   r  r  rÌ   r  ÚelementÚ	start_dirÚend_dirs                 r   Údraw_two_pinr  †  sø   € ð ˆl‰nŒn×Ò  A Ñ'Ô'€GØ�GÒÐØ—-’-‘/”/×(Ò(¨Ñ0Ô0ˆØ,Ñˆ	�7�7Ø	�fÒ	Ð	Ø—,’,‘.”.×'Ò'¨Ñ/Ô/ˆØ)Ñˆ	�7�7åÐH¸YÐHÐHÑIÔIÐIàˆw�}Š} Ð-Ð- eÐ-Ð-°9Àsˆ}ÑKÔKÑK€GÝ�˜'œ-¨°EÑ:Ô:Ð:Ý�˜'œ+ w°Ñ6Ô6Ð6Ð6Ð6r   c                óà  — t          j        dt          j        ddd¬¦  «        t          j        ddd¬¦  «        gd	d	d
dddd¬¦	  «	                             ||f¦  «                             d¦  «        }| |z  } | t          j        ¦   «                              ||dz   f¦  «                             |› d|› �dd¬¦  «        z  } t          | |j        d|¦  «         t          | |j	        d|¦  «         d S )N)gffffffò?gš™™™™™é?ÚP1r6   r8   rç   ÚP2r9   r*   rö   rù   g{®Gáz´?é   g¸…ëQ¸ž?ç      @rì   rõ   gš™™™™™á?r  rA   rú   r	  )
rÖ   rû   rè   rØ   rü   rÚ   rÜ   rÞ   r  r  )rÇ   r   r   rß   rá   r  r  Újumpers           r   Údraw_jumperr  ¢  s  € õ 	ŒØå”	˜t¨°6Ð:Ñ:Ô:Ý”	˜t¨°7Ð;Ñ;Ô;ðð ØØØØØØð	
ñ 	
ô 	
÷ 
ŠˆQ�ˆF‰Œß	Š�Ñ	Ô	ð! ð$ ˆvÑ€GØ�sŒy‰{Œ{�~Š~˜q ! d¡(˜mÑ,Ô,×2Ò2°cÐ3CÐ3C¸EÐ3CÐ3CÈÐ\_Ð2Ñ`Ô`Ñ`€GÝ�˜&œ) V¨UÑ3Ô3Ð3Ý�˜&œ) W¨eÑ4Ô4Ð4Ð4Ð4r   Úoutputr   c                óÒ  — t          ¦   «         }| j                             ¦   «         dk    rdnd}t          j        |d¬¦  «        }|                     dd¬¦  «         |t          j        ¦   «                              d	¦  «         	                    d
ddt          ¬¦  «        z  }|t          j        ¦   «                              d¦  «         	                    dddt          ¬¦  «        z  }|t          j        ¦   «                              d¦  «         	                    dddt          ¬¦  «        z  }|t          j        ¦   «                              d¦  «                             d¦  «                             d¦  «        z  }|t          j        ¦   «                              d¦  «         	                    dddt          ¬¦  «        z  }|t          j        ¦   «                              d¦  «                             d¦  «                             d¦  «        z  }|t          j        ¦   «                              d¦  «         	                    dddt          ¬¦  «        z  }t          |t           d         dddd |¦  «         t#          |t          j        d!d"d#d$d%d&d'¦	  «	         t#          |t          j        d(d)d*d+d,d'd-d.d¬/¦  «         t#          |t          j        d0d1d2d+d,d'd-d3d¬/¦  «         t#          |t          j        d4d5d6d+d,d'd-d3d%¬/¦  «         t          |t           d7         d8d9d:d;|¦  «         t#          |t          j        d<d=d>d9d,d?d-d3d¬/¦  «         t#          |t          j        d@d5dAd9d,d?d-d3d%¬/¦  «         t#          |t          j        dBdCdDd+d%d?dE¦	  «	         t#          |t          j        dFdGdHd+d%dEd-¦	  «	         t#          |t          j        dIdJdKdLd%dMd-¦	  «	         t#          |t          j        dNdOdPd2d,dMd-dQd%¬/¦  «         t#          |t          j        dRdSdKdTd%dUd-¦	  «	         t#          |t          j        dVdSdWdTd%dXd-¦	  «	         t          |t           dY         ddZd[d\|¦  «         t          |t           d]         d*d^d;d_|¦  «         t#          |t          j        d`d5dadbd,d?d-dQd%¬/¦  «         t#          |t          j        dcdddedfd%dgd-¦	  «	         t          |t           dh         didjdkdl|¦  «         t#          |t          j        dmd5dndod,d?d-d3d%¬/¦  «         t#          |t          j        dpdqdrdsd%dtdu¦	  «	         t#          |t          j        dvdqdrdwd%dxdy¦	  «	         t          |t           dz         d{dZdd_|¦  «         t          |t           d|         d}d~dd|¦  «         t#          |t          j        d€d�dDd‚d%dudƒd„¬…¦
  «
         t/          |d†d‡dˆd‚dƒdy¦  «         t#          |t          j        d‰dŠd‹dŒd%d?d�d„¬…¦
  «
         t/          |dŽd�d�dŒd�du¦  «         t#          |t          j        d‘dŠd‹d’d%dyd“d„¬…¦
  «
         t/          |d”d•d�d’d“d-¦  «         |t          j        ¦   «                              d–¦  «         	                    d—ddt          ¬¦  «        z  }|t          j        ¦   «                              d˜¦  «         	                    d™ddšt          ¬¦  «        z  }|t          j        ¦   «                              d›¦  «         	                    dœddšt          ¬¦  «        z  }|t          j        ¦   «                              d�¦  «         	                    džddšt          ¬¦  «        z  }|t          j        ¦   «                              dŸ¦  «         	                    d ddšt0          ¬¦  «        z  }|t          j        ¦   «                              d¡¦  «         	                    d¢ddšt0          ¬¦  «        z  }|                     t5          | ¦  «        d£¬¤¦  «         d S )¥Nz.svgÚsvgÚ
matplotlibF)ÚcanvasÚshowg333333ó?é	   )ÚunitrÔ   )r   g3333336@z!USB-C 5 V / 3.3 V LVTTL to RS-485r8   é   r÷   )r   g33333s5@zGSN65BC184 | half-duplex | non-isolated | equal net labels are connectedrê   )r   gš™™™™™4@zPOWER INPUT / 3.3 V REGULATOR)r   ç     @4@)g     €=@r  z#cbd5e1)r   g333333'@z,3.3 V LOGIC / DIRECTION CONTROL / RS-485 BUS)r   ç     €&@)é'   r   )é   gffffffæ?zEND-NODE SETTINGSr(   g      @g3333330@g333333@r  r4   r5   gffffff @gš™™™™2@r*   rŽ   r�   r;   r<   gš™™™™™%@g3333332@rÑ   r3   gffffffþ?)rÌ   r  rB   rC   gffffff)@gÍÌÌÌÌÌü?rE   rF   gffffff,@rH   g     €2@gš™™™™™0@gÍÌÌÌÌÌ@gffffff@rM   rN   gÍÌÌÌÌL7@r�   rO   g      9@rP   rQ   g333333<@r’   rR   rS   g333333?@rT   rU   g       @g      )@r‘   rV   rW   gffffff&@g333333û?rX   rY   gš™™™™™$@r,   rZ   g      &@r.   r[   gÍÌÌÌÌÌ@g      @g      @rc   g333333@gÍÌÌÌÌÌ@rh   gÍÌÌÌÌÌ*@gÍÌÌÌÌÌ@ri   rj   g      %@gÍÌÌÌÌÌ@r•   rk   g     €1@gš™™™™™@gÍÌÌÌÌÌ@gffffff@ru   g3333334@gš™™™™™!@rv   rw   gffffff6@gÍÌÌÌÌÌ@r—   r™   rx   gš™™™™™@r˜   rš   r{   g     €B@ry   g     €;@g333333@gš™™™™™	@r|   r}   g      $@r›   g       @)rÌ   r~   r   gš™™™™?@r€   r�   gÍÌÌÌÌÌ;@g      à¿rœ   r‚   rƒ   g33333³>@r„   gffffffÀr�   r…   r†   )r   gffffffÀzDESIGN NOTES)r   gÍÌÌÌÌÌÀzZ1. DIR=0: DE=0 and /RE=0 (receive). DIR=1: DE=1 and /RE=1 (transmit). R4 defaults DIR low.rë   )r   g333333Àzf2. Fit 120 ohm termination only at both physical cable ends. Fit JP2+JP3 at exactly one biased master.)r   gš™™™™™Àzd3. USB-C is a 5 V sink (CC1/CC2 each have 5.1 kohm Rd); D+/D- are unused. Signal ground is required.)r   g      Àz\4. AMS1117 SOT-223: Pin 1=GND, Pin 2=VOUT, Pin 3=VIN; TAB is also VOUT and must be soldered.)r   gffffffÀz\5. Review the exact SN65BC184 order code, pinout, package, and data rate before PCB release.éÈ   )Údpi)rÆ   ÚsuffixÚlowerÚ	schemdrawÚDrawingÚconfigrÖ   rÚ   rØ   rÜ   r¾   rÁ   r×   ÚtorÓ   r   r�   r  ÚFuseÚDiodeÚ	CapacitorÚResistorÚLEDr  r¼   Úsaver
   )r  rä   r  rÇ   s       r   Údraw_schematicr1  Ã  sÌ  € Ý‰<Œ<€DØ”m×)Ò)Ñ+Ô+¨vÒ5Ð5ˆUˆU¸<€FÝÔ v°EÐ:Ñ:Ô:€GØ‡N‚N˜ a€NÑ(Ô(Ð(ð �sŒy‰{Œ{�~Š~˜iÑ(Ô(×.Ò.Ø+ØØÝð	 /ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜jÑ)Ô)×/Ò/ØQØØÝð	 0ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜iÑ(Ô(×.Ò.Ø'¨V¸aÅuð /ñ ô ñ €Gð �sŒx‰zŒz�}Š}˜ZÑ(Ô(×+Ò+¨MÑ:Ô:×@Ò@ÀÑKÔKÑK€GØ�sŒy‰{Œ{�~Š~˜iÑ(Ô(×.Ò.Ø6ØØÝð	 /ñ ô ñ €Gð �sŒx‰zŒz�}Š}˜ZÑ(Ô(×+Ò+¨KÑ8Ô8×>Ò>¸yÑIÔIÑI€GØ�sŒy‰{Œ{�~Š~˜iÑ(Ô(×.Ò.Ø °!½5ð /ñ ô ñ €Gõ
 ˆG•[ Ô&¨¨T°3¸¸TÑBÔBÐBÝ��#œ( D¨&°#°t¸WÀjÐRWÑXÔXÐXÝ��#œ) T¨:°t¸TÀ6È5ÐRWÐ`cÐouÐvÑvÔvÐvÝ��#œ-¨¨v°t¸TÀ6È5ÐRWÐ`cÐouÐvÑvÔvÐvÝ��#œ-¨¨w¸¸dÀFÈEÐSXÐadÐpwÐxÑxÔxÐxÝˆG•[ Ô&¨¨d°C¸¸dÑCÔCÐCÝ��#œ-¨¨v°t¸TÀ6È6ÐSXÐadÐpvÐwÑwÔwÐwÝ��#œ-¨¨w¸¸dÀFÈFÐTYÐbeÐqxÐyÑyÔyÐyÝ��#œ,¨¨d°D¸$ÀÈÐQZÑ[Ô[Ð[Ý��#œ' 4¨°$¸¸gÀyÐRWÑXÔXÐXõ ��#œ,¨¨d°C¸¸wÈÐV[Ñ\Ô\Ð\Ý��#œ-¨¨w¸¸dÀFÈLÐZ_ÐhkÐw~ÐÑÔÐÝ��#œ,¨¨f°c¸4ÀÈ%ÐQVÑWÔWÐWÝ��#œ,¨¨f°d¸DÀ'È5ÐRWÑXÔXÐXõ ˆG•[ Ô&¨¨S°#°s¸DÑAÔAÐAÝˆG•[ Ô&¨¨c°3¸¸TÑBÔBÐBÝ��#œ-¨¨w¸¸cÀ6È6ÐSXÐadÐpwÐxÑxÔxÐxÝ��#œ,¨¨e°T¸3ÀÈÐTYÑZÔZÐZåˆG•[ Ô&¨¨c°3¸¸TÑBÔBÐBÝ��#œ-¨¨w¸¸cÀ6È6ÐSXÐadÐpwÐxÑxÔxÐxÝ��#œ,¨¨e°T¸3ÀÈÐV]Ñ^Ô^Ð^Ý��#œ,¨¨e°T¸3ÀÈÐV]Ñ^Ô^Ð^õ ˆG•[ Ô&¨¨c°3¸¸TÑBÔBÐBÝˆG•[ Ô&¨¨c°3¸¸TÑBÔBÐBõ ��#œ,¨¨f°d¸DÀ'È7ÐT]ÐfiÐjÑjÔjÐjÝ�˜ ¨¨d°I¸wÑGÔGÐGÝ��#œ,¨¨f°d¸DÀ'È6ÐS^ÐgjÐkÑkÔkÐkÝ�˜ ¨$°°kÀ7ÑKÔKÐKÝ��#œ,¨¨v°t¸TÀ7ÈGÐU`ÐilÐmÑmÔmÐmÝ�˜ ¨$°°kÀ5ÑIÔIÐIð �sŒy‰{Œ{�~Š~˜iÑ(Ô(×.Ò.Ø˜F¨Qµcð /ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜jÑ)Ô)×/Ò/ØdØØÝð	 0ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜jÑ)Ô)×/Ò/ØpØØÝð	 0ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜jÑ)Ô)×/Ò/ØnØØÝð	 0ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜jÑ)Ô)×/Ò/ØfØØÝð	 0ñ ô ñ €Gð �sŒy‰{Œ{�~Š~˜jÑ)Ô)×/Ò/ØfØØÝð	 0ñ ô ñ €Gð ‡L‚L•�V‘” #€LÑ&Ô&Ð&Ð&Ð&r   Ú
output_dirc           	     ó>  — | dz                        ddd¬¦  «        5 }t          j        |¦  «        }|                     d¦  «         t	          t
          ¦  «        D ]7}|                     |d                     t
          |         ¦  «        f¦  «         Œ8	 d d d ¦  «         n# 1 swxY w Y   | dz                        dd¬	¦  «        5 }|                     d
¦  «         |                     d¦  «         t	          t
          ¦  «        D ]H}d                     d„ t
          |         D ¦   «         ¦  «        }|                     d|› d|› d�¦  «         ŒI|                     d¦  «         t          D ]}|                     d|› d�¦  «         Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )Núnetlist.csvÚwÚ úutf-8©ÚnewlineÚencoding)ÚNetÚConnectionsr  z
netlist.md)r:  z# SN65BC184 board netlist

z | Net | Connections |
|---|---|
r¦   c              3  ó"   K  — | ]
}d |› d �V — ŒdS )ú`Nr   )r$   r¶   s     r   r&   z write_netlist.<locals>.<genexpr>?  s*   è è € ÐEÐE°˜} 6˜}˜}˜}ÐEÐEÐEÐEÐEÐEr   z| `z` | z |
z
## No-connect pins

z- `z`
)	ÚopenÚcsvÚwriterÚwriterowr¬   rž   r­   ÚwriterŸ   )r2  ÚstreamrA  r´   Újoinedr¶   s         r   Úwrite_netlistrF  4  s,  € Ø
�}Ñ
$×	*Ò	*¨3¸ÀWÐ	*Ñ	MÔ	Mð 8ÐQWÝ”˜FÑ#Ô#ˆØ�ŠÐ.Ñ/Ô/Ð/Ý�$‘<”<ð 	8ð 	8ˆCØ�OŠO˜S #§(¢(­4°¬9Ñ"5Ô"5Ð6Ñ7Ô7Ð7Ð7ð	8ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð �|Ñ
#×	)Ò	)¨#¸Ð	)Ñ	@Ô	@ð ,ÀFØ�ŠÐ4Ñ5Ô5Ð5Ø�ŠÐ9Ñ:Ô:Ð:Ý�$‘<”<ð 	6ð 	6ˆCØ—Y’YÐEÐE½4À¼9ÐEÑEÔEÑEÔEˆFØ�LŠLÐ4˜sÐ4Ð4¨Ð4Ð4Ð4Ñ5Ô5Ð5Ð5Ø�ŠÐ/Ñ0Ô0Ð0Ý!ð 	,ð 	,ˆFØ�LŠLÐ*˜vÐ*Ð*Ð*Ñ+Ô+Ð+Ð+ð	,ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s%   œA6BÂB#Â&B#ÃC FÆFÆFc                óP  — | dz                        ddd¬¦  «        5 }t          j        |¦  «        }|                     d¦  «         t	          t
          d„ ¬¦  «        D ]/}|                     |j        |j        |j        |j	        f¦  «         Œ0	 d d d ¦  «         d S # 1 swxY w Y   d S )	Núbom.csvr5  r6  r7  r8  )Ú	ReferenceÚValueÚPackageÚDescriptionc                ó   — | j         S r#   r‰   )r%   s    r   ú<lambda>zwrite_bom.<locals>.<lambda>J  s   € ¸T¼X€ r   )Úkey)
r?  r@  rA  rB  r¬   r‡   r   r   r   r   )r2  rD  rA  r‹   s       r   Ú	write_bomrP  F  s   € Ø
�yÑ
 ×	&Ò	& s°BÀÐ	&Ñ	IÔ	Ið ÈVÝ”˜FÑ#Ô#ˆØ�ŠÐHÑIÔIÐIÝ¥
Ð0EÐ0EÐFÑFÔFð 	ð 	ˆIØ�OŠOà”MØ”OØÔ%ØÔ)ð	ñô ð ð ð	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   œA1BÂBÂ"Bc                 óš  — t          j        t          ¬¦  «        } |                      dddd¬¦  «         |                      dt          t
          dz  d	¬
¦  «         |                      ¦   «         }t          ¦   «         }|r"t          d 	                    |¦  «        ¦  «        ‚|j
                             dd¬¦  «         |j
        d|j        › �z  }t          |¦  «         t          |j
        ¦  «         t          |j
        ¦  «         t!          d|› �¦  «         t!          d|j
        dz  › �¦  «         t!          d|j
        dz  › �¦  «         d S )N)r   z--format)r  ÚpngÚpdfr  z&Schematic output format (default: svg))ÚchoicesÚdefaultÚhelpz--output-dirr  z)Directory for schematic, netlist, and BOM)ÚtyperU  rV  ú
T)ÚparentsÚexist_okzrs485_sn65bc184_schemdraw.zGenerated schematic: zGenerated netlist:   r4  zGenerated BOM:       rH  )ÚargparseÚArgumentParserÚ__doc__Úadd_argumentr   ÚROOTÚ
parse_argsr¹   Ú
SystemExitr­   r2  ÚmkdirÚformatr1  rF  rP  Úprint)ÚparserÚargsr®   Ú	schematics       r   Úmainrh  U  sf  € ÝÔ$µÐ9Ñ9Ô9€FØ
×ÒØØ%ØØ5ð	 ñ ô ð ð ×ÒØÝÝ�x‘Ø8ð	 ñ ô ð ð ×ÒÑÔ€DåÑÔ€FØð ,Ý˜Ÿš 6Ñ*Ô*Ñ+Ô+Ð+à„O×Ò $°ÐÑ6Ô6Ð6Ø”Ð"L¸t¼{Ð"LÐ"LÑL€IÝ�9ÑÔÐÝ�$”/Ñ"Ô"Ð"ÝˆdŒoÑÔÐå	Ð
- )Ð
-Ð
-Ñ.Ô.Ð.Ý	Ð
C $¤/°MÑ"AÐ
CÐ
CÑDÔDÐDÝ	Ð
? $¤/°IÑ"=Ð
?Ð
?Ñ@Ô@Ð@Ð@Ð@r   Ú__main__)r   r   r    r   )r    r    )r´   rº   r    r
   )r    rÃ   r#   )rÇ   rÈ   rÉ   rÊ   rË   r
   r´   rº   rÌ   rÍ   r    rÎ   )rÇ   rÈ   r‹   r   rß   rà   rá   rà   râ   rà   rã   rà   rä   rÃ   r    rÎ   )r  r?   )rÇ   rÈ   r  r  r   r
   r   r
   rß   rà   rá   rà   rË   r
   r  r
   r  r
   rÌ   rà   r  r
   r    rÎ   )rÇ   rÈ   r   r
   r   r
   rß   rà   rá   rà   r  r
   r  r
   r    rÎ   )r  r   r    rÎ   )r2  r   r    rÎ   )r    rÎ   )/r]  Ú
__future__r   r[  r@  ÚosÚdataclassesr   Úpathlibr   ÚenvironÚ
setdefaultr'  Úschemdraw.elementsÚelementsrÖ   Ú__file__ÚresolveÚparentr_  r¾   rÁ   r¿   rS   r½   r¼   rÀ   r	   r   r   r‡   r   r�   rž   rŸ   r¹   rÂ   rÆ   rÞ   r   r  r  r1  rF  rP  rh  r   r   r   r   ú<module>ru     s	  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 
€
€
€
Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð ð „
× Ò �nÐ&GÑ HÔ HÐ Hà Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  ð €tˆH�~„~×ÒÑÔÔ&€à€Ø€Ø€Ø€Ø	€Ø€Ø	€ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðñ2ð 2ð 2ð 2ð
 €IØØØØ)ØˆØ,Ø"Ø"Ø$Ø$Ø(Ø-ñ	
ô 	
ñô ð €Iˆd�F˜HÐ&<¸d¸dÐCVÐXmÑ>nÔ>nÑoÔoØ€Iˆd�J Ð'=¸t¸tÐDUÐWkÑ?lÔ?lÑmÔmØ€Iˆd�F˜FÐ$9¸4¸4Ð@QÐSgÑ;hÔ;hÑiÔiØ€Iˆd�G˜V ]°D°DÐ9JÐL`Ñ4aÔ4aÑbÔbØ€IØØØØ=ØˆØ Ø"Ø"Ø(ñ		
ô 	
ñô ð €Iˆd�F˜OÐ-QÐSWÐSWÐXiÐkñ  TAô  TAñ  Bô  BØ€Iˆd�G˜VÐ%GÈÈÐN_ÐauÑIvÔIvÑwÔwØ€Iˆd�D˜&Ð";¸T¸TÐBTÐViÑ=jÔ=jÑkÔkØ€Iˆd�G˜VÐ%6¸¸Ð=OÐQdÑ8eÔ8eÑfÔfØ€Iˆd�D˜&Ð"5°t°tÐ<NÐPcÑ7dÔ7dÑeÔeØ€Iˆd�G˜ZÐ)?ÀÀÐFWÐYmÑAnÔAnÑoÔoØ€Iˆd�F˜F N°D°DÐ9KÐM`Ñ4aÔ4aÑbÔbØ€Iˆd�F˜F N°D°DÐ9KÐM`Ñ4aÔ4aÑbÔbØ€IØØØØ(ØˆØ!Ø!Ø!Ø!Ø!ñ	
ô 	
ñô ð €IØØØØØˆØØØ ØØ"ñ	
ô 	
ñô ð €Iˆd�G˜V [°$°$Ð7HÐJ^Ñ2_Ô2_Ñ`Ô`Ø€Iˆd�E˜6Ð#:¸D¸DÐASÐUhÑ<iÔ<iÑjÔjØ€IØØØØ.ØˆØØ!ØØØØ"ØØñ		
ô 		
ñô ð  €Iˆd�G˜VÐ%;¸T¸TÐBSÐUiÑ=jÔ=jÑkÔkØ€Iˆd�EÐ-Ð/GÈÈÐN`ÐbuÑIvÔIvÑwÔwØ€Iˆd�EÐ-Ð/GÈÈÐN`ÐbuÑIvÔIvÑwÔwØ€IØØØØ$ØˆÐÐ 1Ð3IÑJÔJñô ð €IØØØØ#ØˆÐÐ!3Ð5IÑJÔJñô ð €Iˆd�F˜FÐ$>ÀÀÐEWÐYlÑ@mÔ@mÑnÔnØ€Iˆe�V˜\Ð+HÈ$È$ÐOaÐcvÑJwÔJwÑxÔxØ€Iˆd�F˜FÐ$<¸d¸dÐCUÐWjÑ>kÔ>kÑlÔlØ€Iˆe�X˜|Ð-IÈ4È4ÐPbÐdwÑKxÔKxÑyÔyØ€Iˆe�V˜VÐ%?ÀÀÐFXÐZmÑAnÔAnÑoÔoØ€Iˆe�X˜|Ð-IÈ4È4ÐPbÐdwÑKxÔKxÑyÔyðUk%€
ð kð kð kñ kðZ%ð %Ø.8ð%ñ %ô %€ð ð ð ñ ð6$ØÐ$ð6$à	Ð7ð6$ð ð ð6$ð  
ð ð!6$ðN 
ÐðO6$ðP 
ÐðQ6$ðR Ð/ðS6$ðT ÐðU6$ðV Ð!ðW6$ðX Ð!ðY6$ðZ Ð2ð[6$ð\ Ð"ð]6$ð^ Ð!ð_6$ð` Ð!ða6$ðb Ð6ðc6$ðd Ð7ðe6$ðf Ð ðg6$ðh #Ø#ðk6$ð 6$ð 6$€ð 6ð 6ð 6ñ 6ðp €ð ð ð ñ ñ+ð +ð +ð +ñ\ð ð ð ñ ð ð ð ð  ññ ð ð ð ñ@-5ð -5ð -5ð -5ðt Øñ7ñ 7ð 7ð 7ð 7ñ85ð 5ð 5ð 5ñBn'ð n'ð n'ð n'ñb,ð ,ð ,ð ,ñ$ñ ð ð ñAñ Að Að Að> ‰zÒÐØ€D�F„F€F€F€Fð Ðr   