Merge branch 'main' into timer-face

# Conflicts:
#	movement/make/Makefile
#	movement/movement_faces.h
This commit is contained in:
TheOnePerson 2023-05-18 09:42:13 +02:00
commit 7331851c77
135 changed files with 18302 additions and 320 deletions

9
.gitignore vendored
View file

@ -17,4 +17,11 @@
.idea/
.vs
.vscode
docs/
docs/
*.kicad_sch-bak
*-backups/
*.bak
_autosave*
fp-info-cache
.~*
*.plan

View file

@ -0,0 +1,493 @@
(kicad_pcb (version 20211014) (generator pcbnew)
(general
(thickness 0.19)
)
(paper "A4")
(layers
(0 "F.Cu" signal)
(31 "B.Cu" signal)
(32 "B.Adhes" user "B.Adhesive")
(33 "F.Adhes" user "F.Adhesive")
(34 "B.Paste" user)
(35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen")
(37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user)
(39 "F.Mask" user)
(40 "Dwgs.User" user "User.Drawings")
(41 "Cmts.User" user "User.Comments")
(42 "Eco1.User" user "User.Eco1")
(43 "Eco2.User" user "User.Eco2")
(44 "Edge.Cuts" user)
(45 "Margin" user)
(46 "B.CrtYd" user "B.Courtyard")
(47 "F.CrtYd" user "F.Courtyard")
(48 "B.Fab" user)
(49 "F.Fab" user)
(50 "User.1" user)
(51 "User.2" user)
(52 "User.3" user)
(53 "User.4" user)
(54 "User.5" user)
(55 "User.6" user)
(56 "User.7" user)
(57 "User.8" user)
(58 "User.9" user)
)
(setup
(stackup
(layer "F.SilkS" (type "Top Silk Screen") (color "White"))
(layer "F.Paste" (type "Top Solder Paste"))
(layer "F.Mask" (type "Top Solder Mask") (color "#CC66004D") (thickness 0.01))
(layer "F.Cu" (type "copper") (thickness 0.035))
(layer "dielectric 1" (type "core") (thickness 0.1) (material "Polyimide") (epsilon_r 3.2) (loss_tangent 0.004))
(layer "B.Cu" (type "copper") (thickness 0.035))
(layer "B.Mask" (type "Bottom Solder Mask") (color "#CC66004D") (thickness 0.01))
(layer "B.Paste" (type "Bottom Solder Paste"))
(layer "B.SilkS" (type "Bottom Silk Screen") (color "White"))
(copper_finish "None")
(dielectric_constraints no)
)
(pad_to_mask_clearance 0)
(pcbplotparams
(layerselection 0x00010fc_ffffffff)
(disableapertmacros false)
(usegerberextensions false)
(usegerberattributes true)
(usegerberadvancedattributes true)
(creategerberjobfile true)
(svguseinch false)
(svgprecision 6)
(excludeedgelayer true)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(dxfpolygonmode true)
(dxfimperialunits true)
(dxfusepcbnewfont true)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(sketchpadsonfab false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 0)
(scaleselection 1)
(outputdirectory "OSO-SWAB-B1-00")
)
)
(net 0 "")
(net 1 "/A1_RX")
(net 2 "/A2_TX")
(net 3 "/A4_INT1")
(net 4 "GND")
(net 5 "/A3_INT2")
(net 6 "/SDA")
(net 7 "/SCL")
(net 8 "VCC")
(net 9 "/A0_UNUSED")
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:FH19C9S05SH10-FFC" (layer "F.Cu")
(tedit 0) (tstamp c450d786-1278-4a96-8a62-a0d27859c515)
(at 153.2255 106.7461)
(descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/4dc3cbb6-fb37-42a6-81e4-ab57e8e35700")
(fp_text reference "U$3" (at 0 0) (layer "F.SilkS") hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
(tstamp 9040ae45-373a-45fc-adb3-fcfaa02764b2)
)
(fp_text value "FH19C-9S-0.5SH_10-FFC" (at 0 0) (layer "F.Fab") hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
(tstamp 5af4c90c-a654-4d3a-80bb-293a78da42b9)
)
(fp_poly (pts
(xy 2.56543 3.556)
(xy -2.56537 3.556)
(xy -2.56643 0.898)
(xy 2.56437 0.898)
) (layer "B.Mask") (width 0) (fill solid) (tstamp 21283db5-1009-43c5-a3ef-4954974a3a30))
(pad "1" smd rect (at 2 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 8 "VCC") (pinfunction "1") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp b2e7f160-81a2-4f3a-9cac-d6cba543336c))
(pad "2" smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 4 "GND") (pinfunction "2") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp 4a8a2808-da08-4211-a839-b545ca46843d))
(pad "3" smd rect (at 1 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 3 "/A4_INT1") (pinfunction "3") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp 1ad63a96-1ef2-463e-9ea7-81ba46599172))
(pad "4" smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 5 "/A3_INT2") (pinfunction "4") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp 44970b45-f7b0-47cc-a114-209df0456d8f))
(pad "5" smd rect (at 0 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 2 "/A2_TX") (pinfunction "5") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp 16a60cfb-4140-483f-9675-22643c201dcd))
(pad "6" smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 1 "/A1_RX") (pinfunction "6") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp edf03a5b-8be1-48f8-8f16-4719d937182d))
(pad "7" smd rect (at -1 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 6 "/SDA") (pinfunction "7") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp b54a21f9-d0ee-47bd-8a33-6d2ccb2f1964))
(pad "8" smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 7 "/SCL") (pinfunction "8") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp 496964dd-0d25-423f-9576-ddcd7d92b9c0))
(pad "9" smd rect (at -2 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(net 9 "/A0_UNUSED") (pinfunction "9") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp 6a847b13-3d48-4df7-8dd7-d515f51aacbf))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:LGA12R50P4X4_200X200X70" (layer "B.Cu")
(tedit 0) (tstamp 38449293-6eb3-4fce-a813-980a83af30a5)
(at 145.3261 101.9201 180)
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/f61a4c5e-e4e7-40df-976e-1899d4c8a12a")
(fp_text reference "U2" (at 0.02175 2.6201) (layer "B.SilkS")
(effects (font (size 0.406899 0.406899) (thickness 0.101101)) (justify left mirror))
(tstamp 2fb12f0c-a2cb-4979-8ff3-7261f4205a8f)
)
(fp_text value "LIS2DW12TR" (at -1.501141 -2.001519) (layer "B.Fab")
(effects (font (size 0.406974 0.406974) (thickness 0.101026)) (justify left mirror))
(tstamp 79ae9206-147d-40c8-b439-c5e1aa71ef7c)
)
(fp_line (start -1.05 -0.555) (end -1.05 -1.05) (layer "B.SilkS") (width 0.127) (tstamp 02ae2e5e-0358-428d-9b47-799126b254ae))
(fp_line (start 1.05 -1.05) (end 1.05 -0.555) (layer "B.SilkS") (width 0.127) (tstamp 29d50b3c-acc8-4899-ab05-b18d21ab3b3c))
(fp_line (start 0.555 1.05) (end 1.05 1.05) (layer "B.SilkS") (width 0.127) (tstamp 3ccbbde2-8e04-400e-bf38-caa624eba487))
(fp_line (start -1.05 0.555) (end -1.05 1.05) (layer "B.SilkS") (width 0.127) (tstamp 418272bc-4a1c-4292-abcc-02abb40a91b1))
(fp_line (start 1.05 1.05) (end 1.05 0.555) (layer "B.SilkS") (width 0.127) (tstamp 6b1bdfd4-bd5f-4649-8e19-6c646bd31d41))
(fp_line (start -1.05 1.05) (end -0.555 1.05) (layer "B.SilkS") (width 0.127) (tstamp b9246ad8-1e96-4d28-8417-be94c523f7fa))
(fp_line (start 0.555 -1.05) (end 1.05 -1.05) (layer "B.SilkS") (width 0.127) (tstamp bfa111e0-c472-4d7f-9f9f-eb6d8452f0bc))
(fp_line (start -1.05 -1.05) (end -0.555 -1.05) (layer "B.SilkS") (width 0.127) (tstamp ed58876d-2aff-4c39-a693-85bc921546dc))
(fp_circle (center -1.5 0.75) (end -1.45 0.75) (layer "B.SilkS") (width 0.1) (fill none) (tstamp eed4a4a1-5971-4468-a0eb-4adabc23ee91))
(fp_line (start -1.25 -1.25) (end -1.25 1.25) (layer "B.CrtYd") (width 0.05) (tstamp 0c936eb0-2bed-42c5-a43a-a8c2138d10f6))
(fp_line (start 1.25 1.25) (end 1.25 -1.25) (layer "B.CrtYd") (width 0.05) (tstamp b9af5acd-a7ff-4d1f-a5af-28344932ba28))
(fp_line (start -1.25 1.25) (end 1.25 1.25) (layer "B.CrtYd") (width 0.05) (tstamp df602652-97d0-42fe-8c45-0c9e9cdbab8a))
(fp_line (start 1.25 -1.25) (end -1.25 -1.25) (layer "B.CrtYd") (width 0.05) (tstamp e6004e06-b498-4cbf-a2cd-4065cdd9ac30))
(fp_line (start 1 1) (end 1 -1) (layer "B.Fab") (width 0.127) (tstamp 04b92bea-33f5-431d-87c9-1b951c5a0895))
(fp_line (start 1 -1) (end -1 -1) (layer "B.Fab") (width 0.127) (tstamp 8c6e9c84-beb1-4bc6-b6c0-93f5915e6d31))
(fp_line (start -1 -1) (end -1 1) (layer "B.Fab") (width 0.127) (tstamp c65c8660-c3aa-4e44-a24a-c0839e96ffe1))
(fp_line (start -1 1) (end 1 1) (layer "B.Fab") (width 0.127) (tstamp c9623f6f-a650-4e25-8bd7-692927ca8f9d))
(fp_circle (center -0.75 0.75) (end -0.7 0.75) (layer "B.Fab") (width 0.1) (fill none) (tstamp 06bb0748-9b94-4559-8b9c-a59aa1c8ab55))
(pad "1" smd rect (at -0.76 0.75 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 7 "/SCL") (pinfunction "SCL/SPC") (pintype "input") (solder_mask_margin 0.0635) (tstamp 3db7e36b-889f-4f74-9156-b304ec17949b))
(pad "2" smd rect (at -0.76 0.25 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 8 "VCC") (pinfunction "CS") (pintype "input") (solder_mask_margin 0.0635) (tstamp 358727b9-955e-4b0e-8f93-faac9b591622))
(pad "3" smd rect (at -0.76 -0.25 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 8 "VCC") (pinfunction "SDO/SDA0") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp bf192f28-5a1f-4b77-af0f-de5ad059ed8c))
(pad "4" smd rect (at -0.76 -0.75 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 6 "/SDA") (pinfunction "SDA/SDI/SDO") (pintype "bidirectional") (solder_mask_margin 0.0635) (tstamp ec19640d-d714-4214-b3c1-ade84ffe1184))
(pad "5" smd rect (at -0.25 -0.76 180) (size 0.35 0.4) (layers "B.Cu" "B.Paste" "B.Mask")
(solder_mask_margin 0.0635) (tstamp 98922bc7-e895-48ee-8f8c-8718a306a6e9))
(pad "6" smd rect (at 0.25 -0.76 180) (size 0.35 0.4) (layers "B.Cu" "B.Paste" "B.Mask")
(net 4 "GND") (pinfunction "GND") (pintype "power_in") (solder_mask_margin 0.0635) (tstamp 1ae80af8-dac6-46a2-88cc-ea6877872716))
(pad "7" smd rect (at 0.76 -0.75 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 4 "GND") (pinfunction "RES") (pintype "passive") (solder_mask_margin 0.0635) (tstamp ed3d45a3-b988-41b3-8d80-5013f0b90226))
(pad "8" smd rect (at 0.76 -0.25 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 4 "GND") (pinfunction "GND") (pintype "power_in") (solder_mask_margin 0.0635) (tstamp afff67d6-aa97-4848-86fb-883a57bddf5a))
(pad "9" smd rect (at 0.76 0.25 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 8 "VCC") (pinfunction "VDD") (pintype "power_in") (solder_mask_margin 0.0635) (tstamp a4de6280-2a67-4f62-9a7b-e57bae02df74))
(pad "10" smd rect (at 0.76 0.75 180) (size 0.4 0.35) (layers "B.Cu" "B.Paste" "B.Mask")
(net 8 "VCC") (pinfunction "VDD_IO") (pintype "power_in") (solder_mask_margin 0.0635) (tstamp 861bccff-e93d-4aab-b5fb-31ba7ca49f23))
(pad "11" smd rect (at 0.25 0.76 180) (size 0.35 0.4) (layers "B.Cu" "B.Paste" "B.Mask")
(net 5 "/A3_INT2") (pinfunction "INT2") (pintype "output") (solder_mask_margin 0.0635) (tstamp 8581ef53-a74b-453a-a79a-1ad12a5b60be))
(pad "12" smd rect (at -0.25 0.76 180) (size 0.35 0.4) (layers "B.Cu" "B.Paste" "B.Mask")
(net 3 "/A4_INT1") (pinfunction "INT1") (pintype "output") (solder_mask_margin 0.0635) (tstamp 651bf078-2bd8-4627-9a4d-396860ade5d0))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:_0603MP" (layer "B.Cu")
(tedit 0) (tstamp 52f3f076-84fe-4d87-b520-c9ec8ac43cd8)
(at 142.4051 101.3359 90)
(descr "<b>0603 MicroPitch</b>")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/dbf111d5-5941-4c1b-8fad-675981ce34f4")
(fp_text reference "C2" (at 2.0359 0.3949 180) (layer "B.SilkS")
(effects (font (size 0.388031 0.388031) (thickness 0.119969)) (justify left mirror))
(tstamp 9bd4d62d-7a56-42ce-b3f5-7a6d01978996)
)
(fp_text value "10uF" (at -0.9525 -0.9525 90) (layer "B.Fab")
(effects (font (size 0.442163 0.442163) (thickness 0.065837)) (justify left mirror))
(tstamp dd43d085-ec5b-4b38-8a0a-a3e36d67876d)
)
(fp_poly (pts
(xy -0.1999 -0.25)
(xy 0.1999 -0.25)
(xy 0.1999 0.25)
(xy -0.1999 0.25)
) (layer "B.Adhes") (width 0) (fill solid) (tstamp bf433100-c31b-441a-977d-11c8dfea5e5d))
(fp_line (start 0 0.254) (end 0 -0.254) (layer "B.SilkS") (width 0.2032) (tstamp c0b3ca6d-cbf4-4a4a-829a-bd12e3d6f696))
(fp_line (start 0.432 0.306) (end -0.432 0.306) (layer "B.Fab") (width 0.1016) (tstamp 62361dc9-703b-4d4c-9ead-64531412f98d))
(fp_line (start -0.432 -0.306) (end 0.432 -0.306) (layer "B.Fab") (width 0.1016) (tstamp f78d3c08-172c-4642-a357-be3cd6805e97))
(fp_poly (pts
(xy 0.4318 -0.4)
(xy 0.8 -0.4)
(xy 0.8 0.4)
(xy 0.4318 0.4)
) (layer "B.Fab") (width 0) (fill solid) (tstamp 430dd9e0-a77c-40c2-a434-88901e1d63f9))
(fp_poly (pts
(xy -0.8 -0.4)
(xy -0.4318 -0.4)
(xy -0.4318 0.4)
(xy -0.8 0.4)
) (layer "B.Fab") (width 0) (fill solid) (tstamp e99999ac-764f-42aa-af5f-f6b490544976))
(pad "1" smd rect (at -0.762 0 90) (size 0.8 0.8) (layers "B.Cu" "B.Paste" "B.Mask")
(net 4 "GND") (pinfunction "1") (pintype "passive") (solder_mask_margin 0.0635) (tstamp 05f47ce8-fbff-4c88-a713-924ebec9cd7f))
(pad "2" smd rect (at 0.762 0 90) (size 0.8 0.8) (layers "B.Cu" "B.Paste" "B.Mask")
(net 8 "VCC") (pinfunction "2") (pintype "passive") (solder_mask_margin 0.0635) (tstamp 3418d403-467d-4e3f-8239-51594743a971))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:B1,27" (layer "B.Cu")
(tedit 0) (tstamp 53397a02-3122-469f-8a6e-5586e1d48a70)
(at 144.8435 104.4601 180)
(descr "<b>TEST PAD</b>")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/1936aa8e-84b5-486e-a2d5-81ae44fd41c7")
(fp_text reference "TP3" (at -1.0668 0.3302) (layer "B.SilkS") hide
(effects (font (size 0.30226 0.30226) (thickness 0.075565)) (justify left mirror))
(tstamp a286de89-e15e-41ca-972a-92b40dbbd887)
)
(fp_text value "TPB1,27" (at -0.635 -0.762) (layer "B.Fab")
(effects (font (size 0.503794 0.503794) (thickness 0.004206)) (justify left mirror))
(tstamp 0f58640a-48e4-4c58-8582-c0d0f03f67c9)
)
(pad "TP" smd roundrect (at 0 0 180) (size 1.27 1.27) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.5)
(net 2 "/A2_TX") (pinfunction "TP") (pintype "input") (solder_mask_margin 0.0635) (tstamp 37a22dff-bef4-4a54-aa97-606b44b0539d))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:B1,27" (layer "B.Cu")
(tedit 0) (tstamp 8492a13d-c2e7-4353-90d5-a0194203e30e)
(at 146.2659 105.0951 180)
(descr "<b>TEST PAD</b>")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/a4b4c4fb-1c78-4a88-b6d6-c95ced14e6a1")
(fp_text reference "TP4" (at -1.0668 0) (layer "B.SilkS") hide
(effects (font (size 0.30226 0.30226) (thickness 0.075565)) (justify left mirror))
(tstamp ec765bc0-6a42-4727-9951-7e00656f3a23)
)
(fp_text value "TPB1,27" (at -0.635 -0.762) (layer "B.Fab")
(effects (font (size 0.503794 0.503794) (thickness 0.004206)) (justify left mirror))
(tstamp 4d040dbd-23bd-4b9e-9905-fecd7f7a7e91)
)
(pad "TP" smd roundrect (at 0 0 180) (size 1.27 1.27) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.5)
(net 1 "/A1_RX") (pinfunction "TP") (pintype "input") (solder_mask_margin 0.0635) (tstamp 964091ca-8bbe-4ac8-aaf6-8ee79894dac0))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:_0603MP" (layer "B.Cu")
(tedit 0) (tstamp 92f1bd8b-af09-4166-bc64-aef654c0183a)
(at 143.6243 101.3359 -90)
(descr "<b>0603 MicroPitch</b>")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/81f117f8-2e22-4d95-9843-a6438cc9b8fd")
(fp_text reference "C1" (at -2.0359 0.3243 -180) (layer "B.SilkS")
(effects (font (size 0.388031 0.388031) (thickness 0.119969)) (justify right mirror))
(tstamp 16e2b64b-b1f1-4a7b-a067-eb93b95619a3)
)
(fp_text value "0.1uF" (at -0.9525 -0.9525 -270) (layer "B.Fab")
(effects (font (size 0.442163 0.442163) (thickness 0.065837)) (justify right mirror))
(tstamp e0be7d00-bf2d-45a1-865e-97f1376ca4dd)
)
(fp_poly (pts
(xy -0.1999 -0.25)
(xy 0.1999 -0.25)
(xy 0.1999 0.25)
(xy -0.1999 0.25)
) (layer "B.Adhes") (width 0) (fill solid) (tstamp 737141da-8a5b-4eb5-a94c-2d98ea03ea2b))
(fp_line (start 0 0.254) (end 0 -0.254) (layer "B.SilkS") (width 0.2032) (tstamp 3cb29946-354e-4d69-8954-0cb5df5feb34))
(fp_line (start -0.432 -0.306) (end 0.432 -0.306) (layer "B.Fab") (width 0.1016) (tstamp 58356900-2195-4f68-aa48-0fbeed8a0258))
(fp_line (start 0.432 0.306) (end -0.432 0.306) (layer "B.Fab") (width 0.1016) (tstamp d1fc816b-12b7-4411-becf-b39225ef5a06))
(fp_poly (pts
(xy 0.4318 -0.4)
(xy 0.8 -0.4)
(xy 0.8 0.4)
(xy 0.4318 0.4)
) (layer "B.Fab") (width 0) (fill solid) (tstamp 372669d9-06c5-4965-b34a-bd1ca4aba83d))
(fp_poly (pts
(xy -0.8 -0.4)
(xy -0.4318 -0.4)
(xy -0.4318 0.4)
(xy -0.8 0.4)
) (layer "B.Fab") (width 0) (fill solid) (tstamp 3d2b07eb-66f2-4ca0-8b52-77b42ce79ea8))
(pad "1" smd rect (at -0.762 0 270) (size 0.8 0.8) (layers "B.Cu" "B.Paste" "B.Mask")
(net 8 "VCC") (pinfunction "1") (pintype "passive") (solder_mask_margin 0.0635) (tstamp f408e8b3-d3b1-4975-afa3-6edd4111b541))
(pad "2" smd rect (at 0.762 0 270) (size 0.8 0.8) (layers "B.Cu" "B.Paste" "B.Mask")
(net 4 "GND") (pinfunction "2") (pintype "passive") (solder_mask_margin 0.0635) (tstamp 5fefcc14-df85-4c73-a324-fe9d5f1fa478))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:B1,27" (layer "B.Cu")
(tedit 0) (tstamp d47e36a3-5090-4cf4-bf91-6b011b5fab8a)
(at 142.3035 103.3044 180)
(descr "<b>TEST PAD</b>")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/6ea9dd18-adcc-4aba-8efa-d45943bee5d6")
(fp_text reference "TP1" (at 0.4064 -1.2954 270) (layer "B.SilkS") hide
(effects (font (size 0.30226 0.30226) (thickness 0.075565)) (justify right mirror))
(tstamp 8643f50e-4c54-42e3-8f4e-9e7c565345a4)
)
(fp_text value "TPB1,27" (at -0.635 -0.762) (layer "B.Fab")
(effects (font (size 0.503794 0.503794) (thickness 0.004206)) (justify left mirror))
(tstamp 0ca4bbc5-6d45-40ae-a4b8-b0264327e89b)
)
(pad "TP" smd roundrect (at 0 0 180) (size 1.27 1.27) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.5)
(net 4 "GND") (pinfunction "TP") (pintype "input") (solder_mask_margin 0.0635) (tstamp b69db92a-8dc0-4427-8729-230fe7829975))
)
(footprint "OSO-MISC-21-021 Sensor Watch Motion II:B1,27" (layer "B.Cu")
(tedit 0) (tstamp d5562657-0bb5-4045-b7d6-e98fd391f4a3)
(at 143.3195 104.4601 180)
(descr "<b>TEST PAD</b>")
(property "Sheetfile" "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_sch")
(property "Sheetname" "")
(path "/ec24969b-8391-44db-a79f-3fa50f7e4597")
(fp_text reference "TP2" (at -0.4064 0.8636) (layer "B.SilkS") hide
(effects (font (size 0.30226 0.30226) (thickness 0.075565)) (justify left mirror))
(tstamp 3eb69f50-8679-4783-841b-f3e56c6658ed)
)
(fp_text value "TPB1,27" (at -0.635 -0.762) (layer "B.Fab")
(effects (font (size 0.503794 0.503794) (thickness 0.004206)) (justify left mirror))
(tstamp de2ea6ae-7e35-4c49-af6d-0ddbb267d18e)
)
(pad "TP" smd roundrect (at 0 0 180) (size 1.27 1.27) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.5)
(net 8 "VCC") (pinfunction "TP") (pintype "input") (solder_mask_margin 0.0635) (tstamp 1b224beb-e21a-4340-ac2c-31b7fa1f7f8e))
)
(gr_line (start 155.7147 105.0951) (end 147.5105 105.0951) (layer "F.SilkS") (width 0.127) (tstamp 09b40b31-a75f-48c5-94ff-dac04c6dfaf8))
(gr_line (start 147.0025 100.5231) (end 147.0025 104.5871) (layer "F.SilkS") (width 0.127) (tstamp 59eee44c-9efd-402f-80e1-02593f15460b))
(gr_arc (start 146.2405 99.7611) (mid 146.779315 99.984285) (end 147.0025 100.5231) (layer "F.SilkS") (width 0.127) (tstamp a8fc3609-a41b-4706-8233-14786995acaa))
(gr_arc (start 147.5105 105.0951) (mid 147.15129 104.94631) (end 147.0025 104.5871) (layer "F.SilkS") (width 0.127) (tstamp d204339c-8036-43d2-8aa8-268d985f6138))
(gr_line (start 144.2 105.9) (end 144.7 105.9) (layer "F.Mask") (width 0.1) (tstamp 45263c40-98a9-4f74-a47a-9075d46d8655))
(gr_line (start 150.7363 106.7461) (end 150.7363 110.0961) (layer "Edge.Cuts") (width 0.05) (tstamp 2af795e8-c9a1-416f-b2d3-8be4310d296e))
(gr_arc (start 150.8863 110.2461) (mid 150.780234 110.202166) (end 150.7363 110.0961) (layer "Edge.Cuts") (width 0.05) (tstamp 58502658-0694-45f6-94e7-5aca0f57af62))
(gr_line (start 150.1013 106.1111) (end 145.3515 106.1111) (layer "Edge.Cuts") (width 0.05) (tstamp 5e539d5b-e49f-4f77-9569-2a4261264736))
(gr_line (start 144.7165 105.4761) (end 142.1765 105.4761) (layer "Edge.Cuts") (width 0.05) (tstamp 6ac0bb29-69f1-4b1d-b893-957a8916a1bb))
(gr_arc (start 144.7165 105.4761) (mid 145.165513 105.662087) (end 145.3515 106.1111) (layer "Edge.Cuts") (width 0.05) (tstamp 6b9e5d6b-5222-465f-9b1e-93af00265572))
(gr_arc (start 150.1013 106.1111) (mid 150.550313 106.297087) (end 150.7363 106.7461) (layer "Edge.Cuts") (width 0.05) (tstamp 7f938717-4068-4e5c-92a0-7210bbdd7788))
(gr_arc (start 155.3337 99.7611) (mid 155.603108 99.872692) (end 155.7147 100.1421) (layer "Edge.Cuts") (width 0.05) (tstamp 9b7def2b-3536-42b1-8e65-4b8e423042d7))
(gr_arc (start 142.1765 105.4761) (mid 141.547882 105.215718) (end 141.2875 104.5871) (layer "Edge.Cuts") (width 0.05) (tstamp 9b9870d6-49b4-40a8-b847-cb5468c63035))
(gr_line (start 155.7147 100.1421) (end 155.7147 106.7461) (layer "Edge.Cuts") (width 0.05) (tstamp a6bc6301-abbd-4acf-a77d-1f4e4d107e79))
(gr_line (start 155.5647 110.2461) (end 150.8863 110.2461) (layer "Edge.Cuts") (width 0.05) (tstamp ae418f09-9594-49fa-ba14-c5ebf3097fc7))
(gr_line (start 142.1765 99.7611) (end 155.3337 99.7611) (layer "Edge.Cuts") (width 0.05) (tstamp b5d214ca-8d2c-4892-a145-ebcdf525979d))
(gr_arc (start 141.2875 100.6501) (mid 141.547882 100.021482) (end 142.1765 99.7611) (layer "Edge.Cuts") (width 0.05) (tstamp c4d82428-36d7-43c8-9bfb-b2beed9359df))
(gr_line (start 155.7147 106.7461) (end 155.7147 110.0961) (layer "Edge.Cuts") (width 0.05) (tstamp dc2cbabd-f370-406b-b50e-bb3846cd95ff))
(gr_arc (start 155.7147 110.0961) (mid 155.670766 110.202166) (end 155.5647 110.2461) (layer "Edge.Cuts") (width 0.05) (tstamp e1f2d86b-fcc6-43fe-bbcc-417ac237e0bd))
(gr_line (start 141.2875 104.5871) (end 141.2875 100.6501) (layer "Edge.Cuts") (width 0.05) (tstamp e960ff40-d2dc-4f31-aa56-c3592606d2b4))
(gr_text "TX" (at 144.9 103.3) (layer "B.SilkS") (tstamp 2cd2031e-bdc6-4b09-a5d6-627ebbcee21c)
(effects (font (size 0.4 0.4) (thickness 0.075)) (justify top mirror))
)
(gr_text "RX" (at 146.3 103.9) (layer "B.SilkS") (tstamp 5e112429-2dc1-437d-8792-2c6553eb0f93)
(effects (font (size 0.4 0.4) (thickness 0.075)) (justify top mirror))
)
(gr_text "GND" (at 141.8 104.4 -90) (layer "B.SilkS") (tstamp 72b454f6-3d75-4170-9db1-78a51d4c0e67)
(effects (font (size 0.4 0.4) (thickness 0.075)) (justify top mirror))
)
(gr_text "3V" (at 142.4 105) (layer "B.SilkS") (tstamp f65b8e04-fbde-4466-addc-36be3d61856b)
(effects (font (size 0.4 0.4) (thickness 0.075)) (justify top mirror))
)
(gr_text "I²C: LIS2DW12 (0x19)\nA1/A2: UART RX/TX\nA3/A4: INT2/INT1\n" (at 151.4475 102.8853) (layer "F.SilkS") (tstamp 06718050-7404-4593-8900-5367d4556e53)
(effects (font (size 0.44704 0.44704) (thickness 0.06096)) (justify top))
)
(gr_text "OSO-SWAB-B2-00\nSW Accelerometer:\nDeveloper Preview" (at 151.4475 100.0913) (layer "F.SilkS") (tstamp 1a8b05a9-bccd-4ebd-8312-af5738af914c)
(effects (font (size 0.499872 0.499872) (thickness 0.109728)) (justify top))
)
(segment (start 149.73135 105.23315) (end 149.5933 105.0951) (width 0.2032) (layer "F.Cu") (net 1) (tstamp 0bae9b38-d794-4972-b292-0160f8d78e32))
(segment (start 148.0693 105.0951) (end 149.5933 105.0951) (width 0.2032) (layer "F.Cu") (net 1) (tstamp 46023c51-300f-4e42-afb4-010034d44dac))
(segment (start 151.20785 105.23315) (end 149.73135 105.23315) (width 0.2032) (layer "F.Cu") (net 1) (tstamp 52c0f5dc-54c3-478f-9860-ccb50104bb0b))
(via (at 148.0693 105.0951) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 1) (tstamp e39680a8-e74a-46a6-a545-ac5ad0aa7f34))
(via (at 151.20785 105.23315) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 1) (tstamp fbd986c1-ed36-4026-b812-e3868a5e2ad8))
(segment (start 146.2659 105.0951) (end 148.0693 105.0951) (width 0.2032) (layer "B.Cu") (net 1) (tstamp 3a4f4d1c-4c47-490a-b760-933c1c17288d))
(segment (start 152.7255 106.7508) (end 151.20785 105.23315) (width 0.2032) (layer "B.Cu") (net 1) (tstamp 5a7537b8-356a-483f-afb1-7f541c63a2bb))
(segment (start 152.7255 108.9961) (end 152.7255 106.7508) (width 0.2032) (layer "B.Cu") (net 1) (tstamp 8ff819c8-6284-4bec-859f-4051f056dd5d))
(segment (start 150.77605 104.69975) (end 150.2316 104.1553) (width 0.2032) (layer "F.Cu") (net 2) (tstamp 64f42c98-92a4-4baa-b4b3-05e7803c7f63))
(segment (start 150.2316 104.1553) (end 146.8501 104.1553) (width 0.2032) (layer "F.Cu") (net 2) (tstamp 8306564e-5a9a-4496-9d00-07c1bd5d26b9))
(via (at 150.77605 104.69975) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 2) (tstamp 99809845-4da0-4cf1-bc62-c9244dba4647))
(via (at 146.8501 104.1553) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 2) (tstamp e676c03d-34a8-4263-88a7-40dae634a5e2))
(segment (start 144.8435 104.4601) (end 145.1483 104.1553) (width 0.2032) (layer "B.Cu") (net 2) (tstamp 37789217-9964-4e49-8f73-d44995c5fc7e))
(segment (start 151.51265 104.69975) (end 150.77605 104.69975) (width 0.2032) (layer "B.Cu") (net 2) (tstamp 5857a90c-f5a9-4b24-a98c-479fad8de298))
(segment (start 153.2255 108.9961) (end 153.2255 106.4126) (width 0.2032) (layer "B.Cu") (net 2) (tstamp cae21fe2-e35b-4a44-bcf5-92de0998264c))
(segment (start 146.8501 104.1553) (end 145.1483 104.1553) (width 0.2032) (layer "B.Cu") (net 2) (tstamp f4f1004d-dd60-429f-8283-9f030f526130))
(segment (start 153.2255 106.4126) (end 151.51265 104.69975) (width 0.2032) (layer "B.Cu") (net 2) (tstamp fbcc5301-bbbf-4c9f-b660-fd98838053a6))
(segment (start 154.2255 107.3959) (end 154.0985 107.2689) (width 0.2032) (layer "B.Cu") (net 3) (tstamp 7ebf6bd5-822c-4407-8d1a-08d43c2d0678))
(segment (start 154.0985 106.079475) (end 154.0985 107.2689) (width 0.2032) (layer "B.Cu") (net 3) (tstamp 8a4485c7-f427-446f-af34-1128a47c425d))
(segment (start 145.780813 100.7009) (end 148.719925 100.7009) (width 0.2032) (layer "B.Cu") (net 3) (tstamp b08ebf16-1549-411d-8fab-75c6d1bd76cb))
(segment (start 145.5761 100.905613) (end 145.780813 100.7009) (width 0.2032) (layer "B.Cu") (net 3) (tstamp b21f3bbb-f1c1-4554-ac75-e53c16d27653))
(segment (start 154.0985 106.079475) (end 148.719925 100.7009) (width 0.2032) (layer "B.Cu") (net 3) (tstamp e5d7d599-d647-4e18-96d9-808d318d07c5))
(segment (start 154.2255 108.9961) (end 154.2255 107.3959) (width 0.2032) (layer "B.Cu") (net 3) (tstamp e9b07d7a-e899-4ca0-9369-e0d0ebb1ab10))
(segment (start 145.5761 101.1601) (end 145.5761 100.905613) (width 0.2032) (layer "B.Cu") (net 3) (tstamp febdebfd-50f2-4c7a-baca-c05d26479bd3))
(segment (start 146.8534 103.1139) (end 146.7772 103.1901) (width 0.3048) (layer "F.Cu") (net 4) (tstamp 06fcdb8f-2704-46cd-b30d-dcb7b02e58da))
(segment (start 154.61145 106.83335) (end 150.892 103.1139) (width 0.3048) (layer "F.Cu") (net 4) (tstamp 1fa3df21-bfa8-4c91-9bb0-d56e9306f2bf))
(segment (start 150.892 103.1139) (end 146.8534 103.1139) (width 0.3048) (layer "F.Cu") (net 4) (tstamp 8f443325-1180-471c-a3e1-92e2115c8bf9))
(via (at 154.61145 106.83335) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 4) (tstamp 1b9c6030-7343-4ac8-a6d0-411c1c118821))
(via (at 146.7772 103.1901) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 4) (tstamp 7c1347fe-33ec-4ab3-b26c-77a73b0799f2))
(segment (start 142.4051 102.0979) (end 143.6243 102.0979) (width 0.3048) (layer "B.Cu") (net 4) (tstamp 07ac1533-fe72-4f36-a863-388b14a75fc5))
(segment (start 142.3035 103.3044) (end 142.4051 103.2028) (width 0.3048) (layer "B.Cu") (net 4) (tstamp 0ae5de39-695f-4104-bcec-54b83e33bae2))
(segment (start 144.5661 102.6701) (end 145.0661 102.6701) (width 0.2032) (layer "B.Cu") (net 4) (tstamp 391f44de-b221-459d-83d3-1c670da7efe7))
(segment (start 144.5661 102.1741) (end 144.5661 102.1701) (width 0.2032) (layer "B.Cu") (net 4) (tstamp 3d9119fb-5155-4df7-a94a-e63bdeca035d))
(segment (start 144.5661 102.6701) (end 144.5661 102.1741) (width 0.2032) (layer "B.Cu") (net 4) (tstamp 733bf9c6-aa1d-46f9-b366-35a9f20a2249))
(segment (start 154.7255 108.9961) (end 154.7255 106.9474) (width 0.3048) (layer "B.Cu") (net 4) (tstamp 8c334ef6-ea14-4d64-923e-8c370645175a))
(segment (start 145.28005 103.1901) (end 145.0761 102.98615) (width 0.3048) (layer "B.Cu") (net 4) (tstamp 903215f2-2ab4-494a-8eda-17fc50d3bed0))
(segment (start 145.0661 102.6701) (end 145.0761 102.6801) (width 0.2032) (layer "B.Cu") (net 4) (tstamp a077552a-b221-43cc-9938-5d4743e3399d))
(segment (start 143.6243 102.0979) (end 143.7005 102.1741) (width 0.3048) (layer "B.Cu") (net 4) (tstamp a26ae543-f877-4e55-8489-6ed81f3bfbf5))
(segment (start 145.0761 102.6801) (end 145.0761 102.98615) (width 0.3048) (layer "B.Cu") (net 4) (tstamp b424a39d-8974-4555-8ffe-a4b9f275773a))
(segment (start 142.4051 103.2028) (end 142.4051 102.0979) (width 0.3048) (layer "B.Cu") (net 4) (tstamp c2b57f9a-4cbb-409a-89ca-80ae105c720e))
(segment (start 154.7255 106.9474) (end 154.61145 106.83335) (width 0.3048) (layer "B.Cu") (net 4) (tstamp da906691-c7ce-473f-afa0-e74ab9381761))
(segment (start 145.28005 103.1901) (end 146.7772 103.1901) (width 0.3048) (layer "B.Cu") (net 4) (tstamp fcfeaa1c-0530-4b57-aa65-515779c79adc))
(segment (start 143.7005 102.1741) (end 144.5661 102.1741) (width 0.3048) (layer "B.Cu") (net 4) (tstamp fe08666b-5748-4b31-8ca5-897a10c1698b))
(segment (start 146.3675 101.7677) (end 145.4785 101.7677) (width 0.2032) (layer "F.Cu") (net 5) (tstamp 4b68e877-273f-48ca-a632-c41e8488ccf3))
(segment (start 146.5199 101.9201) (end 146.3675 101.7677) (width 0.2032) (layer "F.Cu") (net 5) (tstamp 918e83c5-b7c2-44c1-b47f-0ab29c1c70b5))
(segment (start 146.5199 101.9201) (end 147.3835 101.9201) (width 0.2032) (layer "F.Cu") (net 5) (tstamp ad51b439-098c-4e18-ae1f-9d44e116b8f7))
(via (at 147.3835 101.9201) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 5) (tstamp 434f1740-e8ea-48aa-819a-e8f0c67929c4))
(via (at 145.4785 101.7677) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 5) (tstamp 6ba8a963-4e52-4da9-b129-37389306d641))
(segment (start 145.4277 101.7677) (end 145.0761 101.4161) (width 0.2032) (layer "B.Cu") (net 5) (tstamp 10257638-748f-4792-830d-716a1c0db7ff))
(segment (start 145.0761 101.1601) (end 145.0761 101.4161) (width 0.2032) (layer "B.Cu") (net 5) (tstamp 365cff8c-a479-4d79-b362-fdfac89711c6))
(segment (start 150.2029 104.1807) (end 147.9423 101.9201) (width 0.2032) (layer "B.Cu") (net 5) (tstamp 90ce1c88-363b-45a2-919d-8827646fa909))
(segment (start 145.4785 101.7677) (end 145.4277 101.7677) (width 0.2032) (layer "B.Cu") (net 5) (tstamp be3923fc-ad03-412b-bb5d-3fdd829c673e))
(segment (start 147.9423 101.9201) (end 147.3835 101.9201) (width 0.2032) (layer "B.Cu") (net 5) (tstamp d182f9f8-e6a8-4202-9825-0d3dc441d54e))
(segment (start 153.7255 106.22845) (end 151.67775 104.1807) (width 0.2032) (layer "B.Cu") (net 5) (tstamp e273d4e7-8cf7-453c-9576-254ffc1b9a69))
(segment (start 151.67775 104.1807) (end 150.2029 104.1807) (width 0.2032) (layer "B.Cu") (net 5) (tstamp f428be95-0b2d-4a60-bceb-9e05112c3631))
(segment (start 153.7255 108.9961) (end 153.7255 106.22845) (width 0.2032) (layer "B.Cu") (net 5) (tstamp f706a32a-34b2-481f-abbc-a90a4713812a))
(segment (start 152.2255 106.978) (end 147.9176 102.6701) (width 0.2032) (layer "B.Cu") (net 6) (tstamp 3eea729f-d81e-4602-924f-df00dc9fa656))
(segment (start 152.2255 108.9961) (end 152.2255 106.978) (width 0.2032) (layer "B.Cu") (net 6) (tstamp 5e249130-5691-4735-95bd-6a35e7230671))
(segment (start 147.9176 102.6701) (end 146.0861 102.6701) (width 0.2032) (layer "B.Cu") (net 6) (tstamp 6a7b5cae-5706-4ae7-90cd-85b744bf9818))
(segment (start 151.71585 107.21435) (end 151.71585 104.90625) (width 0.2032) (layer "F.Cu") (net 7) (tstamp 5cd87d85-df22-4c10-9e4e-723432382705))
(segment (start 151.71585 104.90625) (end 150.4823 103.6727) (width 0.2032) (layer "F.Cu") (net 7) (tstamp 9e5e5b3d-da91-43f7-a8e1-1798b10f31c4))
(via (at 150.4823 103.6727) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 7) (tstamp a9964fed-7444-442b-82cc-b749621619ca))
(via (at 151.71585 107.21435) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 7) (tstamp c2434c2f-d941-4c49-8079-f193e7b68270))
(segment (start 151.7255 108.9961) (end 151.7255 107.224) (width 0.2032) (layer "B.Cu") (net 7) (tstamp 8ae15dfd-83d6-4de0-b635-cf161fade6d8))
(segment (start 147.9797 101.1701) (end 146.0861 101.1701) (width 0.2032) (layer "B.Cu") (net 7) (tstamp 9502ea06-b6dc-4669-9f41-6d0a72043887))
(segment (start 151.7255 107.224) (end 151.71585 107.21435) (width 0.2032) (layer "B.Cu") (net 7) (tstamp a3a7ea90-729d-4167-a73a-5b7df6440f1d))
(segment (start 150.4823 103.6727) (end 147.9797 101.1701) (width 0.2032) (layer "B.Cu") (net 7) (tstamp d8832711-350c-4ec6-a360-bb9e4c599453))
(segment (start 143.0147 101.3423) (end 143.5989 101.9265) (width 0.3048) (layer "F.Cu") (net 8) (tstamp 11b50766-7a82-4010-9094-79ac57ff803a))
(segment (start 143.5989 101.9265) (end 143.5989 103.1901) (width 0.3048) (layer "F.Cu") (net 8) (tstamp a307a9c7-a8ef-452f-a518-570df34d3971))
(via (at 143.0147 101.3423) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 8) (tstamp 4555beef-afd0-4a07-a374-49fd7a56b2b2))
(via (at 143.5989 103.1901) (size 0.508) (drill 0.254) (layers "F.Cu" "B.Cu") (net 8) (tstamp e4527f25-252e-4b65-948d-69c2f9252889))
(segment (start 143.6243 100.5739) (end 144.2593 100.5739) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 0255fcc1-949a-4f3e-9303-3ea178273985))
(segment (start 144.5661 100.86405) (end 144.557775 100.872375) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 0430d002-15bd-4a42-b0f9-df13695fcd41))
(segment (start 146.0861 102.1701) (end 146.0861 101.6701) (width 0.1524) (layer "B.Cu") (net 8) (tstamp 311f6061-4902-4cbc-adea-c404d4acbf4f))
(segment (start 144.2593 100.5739) (end 144.557775 100.872375) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 3cb471ac-4528-43b2-8cc2-c3ed9505edbb))
(segment (start 142.4051 100.5739) (end 142.4051 100.7327) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 4a55c467-28b2-400a-bb25-411d525e0c41))
(segment (start 146.0861 102.1701) (end 145.7586 102.1701) (width 0.1524) (layer "B.Cu") (net 8) (tstamp 57534e6f-4afa-4ff4-8fb8-efd13eca414d))
(segment (start 144.5661 101.1701) (end 144.5661 100.86405) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 5db439c0-d3e7-4734-b78a-7d0e5bb5ff74))
(segment (start 144.5661 101.6701) (end 144.5661 101.1701) (width 0.2032) (layer "B.Cu") (net 8) (tstamp 7ebfbee5-a62a-4d13-aa04-b904378145cd))
(segment (start 142.4051 100.5739) (end 143.6243 100.5739) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 81233f61-eb56-41e1-aff7-bb28c6de0f43))
(segment (start 145.13565 100.2945) (end 144.5661 100.86405) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 88b53bf2-a9d1-436f-9e73-361984ffadfd))
(segment (start 145.6784 102.2503) (end 145.2278 102.2503) (width 0.1524) (layer "B.Cu") (net 8) (tstamp 90b3147c-c625-4f91-99f2-b3e2525c4b58))
(segment (start 155.2255 108.9961) (end 155.2255 106.631737) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 99b20163-86e6-4035-8ae8-2076cd6324d5))
(segment (start 155.2255 106.631737) (end 148.888263 100.2945) (width 0.3048) (layer "B.Cu") (net 8) (tstamp 9a895394-1736-428b-8941-d281f03cb5c1))
(segment (start 144.5661 101.6701) (end 144.764388 101.6701) (width 0.1524) (layer "B.Cu") (net 8) (tstamp a3e3db84-e7c7-4654-839f-76d04cc0c896))
(segment (start 144.9947 102.0172) (end 144.9947 101.900413) (width 0.1524) (layer "B.Cu") (net 8) (tstamp a4d1b77a-1e80-4648-9ae9-519383b53778))
(segment (start 142.4051 100.7327) (end 143.0147 101.3423) (width 0.3048) (layer "B.Cu") (net 8) (tstamp a9338404-2317-4d4a-8561-2fc099b9516a))
(segment (start 143.5989 104.1807) (end 143.5989 103.1901) (width 0.3048) (layer "B.Cu") (net 8) (tstamp bece63a7-3dcb-4c76-846e-10153f6e0bc1))
(segment (start 144.764388 101.6701) (end 144.9947 101.900413) (width 0.1524) (layer "B.Cu") (net 8) (tstamp beeed655-48b9-475b-8276-e75e9ceba0c9))
(segment (start 143.3195 104.4601) (end 143.5989 104.1807) (width 0.3048) (layer "B.Cu") (net 8) (tstamp e5fe01a0-2862-474d-bb27-d55a88f6ecb0))
(segment (start 145.7586 102.1701) (end 145.6784 102.2503) (width 0.1524) (layer "B.Cu") (net 8) (tstamp e87db6bb-555e-4674-ad0d-38786a05b91b))
(segment (start 145.2278 102.2503) (end 144.9947 102.0172) (width 0.1524) (layer "B.Cu") (net 8) (tstamp ec19ba45-9ebe-4ac5-aa32-4f3cb5d1c05c))
(segment (start 148.888263 100.2945) (end 145.13565 100.2945) (width 0.3048) (layer "B.Cu") (net 8) (tstamp efab3462-3997-4e87-83fd-171e8d73a0ec))
)

View file

@ -0,0 +1,77 @@
{
"board": {
"active_layer": 39,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"ratsnest_display_mode": 0,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"meta": {
"filename": "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,527 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"board_outline_line_width": 0.049999999999999996,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.09999999999999999,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.12,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.508
}
},
"diff_pair_dimensions": [
{
"gap": 0.0,
"via_gap": 0.0,
"width": 0.0
}
],
"drc_exclusions": [
"copper_edge_clearance|151052000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|6a847b13-3d48-4df7-8dd7-d515f51aacbf",
"copper_edge_clearance|151552000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|496964dd-0d25-423f-9576-ddcd7d92b9c0",
"copper_edge_clearance|152052000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|b54a21f9-d0ee-47bd-8a33-6d2ccb2f1964",
"copper_edge_clearance|152552000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|edf03a5b-8be1-48f8-8f16-4719d937182d",
"copper_edge_clearance|153052000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|16a60cfb-4140-483f-9675-22643c201dcd",
"copper_edge_clearance|153552000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|44970b45-f7b0-47cc-a114-209df0456d8f",
"copper_edge_clearance|154052000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|1ad63a96-1ef2-463e-9ea7-81ba46599172",
"copper_edge_clearance|154552000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|4a8a2808-da08-4211-a839-b545ca46843d",
"copper_edge_clearance|155052000|110246100|ae418f09-9594-49fa-ba14-c5ebf3097fc7|b2e7f160-81a2-4f3a-9cac-d6cba543336c",
"silk_over_copper|146240500|100142100|b5d214ca-8d2c-4892-a145-ebcdf525979d|a8fc3609-a41b-4706-8233-14786995acaa",
"silk_over_copper|155714700|105095100|a6bc6301-abbd-4acf-a77d-1f4e4d107e79|09b40b31-a75f-48c5-94ff-dac04c6dfaf8"
],
"meta": {
"filename": "board_design_settings.json",
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint_type_mismatch": "error",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rules": {
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.127,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.024999999999999998,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.254,
"min_track_width": 0.127,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"solder_mask_to_copper_clearance": 0.0,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 5,
"td_on_pad_in_zone": false,
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [
0.0
],
"via_dimensions": [
{
"diameter": 0.0,
"drill": 0.0
}
],
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "OSO-SWAB-B1-00 Sensor Watch Accelerometer.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.127,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.127,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
},
{
"bus_width": 12,
"clearance": 0.127,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "gnd",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2032,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
},
{
"bus_width": 12,
"clearance": 0.127,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "power",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2032,
"via_diameter": 0.8,
"via_drill": 0.4,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"drawing": {
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"ngspice": {
"fix_include_paths": true,
"fix_passive_vals": false,
"meta": {
"version": 0
},
"model_mode": 0,
"workbook_filename": ""
},
"page_layout_descr_file": "empty.kicad_wks",
"plot_directory": "",
"spice_adjust_passive_values": false,
"spice_external_command": "spice \"%I\"",
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"677683ff-9f49-4367-8af2-04a801740db6",
""
]
],
"text_variables": {}
}

View file

@ -0,0 +1,15 @@
(footprint "B1,27" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(descr "<b>TEST PAD</b>")
(fp_text reference "REF**" (at -0.635 -1.016) (layer "F.SilkS")
(effects (font (size 1.143 1.143) (thickness 0.127)) (justify left bottom))
(tstamp 66611b0e-db6e-4021-9427-c32ecc053115)
)
(fp_text value ">VALUE" (at -0.635 0.762) (layer "F.Fab")
(effects (font (size 0.023368 0.023368) (thickness 0.002032)) (justify left bottom))
(tstamp 4ac60ae9-6f70-4bce-8da5-6eac3cd3a3ad)
)
(pad "TP" smd roundrect (at 0 0) (size 1.27 1.27) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.5)
(solder_mask_margin 0.0635) (tstamp b8f939e4-9cdb-4994-993d-3ae41bb30177))
)

View file

@ -0,0 +1,42 @@
(footprint "FH19C9S05SH10-FFC" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
(fp_text reference "REF**" (at 0 0) (layer "F.SilkS")
(effects (font (size 1.27 1.27) (thickness 0.15)))
(tstamp 2891e198-646d-4022-ba59-cc504d2b7d16)
)
(fp_text value "" (at 0 0) (layer "F.Fab")
(effects (font (size 1.27 1.27) (thickness 0.15)))
(tstamp cb35e01a-ade6-4e76-8860-9691b680c03d)
)
(fp_poly (pts
(xy 2.56543 3.556)
(xy -2.56537 3.556)
(xy -2.56643 0.898)
(xy 2.56437 0.898)
) (layer "B.Mask") (width 0) (fill solid) (tstamp 2b3c01e4-c750-4f56-8673-86cd61068635))
(fp_line (start -2.4892 0) (end -2.4892 3.35) (layer "Edge.Cuts") (width 0.05) (tstamp 593436ec-2ee2-4f89-a482-ad9d710ea79d))
(fp_line (start 2.4892 0) (end 2.4892 3.35) (layer "Edge.Cuts") (width 0.05) (tstamp 757ab00f-2565-4955-8ca5-247d2ab4a459))
(fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer "Edge.Cuts") (width 0.05) (tstamp be6a643e-0f3d-406b-82ce-bc5dd821e563))
(fp_arc (start -2.3392 3.5) (mid -2.445266 3.456066) (end -2.4892 3.35) (layer "Edge.Cuts") (width 0.05) (tstamp eeb7dd92-dd48-45ec-b09f-f99710ea3b88))
(fp_arc (start 2.4892 3.35) (mid 2.445266 3.456066) (end 2.3392 3.5) (layer "Edge.Cuts") (width 0.05) (tstamp eecbbc5b-a539-4c7c-8789-2616156ab52b))
(pad "1" smd rect (at 2 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp 2b902acc-4a08-4047-ad60-bbf1eeaab6ab))
(pad "2" smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp d8e62cc7-7124-4f2e-889d-3746b3d86a64))
(pad "3" smd rect (at 1 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp f999fa66-5f95-4c6d-9b5b-e8836c9dc89d))
(pad "4" smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp ab03249d-815c-4b6a-af6f-cad8e8308166))
(pad "5" smd rect (at 0 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp badef670-3ddf-4b49-83a7-fe6eb4b07cad))
(pad "6" smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp 102be87f-c42b-4e09-b634-d2882c35f5ae))
(pad "7" smd rect (at -1 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp 092cbced-a774-4b39-a3d1-c6d31915fb62))
(pad "8" smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp 1b3a5bc0-e9f9-47de-b2f0-4672614e470a))
(pad "9" smd rect (at -2 2.25 90) (size 2.5 0.347) (layers "B.Cu" "B.Mask")
(solder_mask_margin 0.0635) (tstamp b0acd8bd-47e9-4935-a884-665ee78af58f))
)

View file

@ -0,0 +1,54 @@
(footprint "LGA12R50P4X4_200X200X70" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(fp_text reference "REF**" (at -1.50225 -1.50225) (layer "F.SilkS")
(effects (font (size 0.561674 0.561674) (thickness 0.048841)) (justify left bottom))
(tstamp a841a941-dbd4-406e-9e83-16f988577ed7)
)
(fp_text value ">VALUE" (at -1.50114 2.001518) (layer "F.Fab")
(effects (font (size 0.561257 0.561257) (thickness 0.048805)) (justify left bottom))
(tstamp 0a9955a0-6068-4d38-b05e-1ba1984749d1)
)
(fp_line (start 0.555 -1.05) (end 1.05 -1.05) (layer "F.SilkS") (width 0.127) (tstamp 1ec22d83-cad4-4dee-9f07-ac20256d34bb))
(fp_line (start 0.555 1.05) (end 1.05 1.05) (layer "F.SilkS") (width 0.127) (tstamp 2ab2f09e-0c2e-40e1-8cad-8618b2964772))
(fp_line (start 1.05 1.05) (end 1.05 0.555) (layer "F.SilkS") (width 0.127) (tstamp 691adb00-c7cf-42cd-b3b3-3cb402f71864))
(fp_line (start -1.05 -0.555) (end -1.05 -1.05) (layer "F.SilkS") (width 0.127) (tstamp 693e0e56-7ca2-4e3c-943f-7d93d816dd88))
(fp_line (start -1.05 -1.05) (end -0.555 -1.05) (layer "F.SilkS") (width 0.127) (tstamp 6dd9b638-7d83-48ad-9c0b-d0a3b14ff194))
(fp_line (start 1.05 -1.05) (end 1.05 -0.555) (layer "F.SilkS") (width 0.127) (tstamp cfdfed39-3585-4f3d-af2c-df735f17f29f))
(fp_line (start -1.05 0.555) (end -1.05 1.05) (layer "F.SilkS") (width 0.127) (tstamp d5677caf-5ab2-407c-a936-e4226c17744c))
(fp_line (start -1.05 1.05) (end -0.555 1.05) (layer "F.SilkS") (width 0.127) (tstamp f1e92131-893d-407c-85ed-04a3d79dc8bc))
(fp_circle (center -1.5 -0.75) (end -1.45 -0.75) (layer "F.SilkS") (width 0.1) (fill none) (tstamp 6e7bb868-6df4-43cc-ae2f-1d2b706e4c2e))
(fp_line (start 1.25 -1.25) (end 1.25 1.25) (layer "F.CrtYd") (width 0.05) (tstamp 47f30fc1-7ed7-4645-8836-972c17bb4fe5))
(fp_line (start -1.25 1.25) (end -1.25 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp 4c1ed0d1-05e7-40bc-b7c8-845b3478b8d5))
(fp_line (start 1.25 1.25) (end -1.25 1.25) (layer "F.CrtYd") (width 0.05) (tstamp 593de62e-58e0-4efc-8ba1-b886cd08985c))
(fp_line (start -1.25 -1.25) (end 1.25 -1.25) (layer "F.CrtYd") (width 0.05) (tstamp 75cee19c-8883-4eb2-bb54-93d3242790c4))
(fp_line (start 1 -1) (end 1 1) (layer "F.Fab") (width 0.127) (tstamp 0e31b15a-0bed-4c02-a998-422f761d6f21))
(fp_line (start 1 1) (end -1 1) (layer "F.Fab") (width 0.127) (tstamp 25e98454-7b51-4256-99ce-d71274a09ddd))
(fp_line (start -1 1) (end -1 -1) (layer "F.Fab") (width 0.127) (tstamp 9455eb49-e46c-4cc1-931f-245a8cf4484a))
(fp_line (start -1 -1) (end 1 -1) (layer "F.Fab") (width 0.127) (tstamp 96a4c6a7-70a8-4dc8-851d-90638be2de9c))
(fp_circle (center -0.75 -0.75) (end -0.7 -0.75) (layer "F.Fab") (width 0.1) (fill none) (tstamp 3ca22245-934d-45a7-84cc-c2d904109998))
(pad "1" smd rect (at -0.76 -0.75) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 9b76f23f-a839-4e38-ab2f-47fe312a5451))
(pad "2" smd rect (at -0.76 -0.25) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 084df340-c833-4415-b5ea-ddf2da7aeab1))
(pad "3" smd rect (at -0.76 0.25) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 56e68fb3-7611-43b1-852f-2d9d710a10d4))
(pad "4" smd rect (at -0.76 0.75) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp e1e62aad-3a36-476f-b704-a4b4240137d2))
(pad "5" smd rect (at -0.25 0.76) (size 0.35 0.4) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp cd41e53a-0c76-4c5f-800c-753fe980f311))
(pad "6" smd rect (at 0.25 0.76) (size 0.35 0.4) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 8d08899e-801e-464e-a053-80ece5d40773))
(pad "7" smd rect (at 0.76 0.75) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 124b0827-61a2-4ca5-9e46-df5984bdff25))
(pad "8" smd rect (at 0.76 0.25) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 4a93be6c-d59b-4ab5-b017-af8dd5c58e3a))
(pad "9" smd rect (at 0.76 -0.25) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 0baa1d51-a8bc-4483-b400-80a9ff172160))
(pad "10" smd rect (at 0.76 -0.75) (size 0.4 0.35) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 09311f64-fad0-424e-8eae-c2a2bd2cac0a))
(pad "11" smd rect (at 0.25 -0.76) (size 0.35 0.4) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 41f01f34-006e-48b6-a52b-6948fb66b57f))
(pad "12" smd rect (at -0.25 -0.76) (size 0.35 0.4) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp f87a7419-f9cb-4939-a776-f1a6ae037a85))
)

View file

@ -0,0 +1,38 @@
(footprint "_0603MP" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 0)
(descr "<b>0603 MicroPitch</b>")
(fp_text reference "REF**" (at -0.9525 -0.635) (layer "F.SilkS")
(effects (font (size 0.666496 0.666496) (thickness 0.146304)) (justify left bottom))
(tstamp 08ea7653-fcf2-4de6-bc2d-71c2559866c5)
)
(fp_text value ">VALUE" (at -0.9525 0.9525) (layer "F.Fab")
(effects (font (size 0.36576 0.36576) (thickness 0.04064)) (justify left bottom))
(tstamp c6f30152-8d59-4f78-bba8-2d4dbdc2be46)
)
(fp_poly (pts
(xy -0.1999 0.25)
(xy 0.1999 0.25)
(xy 0.1999 -0.25)
(xy -0.1999 -0.25)
) (layer "F.Adhes") (width 0) (fill solid) (tstamp e4d4e5f7-6687-4207-9525-f44fa6947d43))
(fp_line (start 0 -0.254) (end 0 0.254) (layer "F.SilkS") (width 0.2032) (tstamp 8494f3d6-e422-4ed3-afab-572a517aba7f))
(fp_line (start -0.432 0.306) (end 0.432 0.306) (layer "F.Fab") (width 0.1016) (tstamp 3a69b14b-04ad-4165-ab2f-4ad1c270b812))
(fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer "F.Fab") (width 0.1016) (tstamp 590cef58-c4cf-4e7a-ac89-6a7a7801e6c8))
(fp_poly (pts
(xy 0.4318 0.4)
(xy 0.8 0.4)
(xy 0.8 -0.4)
(xy 0.4318 -0.4)
) (layer "F.Fab") (width 0) (fill solid) (tstamp 2630aa28-dcfc-4f76-bf4f-eac1115a0083))
(fp_poly (pts
(xy -0.8 0.4)
(xy -0.4318 0.4)
(xy -0.4318 -0.4)
(xy -0.8 -0.4)
) (layer "F.Fab") (width 0) (fill solid) (tstamp 6d4a5dc7-5dd7-4742-b5e4-d512d0913c9b))
(pad "1" smd rect (at -0.762 0) (size 0.8 0.8) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 5ce1ec75-6b24-4360-8dcb-9033548b2be2))
(pad "2" smd rect (at 0.762 0) (size 0.8 0.8) (layers "F.Cu" "F.Paste" "F.Mask")
(solder_mask_margin 0.0635) (tstamp 77d09e3e-6f43-44cb-8866-ea235200f8dc))
)

View file

@ -0,0 +1,5 @@
(kicad_wks (version 20210606) (generator pl_editor)
(setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)
(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))
(line (name "segm1:Line") (start 0 0) (end 0 0))
)

View file

@ -0,0 +1,3 @@
(fp_lib_table
(lib (name "OSO-MISC-21-021 Sensor Watch Motion II")(type "KiCad")(uri "$(KIPRJMOD)/OSO-SWAB-B1-00 Sensor Watch Accelerometer.pretty")(options "")(descr ""))
)

View file

@ -0,0 +1,3 @@
(sym_lib_table
(lib (name "OSO-MISC-21-021 Sensor Watch Motion II-eagle-import")(type "KiCad")(uri "${KIPRJMOD}/OSO-MISC-21-021 Sensor Watch Motion II-eagle-import.kicad_sym")(options "")(descr ""))
)

View file

@ -0,0 +1,2 @@
OPT3001DNPT/*

View file

@ -0,0 +1,162 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# OPT3001DNPT_OPT3001DNPT
#
DEF OPT3001DNPT_OPT3001DNPT U 0 40 Y Y 1 L N
F0 "U" -400 550 50 H V L BNN
F1 "OPT3001DNPT_OPT3001DNPT" -400 -450 50 H V L BNN
F2 "SON65P200X200X65-7N" 0 0 50 H I L BNN
F3 "" 0 0 50 H I L BNN
F4 "0.65" 0 0 50 H I L BNN "ENOM"
F5 "1.9" 0 0 50 H I L BNN "E_MIN"
F6 "0.25" 0 0 50 H I L BNN "L_MIN"
F7 "2.0" 0 0 50 H I L BNN "E_NOM"
F8 "0.65" 0 0 50 H I L BNN "A_MAX"
F9 "0.65" 0 0 50 H I L BNN "E2_NOM"
F10 "IPC 7351B" 0 0 50 H I L BNN "STANDARD"
F11 "01/2018" 0 0 50 H I L BNN "PARTREV"
F12 "0.25" 0 0 50 H I L BNN "B_NOM"
F13 "0.3" 0 0 50 H I L BNN "B_MAX"
F14 "0.2" 0 0 50 H I L BNN "B_MIN"
F15 "6.0" 0 0 50 H I L BNN "PIN_COUNT"
F16 "2.1" 0 0 50 H I L BNN "E_MAX"
F17 "0.35" 0 0 50 H I L BNN "L_MAX"
F18 "Texas Instruments" 0 0 50 H I L BNN "MANUFACTURER"
F19 "1.35" 0 0 50 H I L BNN "D2_NOM"
F20 "0.3" 0 0 50 H I L BNN "L_NOM"
F21 "2.1" 0 0 50 H I L BNN "D_MAX"
F22 "2.0" 0 0 50 H I L BNN "D_NOM"
F23 "1.9" 0 0 50 H I L BNN "D_MIN"
DRAW
S -400 -400 400 500 0 0 10 f
X VDD 1 600 400 200 L 40 40 0 0 W
X ADDR 2 -600 200 200 R 40 40 0 0 I
X GND 3 600 -300 200 L 40 40 0 0 W
X SCL 4 -600 0 200 R 40 40 0 0 I C
X INT 5 600 200 200 L 40 40 0 0 O
X SDA 6 -600 -100 200 R 40 40 0 0 B
X EXP 7 600 -100 200 L 40 40 0 0 P
ENDDRAW
ENDDEF
#
# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_A4L-LOC
#
DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_A4L-LOC #FRAME 0 40 Y Y 1 L N
F0 "#FRAME" 0 0 50 H I C CNN
F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_A4L-LOC" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 8550 600 85 0 1 0 >DRAWING_NAME Normal 0 L B
T 0 8550 400 76 0 1 0 >LAST_DATE_TIME Normal 0 L B
T 0 8995 200 85 0 1 0 >SHEET Normal 0 L B
T 0 8550 800 85 0 1 0 "by joey castillo" Normal 0 L B
T 0 9300 200 85 0 1 0 "cc-by-sa 4.0" Normal 0 L B
T 0 7300 200 180 0 1 0 oddly_specific_objects Normal 0 L B
T 0 8540 195 85 0 1 0 Sheet: Normal 0 L B
P 2 1 0 0 7250 150 7250 950 N
P 2 1 0 0 7250 950 8475 950 N
P 2 1 0 0 8475 350 8475 150 N
P 2 1 0 0 8475 350 8475 550 N
P 2 1 0 0 8475 550 8475 750 N
P 2 1 0 0 8475 550 10100 550 N
P 2 1 0 0 8475 750 8475 950 N
P 2 1 0 0 8475 750 10100 750 N
P 2 1 0 0 8475 950 10100 950 N
P 2 1 0 0 9250 150 9250 350 N
P 2 1 0 0 9250 350 8475 350 N
P 2 1 0 0 9250 350 10100 350 N
P 2 1 0 0 10100 150 10100 350 N
P 2 1 0 0 10100 350 10100 550 N
P 2 1 0 0 10100 550 10100 750 N
P 2 1 0 0 10100 750 10100 950 N
ENDDRAW
ENDDEF
#
# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_FH19C-9S-0.5SH_10-FFC
#
DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_FH19C-9S-0.5SH_10-FFC ~ 0 40 Y Y 1 L N
F0 "" 350 700 59 H V L CNN
F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_FH19C-9S-0.5SH_10-FFC" 350 600 59 H V L CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -200 500 -200 -500 N
P 2 1 0 0 -200 500 300 500 N
P 2 1 0 0 300 -500 -200 -500 N
P 2 1 0 0 300 -500 300 500 N
X 1 1 500 400 200 L 50 50 1 0 B
X 2 2 500 300 200 L 50 50 1 0 B
X 3 3 500 200 200 L 50 50 1 0 B
X 4 4 500 100 200 L 50 50 1 0 B
X 5 5 500 0 200 L 50 50 1 0 B
X 6 6 500 -100 200 L 50 50 1 0 B
X 7 7 500 -200 200 L 50 50 1 0 B
X 8 8 500 -300 200 L 50 50 1 0 B
X 9 9 500 -400 200 L 50 50 1 0 B
ENDDRAW
ENDDEF
#
# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_GND
#
DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_GND #GND 0 40 Y Y 1 L P
F0 "#GND" 0 0 50 H I C CNN
F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_GND" -100 -100 59 H V L BNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -75 0 75 0 N
X GND 1 0 100 100 D 0 0 1 0 W
ENDDRAW
ENDDEF
#
# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_RESISTOR_0603MP
#
DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_RESISTOR_0603MP R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_RESISTOR_0603MP" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_TPB1,27
#
DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_TPB1,27 TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_TPB1,27" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_VCC
#
DEF Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_VCC #P+ 0 40 Y Y 1 L P
F0 "#P+" 0 0 50 H I C CNN
F1 "Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import_VCC" -100 -100 59 V V L BNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 0 0 -50 -75 N
P 2 1 0 0 50 -75 0 0 N
X VCC 1 0 -100 100 U 0 0 1 0 W
ENDDRAW
ENDDEF
#
#End Library

View file

@ -0,0 +1,497 @@
(kicad_pcb (version 20171130) (host pcbnew 5.1.9+dfsg1-1+deb11u1)
(general
(thickness 1.6)
(drawings 22)
(tracks 90)
(zones 0)
(modules 10)
(nets 12)
)
(page A4)
(layers
(0 Top signal)
(31 Bottom signal)
(32 B.Adhes user hide)
(33 F.Adhes user hide)
(34 B.Paste user hide)
(35 F.Paste user hide)
(36 B.SilkS user hide)
(37 F.SilkS user)
(38 B.Mask user hide)
(39 F.Mask user hide)
(40 Dwgs.User user hide)
(41 Cmts.User user hide)
(42 Eco1.User user hide)
(43 Eco2.User user)
(44 Edge.Cuts user)
(45 Margin user hide)
(46 B.CrtYd user hide)
(47 F.CrtYd user hide)
(48 B.Fab user hide)
(49 F.Fab user hide)
)
(setup
(last_trace_width 0.25)
(trace_clearance 0.1524)
(zone_clearance 0.508)
(zone_45_only no)
(trace_min 0.2)
(via_size 0.8)
(via_drill 0.4)
(via_min_size 0.1)
(via_min_drill 0.254)
(uvia_size 0.3)
(uvia_drill 0.1)
(uvias_allowed no)
(uvia_min_size 0.2)
(uvia_min_drill 0.1)
(edge_width 0.05)
(segment_width 0.2)
(pcb_text_width 0.3)
(pcb_text_size 1.5 1.5)
(mod_edge_width 0.12)
(mod_text_size 1 1)
(mod_text_width 0.15)
(pad_size 1.5 0.27)
(pad_drill 0)
(pad_to_mask_clearance 0)
(aux_axis_origin 0 0)
(visible_elements FFFFFF7F)
(pcbplotparams
(layerselection 0x010fc_ffffffff)
(usegerberextensions false)
(usegerberattributes true)
(usegerberadvancedattributes true)
(creategerberjobfile true)
(excludeedgelayer true)
(linewidth 0.100000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(padsonsilk false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 1)
(scaleselection 1)
(outputdirectory ""))
)
(net 0 "")
(net 1 GND)
(net 2 VCC)
(net 3 /A0_TEMP_ENABLE)
(net 4 /SCL)
(net 5 /SDA)
(net 6 /A1_SERCOM3.3_TC3.1)
(net 7 /A2_TEMP_SENSE)
(net 8 /NC)
(net 9 /A4_SERCOM3.2_TC3.0)
(net 10 "Net-(U1-Pad7)")
(net 11 "Net-(U1-Pad5)")
(net_class Default "This is the default net class."
(clearance 0.1524)
(trace_width 0.25)
(via_dia 0.8)
(via_drill 0.4)
(uvia_dia 0.3)
(uvia_drill 0.1)
(add_net /A0_TEMP_ENABLE)
(add_net /A1_SERCOM3.3_TC3.1)
(add_net /A2_TEMP_SENSE)
(add_net /A4_SERCOM3.2_TC3.0)
(add_net /NC)
(add_net /SCL)
(add_net /SDA)
(add_net GND)
(add_net "Net-(U1-Pad5)")
(add_net "Net-(U1-Pad7)")
(add_net VCC)
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" (layer Top) (tedit 0) (tstamp 63E6D203)
(at 153.2255 106.5556)
(descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
(path /54307519)
(fp_text reference U$3 (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
)
(fp_text value FH19C-9S-0.5SH_10-FFC (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
)
(fp_poly (pts (xy -2.4902 0.9742) (xy 2.4882 0.9742) (xy 2.4892 3.4798) (xy -2.4892 3.4798)) (layer B.Mask) (width 0))
(fp_line (start 2.4892 0) (end 2.4892 3.35) (layer Edge.Cuts) (width 0.05))
(fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer Edge.Cuts) (width 0.05))
(fp_line (start -2.4892 0) (end -2.4892 3.35) (layer Edge.Cuts) (width 0.05))
(fp_arc (start -2.3392 3.35) (end -2.3392 3.5) (angle 90) (layer Edge.Cuts) (width 0.05))
(fp_arc (start 2.3392 3.35) (end 2.3392 3.5) (angle -90) (layer Edge.Cuts) (width 0.05))
(pad 1 smd rect (at 2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 2 VCC) (solder_mask_margin 0.0635))
(pad 2 smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 1 GND) (solder_mask_margin 0.0635))
(pad 3 smd rect (at 1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
(pad 4 smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 8 /NC) (solder_mask_margin 0.0635))
(pad 5 smd rect (at 0 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
(pad 6 smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
(pad 7 smd rect (at -1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 5 /SDA) (solder_mask_margin 0.0635))
(pad 8 smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 4 /SCL) (solder_mask_margin 0.0635))
(pad 9 smd rect (at -2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
)
(module OPT3001DNPT:SON65P200X200X65-7N (layer Top) (tedit 63E6D415) (tstamp 63E73FD8)
(at 142.748 102.87 270)
(path /63E70E51)
(attr smd)
(fp_text reference U1 (at 0.54 -2.008 90) (layer F.SilkS) hide
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text value OPT3001DNPT (at 7.652 2.008 90) (layer F.Fab) hide
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_line (start 1.615 -1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.615 -1.25) (end -1.615 1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.615 1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.615 -1.25) (end 1.615 -1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.127))
(fp_line (start -1 -1) (end -1 1) (layer F.Fab) (width 0.127))
(fp_line (start -1 1.099) (end 1 1.099) (layer F.SilkS) (width 0.127))
(fp_line (start -1 -1.099) (end 1 -1.099) (layer F.SilkS) (width 0.127))
(fp_line (start -1 1) (end 1 1) (layer F.Fab) (width 0.127))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.127))
(fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.Fab) (width 0.2))
(fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.SilkS) (width 0.2))
(fp_poly (pts (xy -0.21 -0.43) (xy 0.21 -0.43) (xy 0.21 0.43) (xy -0.21 0.43)) (layer F.Paste) (width 0.01))
(pad 1 smd roundrect (at -1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 2 VCC))
(pad 2 smd roundrect (at -1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 1 GND))
(pad 3 smd roundrect (at -1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 1 GND))
(pad 4 smd roundrect (at 1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 4 /SCL))
(pad 5 smd roundrect (at 1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 11 "Net-(U1-Pad5)"))
(pad 6 smd roundrect (at 1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 5 /SDA))
(pad 7 smd rect (at 0 0 270) (size 0.65 1.35) (layers Top F.Mask)
(net 10 "Net-(U1-Pad7)"))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759D2)
(at 146.2659 104.7522 270)
(descr "<b>0603 MicroPitch</b>")
(path /05CBC8DB)
(fp_text reference R1 (at -0.0635 1.7145 90) (layer F.SilkS)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_text value "1% 10K" (at -0.9525 0.9525 90) (layer F.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
(fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
(fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
(fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
(pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
(pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759F3)
(at 146.2659 102.1868 270)
(descr "<b>0603 MicroPitch</b>")
(path /6C7771A6)
(fp_text reference RT1 (at -0.127 1.778 90) (layer F.SilkS)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_text value "NTC 10K" (at -1.27 1.4923 90) (layer F.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
(fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
(fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
(fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
(pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
(pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 2 VCC) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D22B)
(at 146.1135 102.8472 180)
(descr "<b>TEST PAD</b>")
(path /8E097FD0)
(fp_text reference GND1 (at -1.778 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 1 GND) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D232)
(at 144.0815 101.2216 180)
(descr "<b>TEST PAD</b>")
(path /E65641C5)
(fp_text reference A4 (at 1.524 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D239)
(at 146.1135 101.2216 180)
(descr "<b>TEST PAD</b>")
(path /D0DD1D8E)
(fp_text reference VCC1 (at -1.778 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 2 VCC) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D240)
(at 146.1135 104.4728 180)
(descr "<b>TEST PAD</b>")
(path /252148C1)
(fp_text reference SCL1 (at -1.778 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 4 /SCL) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D247)
(at 144.0815 104.4728 180)
(descr "<b>TEST PAD</b>")
(path /943CED1C)
(fp_text reference SDA1 (at 1.778 -0.0127) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 5 /SDA) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D24E)
(at 144.0815 102.8472 180)
(descr "<b>TEST PAD</b>")
(path /E1B0505C)
(fp_text reference A1 (at 1.524 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
)
(gr_arc (start 150.4823 106.5556) (end 150.7363 106.5556) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 803D32C0))
(gr_line (start 150.4823 106.3016) (end 145.7325 106.3016) (layer Edge.Cuts) (width 0.05) (tstamp 803D3820))
(gr_line (start 145.0975 105.6666) (end 142.1765 105.6666) (layer Edge.Cuts) (width 0.05) (tstamp 803D3C70))
(gr_arc (start 142.1765 104.7776) (end 142.1765 105.6666) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E7417A))
(gr_line (start 141.2875 104.7776) (end 141.2875 100.8406) (layer Edge.Cuts) (width 0.05) (tstamp 63E75941))
(gr_arc (start 142.1765 100.8406) (end 141.2875 100.8406) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E74180))
(gr_line (start 142.1765 99.9516) (end 155.3337 99.9516) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B000))
(gr_arc (start 155.3337 100.3326) (end 155.3337 99.9516) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B410))
(gr_line (start 155.7147 100.3326) (end 155.7147 106.5556) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B950))
(gr_arc (start 145.0975 106.3016) (end 145.7325 106.3016) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9BE00))
(gr_text "OPT3001 I2C\nSensor Board" (at 151.4475 100.2056) (layer F.SilkS) (tstamp 7FC58850)
(effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify top))
)
(gr_line (start 155.7147 105.2856) (end 147.5105 105.2856) (layer F.SilkS) (width 0.127) (tstamp 7FC58F50))
(gr_line (start 147.0025 100.7136) (end 147.0025 104.7776) (layer F.SilkS) (width 0.127) (tstamp 7FA4B140))
(gr_arc (start 147.5105 104.7776) (end 147.0025 104.7776) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4B6B0))
(gr_arc (start 146.2405 100.7136) (end 147.0025 100.7136) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4BCC0))
(gr_text "A0: Thermistor !EN\nA2: Temp. Sense\nA1/A4/SDA/SCL:\nTest Points" (at 151.4475 102.1106) (layer F.SilkS) (tstamp 7FA08AA0)
(effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify top))
)
(gr_text "Digital IO\nAnalog input\nPWM on TC3\nUART RX/TX\nInterrupt 1/0\nA4 ONLY: Ext. wake 0" (at 155.5115 101.2216) (layer B.SilkS) (tstamp 7FA09230)
(effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify left top mirror))
)
(gr_text "A1/A4 Uses" (at 155.5115 100.2056) (layer B.SilkS) (tstamp 7F9A10A0)
(effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify left top mirror))
)
(gr_text "" (at 142.9385 104.1172) (layer F.SilkS) (tstamp 7F9A17A0)
(effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
)
(gr_text "" (at 142.9385 101.5518) (layer F.SilkS) (tstamp 7F9A1E50)
(effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
)
(dimension 3 (width 0.12) (layer F.SilkS)
(gr_text "3.000 mm" (at 160.9575 108.5016 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(feature1 (pts (xy 156.0875 107.0016) (xy 160.273921 107.0016)))
(feature2 (pts (xy 156.0875 110.0016) (xy 160.273921 110.0016)))
(crossbar (pts (xy 159.6875 110.0016) (xy 159.6875 107.0016)))
(arrow1a (pts (xy 159.6875 107.0016) (xy 160.273921 108.128104)))
(arrow1b (pts (xy 159.6875 107.0016) (xy 159.101079 108.128104)))
(arrow2a (pts (xy 159.6875 110.0016) (xy 160.273921 108.875096)))
(arrow2b (pts (xy 159.6875 110.0016) (xy 159.101079 108.875096)))
)
(gr_text "Stiffener only\nin this area" (at 159.5755 108.5876) (layer F.SilkS) (tstamp 7F95BC90)
(effects (font (size 0.57912 0.57912) (thickness 0.109728)))
)
(segment (start 148.082 100.457) (end 148.137 100.457) (width 0.25) (layer Bottom) (net 0))
(segment (start 142.098 101.5) (end 142.748 101.5) (width 0.25) (layer Top) (net 1))
(via (at 142.494 100.529) (size 0.8) (drill 0.4) (layers Top Bottom) (net 1))
(segment (start 142.748 100.783) (end 142.494 100.529) (width 0.25) (layer Top) (net 1))
(segment (start 142.748 101.5) (end 142.748 100.783) (width 0.25) (layer Top) (net 1))
(segment (start 142.494 100.529) (end 142.76899 100.25401) (width 0.25) (layer Bottom) (net 1))
(segment (start 145.201089 100.256533) (end 145.201089 101.934789) (width 0.25) (layer Bottom) (net 1))
(segment (start 142.76899 100.25401) (end 145.198566 100.25401) (width 0.25) (layer Bottom) (net 1))
(segment (start 145.198566 100.25401) (end 145.201089 100.256533) (width 0.25) (layer Bottom) (net 1))
(segment (start 145.201089 101.934789) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
(segment (start 147.022102 101.938598) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
(segment (start 154.7255 104.319944) (end 152.344154 101.938598) (width 0.25) (layer Bottom) (net 1))
(segment (start 152.344154 101.938598) (end 147.022102 101.938598) (width 0.25) (layer Bottom) (net 1))
(segment (start 154.7255 108.8056) (end 154.7255 104.319944) (width 0.25) (layer Bottom) (net 1))
(via (at 146.939 101.219) (size 0.8) (drill 0.4) (layers Top Bottom) (net 2))
(segment (start 152.129838 100.901187) (end 147.822498 100.901187) (width 0.25) (layer Bottom) (net 2))
(segment (start 146.1161 101.219) (end 146.1135 101.2216) (width 0.25) (layer Bottom) (net 2))
(segment (start 147.822498 100.901187) (end 147.504685 101.219) (width 0.25) (layer Bottom) (net 2))
(segment (start 155.2255 103.996849) (end 152.129838 100.901187) (width 0.25) (layer Bottom) (net 2))
(segment (start 146.939 101.219) (end 146.1161 101.219) (width 0.25) (layer Bottom) (net 2))
(segment (start 155.2255 108.8056) (end 155.2255 103.996849) (width 0.25) (layer Bottom) (net 2))
(segment (start 147.504685 101.219) (end 146.939 101.219) (width 0.25) (layer Bottom) (net 2))
(segment (start 143.398 101.5) (end 143.573651 101.675651) (width 0.25) (layer Top) (net 2))
(segment (start 143.573651 101.675651) (end 146.142049 101.675651) (width 0.25) (layer Top) (net 2))
(segment (start 146.142049 101.675651) (end 146.3929 101.4248) (width 0.25) (layer Top) (net 2))
(segment (start 146.3929 101.4248) (end 146.7332 101.4248) (width 0.25) (layer Top) (net 2))
(segment (start 146.7332 101.4248) (end 146.939 101.219) (width 0.25) (layer Top) (net 2))
(via (at 147.828 105.664) (size 0.8) (drill 0.4) (layers Top Bottom) (net 3))
(segment (start 147.6782 105.5142) (end 147.828 105.664) (width 0.25) (layer Top) (net 3))
(segment (start 146.3929 105.5142) (end 147.6782 105.5142) (width 0.25) (layer Top) (net 3))
(segment (start 151.2255 106.512573) (end 151.2255 108.8056) (width 0.25) (layer Bottom) (net 3))
(segment (start 150.712117 105.99919) (end 151.2255 106.512573) (width 0.25) (layer Bottom) (net 3))
(segment (start 148.16319 105.99919) (end 150.712117 105.99919) (width 0.25) (layer Bottom) (net 3))
(segment (start 147.828 105.664) (end 148.16319 105.99919) (width 0.25) (layer Bottom) (net 3))
(segment (start 142.37541 105.26741) (end 145.075078 105.26741) (width 0.25) (layer Top) (net 4))
(via (at 145.243931 105.098557) (size 0.8) (drill 0.4) (layers Top Bottom) (net 4))
(segment (start 142.098 104.99) (end 142.37541 105.26741) (width 0.25) (layer Top) (net 4))
(segment (start 142.098 104.24) (end 142.098 104.99) (width 0.25) (layer Top) (net 4))
(segment (start 145.075078 105.26741) (end 145.243931 105.098557) (width 0.25) (layer Top) (net 4))
(segment (start 145.487743 105.098557) (end 146.1135 104.4728) (width 0.25) (layer Bottom) (net 4))
(segment (start 145.243931 105.098557) (end 145.487743 105.098557) (width 0.25) (layer Bottom) (net 4))
(segment (start 150.674396 105.392376) (end 151.7255 106.44348) (width 0.25) (layer Bottom) (net 4))
(segment (start 150.421816 105.392376) (end 150.674396 105.392376) (width 0.25) (layer Bottom) (net 4))
(segment (start 146.1135 104.4728) (end 149.50224 104.4728) (width 0.25) (layer Bottom) (net 4))
(segment (start 151.7255 106.44348) (end 151.7255 108.8056) (width 0.25) (layer Bottom) (net 4))
(segment (start 149.50224 104.4728) (end 150.421816 105.392376) (width 0.25) (layer Bottom) (net 4))
(segment (start 143.398 104.24) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
(segment (start 145.007 104.24) (end 145.381654 104.24) (width 0.25) (layer Top) (net 5))
(segment (start 152.2255 108.8056) (end 152.2255 106.193504) (width 0.25) (layer Bottom) (net 5))
(segment (start 145.381654 104.24) (end 145.856628 104.714974) (width 0.25) (layer Top) (net 5))
(segment (start 145.856628 104.714974) (end 150.74697 104.714974) (width 0.25) (layer Top) (net 5))
(via (at 150.74697 104.714974) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
(segment (start 152.2255 106.193504) (end 150.74697 104.714974) (width 0.25) (layer Bottom) (net 5))
(via (at 145.034 103.886) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
(segment (start 145.034 103.886) (end 145.007 103.913) (width 0.25) (layer Top) (net 5))
(segment (start 144.4472 104.4728) (end 145.034 103.886) (width 0.25) (layer Bottom) (net 5))
(segment (start 144.0815 104.4728) (end 144.4472 104.4728) (width 0.25) (layer Bottom) (net 5))
(segment (start 145.007 103.913) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
(via (at 148.336 103.52461) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
(segment (start 152.7255 106.045058) (end 151.490164 104.809722) (width 0.25) (layer Bottom) (net 6))
(segment (start 151.490164 104.35972) (end 150.655054 103.52461) (width 0.25) (layer Bottom) (net 6))
(segment (start 152.7255 108.8056) (end 152.7255 106.045058) (width 0.25) (layer Bottom) (net 6))
(segment (start 151.490164 104.809722) (end 151.490164 104.35972) (width 0.25) (layer Bottom) (net 6))
(segment (start 150.655054 103.52461) (end 148.336 103.52461) (width 0.25) (layer Bottom) (net 6))
(via (at 144.899309 102.94316) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
(segment (start 144.803349 102.8472) (end 144.899309 102.94316) (width 0.25) (layer Bottom) (net 6))
(segment (start 144.0815 102.8472) (end 144.803349 102.8472) (width 0.25) (layer Bottom) (net 6))
(segment (start 144.899309 102.94316) (end 145.57107 102.271399) (width 0.25) (layer Top) (net 6))
(segment (start 145.57107 102.271399) (end 147.082789 102.271399) (width 0.25) (layer Top) (net 6))
(segment (start 147.082789 102.271399) (end 148.336 103.52461) (width 0.25) (layer Top) (net 6))
(segment (start 146.2659 103.9902) (end 146.2659 102.9488) (width 0.254) (layer Top) (net 7) (tstamp 63E759C5))
(segment (start 153.2255 105.415504) (end 152.231065 104.421069) (width 0.25) (layer Bottom) (net 7))
(segment (start 148.842094 104.02107) (end 151.831066 104.02107) (width 0.25) (layer Top) (net 7))
(via (at 152.231065 104.421069) (size 0.8) (drill 0.4) (layers Top Bottom) (net 7))
(segment (start 148.661153 104.202011) (end 148.842094 104.02107) (width 0.25) (layer Top) (net 7))
(segment (start 146.3929 103.9902) (end 146.604711 104.202011) (width 0.25) (layer Top) (net 7))
(segment (start 146.604711 104.202011) (end 148.661153 104.202011) (width 0.25) (layer Top) (net 7))
(segment (start 151.831066 104.02107) (end 152.231065 104.421069) (width 0.25) (layer Top) (net 7))
(segment (start 153.2255 108.8056) (end 153.2255 105.415504) (width 0.25) (layer Bottom) (net 7))
(via (at 152.019 102.616) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
(segment (start 154.2255 104.8225) (end 152.019 102.616) (width 0.25) (layer Bottom) (net 9))
(segment (start 154.2255 108.8056) (end 154.2255 104.8225) (width 0.25) (layer Bottom) (net 9))
(segment (start 149.733 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
(segment (start 152.019 102.616) (end 149.733 100.33) (width 0.25) (layer Top) (net 9))
(segment (start 147.574 100.33) (end 147.955 100.33) (width 0.25) (layer Top) (net 9))
(via (at 144.523679 100.981868) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
(segment (start 144.0815 101.2216) (end 144.283947 101.2216) (width 0.25) (layer Bottom) (net 9))
(segment (start 144.283947 101.2216) (end 144.523679 100.981868) (width 0.25) (layer Bottom) (net 9))
(segment (start 144.523679 100.981868) (end 145.175547 100.33) (width 0.25) (layer Top) (net 9))
(segment (start 145.175547 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
)

View file

@ -0,0 +1,497 @@
(kicad_pcb (version 20171130) (host pcbnew 5.1.9+dfsg1-1+deb11u1)
(general
(thickness 1.6)
(drawings 22)
(tracks 90)
(zones 0)
(modules 10)
(nets 12)
)
(page A4)
(layers
(0 Top signal)
(31 Bottom signal)
(32 B.Adhes user hide)
(33 F.Adhes user hide)
(34 B.Paste user hide)
(35 F.Paste user hide)
(36 B.SilkS user hide)
(37 F.SilkS user)
(38 B.Mask user hide)
(39 F.Mask user hide)
(40 Dwgs.User user hide)
(41 Cmts.User user hide)
(42 Eco1.User user hide)
(43 Eco2.User user)
(44 Edge.Cuts user)
(45 Margin user hide)
(46 B.CrtYd user hide)
(47 F.CrtYd user hide)
(48 B.Fab user hide)
(49 F.Fab user hide)
)
(setup
(last_trace_width 0.25)
(trace_clearance 0.1524)
(zone_clearance 0.508)
(zone_45_only no)
(trace_min 0.2)
(via_size 0.8)
(via_drill 0.4)
(via_min_size 0.1)
(via_min_drill 0.254)
(uvia_size 0.3)
(uvia_drill 0.1)
(uvias_allowed no)
(uvia_min_size 0.2)
(uvia_min_drill 0.1)
(edge_width 0.05)
(segment_width 0.2)
(pcb_text_width 0.3)
(pcb_text_size 1.5 1.5)
(mod_edge_width 0.12)
(mod_text_size 1 1)
(mod_text_width 0.15)
(pad_size 1.5 0.27)
(pad_drill 0)
(pad_to_mask_clearance 0)
(aux_axis_origin 0 0)
(visible_elements FFFFFF7F)
(pcbplotparams
(layerselection 0x010fc_ffffffff)
(usegerberextensions false)
(usegerberattributes true)
(usegerberadvancedattributes true)
(creategerberjobfile true)
(excludeedgelayer true)
(linewidth 0.100000)
(plotframeref false)
(viasonmask false)
(mode 1)
(useauxorigin false)
(hpglpennumber 1)
(hpglpenspeed 20)
(hpglpendiameter 15.000000)
(psnegative false)
(psa4output false)
(plotreference true)
(plotvalue true)
(plotinvisibletext false)
(padsonsilk false)
(subtractmaskfromsilk false)
(outputformat 1)
(mirror false)
(drillshape 1)
(scaleselection 1)
(outputdirectory ""))
)
(net 0 "")
(net 1 GND)
(net 2 VCC)
(net 3 /A0_TEMP_ENABLE)
(net 4 /SCL)
(net 5 /SDA)
(net 6 /A1_SERCOM3.3_TC3.1)
(net 7 /A2_TEMP_SENSE)
(net 8 /NC)
(net 9 /A4_SERCOM3.2_TC3.0)
(net 10 "Net-(U1-Pad7)")
(net 11 "Net-(U1-Pad5)")
(net_class Default "This is the default net class."
(clearance 0.1524)
(trace_width 0.25)
(via_dia 0.8)
(via_drill 0.4)
(uvia_dia 0.3)
(uvia_drill 0.1)
(add_net /A0_TEMP_ENABLE)
(add_net /A1_SERCOM3.3_TC3.1)
(add_net /A2_TEMP_SENSE)
(add_net /A4_SERCOM3.2_TC3.0)
(add_net /NC)
(add_net /SCL)
(add_net /SDA)
(add_net GND)
(add_net "Net-(U1-Pad5)")
(add_net "Net-(U1-Pad7)")
(add_net VCC)
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" (layer Top) (tedit 0) (tstamp 63E6D203)
(at 153.2255 106.5556)
(descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
(path /54307519)
(fp_text reference U$3 (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
)
(fp_text value FH19C-9S-0.5SH_10-FFC (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
)
(fp_arc (start -2.3392 3.35) (end -2.3392 3.5) (angle 90) (layer Edge.Cuts) (width 0.05))
(fp_arc (start 2.3392 3.35) (end 2.3392 3.5) (angle -90) (layer Edge.Cuts) (width 0.05))
(fp_line (start -2.4892 0) (end -2.4892 3.35) (layer Edge.Cuts) (width 0.05))
(fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer Edge.Cuts) (width 0.05))
(fp_line (start 2.4892 0) (end 2.4892 3.35) (layer Edge.Cuts) (width 0.05))
(fp_poly (pts (xy -2.4902 0.9742) (xy 2.4882 0.9742) (xy 2.4892 3.4798) (xy -2.4892 3.4798)) (layer B.Mask) (width 0))
(pad 1 smd rect (at 2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 2 VCC) (solder_mask_margin 0.0635))
(pad 2 smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 1 GND) (solder_mask_margin 0.0635))
(pad 3 smd rect (at 1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
(pad 4 smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 8 /NC) (solder_mask_margin 0.0635))
(pad 5 smd rect (at 0 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
(pad 6 smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
(pad 7 smd rect (at -1 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 5 /SDA) (solder_mask_margin 0.0635))
(pad 8 smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 4 /SCL) (solder_mask_margin 0.0635))
(pad 9 smd rect (at -2 2.25 90) (size 2.5 0.347) (layers Bottom B.Mask)
(net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
)
(module OPT3001DNPT:SON65P200X200X65-7N (layer Top) (tedit 63E6D415) (tstamp 63E73FD8)
(at 142.748 102.87 270)
(path /63E70E51)
(attr smd)
(fp_text reference U1 (at 0.54 -2.008 90) (layer F.SilkS) hide
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_text value OPT3001DNPT (at 7.652 2.008 90) (layer F.Fab) hide
(effects (font (size 0.8 0.8) (thickness 0.15)))
)
(fp_poly (pts (xy -0.21 -0.43) (xy 0.21 -0.43) (xy 0.21 0.43) (xy -0.21 0.43)) (layer F.Paste) (width 0.01))
(fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.SilkS) (width 0.2))
(fp_circle (center -1.935 -0.65) (end -1.835 -0.65) (layer F.Fab) (width 0.2))
(fp_line (start -1 -1) (end 1 -1) (layer F.Fab) (width 0.127))
(fp_line (start -1 1) (end 1 1) (layer F.Fab) (width 0.127))
(fp_line (start -1 -1.099) (end 1 -1.099) (layer F.SilkS) (width 0.127))
(fp_line (start -1 1.099) (end 1 1.099) (layer F.SilkS) (width 0.127))
(fp_line (start -1 -1) (end -1 1) (layer F.Fab) (width 0.127))
(fp_line (start 1 -1) (end 1 1) (layer F.Fab) (width 0.127))
(fp_line (start -1.615 -1.25) (end 1.615 -1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.615 1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.615 -1.25) (end -1.615 1.25) (layer F.CrtYd) (width 0.05))
(fp_line (start 1.615 -1.25) (end 1.615 1.25) (layer F.CrtYd) (width 0.05))
(pad 1 smd roundrect (at -1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 2 VCC))
(pad 2 smd roundrect (at -1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 1 GND))
(pad 3 smd roundrect (at -1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 1 GND))
(pad 4 smd roundrect (at 1.37 0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 4 /SCL))
(pad 5 smd roundrect (at 1.37 0 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 11 "Net-(U1-Pad5)"))
(pad 6 smd roundrect (at 1.37 -0.65 270) (size 1.5 0.27) (layers Top F.Paste F.Mask) (roundrect_rratio 0.03)
(net 5 /SDA))
(pad 7 smd rect (at 0 0 270) (size 0.65 1.35) (layers Top F.Mask)
(net 10 "Net-(U1-Pad7)"))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759D2)
(at 146.2659 104.7522 270)
(descr "<b>0603 MicroPitch</b>")
(path /05CBC8DB)
(fp_text reference R1 (at -0.0635 1.7145 90) (layer F.SilkS)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_text value "1% 10K" (at -0.9525 0.9525 90) (layer F.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
(fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
(fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
(fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
(fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
(pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 3 /A0_TEMP_ENABLE) (solder_mask_margin 0.0635))
(pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" (layer Top) (tedit 0) (tstamp 63E759F3)
(at 146.2659 102.1868 270)
(descr "<b>0603 MicroPitch</b>")
(path /6C7771A6)
(fp_text reference RT1 (at -0.127 1.778 90) (layer F.SilkS)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_text value "NTC 10K" (at -1.27 1.4923 90) (layer F.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
(fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
(fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
(fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
(fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
(pad 2 smd rect (at 0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 7 /A2_TEMP_SENSE) (solder_mask_margin 0.0635))
(pad 1 smd rect (at -0.762 0 270) (size 0.8 0.8) (layers Top F.Paste F.Mask)
(net 2 VCC) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D22B)
(at 146.1135 102.8472 180)
(descr "<b>TEST PAD</b>")
(path /8E097FD0)
(fp_text reference GND1 (at -1.778 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 1 GND) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D232)
(at 144.0815 101.2216 180)
(descr "<b>TEST PAD</b>")
(path /E65641C5)
(fp_text reference A4 (at 1.524 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 9 /A4_SERCOM3.2_TC3.0) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D239)
(at 146.1135 101.2216 180)
(descr "<b>TEST PAD</b>")
(path /D0DD1D8E)
(fp_text reference VCC1 (at -1.778 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 2 VCC) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D240)
(at 146.1135 104.4728 180)
(descr "<b>TEST PAD</b>")
(path /252148C1)
(fp_text reference SCL1 (at -1.778 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 4 /SCL) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D247)
(at 144.0815 104.4728 180)
(descr "<b>TEST PAD</b>")
(path /943CED1C)
(fp_text reference SDA1 (at 1.778 -0.0127) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 5 /SDA) (solder_mask_margin 0.0635))
)
(module "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" (layer Bottom) (tedit 0) (tstamp 63E6D24E)
(at 144.0815 102.8472 180)
(descr "<b>TEST PAD</b>")
(path /E1B0505C)
(fp_text reference A1 (at 1.524 0) (layer B.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify right bottom mirror))
)
(fp_text value TPB1,27 (at -0.635 -0.762) (layer B.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify right bottom mirror))
)
(fp_line (start 0 0.635) (end 0 -0.635) (layer Dwgs.User) (width 0.0024))
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 -1.905 180) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify right bottom))
)
(pad TP smd roundrect (at 0 0 180) (size 1.27 1.27) (layers Bottom B.Mask) (roundrect_rratio 0.5)
(net 6 /A1_SERCOM3.3_TC3.1) (solder_mask_margin 0.0635))
)
(gr_arc (start 150.4823 106.5556) (end 150.7363 106.5556) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 803D32C0))
(gr_line (start 150.4823 106.3016) (end 145.7325 106.3016) (layer Edge.Cuts) (width 0.05) (tstamp 803D3820))
(gr_line (start 145.0975 105.6666) (end 142.1765 105.6666) (layer Edge.Cuts) (width 0.05) (tstamp 803D3C70))
(gr_arc (start 142.1765 104.7776) (end 142.1765 105.6666) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E7417A))
(gr_line (start 141.2875 104.7776) (end 141.2875 100.8406) (layer Edge.Cuts) (width 0.05) (tstamp 63E75941))
(gr_arc (start 142.1765 100.8406) (end 141.2875 100.8406) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 63E74180))
(gr_line (start 142.1765 99.9516) (end 155.3337 99.9516) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B000))
(gr_arc (start 155.3337 100.3326) (end 155.3337 99.9516) (angle 90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B410))
(gr_line (start 155.7147 100.3326) (end 155.7147 106.5556) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9B950))
(gr_arc (start 145.0975 106.3016) (end 145.7325 106.3016) (angle -90) (layer Edge.Cuts) (width 0.05) (tstamp 7FB9BE00))
(gr_text "OPT3001 I2C\nSensor Board" (at 151.4475 100.2056) (layer F.SilkS) (tstamp 7FC58850)
(effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify top))
)
(gr_line (start 155.7147 105.2856) (end 147.5105 105.2856) (layer F.SilkS) (width 0.127) (tstamp 7FC58F50))
(gr_line (start 147.0025 100.7136) (end 147.0025 104.7776) (layer F.SilkS) (width 0.127) (tstamp 7FA4B140))
(gr_arc (start 147.5105 104.7776) (end 147.0025 104.7776) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4B6B0))
(gr_arc (start 146.2405 100.7136) (end 147.0025 100.7136) (angle -90) (layer F.SilkS) (width 0.127) (tstamp 7FA4BCC0))
(gr_text "A0: Thermistor !EN\nA2: Temp. Sense\nA1/A4/SDA/SCL:\nTest Points" (at 151.4475 102.1106) (layer F.SilkS) (tstamp 7FA08AA0)
(effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify top))
)
(gr_text "Digital IO\nAnalog input\nPWM on TC3\nUART RX/TX\nInterrupt 1/0\nA4 ONLY: Ext. wake 0" (at 155.5115 101.2216) (layer B.SilkS) (tstamp 7FA09230)
(effects (font (size 0.4826 0.4826) (thickness 0.06096)) (justify left top mirror))
)
(gr_text "A1/A4 Uses" (at 155.5115 100.2056) (layer B.SilkS) (tstamp 7F9A10A0)
(effects (font (size 0.57912 0.57912) (thickness 0.109728)) (justify left top mirror))
)
(gr_text "" (at 142.9385 104.1172) (layer F.SilkS) (tstamp 7F9A17A0)
(effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
)
(gr_text "" (at 142.9385 101.5518) (layer F.SilkS) (tstamp 7F9A1E50)
(effects (font (size 0.57912 0.57912) (thickness 0.073152)) (justify left))
)
(dimension 3 (width 0.12) (layer F.SilkS)
(gr_text "3.000 mm" (at 160.9575 108.5016 90) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(feature1 (pts (xy 156.0875 107.0016) (xy 160.273921 107.0016)))
(feature2 (pts (xy 156.0875 110.0016) (xy 160.273921 110.0016)))
(crossbar (pts (xy 159.6875 110.0016) (xy 159.6875 107.0016)))
(arrow1a (pts (xy 159.6875 107.0016) (xy 160.273921 108.128104)))
(arrow1b (pts (xy 159.6875 107.0016) (xy 159.101079 108.128104)))
(arrow2a (pts (xy 159.6875 110.0016) (xy 160.273921 108.875096)))
(arrow2b (pts (xy 159.6875 110.0016) (xy 159.101079 108.875096)))
)
(gr_text "Stiffener only\nin this area" (at 159.5755 108.5876) (layer F.SilkS) (tstamp 7F95BC90)
(effects (font (size 0.57912 0.57912) (thickness 0.109728)))
)
(segment (start 148.082 100.457) (end 148.137 100.457) (width 0.25) (layer Bottom) (net 0))
(segment (start 142.098 101.5) (end 142.748 101.5) (width 0.25) (layer Top) (net 1))
(via (at 142.494 100.529) (size 0.8) (drill 0.4) (layers Top Bottom) (net 1))
(segment (start 142.748 100.783) (end 142.494 100.529) (width 0.25) (layer Top) (net 1))
(segment (start 142.748 101.5) (end 142.748 100.783) (width 0.25) (layer Top) (net 1))
(segment (start 142.494 100.529) (end 142.76899 100.25401) (width 0.25) (layer Bottom) (net 1))
(segment (start 145.201089 100.256533) (end 145.201089 101.934789) (width 0.25) (layer Bottom) (net 1))
(segment (start 142.76899 100.25401) (end 145.198566 100.25401) (width 0.25) (layer Bottom) (net 1))
(segment (start 145.198566 100.25401) (end 145.201089 100.256533) (width 0.25) (layer Bottom) (net 1))
(segment (start 145.201089 101.934789) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
(segment (start 147.022102 101.938598) (end 146.1135 102.8472) (width 0.25) (layer Bottom) (net 1))
(segment (start 154.7255 104.319944) (end 152.344154 101.938598) (width 0.25) (layer Bottom) (net 1))
(segment (start 152.344154 101.938598) (end 147.022102 101.938598) (width 0.25) (layer Bottom) (net 1))
(segment (start 154.7255 108.8056) (end 154.7255 104.319944) (width 0.25) (layer Bottom) (net 1))
(via (at 146.939 101.219) (size 0.8) (drill 0.4) (layers Top Bottom) (net 2) (status 1000000))
(segment (start 152.129838 100.901187) (end 147.822498 100.901187) (width 0.25) (layer Bottom) (net 2))
(segment (start 146.7332 101.4248) (end 146.939 101.219) (width 0.25) (layer Top) (net 2))
(segment (start 146.3929 101.4248) (end 146.7332 101.4248) (width 0.25) (layer Top) (net 2))
(segment (start 146.142049 101.675651) (end 146.3929 101.4248) (width 0.25) (layer Top) (net 2))
(segment (start 143.573651 101.675651) (end 146.142049 101.675651) (width 0.25) (layer Top) (net 2))
(segment (start 146.1161 101.219) (end 146.1135 101.2216) (width 0.25) (layer Bottom) (net 2))
(segment (start 147.822498 100.901187) (end 147.504685 101.219) (width 0.25) (layer Bottom) (net 2))
(segment (start 155.2255 103.996849) (end 152.129838 100.901187) (width 0.25) (layer Bottom) (net 2))
(segment (start 143.398 101.5) (end 143.573651 101.675651) (width 0.25) (layer Top) (net 2))
(segment (start 146.939 101.219) (end 146.1161 101.219) (width 0.25) (layer Bottom) (net 2))
(segment (start 155.2255 108.8056) (end 155.2255 103.996849) (width 0.25) (layer Bottom) (net 2))
(segment (start 147.504685 101.219) (end 146.939 101.219) (width 0.25) (layer Bottom) (net 2))
(via (at 147.828 105.664) (size 0.8) (drill 0.4) (layers Top Bottom) (net 3))
(segment (start 147.6782 105.5142) (end 147.828 105.664) (width 0.25) (layer Top) (net 3))
(segment (start 146.3929 105.5142) (end 147.6782 105.5142) (width 0.25) (layer Top) (net 3))
(segment (start 151.2255 106.512573) (end 151.2255 108.8056) (width 0.25) (layer Bottom) (net 3))
(segment (start 150.712117 105.99919) (end 151.2255 106.512573) (width 0.25) (layer Bottom) (net 3))
(segment (start 148.16319 105.99919) (end 150.712117 105.99919) (width 0.25) (layer Bottom) (net 3))
(segment (start 147.828 105.664) (end 148.16319 105.99919) (width 0.25) (layer Bottom) (net 3))
(segment (start 142.37541 105.26741) (end 145.075078 105.26741) (width 0.25) (layer Top) (net 4))
(via (at 145.243931 105.098557) (size 0.8) (drill 0.4) (layers Top Bottom) (net 4))
(segment (start 142.098 104.99) (end 142.37541 105.26741) (width 0.25) (layer Top) (net 4))
(segment (start 142.098 104.24) (end 142.098 104.99) (width 0.25) (layer Top) (net 4))
(segment (start 145.075078 105.26741) (end 145.243931 105.098557) (width 0.25) (layer Top) (net 4))
(segment (start 145.487743 105.098557) (end 146.1135 104.4728) (width 0.25) (layer Bottom) (net 4))
(segment (start 145.243931 105.098557) (end 145.487743 105.098557) (width 0.25) (layer Bottom) (net 4))
(segment (start 150.674396 105.392376) (end 151.7255 106.44348) (width 0.25) (layer Bottom) (net 4))
(segment (start 150.421816 105.392376) (end 150.674396 105.392376) (width 0.25) (layer Bottom) (net 4))
(segment (start 146.1135 104.4728) (end 149.50224 104.4728) (width 0.25) (layer Bottom) (net 4))
(segment (start 151.7255 106.44348) (end 151.7255 108.8056) (width 0.25) (layer Bottom) (net 4))
(segment (start 149.50224 104.4728) (end 150.421816 105.392376) (width 0.25) (layer Bottom) (net 4))
(segment (start 144.0815 104.4728) (end 144.4472 104.4728) (width 0.25) (layer Bottom) (net 5))
(segment (start 144.4472 104.4728) (end 145.034 103.886) (width 0.25) (layer Bottom) (net 5))
(via (at 145.034 103.886) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
(segment (start 145.034 103.886) (end 145.007 103.913) (width 0.25) (layer Top) (net 5))
(segment (start 145.007 103.913) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
(segment (start 143.398 104.24) (end 145.007 104.24) (width 0.25) (layer Top) (net 5))
(segment (start 145.007 104.24) (end 145.381654 104.24) (width 0.25) (layer Top) (net 5))
(segment (start 152.2255 108.8056) (end 152.2255 106.193504) (width 0.25) (layer Bottom) (net 5))
(segment (start 145.381654 104.24) (end 145.856628 104.714974) (width 0.25) (layer Top) (net 5))
(segment (start 145.856628 104.714974) (end 150.74697 104.714974) (width 0.25) (layer Top) (net 5))
(via (at 150.74697 104.714974) (size 0.8) (drill 0.4) (layers Top Bottom) (net 5))
(segment (start 152.2255 106.193504) (end 150.74697 104.714974) (width 0.25) (layer Bottom) (net 5))
(segment (start 144.0815 102.8472) (end 144.803349 102.8472) (width 0.25) (layer Bottom) (net 6))
(via (at 144.899309 102.94316) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
(segment (start 144.803349 102.8472) (end 144.899309 102.94316) (width 0.25) (layer Bottom) (net 6))
(segment (start 144.899309 102.94316) (end 145.57107 102.271399) (width 0.25) (layer Top) (net 6))
(via (at 148.336 103.52461) (size 0.8) (drill 0.4) (layers Top Bottom) (net 6))
(segment (start 147.082789 102.271399) (end 148.336 103.52461) (width 0.25) (layer Top) (net 6))
(segment (start 145.57107 102.271399) (end 147.082789 102.271399) (width 0.25) (layer Top) (net 6))
(segment (start 152.7255 106.045058) (end 151.490164 104.809722) (width 0.25) (layer Bottom) (net 6))
(segment (start 151.490164 104.35972) (end 150.655054 103.52461) (width 0.25) (layer Bottom) (net 6))
(segment (start 152.7255 108.8056) (end 152.7255 106.045058) (width 0.25) (layer Bottom) (net 6))
(segment (start 151.490164 104.809722) (end 151.490164 104.35972) (width 0.25) (layer Bottom) (net 6))
(segment (start 150.655054 103.52461) (end 148.336 103.52461) (width 0.25) (layer Bottom) (net 6))
(segment (start 146.2659 103.9902) (end 146.2659 102.9488) (width 0.254) (layer Top) (net 7) (tstamp 63E759C5))
(segment (start 153.2255 105.415504) (end 152.231065 104.421069) (width 0.25) (layer Bottom) (net 7))
(segment (start 148.842094 104.02107) (end 151.831066 104.02107) (width 0.25) (layer Top) (net 7))
(via (at 152.231065 104.421069) (size 0.8) (drill 0.4) (layers Top Bottom) (net 7))
(segment (start 148.661153 104.202011) (end 148.842094 104.02107) (width 0.25) (layer Top) (net 7))
(segment (start 146.3929 103.9902) (end 146.604711 104.202011) (width 0.25) (layer Top) (net 7))
(segment (start 146.604711 104.202011) (end 148.661153 104.202011) (width 0.25) (layer Top) (net 7))
(segment (start 151.831066 104.02107) (end 152.231065 104.421069) (width 0.25) (layer Top) (net 7))
(segment (start 153.2255 108.8056) (end 153.2255 105.415504) (width 0.25) (layer Bottom) (net 7))
(segment (start 144.0815 101.2216) (end 144.283947 101.2216) (width 0.25) (layer Bottom) (net 9))
(via (at 144.523679 100.981868) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
(segment (start 144.283947 101.2216) (end 144.523679 100.981868) (width 0.25) (layer Bottom) (net 9))
(segment (start 144.523679 100.981868) (end 145.175547 100.33) (width 0.25) (layer Top) (net 9))
(via (at 152.019 102.616) (size 0.8) (drill 0.4) (layers Top Bottom) (net 9))
(segment (start 154.2255 104.8225) (end 152.019 102.616) (width 0.25) (layer Bottom) (net 9))
(segment (start 154.2255 108.8056) (end 154.2255 104.8225) (width 0.25) (layer Bottom) (net 9))
(segment (start 149.733 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
(segment (start 152.019 102.616) (end 149.733 100.33) (width 0.25) (layer Top) (net 9))
(segment (start 147.574 100.33) (end 147.955 100.33) (width 0.25) (layer Top) (net 9))
(segment (start 145.175547 100.33) (end 147.574 100.33) (width 0.25) (layer Top) (net 9))
)

View file

@ -0,0 +1,16 @@
(module B1,27 (layer F.Cu) (tedit 0)
(descr "<b>TEST PAD</b>")
(fp_text reference A1 (at 1.524 0 -180) (layer F.SilkS)
(effects (font (size 0.7239 0.7239) (thickness 0.130302)) (justify left bottom))
)
(fp_text value TPB1,27 (at -0.635 0.762 -180) (layer F.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_line (start -0.635 0) (end 0.635 0) (layer Dwgs.User) (width 0.0024))
(fp_line (start 0 -0.635) (end 0 0.635) (layer Dwgs.User) (width 0.0024))
(fp_text user >TP_SIGNAL_NAME (at -0.635 1.905) (layer Dwgs.User)
(effects (font (size 0.95 0.95) (thickness 0.08)) (justify left bottom))
)
(pad TP smd roundrect (at 0 0) (size 1.27 1.27) (layers F.Cu F.Mask) (roundrect_rratio 0.5)
(solder_mask_margin 0.0635))
)

View file

@ -0,0 +1,33 @@
(module FH19C9S05SH10-FFC (layer F.Cu) (tedit 0)
(descr "<b>FH19C-9S-0.5SH(10)-1</b><br>\n")
(fp_text reference U$3 (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
)
(fp_text value FH19C-9S-0.5SH_10-FFC (at 0 0) (layer F.SilkS) hide
(effects (font (size 1.27 1.27) (thickness 0.15)))
)
(fp_line (start -2.4892 0) (end -2.4892 3.35) (layer Edge.Cuts) (width 0.05))
(fp_line (start -2.3392 3.5) (end 2.3392 3.5) (layer Edge.Cuts) (width 0.05))
(fp_line (start 2.4892 0) (end 2.4892 3.35) (layer Edge.Cuts) (width 0.05))
(fp_arc (start -2.3392 3.35) (end -2.3392 3.5) (angle 90) (layer Edge.Cuts) (width 0.05))
(fp_arc (start 2.3392 3.35) (end 2.3392 3.5) (angle -90) (layer Edge.Cuts) (width 0.05))
(fp_poly (pts (xy -2.4902 0.9742) (xy 2.4882 0.9742) (xy 2.4892 3.4798) (xy -2.4892 3.4798)) (layer B.Mask) (width 0))
(pad 1 smd rect (at 2 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 2 smd rect (at 1.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 3 smd rect (at 1 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 4 smd rect (at 0.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 5 smd rect (at 0 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 6 smd rect (at -0.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 7 smd rect (at -1 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 8 smd rect (at -1.5 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
(pad 9 smd rect (at -2 2.25 90) (size 2.5 0.347) (layers B.Cu B.Mask)
(solder_mask_margin 0.0635))
)

View file

@ -0,0 +1,19 @@
(module _0603MP (layer F.Cu) (tedit 0)
(descr "<b>0603 MicroPitch</b>")
(fp_text reference R1 (at -0.0635 1.7145 -180) (layer F.SilkS)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_text value "1% 10K" (at -0.9525 0.9525 -180) (layer F.Fab)
(effects (font (size 0.77216 0.77216) (thickness 0.138988)) (justify left bottom))
)
(fp_line (start -0.432 0.306) (end 0.432 0.306) (layer F.Fab) (width 0.1016))
(fp_line (start 0.432 -0.306) (end -0.432 -0.306) (layer F.Fab) (width 0.1016))
(fp_line (start 0 -0.254) (end 0 0.254) (layer F.SilkS) (width 0.2032))
(fp_poly (pts (xy 0.4318 0.4) (xy 0.8 0.4) (xy 0.8 -0.4) (xy 0.4318 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy -0.8 0.4) (xy -0.4318 0.4) (xy -0.4318 -0.4) (xy -0.8 -0.4)) (layer F.Fab) (width 0))
(fp_poly (pts (xy -0.1999 0.25) (xy 0.1999 0.25) (xy 0.1999 -0.25) (xy -0.1999 -0.25)) (layer F.Adhes) (width 0))
(pad 1 smd rect (at -0.762 0) (size 0.8 0.8) (layers F.Cu F.Paste F.Mask)
(solder_mask_margin 0.0635))
(pad 2 smd rect (at 0.762 0) (size 0.8 0.8) (layers F.Cu F.Paste F.Mask)
(solder_mask_margin 0.0635))
)

View file

@ -0,0 +1,279 @@
EESchema Schematic File Version 4
EELAYER 30 0
EELAYER END
$Descr User 11980 8268
encoding utf-8
Sheet 1 1
Title ""
Date ""
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Wire Wire Line
3300 3100 2200 3100
Text Label 2300 3100 0 70 ~ 0
SCL
Wire Wire Line
3300 3000 2200 3000
Text Label 2300 3000 0 70 ~ 0
SDA
Wire Wire Line
4200 2500 2200 2500
Wire Wire Line
4200 2500 4200 2600
Wire Wire Line
4300 2500 4200 2500
Text Label 2300 2500 0 70 ~ 0
GND
Connection ~ 4200 2500
Wire Wire Line
2200 3200 3300 3200
Text Label 2300 3200 0 70 ~ 0
A0_TEMP_ENABLE
Wire Wire Line
4800 3200 5900 3200
Text Label 4900 3200 0 70 ~ 0
A0_TEMP_ENABLE
Wire Wire Line
3300 2600 2200 2600
Text Label 2300 2600 0 70 ~ 0
A4_SERCOM3.2_TC3.0
Wire Wire Line
3300 2700 2200 2700
Text Label 2300 2700 0 70 ~ 0
NC
Wire Wire Line
3300 2800 2200 2800
Text Label 2300 2800 0 70 ~ 0
A2_TEMP_SENSE
Wire Wire Line
5900 2800 4800 2800
Connection ~ 5900 2800
Text Label 4900 2800 0 70 ~ 0
A2_TEMP_SENSE
Wire Wire Line
4300 2400 4200 2400
Wire Wire Line
4200 2400 2200 2400
Wire Wire Line
4200 2300 4200 2400
Text Label 2300 2400 0 70 ~ 0
VCC
Connection ~ 4200 2400
Wire Wire Line
3300 2900 2200 2900
Text Label 2300 2900 0 70 ~ 0
A1_SERCOM3.3_TC3.1
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:A4L-LOC #FRAME1
U 1 1 73DA64CA
P 900 6200
F 0 "#FRAME1" H 900 6200 50 0001 C CNN
F 1 "A4L-LOC" H 900 6200 50 0001 C CNN
F 2 "" H 900 6200 50 0001 C CNN
F 3 "" H 900 6200 50 0001 C CNN
1 900 6200
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:FH19C-9S-0.5SH_10-FFC U$3
U 1 1 54307519
P 1700 2800
F 0 "U$3" H 2050 3500 59 0000 L CNN
F 1 "FH19C-9S-0.5SH_10-FFC" H 2050 3400 59 0000 L CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" H 1700 2800 50 0001 C CNN
F 3 "" H 1700 2800 50 0001 C CNN
1 1700 2800
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP RT1
U 1 1 6C7771A6
P 5900 2600
F 0 "RT1" H 5900 2700 50 0000 C CNN
F 1 "NTC 10K" H 5900 2500 40 0000 C CNB
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 2600 50 0001 C CNN
F 3 "" H 5900 2600 50 0001 C CNN
1 5900 2600
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP R1
U 1 1 05CBC8DB
P 5900 3000
F 0 "R1" H 5900 3100 50 0000 C CNN
F 1 "1% 10K" H 5900 2900 40 0000 C CNB
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 3000 50 0001 C CNN
F 3 "" H 5900 3000 50 0001 C CNN
1 5900 3000
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:GND #GND01
U 1 1 DB8695AC
P 4200 2700
F 0 "#GND01" H 4200 2700 50 0001 C CNN
F 1 "GND" H 4100 2600 59 0000 L BNN
F 2 "" H 4200 2700 50 0001 C CNN
F 3 "" H 4200 2700 50 0001 C CNN
1 4200 2700
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+01
U 1 1 BCDF72C5
P 4200 2200
F 0 "#P+01" H 4200 2200 50 0001 C CNN
F 1 "VCC" V 4100 2200 59 0000 L BNN
F 2 "" H 4200 2200 50 0001 C CNN
F 3 "" H 4200 2200 50 0001 C CNN
1 4200 2200
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+02
U 1 1 339DE9D3
P 5900 2300
F 0 "#P+02" H 5900 2300 50 0001 C CNN
F 1 "VCC" V 5800 2200 59 0000 L BNN
F 2 "" H 5900 2300 50 0001 C CNN
F 3 "" H 5900 2300 50 0001 C CNN
1 5900 2300
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 GND1
U 1 1 8E097FD0
P 4400 2500
F 0 "GND1" V 4450 2550 59 0000 L BNN
F 1 "TPB1,27" H 4400 2500 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2500 50 0001 C CNN
F 3 "" H 4400 2500 50 0001 C CNN
1 4400 2500
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A4
U 1 1 E65641C5
P 3400 2600
F 0 "A4" V 3450 2650 59 0000 L BNN
F 1 "TPB1,27" H 3400 2600 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2600 50 0001 C CNN
F 3 "" H 3400 2600 50 0001 C CNN
1 3400 2600
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 VCC1
U 1 1 D0DD1D8E
P 4400 2400
F 0 "VCC1" V 4350 2450 59 0000 L BNN
F 1 "TPB1,27" H 4400 2400 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2400 50 0001 C CNN
F 3 "" H 4400 2400 50 0001 C CNN
1 4400 2400
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SCL1
U 1 1 252148C1
P 3400 3100
F 0 "SCL1" V 3450 3150 59 0000 L BNN
F 1 "TPB1,27" H 3400 3100 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3100 50 0001 C CNN
F 3 "" H 3400 3100 50 0001 C CNN
1 3400 3100
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SDA1
U 1 1 943CED1C
P 3400 3000
F 0 "SDA1" V 3450 3050 59 0000 L BNN
F 1 "TPB1,27" H 3400 3000 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3000 50 0001 C CNN
F 3 "" H 3400 3000 50 0001 C CNN
1 3400 3000
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A1
U 1 1 E1B0505C
P 3400 2900
F 0 "A1" V 3450 2950 59 0000 L BNN
F 1 "TPB1,27" H 3400 2900 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2900 50 0001 C CNN
F 3 "" H 3400 2900 50 0001 C CNN
1 3400 2900
0 1 1 0
$EndComp
$Comp
L OPT3001DNPT:OPT3001DNPT U1
U 1 1 63E70E51
P 7050 3100
F 0 "U1" H 7050 3767 50 0000 C CNN
F 1 "OPT3001DNPT" H 7050 3676 50 0000 C CNN
F 2 "SON65P200X200X65-7N" H 7050 3100 50 0001 L BNN
F 3 "" H 7050 3100 50 0001 L BNN
F 4 "" H 7050 3100 50 0001 L BNN "EMAX"
F 5 "" H 7050 3100 50 0001 L BNN "BALL_COLUMNS"
F 6 "" H 7050 3100 50 0001 L BNN "BODY_DIAMETER"
F 7 "0.65" H 7050 3100 50 0001 L BNN "ENOM"
F 8 "" H 7050 3100 50 0001 L BNN "D1_MIN"
F 9 "1.9" H 7050 3100 50 0001 L BNN "E_MIN"
F 10 "0.25" H 7050 3100 50 0001 L BNN "L_MIN"
F 11 "2.0" H 7050 3100 50 0001 L BNN "E_NOM"
F 12 "0.65" H 7050 3100 50 0001 L BNN "A_MAX"
F 13 "0.65" H 7050 3100 50 0001 L BNN "E2_NOM"
F 14 "IPC 7351B" H 7050 3100 50 0001 L BNN "STANDARD"
F 15 "01/2018" H 7050 3100 50 0001 L BNN "PARTREV"
F 16 "0.25" H 7050 3100 50 0001 L BNN "B_NOM"
F 17 "" H 7050 3100 50 0001 L BNN "THERMAL_PAD"
F 18 "0.3" H 7050 3100 50 0001 L BNN "B_MAX"
F 19 "0.2" H 7050 3100 50 0001 L BNN "B_MIN"
F 20 "" H 7050 3100 50 0001 L BNN "IPC"
F 21 "" H 7050 3100 50 0001 L BNN "DNOM"
F 22 "6.0" H 7050 3100 50 0001 L BNN "PIN_COUNT"
F 23 "2.1" H 7050 3100 50 0001 L BNN "E_MAX"
F 24 "" H 7050 3100 50 0001 L BNN "JEDEC"
F 25 "" H 7050 3100 50 0001 L BNN "BALL_ROWS"
F 26 "" H 7050 3100 50 0001 L BNN "L1_MIN"
F 27 "" H 7050 3100 50 0001 L BNN "L1_NOM"
F 28 "" H 7050 3100 50 0001 L BNN "DMAX"
F 29 "" H 7050 3100 50 0001 L BNN "PIN_COLUMNS"
F 30 "" H 7050 3100 50 0001 L BNN "VACANCIES"
F 31 "" H 7050 3100 50 0001 L BNN "SNAPEDA_PACKAGE_ID"
F 32 "" H 7050 3100 50 0001 L BNN "DMIN"
F 33 "" H 7050 3100 50 0001 L BNN "L1_MAX"
F 34 "0.35" H 7050 3100 50 0001 L BNN "L_MAX"
F 35 "" H 7050 3100 50 0001 L BNN "D1_NOM"
F 36 "Texas Instruments" H 7050 3100 50 0001 L BNN "MANUFACTURER"
F 37 "1.35" H 7050 3100 50 0001 L BNN "D2_NOM"
F 38 "" H 7050 3100 50 0001 L BNN "PACKAGE_TYPE"
F 39 "" H 7050 3100 50 0001 L BNN "D1_MAX"
F 40 "0.3" H 7050 3100 50 0001 L BNN "L_NOM"
F 41 "2.1" H 7050 3100 50 0001 L BNN "D_MAX"
F 42 "2.0" H 7050 3100 50 0001 L BNN "D_NOM"
F 43 "" H 7050 3100 50 0001 L BNN "PINS"
F 44 "1.9" H 7050 3100 50 0001 L BNN "D_MIN"
F 45 "" H 7050 3100 50 0001 L BNN "EMIN"
1 7050 3100
1 0 0 -1
$EndComp
NoConn ~ 7650 3200
NoConn ~ 7650 2900
Text Label 7650 2700 0 50 ~ 0
VCC
Text Label 7650 3400 0 50 ~ 0
GND
Text Label 6450 2900 2 50 ~ 0
GND
Text Label 6450 3100 2 50 ~ 0
SCL
Text Label 6450 3200 2 50 ~ 0
SDA
$EndSCHEMATC

View file

@ -0,0 +1,279 @@
EESchema Schematic File Version 4
EELAYER 30 0
EELAYER END
$Descr User 11980 8268
encoding utf-8
Sheet 1 1
Title ""
Date ""
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Wire Wire Line
3300 3100 2200 3100
Text Label 2300 3100 0 70 ~ 0
SCL
Wire Wire Line
3300 3000 2200 3000
Text Label 2300 3000 0 70 ~ 0
SDA
Wire Wire Line
4200 2500 2200 2500
Wire Wire Line
4200 2500 4200 2600
Wire Wire Line
4300 2500 4200 2500
Text Label 2300 2500 0 70 ~ 0
GND
Connection ~ 4200 2500
Wire Wire Line
2200 3200 3300 3200
Text Label 2300 3200 0 70 ~ 0
A0_TEMP_ENABLE
Wire Wire Line
4800 3200 5900 3200
Text Label 4900 3200 0 70 ~ 0
A0_TEMP_ENABLE
Wire Wire Line
3300 2600 2200 2600
Text Label 2300 2600 0 70 ~ 0
A4_SERCOM3.2_TC3.0
Wire Wire Line
3300 2700 2200 2700
Text Label 2300 2700 0 70 ~ 0
NC
Wire Wire Line
3300 2800 2200 2800
Text Label 2300 2800 0 70 ~ 0
A2_TEMP_SENSE
Wire Wire Line
5900 2800 4800 2800
Connection ~ 5900 2800
Text Label 4900 2800 0 70 ~ 0
A2_TEMP_SENSE
Wire Wire Line
4300 2400 4200 2400
Wire Wire Line
4200 2400 2200 2400
Wire Wire Line
4200 2300 4200 2400
Text Label 2300 2400 0 70 ~ 0
VCC
Connection ~ 4200 2400
Wire Wire Line
3300 2900 2200 2900
Text Label 2300 2900 0 70 ~ 0
A1_SERCOM3.3_TC3.1
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:A4L-LOC #FRAME1
U 1 1 73DA64CA
P 900 6200
F 0 "#FRAME1" H 900 6200 50 0001 C CNN
F 1 "A4L-LOC" H 900 6200 50 0001 C CNN
F 2 "" H 900 6200 50 0001 C CNN
F 3 "" H 900 6200 50 0001 C CNN
1 900 6200
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:FH19C-9S-0.5SH_10-FFC U$3
U 1 1 54307519
P 1700 2800
F 0 "U$3" H 2050 3500 59 0000 L CNN
F 1 "FH19C-9S-0.5SH_10-FFC" H 2050 3400 59 0000 L CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:FH19C9S05SH10-FFC" H 1700 2800 50 0001 C CNN
F 3 "" H 1700 2800 50 0001 C CNN
1 1700 2800
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP RT1
U 1 1 6C7771A6
P 5900 2600
F 0 "RT1" H 5900 2700 50 0000 C CNN
F 1 "NTC 10K" H 5900 2500 40 0000 C CNB
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 2600 50 0001 C CNN
F 3 "" H 5900 2600 50 0001 C CNN
1 5900 2600
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:RESISTOR_0603MP R1
U 1 1 05CBC8DB
P 5900 3000
F 0 "R1" H 5900 3100 50 0000 C CNN
F 1 "1% 10K" H 5900 2900 40 0000 C CNB
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:_0603MP" H 5900 3000 50 0001 C CNN
F 3 "" H 5900 3000 50 0001 C CNN
1 5900 3000
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:GND #GND01
U 1 1 DB8695AC
P 4200 2700
F 0 "#GND01" H 4200 2700 50 0001 C CNN
F 1 "GND" H 4100 2600 59 0000 L BNN
F 2 "" H 4200 2700 50 0001 C CNN
F 3 "" H 4200 2700 50 0001 C CNN
1 4200 2700
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+01
U 1 1 BCDF72C5
P 4200 2200
F 0 "#P+01" H 4200 2200 50 0001 C CNN
F 1 "VCC" V 4100 2200 59 0000 L BNN
F 2 "" H 4200 2200 50 0001 C CNN
F 3 "" H 4200 2200 50 0001 C CNN
1 4200 2200
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:VCC #P+02
U 1 1 339DE9D3
P 5900 2300
F 0 "#P+02" H 5900 2300 50 0001 C CNN
F 1 "VCC" V 5800 2200 59 0000 L BNN
F 2 "" H 5900 2300 50 0001 C CNN
F 3 "" H 5900 2300 50 0001 C CNN
1 5900 2300
1 0 0 -1
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 GND1
U 1 1 8E097FD0
P 4400 2500
F 0 "GND1" V 4450 2550 59 0000 L BNN
F 1 "TPB1,27" H 4400 2500 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2500 50 0001 C CNN
F 3 "" H 4400 2500 50 0001 C CNN
1 4400 2500
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A4
U 1 1 E65641C5
P 3400 2600
F 0 "A4" V 3450 2650 59 0000 L BNN
F 1 "TPB1,27" H 3400 2600 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2600 50 0001 C CNN
F 3 "" H 3400 2600 50 0001 C CNN
1 3400 2600
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 VCC1
U 1 1 D0DD1D8E
P 4400 2400
F 0 "VCC1" V 4350 2450 59 0000 L BNN
F 1 "TPB1,27" H 4400 2400 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 4400 2400 50 0001 C CNN
F 3 "" H 4400 2400 50 0001 C CNN
1 4400 2400
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SCL1
U 1 1 252148C1
P 3400 3100
F 0 "SCL1" V 3450 3150 59 0000 L BNN
F 1 "TPB1,27" H 3400 3100 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3100 50 0001 C CNN
F 3 "" H 3400 3100 50 0001 C CNN
1 3400 3100
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 SDA1
U 1 1 943CED1C
P 3400 3000
F 0 "SDA1" V 3450 3050 59 0000 L BNN
F 1 "TPB1,27" H 3400 3000 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 3000 50 0001 C CNN
F 3 "" H 3400 3000 50 0001 C CNN
1 3400 3000
0 1 1 0
$EndComp
$Comp
L Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import:TPB1,27 A1
U 1 1 E1B0505C
P 3400 2900
F 0 "A1" V 3450 2950 59 0000 L BNN
F 1 "TPB1,27" H 3400 2900 50 0001 C CNN
F 2 "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001:B1,27" H 3400 2900 50 0001 C CNN
F 3 "" H 3400 2900 50 0001 C CNN
1 3400 2900
0 1 1 0
$EndComp
$Comp
L OPT3001DNPT:OPT3001DNPT U1
U 1 1 63E70E51
P 7050 3100
F 0 "U1" H 7050 3767 50 0000 C CNN
F 1 "OPT3001DNPT" H 7050 3676 50 0000 C CNN
F 2 "SON65P200X200X65-7N" H 7050 3100 50 0001 L BNN
F 3 "" H 7050 3100 50 0001 L BNN
F 4 "" H 7050 3100 50 0001 L BNN "EMAX"
F 5 "" H 7050 3100 50 0001 L BNN "BALL_COLUMNS"
F 6 "" H 7050 3100 50 0001 L BNN "BODY_DIAMETER"
F 7 "0.65" H 7050 3100 50 0001 L BNN "ENOM"
F 8 "" H 7050 3100 50 0001 L BNN "D1_MIN"
F 9 "1.9" H 7050 3100 50 0001 L BNN "E_MIN"
F 10 "0.25" H 7050 3100 50 0001 L BNN "L_MIN"
F 11 "2.0" H 7050 3100 50 0001 L BNN "E_NOM"
F 12 "0.65" H 7050 3100 50 0001 L BNN "A_MAX"
F 13 "0.65" H 7050 3100 50 0001 L BNN "E2_NOM"
F 14 "IPC 7351B" H 7050 3100 50 0001 L BNN "STANDARD"
F 15 "01/2018" H 7050 3100 50 0001 L BNN "PARTREV"
F 16 "0.25" H 7050 3100 50 0001 L BNN "B_NOM"
F 17 "" H 7050 3100 50 0001 L BNN "THERMAL_PAD"
F 18 "0.3" H 7050 3100 50 0001 L BNN "B_MAX"
F 19 "0.2" H 7050 3100 50 0001 L BNN "B_MIN"
F 20 "" H 7050 3100 50 0001 L BNN "IPC"
F 21 "" H 7050 3100 50 0001 L BNN "DNOM"
F 22 "6.0" H 7050 3100 50 0001 L BNN "PIN_COUNT"
F 23 "2.1" H 7050 3100 50 0001 L BNN "E_MAX"
F 24 "" H 7050 3100 50 0001 L BNN "JEDEC"
F 25 "" H 7050 3100 50 0001 L BNN "BALL_ROWS"
F 26 "" H 7050 3100 50 0001 L BNN "L1_MIN"
F 27 "" H 7050 3100 50 0001 L BNN "L1_NOM"
F 28 "" H 7050 3100 50 0001 L BNN "DMAX"
F 29 "" H 7050 3100 50 0001 L BNN "PIN_COLUMNS"
F 30 "" H 7050 3100 50 0001 L BNN "VACANCIES"
F 31 "" H 7050 3100 50 0001 L BNN "SNAPEDA_PACKAGE_ID"
F 32 "" H 7050 3100 50 0001 L BNN "DMIN"
F 33 "" H 7050 3100 50 0001 L BNN "L1_MAX"
F 34 "0.35" H 7050 3100 50 0001 L BNN "L_MAX"
F 35 "" H 7050 3100 50 0001 L BNN "D1_NOM"
F 36 "Texas Instruments" H 7050 3100 50 0001 L BNN "MANUFACTURER"
F 37 "1.35" H 7050 3100 50 0001 L BNN "D2_NOM"
F 38 "" H 7050 3100 50 0001 L BNN "PACKAGE_TYPE"
F 39 "" H 7050 3100 50 0001 L BNN "D1_MAX"
F 40 "0.3" H 7050 3100 50 0001 L BNN "L_NOM"
F 41 "2.1" H 7050 3100 50 0001 L BNN "D_MAX"
F 42 "2.0" H 7050 3100 50 0001 L BNN "D_NOM"
F 43 "" H 7050 3100 50 0001 L BNN "PINS"
F 44 "1.9" H 7050 3100 50 0001 L BNN "D_MIN"
F 45 "" H 7050 3100 50 0001 L BNN "EMIN"
1 7050 3100
1 0 0 -1
$EndComp
NoConn ~ 7650 3200
NoConn ~ 7650 2900
Text Label 7650 2700 0 50 ~ 0
VCC
Text Label 7650 3400 0 50 ~ 0
GND
Text Label 6450 2900 2 50 ~ 0
GND
Text Label 6450 3100 2 50 ~ 0
SCL
Text Label 6450 3200 2 50 ~ 0
SDA
$EndSCHEMATC

View file

@ -0,0 +1,990 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# A4L-LOC
#
DEF A4L-LOC #FRAME 0 40 Y Y 1 L N
F0 "#FRAME" 0 0 50 H I C CNN
F1 "A4L-LOC" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 8550 600 85 0 1 0 >DRAWING_NAME Normal 0 L B
T 0 8550 400 76 0 1 0 >LAST_DATE_TIME Normal 0 L B
T 0 8995 200 85 0 1 0 >SHEET Normal 0 L B
T 0 8550 800 85 0 1 0 "by joey castillo" Normal 0 L B
T 0 9300 200 85 0 1 0 "cc-by-sa 4.0" Normal 0 L B
T 0 7300 200 180 0 1 0 oddly_specific_objects Normal 0 L B
T 0 8540 195 85 0 1 0 Sheet: Normal 0 L B
P 2 1 0 0 7250 150 7250 950 N
P 2 1 0 0 7250 950 8475 950 N
P 2 1 0 0 8475 350 8475 150 N
P 2 1 0 0 8475 350 8475 550 N
P 2 1 0 0 8475 550 8475 750 N
P 2 1 0 0 8475 550 10100 550 N
P 2 1 0 0 8475 750 8475 950 N
P 2 1 0 0 8475 750 10100 750 N
P 2 1 0 0 8475 950 10100 950 N
P 2 1 0 0 9250 150 9250 350 N
P 2 1 0 0 9250 350 8475 350 N
P 2 1 0 0 9250 350 10100 350 N
P 2 1 0 0 10100 150 10100 350 N
P 2 1 0 0 10100 350 10100 550 N
P 2 1 0 0 10100 550 10100 750 N
P 2 1 0 0 10100 750 10100 950 N
ENDDRAW
ENDDEF
#
# FH19C-9S-0.5SH_10-FFC
#
DEF FH19C-9S-0.5SH_10-FFC ~ 0 40 Y Y 1 L N
F0 "" 350 700 59 H V L CNN
F1 "FH19C-9S-0.5SH_10-FFC" 350 600 59 H V L CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -200 500 -200 -500 N
P 2 1 0 0 -200 500 300 500 N
P 2 1 0 0 300 -500 -200 -500 N
P 2 1 0 0 300 -500 300 500 N
X 1 1 500 400 200 L 50 50 1 0 B
X 2 2 500 300 200 L 50 50 1 0 B
X 3 3 500 200 200 L 50 50 1 0 B
X 4 4 500 100 200 L 50 50 1 0 B
X 5 5 500 0 200 L 50 50 1 0 B
X 6 6 500 -100 200 L 50 50 1 0 B
X 7 7 500 -200 200 L 50 50 1 0 B
X 8 8 500 -300 200 L 50 50 1 0 B
X 9 9 500 -400 200 L 50 50 1 0 B
ENDDRAW
ENDDEF
#
# GND
#
DEF GND #GND 0 40 Y Y 1 L P
F0 "#GND" 0 0 50 H I C CNN
F1 "GND" -100 -100 59 H V L BNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -75 0 75 0 N
X GND 1 0 100 100 D 0 0 1 0 W
ENDDRAW
ENDDEF
#
# RESISTOR0603MINI
#
DEF RESISTOR0603MINI R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR0603MINI" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR0805_10MGAP
#
DEF RESISTOR0805_10MGAP R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR0805_10MGAP" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR0805_NOOUTLINE
#
DEF RESISTOR0805_NOOUTLINE R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR0805_NOOUTLINE" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR0805_NOTHERMALS
#
DEF RESISTOR0805_NOTHERMALS R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR0805_NOTHERMALS" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR2012
#
DEF RESISTOR2012 R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR2012" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR2512
#
DEF RESISTOR2512 R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR2512" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0402
#
DEF RESISTOR_0402 R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0402" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0402MP
#
DEF RESISTOR_0402MP R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0402MP" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0603
#
DEF RESISTOR_0603 R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0603" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0603MP
#
DEF RESISTOR_0603MP R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0603MP" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0603_NOOUT
#
DEF RESISTOR_0603_NOOUT R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0603_NOOUT" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0805
#
DEF RESISTOR_0805 R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0805" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_0805MP
#
DEF RESISTOR_0805MP R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_0805MP" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_1206
#
DEF RESISTOR_1206 R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_1206" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# RESISTOR_1206MP
#
DEF RESISTOR_1206MP R 0 40 Y Y 1 L N
F0 "R" 0 100 50 H V C CNN
F1 "RESISTOR_1206MP" 0 0 40 H V C CNB
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 -100 -50 -100 50 N
P 2 1 0 0 -100 50 100 50 N
P 2 1 0 0 100 -50 -100 -50 N
P 2 1 0 0 100 50 100 -50 N
X 1 1 -200 0 100 R 0 0 1 0 P
X 2 2 200 0 100 L 0 0 1 0 P
ENDDRAW
ENDDEF
#
# TPB1,27
#
DEF TPB1,27 TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPB1,27" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPB2,54
#
DEF TPB2,54 TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPB2,54" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPPAD1-13
#
DEF TPPAD1-13 TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPPAD1-13" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPPAD1-13Y
#
DEF TPPAD1-13Y TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPPAD1-13Y" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPPAD1-17
#
DEF TPPAD1-17 TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPPAD1-17" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPPAD1-17Y
#
DEF TPPAD1-17Y TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPPAD1-17Y" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPPAD1-20
#
DEF TPPAD1-20 TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPPAD1-20" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPPAD1-20Y
#
DEF TPPAD1-20Y TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPPAD1-20Y" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP06R
#
DEF TPTP06R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP06R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP06SQ
#
DEF TPTP06SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP06SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP07R
#
DEF TPTP07R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP07R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP07SQ
#
DEF TPTP07SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP07SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP08R
#
DEF TPTP08R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP08R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP08SQ
#
DEF TPTP08SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP08SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP09R
#
DEF TPTP09R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP09R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP09SQ
#
DEF TPTP09SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP09SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP10R
#
DEF TPTP10R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP10R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP10SQ
#
DEF TPTP10SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP10SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP11R
#
DEF TPTP11R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP11R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP11SQ
#
DEF TPTP11SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP11SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP12R
#
DEF TPTP12R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP12R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP12SQ
#
DEF TPTP12SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP12SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP13R
#
DEF TPTP13R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP13R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP13SQ
#
DEF TPTP13SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP13SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP14R
#
DEF TPTP14R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP14R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP14SQ
#
DEF TPTP14SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP14SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP15R
#
DEF TPTP15R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP15R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP15SQ
#
DEF TPTP15SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP15SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP16R
#
DEF TPTP16R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP16R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP16SQ
#
DEF TPTP16SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP16SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP17R
#
DEF TPTP17R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP17R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP17SQ
#
DEF TPTP17SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP17SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP18R
#
DEF TPTP18R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP18R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP18SQ
#
DEF TPTP18SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP18SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP19R
#
DEF TPTP19R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP19R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP19SQ
#
DEF TPTP19SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP19SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP20R
#
DEF TPTP20R TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP20R" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# TPTP20SQ
#
DEF TPTP20SQ TP 0 40 Y Y 1 L N
F0 "TP" -50 50 59 H V L BNN
F1 "TPTP20SQ" 0 0 50 H I C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
T 0 50 -50 59 0 1 0 >TP_SIGNAL_NAME Normal 0 L B
P 2 1 0 0 -30 -30 0 0 N
P 2 1 0 0 0 -60 -30 -30 N
P 2 1 0 0 0 0 30 -30 N
P 2 1 0 0 30 -30 0 -60 N
X TP TP 0 -100 100 U 0 0 1 0 I
ENDDRAW
ENDDEF
#
# VCC
#
DEF VCC #P+ 0 40 Y Y 1 L P
F0 "#P+" 0 0 50 H I C CNN
F1 "VCC" -100 -100 59 V V L BNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 1 0 0 0 0 -50 -75 N
P 2 1 0 0 50 -75 0 0 N
X VCC 1 0 -100 100 U 0 0 1 0 W
ENDDRAW
ENDDEF
#
#End Library

View file

@ -0,0 +1,5 @@
(page_layout
(setup (textsize 1.5 1.5)(linewidth 0.15)(textlinewidth 0.15)
(left_margin 10)(right_margin 10)(top_margin 10)(bottom_margin 10))
(line (name segm1:Line) (start 0 0) (end 0 0))
)

View file

@ -0,0 +1,4 @@
(fp_lib_table
(lib (name "Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001")(type KiCad)(uri "$(KIPRJMOD)/Q3Q-SWAB-A1-00 Temperature + Test Points + OPT3001.pretty")(options "")(descr ""))
(lib (name OPT3001DNPT)(type KiCad)(uri ${KIPRJMOD}/OPT3001DNPT)(options "")(descr ""))
)

View file

@ -0,0 +1,4 @@
(sym_lib_table
(lib (name Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import)(type Legacy)(uri ${KIPRJMOD}/Q3Q-SWAB-A1-00_Temperature_+_Test_Points_+_OPT3001-eagle-import.lib)(options "")(descr ""))
(lib (name OPT3001DNPT)(type Legacy)(uri ${KIPRJMOD}/OPT3001DNPT/OPT3001DNPT.lib)(options "")(descr ""))
)

View file

@ -150,6 +150,7 @@ SRCS += \
$(TOP)/watch-library/hardware/hpl/systick/hpl_systick.c \
$(TOP)/watch-library/shared/driver/thermistor_driver.c \
$(TOP)/watch-library/shared/driver/lis2dw.c \
$(TOP)/watch-library/shared/driver/opt3001.c \
$(TOP)/watch-library/shared/driver/spiflash.c \
$(TOP)/watch-library/shared/watch/watch_private_buzzer.c \
$(TOP)/watch-library/shared/watch/watch_private_display.c \
@ -195,6 +196,7 @@ SRCS += \
$(TOP)/watch-library/simulator/watch/watch_private.c \
$(TOP)/watch-library/simulator/watch/watch.c \
$(TOP)/watch-library/shared/driver/thermistor_driver.c \
$(TOP)/watch-library/shared/driver/opt3001.c \
$(TOP)/watch-library/shared/watch/watch_private_buzzer.c \
$(TOP)/watch-library/shared/watch/watch_private_display.c \
$(TOP)/watch-library/shared/watch/watch_utility.c \

View file

@ -196,6 +196,7 @@ static void filesystem_cat(char *filename) {
if (info.size > 0) {
char *buf = malloc(info.size + 1);
filesystem_read_file(filename, buf, info.size);
buf[info.size] = '\0';
printf("%s\n", buf);
free(buf);
} else {

View file

@ -0,0 +1,179 @@
/*
* MIT License
*
* Copyright (c) 2023 Gabor L Ugray
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <stdlib.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include "chirpy_tx.h"
static const uint32_t chirpy_min_freq = 2500;
static const uint32_t cirpy_freq_step = 250;
// This many bytes are followed by a CRC and block separator
// It's a multiple of 3 so no bits are wasted (a tone encodes 3 bits)
// Last block can be shorter
static const uint8_t chirpy_default_block_size = 15;
// The dedicated control tone. This is the highest tone index.
static const uint8_t chirpy_control_tone = 8;
// Pre-computed tone periods. This is allocated and populated on-demand.
static uint32_t *chirpy_tone_periods = NULL;
uint8_t chirpy_crc8(const uint8_t *addr, uint16_t len) {
uint8_t crc = 0;
for (uint16_t i = 0; i < len; i++)
crc = chirpy_update_crc8(addr[i], crc);
return crc;
}
uint8_t chirpy_update_crc8(uint8_t next_byte, uint8_t crc) {
for (uint8_t j = 0; j < 8; j++) {
uint8_t mix = (crc ^ next_byte) & 0x01;
crc >>= 1;
if (mix)
crc ^= 0x8C;
next_byte >>= 1;
}
return crc;
}
static void _chirpy_append_tone(chirpy_encoder_state_t *ces, uint8_t tone) {
// This is BAD and should never happen. But if it does, we'd rather
// create a corrupt transmission than corrupt memory #$^@
if (ces->tone_count == CHIRPY_TONE_BUF_SIZE)
return;
ces->tone_buf[ces->tone_count] = tone;
++ces->tone_count;
}
void chirpy_init_encoder(chirpy_encoder_state_t *ces, chirpy_get_next_byte_t get_next_byte) {
memset(ces, 0, sizeof(chirpy_encoder_state_t));
ces->block_size = chirpy_default_block_size;
ces->get_next_byte = get_next_byte;
_chirpy_append_tone(ces, 8);
_chirpy_append_tone(ces, 0);
_chirpy_append_tone(ces, 8);
_chirpy_append_tone(ces, 0);
}
static uint8_t _chirpy_retrieve_next_tone(chirpy_encoder_state_t *ces) {
if (ces->tone_pos == ces->tone_count)
return 255;
uint8_t res = ces->tone_buf[ces->tone_pos];
++ces->tone_pos;
if (ces->tone_pos == ces->tone_count) {
// End of buffer: reset buffer
ces->tone_pos = 0;
ces->tone_count = 0;
}
return res;
}
static void _chirpy_encode_bits(chirpy_encoder_state_t *ces, uint8_t force_partial) {
while (ces->bit_count > 0) {
if (ces->bit_count < 3 && !force_partial) break;
uint8_t tone = (uint8_t)(ces->bits >> 13);
_chirpy_append_tone(ces, tone);
if (ces->bit_count >= 3) {
ces->bits <<= 3;
ces->bit_count -= 3;
} else {
ces->bits = 0;
ces->bit_count = 0;
}
}
}
static void _chirpy_finish_block(chirpy_encoder_state_t *ces) {
_chirpy_append_tone(ces, chirpy_control_tone);
ces->bits = ces->crc;
ces->bits <<= 8;
ces->bit_count = 8;
_chirpy_encode_bits(ces, 1);
ces->bit_count = 0;
ces->crc = 0;
ces->block_len = 0;
_chirpy_append_tone(ces, chirpy_control_tone);
}
static void _chirpy_finish_transmission(chirpy_encoder_state_t *ces) {
_chirpy_append_tone(ces, chirpy_control_tone);
_chirpy_append_tone(ces, chirpy_control_tone);
}
uint8_t chirpy_get_next_tone(chirpy_encoder_state_t *ces) {
// If there are tones left in the buffer, keep sending those
if (ces->tone_pos < ces->tone_count)
return _chirpy_retrieve_next_tone(ces);
// We know data is over: that means we've wrapped up transmission
// Just drain tone buffer, and then keep sendig EOB
if (ces->get_next_byte == 0)
return _chirpy_retrieve_next_tone(ces);
// Fetch next byte
uint8_t next_byte;
uint8_t got_more = ces->get_next_byte(&next_byte);
// Data over: write CRC if we sent a partial buffer; send end signal
if (got_more == 0) {
ces->get_next_byte = 0;
if (ces->bit_count > 0) _chirpy_encode_bits(ces, 1);
if (ces->block_len > 0) _chirpy_finish_block(ces);
_chirpy_finish_transmission(ces);
return _chirpy_retrieve_next_tone(ces);
}
// Got more data: add to bits; convert
uint16_t msk = next_byte;
msk <<= (8 - ces->bit_count);
ces->bits |= msk;
ces->bit_count += 8;
_chirpy_encode_bits(ces, 0);
++ces->block_len;
ces->crc = chirpy_update_crc8(next_byte, ces->crc);
if (ces->block_len == ces->block_size)
_chirpy_finish_block(ces);
return _chirpy_retrieve_next_tone(ces);
}
uint16_t chirpy_get_tone_period(uint8_t tone) {
// Create pre-computed tone periods array on first use
if (chirpy_tone_periods == NULL) {
chirpy_tone_periods = malloc((chirpy_control_tone + 1) * sizeof(uint32_t));
for (uint8_t i = 0; i < chirpy_control_tone + 1; ++i) {
uint32_t freq = chirpy_min_freq + i * cirpy_freq_step;
uint16_t period = 1000000 / freq;
chirpy_tone_periods[i] = period;
}
}
// Return pre-computed value, but be paranoid about indexing into array
if (tone > chirpy_control_tone)
tone = chirpy_control_tone;
return chirpy_tone_periods[tone];
}

View file

@ -0,0 +1,98 @@
/*
* MIT License
*
* Copyright (c) 2023 Gabor L Ugray
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef CHIRPY_TX_H
#define CHIRPY_TX_H
/** @brief Calculates the CRC of a byte sequence.
*/
uint8_t chirpy_crc8(const uint8_t *addr, uint16_t len);
/** @brief Updates a CRC value with the next byte of input.
*/
uint8_t chirpy_update_crc8(uint8_t next_byte, uint8_t crc);
/** @brief Function to return next byte to be encoded.
* @param next_byte Pointer where implementor must write next byte (if available).
* @return 1 if there is a next byte, or 0 if no more data to encode.
*/
typedef uint8_t (*chirpy_get_next_byte_t)(uint8_t *next_byte);
#define CHIRPY_TONE_BUF_SIZE 16
// Holds state used by the encoder. Do not manipulate directly.
typedef struct {
uint8_t tone_buf[CHIRPY_TONE_BUF_SIZE];
uint8_t tone_pos;
uint8_t tone_count;
uint8_t block_len;
uint8_t block_size;
uint8_t crc;
uint16_t bits;
uint8_t bit_count;
chirpy_get_next_byte_t get_next_byte;
} chirpy_encoder_state_t;
/** @brief Iniitializes the encoder state to be used during the transmission.
* @param ces Pointer to encoder state object to be initialized.
* @param get_next_byte Pointer to function that the encoder will call to fetch data byte by byte.
*/
void chirpy_init_encoder(chirpy_encoder_state_t *ces, chirpy_get_next_byte_t get_next_byte);
/** @brief Returns the next tone to be transmitted.
* @details This function will call the get_next_byte function stored in the encoder state to
* retrieve the next byte to be transmitted as needed. As a single byte is encoded as several tones,
* and because the transmission also includes periodic CRC values, not every call to this function
* will result in a callback for the next data byte.
* @param ced Pointer to the encoder state object.
* @return A tone index from 0 to N (where N is the largest tone index), or 255 if the transmission is over.
*/
uint8_t chirpy_get_next_tone(chirpy_encoder_state_t *ces);
/** @brief Returns the period value for buzzing out a tone.
* @param tone The tone index, 0 thru 8.
* @return The period for the tone's frequency, i.e., 1_000_000 / freq.
*/
uint16_t chirpy_get_tone_period(uint8_t tone);
/** @brief Typedef for a tick handler function.
*/
typedef void (*chirpy_tick_fun_t)(void *context);
/** @brief Creature-comfort struct for use in your chirping code.
* @details The idea is to handle a tick that happens 64 times per second at the outermost level.
* To get to the desired ~20 tones per second, increment a counter and call the actual
* transmission ticker when tick_counter reaches tick_compare, with a compare value of 3.
* seq_pos is for use by the transmission function to keep track of where it is in the data.
* The current transmission function is stored in tick_fun. You can have multiple phases
* by switching to a different function. E.g., intro countdown first, followed by data chirping.
*/
typedef struct {
uint8_t tick_count;
uint8_t tick_compare;
uint16_t seq_pos;
chirpy_tick_fun_t tick_fun;
} chirpy_tick_state_t;
#endif

View file

@ -0,0 +1,160 @@
/*
* MIT License
*
* Copyright (c) 2023 Gabor L Ugray
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include "../src/lib/chirpy_tx.h"
#include "unity.h"
void setUp(void) {
}
void tearDown(void) {
}
const char *crc_test_str0 = "";
const char *crc_test_str1 = "h";
const char *crc_test_str2 = "he";
const char *crc_test_str3 = "hen";
const char *crc_test_str4 = "henl";
const char *crc_test_str5 = "henlO";
#define CRC_VAL_COUNT 5
const uint8_t crc_vals[] = {167, 118, 95, 92, 127};
void test_crc8() {
TEST_ASSERT_EQUAL_UINT8(0, chirpy_crc8((const uint8_t *)crc_test_str0, 0));
TEST_ASSERT_EQUAL_UINT8(167, chirpy_crc8((const uint8_t *)crc_test_str1, strlen(crc_test_str1)));
TEST_ASSERT_EQUAL_UINT8(118, chirpy_crc8((const uint8_t *)crc_test_str2, strlen(crc_test_str2)));
TEST_ASSERT_EQUAL_UINT8(95, chirpy_crc8((const uint8_t *)crc_test_str3, strlen(crc_test_str3)));
TEST_ASSERT_EQUAL_UINT8(92, chirpy_crc8((const uint8_t *)crc_test_str4, strlen(crc_test_str4)));
TEST_ASSERT_EQUAL_UINT8(127, chirpy_crc8((const uint8_t *)crc_test_str5, strlen(crc_test_str5)));
uint8_t crc = 0;
for (uint16_t i = 0; i < CRC_VAL_COUNT; ++i) {
uint8_t next_byte = crc_test_str5[i];
crc = chirpy_update_crc8(next_byte, crc);
TEST_ASSERT_EQUAL_UINT8(crc_vals[i], crc);
}
crc = chirpy_update_crc8(0, 0);
TEST_ASSERT_EQUAL(0, crc);
crc = chirpy_update_crc8(0x4f, 0);
TEST_ASSERT_EQUAL(7, crc);
}
const uint16_t data_len_01 = 0;
const uint8_t data_01[] = {};
const uint16_t tones_len_01 = 6;
const uint8_t tones_01[] = {8, 0, 8, 0, 8, 8};
const uint16_t data_len_02 = 1;
const uint8_t data_02[] = {0};
const uint16_t tones_len_02 = 14;
const uint8_t tones_02[] = {8, 0, 8, 0, 0, 0, 0, 8, 0, 0, 0, 8, 8, 8};
const uint16_t data_len_03 = 1;
const uint8_t data_03[] = {0x68};
const uint16_t tones_len_03 = 14;
const uint8_t tones_03[] = {8, 0, 8, 0, 3, 2, 0, 8, 5, 1, 6, 8, 8, 8};
const uint16_t data_len_04 = 3;
const uint8_t data_04[] = {0x68, 0x65, 0x6e};
const uint16_t tones_len_04 = 19;
const uint8_t tones_04[] = {8, 0, 8, 0, 3, 2, 0, 6, 2, 5, 5, 6, 8, 2, 7, 6, 8, 8, 8};
const uint16_t data_len_05 = 4;
const uint8_t data_05[] = {0x68, 0x65, 0x6e, 0x4f};
const uint16_t tones_len_05 = 27;
const uint8_t tones_05[] = {
8, 0, 8, 0, 3, 2, 0, 6, 2, 5, 5, 6, 8, 2, 7, 6, 8,
2, 3, 6, 8, 0, 1, 6, 8, 8, 8};
uint8_t curr_data_pos;
uint8_t curr_data_len;
const uint8_t *curr_data;
uint8_t get_next_byte(uint8_t *next_byte) {
if (curr_data_pos < curr_data_len) {
*next_byte = curr_data[curr_data_pos];
++curr_data_pos;
return 1;
}
return 0;
}
void test_encoder_one(const uint8_t *data, uint16_t data_len, const uint8_t *tones, uint16_t tones_len) {
curr_data = data;
curr_data_len = data_len;
curr_data_pos = 0;
chirpy_encoder_state_t ces;
chirpy_init_encoder(&ces, get_next_byte);
ces.block_size = 3;
uint8_t got_tones[2048] = {0};
uint16_t got_tone_pos = 0;
while (got_tone_pos < 2048) {
uint8_t tone = chirpy_get_next_tone(&ces);
got_tones[got_tone_pos] = tone;
if (tone == 255) break;
++got_tone_pos;
}
char buf1[65536];
char bufx[256];
memset(buf1, 0, 65536);
for (uint16_t i = 0; i < got_tone_pos; ++i) {
if (i == 0)
sprintf(bufx, "%d", got_tones[i]);
else
sprintf(bufx, ", %d", got_tones[i]);
strcat(buf1, bufx);
}
TEST_MESSAGE(buf1);
TEST_ASSERT_EQUAL(tones_len, got_tone_pos);
uint16_t smaller_len = tones_len < got_tone_pos ? tones_len : got_tone_pos;
TEST_ASSERT_EQUAL_UINT8_ARRAY(tones, got_tones, smaller_len);
}
void test_encoder() {
TEST_MESSAGE("Testing encoder with dataset 01");
test_encoder_one(data_01, data_len_01, tones_01, tones_len_01);
TEST_MESSAGE("Testing encoder with dataset 02");
test_encoder_one(data_02, data_len_02, tones_02, tones_len_02);
TEST_MESSAGE("Testing encoder with dataset 03");
test_encoder_one(data_03, data_len_03, tones_03, tones_len_03);
TEST_MESSAGE("Testing encoder with dataset 04");
test_encoder_one(data_04, data_len_04, tones_04, tones_len_04);
TEST_MESSAGE("Testing encoder with dataset 05");
test_encoder_one(data_05, data_len_05, tones_05, tones_len_05);
}
int main(void) {
UNITY_BEGIN();
RUN_TEST(test_crc8);
RUN_TEST(test_encoder);
return UNITY_END();
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,687 @@
/* ==========================================
Unity Project - A Test Framework for C
Copyright (c) 2007-21 Mike Karlesky, Mark VanderVoord, Greg Williams
[Released under MIT License. Please refer to license.txt for details]
========================================== */
#ifndef UNITY_FRAMEWORK_H
#define UNITY_FRAMEWORK_H
#define UNITY
#define UNITY_VERSION_MAJOR 2
#define UNITY_VERSION_MINOR 5
#define UNITY_VERSION_BUILD 4
#define UNITY_VERSION ((UNITY_VERSION_MAJOR << 16) | (UNITY_VERSION_MINOR << 8) | UNITY_VERSION_BUILD)
#ifdef __cplusplus
extern "C"
{
#endif
#include "unity_internals.h"
/*-------------------------------------------------------
* Test Setup / Teardown
*-------------------------------------------------------*/
/* These functions are intended to be called before and after each test.
* If using unity directly, these will need to be provided for each test
* executable built. If you are using the test runner generator and/or
* Ceedling, these are optional. */
void setUp(void);
void tearDown(void);
/* These functions are intended to be called at the beginning and end of an
* entire test suite. suiteTearDown() is passed the number of tests that
* failed, and its return value becomes the exit code of main(). If using
* Unity directly, you're in charge of calling these if they are desired.
* If using Ceedling or the test runner generator, these will be called
* automatically if they exist. */
void suiteSetUp(void);
int suiteTearDown(int num_failures);
/*-------------------------------------------------------
* Test Reset and Verify
*-------------------------------------------------------*/
/* These functions are intended to be called before during tests in order
* to support complex test loops, etc. Both are NOT built into Unity. Instead
* the test runner generator will create them. resetTest will run teardown and
* setup again, verifying any end-of-test needs between. verifyTest will only
* run the verification. */
void resetTest(void);
void verifyTest(void);
/*-------------------------------------------------------
* Configuration Options
*-------------------------------------------------------
* All options described below should be passed as a compiler flag to all files using Unity. If you must add #defines, place them BEFORE the #include above.
* Integers/longs/pointers
* - Unity attempts to automatically discover your integer sizes
* - define UNITY_EXCLUDE_STDINT_H to stop attempting to look in <stdint.h>
* - define UNITY_EXCLUDE_LIMITS_H to stop attempting to look in <limits.h>
* - If you cannot use the automatic methods above, you can force Unity by using these options:
* - define UNITY_SUPPORT_64
* - set UNITY_INT_WIDTH
* - set UNITY_LONG_WIDTH
* - set UNITY_POINTER_WIDTH
* Floats
* - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons
* - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT
* - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats
* - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons
* - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default)
* - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE
* - define UNITY_DOUBLE_TYPE to specify something other than double
* - define UNITY_EXCLUDE_FLOAT_PRINT to trim binary size, won't print floating point values in errors
* Output
* - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired
* - define UNITY_DIFFERENTIATE_FINAL_FAIL to print FAILED (vs. FAIL) at test end summary - for automated search for failure
* Optimization
* - by default, line numbers are stored in unsigned shorts. Define UNITY_LINE_TYPE with a different type if your files are huge
* - by default, test and failure counters are unsigned shorts. Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests.
* Test Cases
* - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script
* Parameterized Tests
* - you'll want to create a define of TEST_CASE(...) and/or TEST_RANGE(...) which basically evaluates to nothing
* Tests with Arguments
* - you'll want to define UNITY_USE_COMMAND_LINE_ARGS if you have the test runner passing arguments to Unity
*-------------------------------------------------------
* Basic Fail and Ignore
*-------------------------------------------------------*/
#define TEST_FAIL_MESSAGE(message) UNITY_TEST_FAIL(__LINE__, (message))
#define TEST_FAIL() UNITY_TEST_FAIL(__LINE__, NULL)
#define TEST_IGNORE_MESSAGE(message) UNITY_TEST_IGNORE(__LINE__, (message))
#define TEST_IGNORE() UNITY_TEST_IGNORE(__LINE__, NULL)
#define TEST_MESSAGE(message) UnityMessage((message), __LINE__)
#define TEST_ONLY()
#ifdef UNITY_INCLUDE_PRINT_FORMATTED
#define TEST_PRINTF(message, ...) UnityPrintF(__LINE__, (message), __VA_ARGS__)
#endif
/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails.
* This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */
#define TEST_PASS() TEST_ABORT()
#define TEST_PASS_MESSAGE(message) do { UnityMessage((message), __LINE__); TEST_ABORT(); } while (0)
/* This macro does nothing, but it is useful for build tools (like Ceedling) to make use of this to figure out
* which files should be linked to in order to perform a test. Use it like TEST_FILE("sandwiches.c") */
#define TEST_FILE(a)
/*-------------------------------------------------------
* Test Asserts (simple)
*-------------------------------------------------------*/
/* Boolean */
#define TEST_ASSERT(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expression Evaluated To FALSE")
#define TEST_ASSERT_TRUE(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expected TRUE Was FALSE")
#define TEST_ASSERT_UNLESS(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expression Evaluated To TRUE")
#define TEST_ASSERT_FALSE(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expected FALSE Was TRUE")
#define TEST_ASSERT_NULL(pointer) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, " Expected NULL")
#define TEST_ASSERT_NOT_NULL(pointer) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL")
#define TEST_ASSERT_EMPTY(pointer) UNITY_TEST_ASSERT_EMPTY( (pointer), __LINE__, " Expected Empty")
#define TEST_ASSERT_NOT_EMPTY(pointer) UNITY_TEST_ASSERT_NOT_EMPTY((pointer), __LINE__, " Expected Non-Empty")
/* Integers (of all sizes) */
#define TEST_ASSERT_EQUAL_INT(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_size_t(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX8(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX16(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX32(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX64(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_CHAR(expected, actual) UNITY_TEST_ASSERT_EQUAL_CHAR((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_BITS(mask, expected, actual) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_BITS_HIGH(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT)(-1), (actual), __LINE__, NULL)
#define TEST_ASSERT_BITS_LOW(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT)(0), (actual), __LINE__, NULL)
#define TEST_ASSERT_BIT_HIGH(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT)1 << (bit)), (UNITY_UINT)(-1), (actual), __LINE__, NULL)
#define TEST_ASSERT_BIT_LOW(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT)1 << (bit)), (UNITY_UINT)(0), (actual), __LINE__, NULL)
/* Integer Not Equal To (of all sizes) */
#define TEST_ASSERT_NOT_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_INT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_HEX64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_NOT_EQUAL_CHAR((threshold), (actual), __LINE__, NULL)
/* Integer Greater Than/ Less Than (of all sizes) */
#define TEST_ASSERT_GREATER_THAN(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_INT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_INT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_INT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_INT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_INT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_INT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_UINT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_UINT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_UINT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_UINT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_HEX16(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_HEX32(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_HEX64(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_HEX64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_CHAR(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_CHAR((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_INT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_INT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_INT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_INT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_INT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_INT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_UINT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_UINT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_UINT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_UINT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_HEX16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_HEX32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_HEX64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_CHAR(threshold, actual) UNITY_TEST_ASSERT_SMALLER_THAN_CHAR((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_INT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_INT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_INT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_INT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_INT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_UINT(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_UINT8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_UINT16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_UINT32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_UINT64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_size_t(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_HEX8(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_HEX16(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_HEX32(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_HEX64(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_CHAR(threshold, actual) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, NULL)
/* Integer Ranges (of all sizes) */
#define TEST_ASSERT_INT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_INT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_INT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_INT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_INT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_UINT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_UINT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_UINT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_UINT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_size_t_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_CHAR_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_CHAR_WITHIN((delta), (expected), (actual), __LINE__, NULL)
/* Integer Array Ranges (of all sizes) */
#define TEST_ASSERT_INT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_INT8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_INT16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_INT32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_INT64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_UINT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_UINT8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_UINT16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_UINT32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_UINT64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_size_t_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_HEX_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_HEX8_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_HEX16_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_HEX32_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_HEX64_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
#define TEST_ASSERT_CHAR_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, NULL)
/* Structs and Strings */
#define TEST_ASSERT_EQUAL_PTR(expected, actual) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_STRING(expected, actual) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, NULL)
/* Arrays */
#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_size_t_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_CHAR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
/* Arrays Compared To Single Value */
#define TEST_ASSERT_EACH_EQUAL_INT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_INT8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT8((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_INT16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT16((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_INT32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT32((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_INT64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_INT64((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_UINT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_UINT8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT8((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_UINT16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT16((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_UINT32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT32((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_UINT64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT64((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_size_t(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_HEX(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_HEX8(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX8((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_HEX16(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX16((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_HEX32(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_HEX64(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_HEX64((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_PTR(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_PTR((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_STRING(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_STRING((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_MEMORY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY((expected), (actual), (len), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_CHAR(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_CHAR((expected), (actual), (num_elements), __LINE__, NULL)
/* Floating Point (If Enabled) */
#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_NOT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_NOT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_NOT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_FLOAT_ARRAY_WITHIN((delta), (expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_FLOAT(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_FLOAT(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_FLOAT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_FLOAT(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_FLOAT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_FLOAT(threshold, actual) UNITY_TEST_ASSERT_LESS_THAN_FLOAT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_FLOAT(threshold, actual) UNITY_TEST_ASSERT_LESS_OR_EQUAL_FLOAT((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_NOT_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, NULL)
#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, NULL)
/* Double (If Enabled) */
#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_NOT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_NOT_WITHIN((delta), (expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_NOT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_ARRAY_WITHIN(delta, expected, actual, num_elements) UNITY_TEST_ASSERT_DOUBLE_ARRAY_WITHIN((delta), (expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_EACH_EQUAL_DOUBLE(expected, actual, num_elements) UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE((expected), (actual), (num_elements), __LINE__, NULL)
#define TEST_ASSERT_GREATER_THAN_DOUBLE(threshold, actual) UNITY_TEST_ASSERT_GREATER_THAN_DOUBLE((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_GREATER_OR_EQUAL_DOUBLE(threshold, actual) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_DOUBLE((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_THAN_DOUBLE(threshold, actual) UNITY_TEST_ASSERT_LESS_THAN_DOUBLE((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_LESS_OR_EQUAL_DOUBLE(threshold, actual) UNITY_TEST_ASSERT_LESS_OR_EQUAL_DOUBLE((threshold), (actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_NOT_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, NULL)
#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, NULL)
/* Shorthand */
#ifdef UNITY_SHORTHAND_AS_OLD
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal")
#endif
#ifdef UNITY_SHORTHAND_AS_INT
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#endif
#ifdef UNITY_SHORTHAND_AS_MEM
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_MEMORY((&expected), (&actual), sizeof(expected), __LINE__, NULL)
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#endif
#ifdef UNITY_SHORTHAND_AS_RAW
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) == (actual)), __LINE__, " Expected Equal")
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal")
#endif
#ifdef UNITY_SHORTHAND_AS_NONE
#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#endif
/*-------------------------------------------------------
* Test Asserts (with additional messages)
*-------------------------------------------------------*/
/* Boolean */
#define TEST_ASSERT_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message))
#define TEST_ASSERT_TRUE_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message))
#define TEST_ASSERT_UNLESS_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message))
#define TEST_ASSERT_FALSE_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message))
#define TEST_ASSERT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, (message))
#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, (message))
#define TEST_ASSERT_EMPTY_MESSAGE(pointer, message) UNITY_TEST_ASSERT_EMPTY( (pointer), __LINE__, (message))
#define TEST_ASSERT_NOT_EMPTY_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_EMPTY((pointer), __LINE__, (message))
/* Integers (of all sizes) */
#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_size_t_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(-1), (actual), __LINE__, (message))
#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(0), (actual), __LINE__, (message))
#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(-1), (actual), __LINE__, (message))
#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(0), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_CHAR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_CHAR((expected), (actual), __LINE__, (message))
/* Integer Not Equal To (of all sizes) */
#define TEST_ASSERT_NOT_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_INT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_CHAR((threshold), (actual), __LINE__, (message))
/* Integer Greater Than/ Less Than (of all sizes) */
#define TEST_ASSERT_GREATER_THAN_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_INT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_HEX64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_CHAR((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_INT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_HEX64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_THAN_CHAR((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_INT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_INT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_INT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_INT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_INT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_INT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_INT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_UINT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_UINT8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_UINT16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_UINT32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_UINT64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_size_t_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_UINT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_HEX8_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX8((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_HEX16_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX16((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_HEX32_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX32((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_HEX64_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_HEX64((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_CHAR_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_SMALLER_OR_EQUAL_CHAR((threshold), (actual), __LINE__, (message))
/* Integer Ranges (of all sizes) */
#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_INT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_INT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_INT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_INT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_UINT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_UINT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_UINT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_UINT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_size_t_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_CHAR_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_CHAR_WITHIN((delta), (expected), (actual), __LINE__, (message))
/* Integer Array Ranges (of all sizes) */
#define TEST_ASSERT_INT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_INT8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_INT16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_INT32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_INT64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_INT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_UINT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_UINT8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_UINT16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_UINT32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_UINT64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_size_t_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_UINT_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_HEX_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_HEX8_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX8_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_HEX16_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX16_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_HEX32_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX32_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_HEX64_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_HEX64_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
#define TEST_ASSERT_CHAR_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_CHAR_ARRAY_WITHIN((delta), (expected), (actual), num_elements, __LINE__, (message))
/* Structs and Strings */
#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, (message))
#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, (message))
/* Arrays */
#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_size_t_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_CHAR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_CHAR_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
/* Arrays Compared To Single Value*/
#define TEST_ASSERT_EACH_EQUAL_INT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_INT8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT8((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_INT16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT16((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_INT32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT32((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_INT64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_INT64((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_UINT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_UINT8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT8((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_UINT16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT16((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_UINT32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT32((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_UINT64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT64((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_size_t_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_UINT((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_HEX_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_HEX8_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX8((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_HEX16_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX16((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_HEX32_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX32((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_HEX64_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_HEX64((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_PTR_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_PTR((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_STRING_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_STRING((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_MEMORY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_MEMORY((expected), (actual), (len), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_CHAR_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_CHAR((expected), (actual), (num_elements), __LINE__, (message))
/* Floating Point (If Enabled) */
#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_FLOAT((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_FLOAT_ARRAY_WITHIN((delta), (expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_FLOAT_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_FLOAT((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_FLOAT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_FLOAT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_FLOAT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_FLOAT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_FLOAT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_LESS_THAN_FLOAT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_FLOAT_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_LESS_OR_EQUAL_FLOAT((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, (message))
#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, (message))
/* Double (If Enabled) */
#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, (message))
#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_NOT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_ARRAY_WITHIN_MESSAGE(delta, expected, actual, num_elements, message) UNITY_TEST_ASSERT_DOUBLE_ARRAY_WITHIN((delta), (expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_EACH_EQUAL_DOUBLE_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EACH_EQUAL_DOUBLE((expected), (actual), (num_elements), __LINE__, (message))
#define TEST_ASSERT_GREATER_THAN_DOUBLE_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_THAN_DOUBLE((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_GREATER_OR_EQUAL_DOUBLE_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_GREATER_OR_EQUAL_DOUBLE((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_THAN_DOUBLE_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_LESS_THAN_DOUBLE((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_LESS_OR_EQUAL_DOUBLE_MESSAGE(threshold, actual, message) UNITY_TEST_ASSERT_LESS_OR_EQUAL_DOUBLE((threshold), (actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, (message))
#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, (message))
/* Shorthand */
#ifdef UNITY_SHORTHAND_AS_OLD
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message))
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, (message))
#endif
#ifdef UNITY_SHORTHAND_AS_INT
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, message)
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#endif
#ifdef UNITY_SHORTHAND_AS_MEM
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((&expected), (&actual), sizeof(expected), __LINE__, message)
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#endif
#ifdef UNITY_SHORTHAND_AS_RAW
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) == (actual)), __LINE__, message)
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, message)
#endif
#ifdef UNITY_SHORTHAND_AS_NONE
#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_FAIL(__LINE__, UnityStrErrShorthand)
#endif
/* end of UNITY_FRAMEWORK_H */
#ifdef __cplusplus
}
#endif
#endif

File diff suppressed because it is too large Load diff

View file

@ -24,6 +24,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "calc.h"
#include "calc_fns.h"
@ -41,12 +42,11 @@ int calc_init(calc_state_t *cs) {
}
/* calc_input_function
* Try to execut the token as a calculator function
* TODO: Maybe replace this loop with binary search for token in a sorted calc_dict
* Try to execute the token as a calculator function
*/
int calc_input_function(calc_state_t *cs, char *token) {
for(uint8_t idx=0; idx<sizeof(calc_dict)/sizeof(calc_dict[0]); idx++) {
for(uint8_t idxn=0; idxn<sizeof(calc_dict[idx].names)/sizeof(calc_dict[idx].names[0]); idxn++) {
for(uint8_t idxn=0; idxn<calc_dict[idx].n_names; idxn++) {
if(0 == strcmp(calc_dict[idx].names[idxn], token)) { // Found a match
return (*calc_dict[idx].fn)(cs); // Run calculator function
}
@ -108,6 +108,6 @@ int calc_input_float(calc_state_t *cs, char *token) {
*/
int calc_input(calc_state_t *cs, char *token) {
int retval = calc_input_function(cs, token);
if(retval == -1) retval = calc_input_float(cs, token);
if(-1 == retval) retval = calc_input_float(cs, token);
return retval;
}

View file

@ -227,4 +227,14 @@ int calc_atan2d(calc_state_t *cs) {
cs->s--;
return 0;
}
int calc_torad(calc_state_t *cs) {
STACK_CHECK_1_IN_1_OUT;
cs->stack[cs->s-1] = cs->stack[cs->s-1]*to_rad;
return 0;
}
int calc_todeg(calc_state_t *cs) {
STACK_CHECK_1_IN_1_OUT;
cs->stack[cs->s-1] = cs->stack[cs->s-1]*to_deg;
return 0;
}

View file

@ -67,57 +67,62 @@ int calc_asind(calc_state_t *cs);
int calc_acosd(calc_state_t *cs);
int calc_atand(calc_state_t *cs);
int calc_atan2d(calc_state_t *cs);
int calc_torad(calc_state_t *cs);
int calc_todeg(calc_state_t *cs);
// Dictionary definition
typedef int (*calc_fn_t)(calc_state_t *cs);
typedef struct {
char *names[3]; // Token to use to run this function
uint8_t n_names; // Number of aliases
const char ** names; // Token to use to run this function
calc_fn_t fn; // Pointer to function
} calc_dict_entry_t;
static const calc_dict_entry_t calc_dict[] = {
// Stack and register control
{{"x"}, &calc_delete},
{{"xx"}, &calc_clear_stack},
{{"xxx"}, &calc_init},
{{"f"}, &calc_flip},
{{"mc"}, &calc_mem_clear},
{{"mr"}, &calc_mem_recall},
{{"ma"}, &calc_mem_add},
{{"ms"}, &calc_mem_subtract},
{1, (const char*[]){"x"}, &calc_delete},
{1, (const char*[]){"xx"}, &calc_clear_stack},
{1, (const char*[]){"xxx"}, &calc_init},
{1, (const char*[]){"f"}, &calc_flip},
{1, (const char*[]){"mc"}, &calc_mem_clear},
{1, (const char*[]){"mr"}, &calc_mem_recall},
{1, (const char*[]){"ma"}, &calc_mem_add},
{1, (const char*[]){"ms"}, &calc_mem_subtract},
// Basic operations
{{"a"}, &calc_add},
{{"s"}, &calc_subtract},
{{"n"}, &calc_negate},
{{"m"}, &calc_multiply},
{{"d"}, &calc_divide},
{{"i"}, &calc_invert},
{1, (const char*[]){"a"}, &calc_add},
{1, (const char*[]){"s"}, &calc_subtract},
{1, (const char*[]){"n"}, &calc_negate},
{1, (const char*[]){"m"}, &calc_multiply},
{1, (const char*[]){"d"}, &calc_divide},
{1, (const char*[]){"i"}, &calc_invert},
// Constants
{{"e"}, &calc_e},
{{"pi"}, &calc_pi},
{1, (const char*[]){"e"}, &calc_e},
{1, (const char*[]){"pi"}, &calc_pi},
// Exponential/logarithmic
{{"exp"}, &calc_exp},
{{"pow"}, &calc_pow},
{{"ln"}, &calc_ln},
{{"log"}, &calc_log},
{{"sqrt"}, &calc_sqrt},
{1, (const char*[]){"exp"}, &calc_exp},
{1, (const char*[]){"pow"}, &calc_pow},
{1, (const char*[]){"ln"}, &calc_ln},
{1, (const char*[]){"log"}, &calc_log},
{1, (const char*[]){"sqrt"}, &calc_sqrt},
// Trigonometric
{{"sin", "sn"}, &calc_sin},
{{"cos"}, &calc_cos},
{{"tan"}, &calc_tan},
{{"asin"}, &calc_asin},
{{"acos"}, &calc_acos},
{{"atan"}, &calc_atan},
{{"atan2"}, &calc_atan2},
{{"sind"}, &calc_sind},
{{"cosd"}, &calc_cosd},
{{"tand"}, &calc_tand},
{{"asind"}, &calc_asind},
{{"acosd"}, &calc_acosd},
{{"atand"}, &calc_atand},
{{"atan2d"}, &calc_atan2d},
{2, (const char*[]){"sin", "sn"}, &calc_sin},
{1, (const char*[]){"cos"}, &calc_cos},
{1, (const char*[]){"tan"}, &calc_tan},
{1, (const char*[]){"asin"}, &calc_asin},
{1, (const char*[]){"acos"}, &calc_acos},
{1, (const char*[]){"atan"}, &calc_atan},
{1, (const char*[]){"atan2"}, &calc_atan2},
{1, (const char*[]){"sind"}, &calc_sind},
{1, (const char*[]){"cosd"}, &calc_cosd},
{1, (const char*[]){"tand"}, &calc_tand},
{1, (const char*[]){"asind"}, &calc_asind},
{1, (const char*[]){"acosd"}, &calc_acosd},
{1, (const char*[]){"atand"}, &calc_atand},
{1, (const char*[]){"atan2d"}, &calc_atan2d},
{1, (const char*[]){"tor"}, &calc_torad},
{1, (const char*[]){"tod"}, &calc_todeg},
};

View file

@ -1,66 +0,0 @@
/*
* MIT License
*
* Copyright (c) 2023 Christian Chapman
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <string.h>
#include "mc.h"
/* mc_reset Initialize or reset an MC buffer
* Input: mc = location of buffer to reset
*/
void mc_reset(mc_state_t * mc) {
memset(mc->b, '\0', BUFFLEN*sizeof(mc->b[0]));
mc->bidx = 0;
return;
return;
}
/* mc_input Read an input into a morse code buffer
* Input: mc = buffer to read into
* c = character to read into buffer ('.' or '-', ignored otherwise).
* If the buffer is full, reset it instead of entering the new character.
*/
void mc_input(mc_state_t * mc, char c) {
if(mc->bidx >= BUFFLEN) mc_reset(mc);
else if( ('.' == c) || ('-' == c) ) {
mc->b[mc->bidx] = c;
mc->bidx++;
}
return;
}
/* mc_dec Decode a Morse code character (descend MC_DEC_KEY[])
* Input: b = BUFFLEN-length char array with '.'s and '-'s
* Output: c = Character b represents, or '\0' if not a Morse code.
*/
char mc_dec(char b[BUFFLEN]) {
uint8_t pos = 1; // Binary tree position ('.'=0; '-'=1)
for(uint8_t idx=0; idx<BUFFLEN; idx++) {
if('.' == b[idx]) pos = 2*pos; // Descend in . direction
else if('-' == b[idx]) pos = 2*pos+1; // Descend in - direction
else break; // End of morse code segment; finished descending
}
return MC_DEC_KEY[pos-1];
}

View file

@ -0,0 +1,147 @@
/*
* MIT License
*
* Copyright (c) 2023 Christian Chapman
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <string.h>
#include <math.h>
#include "watch_private_display.h"
#include "morsecalc_display.h"
// Display float on screen
void morsecalc_display_float(double d) {
// Special cases
if(d == 0) {
watch_display_string(" 0", 4);
return;
}
else if(isnan(d)) {
watch_display_string(" nan", 4);
return;
}
else if(d == (1.0)/(0.0)) {
watch_display_string(" inf", 4);
return;
}
else if(d == (-1.0)/(0.0)) {
watch_display_character('X', 1);
watch_display_string(" inf", 4);
return;
}
// Record number properties
// Sign
int is_negative = d<0;
if(is_negative) d = -d;
// Order of magnitude
int om = (int) floor(log(d)/log(10));
int om_is_negative = (om<0);
// Get the first 4 significant figures
int digits;
digits = round(d*pow(10.0, 3-om));
if(digits>9999) {
digits = 1000;
om++;
}
// Print signs
if(is_negative) {
// Xi; see https://joeycastillo.github.io/Sensor-Watch-Documentation/segmap
watch_set_pixel(0,11);
watch_set_pixel(2,12);
watch_set_pixel(2,11);
}
else watch_display_character(' ', 1);
if(om_is_negative) watch_set_pixel(1,9);
else watch_display_character(' ', 2);
// Print first 4 significant figures
watch_display_character('0'+(digits/1000)%10, 4);
watch_display_character('0'+(digits/100 )%10, 5);
watch_display_character('0'+(digits/10 )%10, 6);
watch_display_character('0'+(digits/1 )%10, 7);
// Prinat exponent
if(om_is_negative) om = -om; // Make exponent positive for display
if(om<=99) {
watch_display_character('0'+(om/10 )%10, 8);
watch_display_character('0'+(om/1 )%10, 9);
} else { // Over/underflow
if(om_is_negative) watch_display_string(" uf", 4);
else watch_display_string(" of", 4);
if(om<9999) { // Use main display to show order of magnitude
// (Should always succeed; max double is <2e308)
watch_display_character('0'+(om/1000)%10, 4);
watch_display_character('0'+(om/100 )%10, 5);
watch_display_character('0'+(om/10 )%10, 6);
watch_display_character('0'+(om/1 )%10, 7);
}
}
return;
}
// Print current input token
void morsecalc_display_token(morsecalc_state_t *mcs) {
watch_display_string(" ", 0); // Clear display
// Print morse code buffer
char c = MORSECODE_TREE[mcs->mc]; // Decode the morse code buffer's current contents
if('\0' == c) c = ' '; // Needed for watch_display_character
watch_display_character(c, 0); // Display current morse code char in mode position
unsigned int v = mcs->mc+1;
char bidx = 0; while (v >>= 1) bidx++;
watch_display_character('0'+bidx, 3); // Display buffer position in top right
// Print last 6 chars of current input line
uint8_t nlen = strlen(mcs->token); // number of characters in token
uint8_t nprint = min(nlen,6); // number of characters to print
watch_display_string(mcs->token+nlen-nprint, 10-nprint); // print right-aligned
return;
}
// Print stack or memory register contents.
void morsecalc_display_stack(morsecalc_state_t * mcs) {
watch_display_string(" ", 0); // Clear display
char c = MORSECODE_TREE[mcs->mc];
if('m' == c) { // Display memory
morsecalc_display_float(mcs->cs->mem);
watch_display_character(c, 0);
}
else {
// If the morse code buffer has a numeral in it, print that stack item
// Otherwise print top of stack
uint8_t idx = 0;
if(c >= '0' && c <= '9') idx = c - '0';
if(idx >= mcs->cs->s) watch_display_string(" empty", 4); // Stack empty
else morsecalc_display_float(mcs->cs->stack[mcs->cs->s-1-idx]); // Print stack item
watch_display_character('0'+idx, 0); // Print which stack item this is top center
}
watch_display_character('0'+(mcs->cs->s), 3); // Print the # of stack items top right
return;
}

View file

@ -22,30 +22,14 @@
* SOFTWARE.
*/
#include "morsecalc_face.h"
/* mc Morse code reading methods
*/
#include "stdint.h"
// Display float on screen
void morsecalc_display_float(double d);
#define BUFFLEN 5
typedef struct {
char b[BUFFLEN];
uint8_t bidx;
} mc_state_t;
// Print current input token
void morsecalc_display_token(morsecalc_state_t *mcs);
// MC_DEC_KEY represents a binary tree of International Morse Code.
// where '.' = 0 and '-' = 1. Levels of the tree are concatenated.
//
// Capitals denote special characters:
// C = Ch digraph
// V = VERIFY (ITU-R "UNDERSTOOD")
// R = REPEAT
// W = WAIT
// S = START TRANSMISSION
// E = END OF WORK
static const char MC_DEC_KEY[] = " etianmsurwdkgohvf\0l\0pjbxcyzq\0C\x35\x34V\x33\0R\0\x32W\0+\0\0\0\0\x31\x36=/\0\0S(\0\x37\0\0\0\x38\0\x39\x30\0\0\0\0\0E\0\0\0\0\0\0?_\0\0\0\0\"\0\0.\0\0\0\0@\0\0\0'\0\0-\0\0\0\0\0\0\0\0;!\0)\0\0\0\0\0,\0\0\0\0:\0\0\0\0\0\0\0";
void mc_reset(mc_state_t * mcb);
void mc_input(mc_state_t * mc, char c);
char mc_dec(char b[BUFFLEN]);
// Print stack or memory register contents.
void morsecalc_display_stack(morsecalc_state_t *mcs);

View file

@ -0,0 +1,66 @@
/*
* MIT License
*
* Copyright (c) 2023 Christian Chapman
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// Computer console interface to calc and morsecode for testing without involving watch stuff.
// cc calc_strtof.c calc.c calc_fns.c test_morsecalc.c -lm
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "calc.h"
#include "calc_fns.h"
int main(void) {
calc_state_t cs;
calc_init(&cs);
char * word = malloc(0);
unsigned int nword = 0;
char c;
int retval = 0;
for(unsigned int ii = 0; ii < 100; ii++) {
c = getchar();
word = realloc(word, (++nword)*sizeof(char));
word[nword-1] = c;
if((nword > 0) && isspace(c)) { // Word is finished
word[nword-1] = '\0';
retval = calc_input(&cs, word); // Submit word
word = realloc(word, 0); nword = 0; // Clear word
switch(retval) {
case 0: printf("Success.\n"); break;
case -1: printf("Bad command.\n"); break;
case -2: printf("Stack over/underflow.\n"); break;
case -3: printf("Error.\n"); break;
}
if(cs.s > 0) printf("[%i]: %.4f\n", cs.s, cs.stack[cs.s-1]);
else printf("[%i]\n", cs.s);
}
}
free(word);
return 0;
}

View file

@ -17,6 +17,7 @@ INCLUDES += \
-I../watch_faces/sensor/ \
-I../watch_faces/demo/ \
-I../../littlefs/ \
-I../lib/chirpy_tx/ \
-I../lib/TOTP/ \
-I../lib/base32/ \
-I../lib/sunriset/ \
@ -31,6 +32,7 @@ INCLUDES += \
# ../drivers/lis2dh.c \
# ../watch_faces/fitness/step_count_face.c
SRCS += \
../lib/chirpy_tx/chirpy_tx.c \
../lib/TOTP/sha1.c \
../lib/TOTP/sha256.c \
../lib/TOTP/sha512.c \
@ -42,7 +44,7 @@ SRCS += \
../lib/morsecalc/calc.c \
../lib/morsecalc/calc_fns.c \
../lib/morsecalc/calc_strtof.c \
../lib/morsecalc/mc.c \
../lib/morsecalc/morsecalc_display.c \
../../littlefs/lfs.c \
../../littlefs/lfs_util.c \
../movement.c \
@ -95,9 +97,23 @@ SRCS += \
../watch_faces/complication/tarot_face.c \
../watch_faces/complication/morsecalc_face.c \
../watch_faces/complication/rpn_calculator_face.c \
../watch_faces/complication/activity_face.c \
../watch_faces/demo/chirpy_demo_face.c \
../watch_faces/complication/ships_bell_face.c \
../watch_faces/sensor/lightmeter_face.c \
../watch_faces/complication/discgolf_face.c \
../watch_faces/complication/habit_face.c \
../watch_faces/complication/planetary_time_face.c \
../watch_faces/complication/planetary_hours_face.c \
../watch_faces/complication/breathing_face.c \
../watch_faces/clock/repetition_minute_face.c \
../watch_faces/complication/timer_face.c \
../watch_faces/complication/invaders_face.c \
../watch_faces/clock/world_clock2_face.c \
../watch_faces/complication/time_left_face.c \
../watch_faces/complication/randonaut_face.c \
../watch_faces/complication/toss_up_face.c \
../watch_faces/complication/geomancy_face.c \
# New watch faces go above this line.
# Leave this line at the bottom of the file; it has all the targets for making your project.

View file

@ -73,9 +73,24 @@
#include "interval_face.h"
#include "morsecalc_face.h"
#include "rpn_calculator_face.h"
#include "activity_face.h"
#include "chirpy_demo_face.h"
#include "ships_bell_face.h"
#include "lightmeter_face.h"
#include "discgolf_face.h"
#include "habit_face.h"
#include "planetary_time_face.h"
#include "planetary_hours_face.h"
#include "breathing_face.h"
#include "repetition_minute_face.h"
#include "timer_face.h"
#include "invaders_face.h"
#include "world_clock2_face.h"
#include "time_left_face.h"
#include "randonaut_face.h"
#include "toss_up_face.h"
#include "geomancy_face.h"
#include "dual_timer_face.h"
// New includes go above this line.
#endif // MOVEMENT_FACES_H_

View file

@ -0,0 +1,231 @@
/*
* MIT License
*
* Copyright (c) 2023 Jonas Termeau
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <stdlib.h>
#include "repetition_minute_face.h"
#include "watch.h"
#include "watch_utility.h"
#include "watch_private_display.h"
void play_hour_chime(void) {
watch_buzzer_play_note(BUZZER_NOTE_C6, 75);
watch_buzzer_play_note(BUZZER_NOTE_REST, 500);
}
void play_quarter_chime(void) {
watch_buzzer_play_note(BUZZER_NOTE_E6, 75);
watch_buzzer_play_note(BUZZER_NOTE_REST, 150);
watch_buzzer_play_note(BUZZER_NOTE_C6, 75);
watch_buzzer_play_note(BUZZER_NOTE_REST, 750);
}
void play_minute_chime(void) {
watch_buzzer_play_note(BUZZER_NOTE_E6, 75);
watch_buzzer_play_note(BUZZER_NOTE_REST, 500);
}
static void _update_alarm_indicator(bool settings_alarm_enabled, repetition_minute_state_t *state) {
state->alarm_enabled = settings_alarm_enabled;
if (state->alarm_enabled) watch_set_indicator(WATCH_INDICATOR_SIGNAL);
else watch_clear_indicator(WATCH_INDICATOR_SIGNAL);
}
void repetition_minute_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) {
(void) settings;
(void) watch_face_index;
if (*context_ptr == NULL) {
*context_ptr = malloc(sizeof(repetition_minute_state_t));
repetition_minute_state_t *state = (repetition_minute_state_t *)*context_ptr;
state->signal_enabled = false;
state->watch_face_index = watch_face_index;
}
}
void repetition_minute_face_activate(movement_settings_t *settings, void *context) {
repetition_minute_state_t *state = (repetition_minute_state_t *)context;
if (watch_tick_animation_is_running()) watch_stop_tick_animation();
if (settings->bit.clock_mode_24h) watch_set_indicator(WATCH_INDICATOR_24H);
// handle chime indicator
if (state->signal_enabled) watch_set_indicator(WATCH_INDICATOR_BELL);
else watch_clear_indicator(WATCH_INDICATOR_BELL);
// show alarm indicator if there is an active alarm
_update_alarm_indicator(settings->bit.alarm_enabled, state);
watch_set_colon();
// this ensures that none of the timestamp fields will match, so we can re-render them all.
state->previous_date_time = 0xFFFFFFFF;
}
bool repetition_minute_face_loop(movement_event_t event, movement_settings_t *settings, void *context) {
repetition_minute_state_t *state = (repetition_minute_state_t *)context;
char buf[11];
uint8_t pos;
watch_date_time date_time;
uint32_t previous_date_time;
switch (event.event_type) {
case EVENT_ACTIVATE:
case EVENT_TICK:
case EVENT_LOW_ENERGY_UPDATE:
date_time = watch_rtc_get_date_time();
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
// check the battery voltage once a day...
if (date_time.unit.day != state->last_battery_check) {
state->last_battery_check = date_time.unit.day;
watch_enable_adc();
uint16_t voltage = watch_get_vcc_voltage();
watch_disable_adc();
// 2.2 volts will happen when the battery has maybe 5-10% remaining?
// we can refine this later.
state->battery_low = (voltage < 2200);
}
// ...and set the LAP indicator if low.
if (state->battery_low) watch_set_indicator(WATCH_INDICATOR_LAP);
if ((date_time.reg >> 6) == (previous_date_time >> 6) && event.event_type != EVENT_LOW_ENERGY_UPDATE) {
// everything before seconds is the same, don't waste cycles setting those segments.
watch_display_character_lp_seconds('0' + date_time.unit.second / 10, 8);
watch_display_character_lp_seconds('0' + date_time.unit.second % 10, 9);
break;
} else if ((date_time.reg >> 12) == (previous_date_time >> 12) && event.event_type != EVENT_LOW_ENERGY_UPDATE) {
// everything before minutes is the same.
pos = 6;
sprintf(buf, "%02d%02d", date_time.unit.minute, date_time.unit.second);
} else {
// other stuff changed; let's do it all.
if (!settings->bit.clock_mode_24h) {
// if we are in 12 hour mode, do some cleanup.
if (date_time.unit.hour < 12) {
watch_clear_indicator(WATCH_INDICATOR_PM);
} else {
watch_set_indicator(WATCH_INDICATOR_PM);
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0) date_time.unit.hour = 12;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
if (!watch_tick_animation_is_running()) watch_start_tick_animation(500);
sprintf(buf, "%s%2d%2d%02d ", watch_utility_get_weekday(date_time), date_time.unit.day, date_time.unit.hour, date_time.unit.minute);
} else {
sprintf(buf, "%s%2d%2d%02d%02d", watch_utility_get_weekday(date_time), date_time.unit.day, date_time.unit.hour, date_time.unit.minute, date_time.unit.second);
}
}
watch_display_string(buf, pos);
// handle alarm indicator
if (state->alarm_enabled != settings->bit.alarm_enabled) _update_alarm_indicator(settings->bit.alarm_enabled, state);
break;
case EVENT_ALARM_LONG_PRESS:
state->signal_enabled = !state->signal_enabled;
if (state->signal_enabled) watch_set_indicator(WATCH_INDICATOR_BELL);
else watch_clear_indicator(WATCH_INDICATOR_BELL);
break;
case EVENT_BACKGROUND_TASK:
// uncomment this line to snap back to the clock face when the hour signal sounds:
// movement_move_to_face(state->watch_face_index);
if (watch_is_buzzer_or_led_enabled()) {
// if we are in the foreground, we can just beep.
movement_play_signal();
} else {
// if we were in the background, we need to enable the buzzer peripheral first,
watch_enable_buzzer();
// beep quickly (this call blocks for 275 ms),
movement_play_signal();
// and then turn the buzzer peripheral off again.
watch_disable_buzzer();
}
break;
case EVENT_LIGHT_LONG_UP:
/*
* Howdy neighbors, this is the actual complication. Like an actual
* (very expensive) watch with a repetition minute complication it's
* boring at 00:00 or 1:00 and very quite musical at 23:59 or 12:59.
*/
date_time = watch_rtc_get_date_time();
int hours = date_time.unit.hour;
int quarters = date_time.unit.minute / 15;
int minutes = date_time.unit.minute % 15;
// chiming hours
if (!settings->bit.clock_mode_24h) {
hours = date_time.unit.hour % 12;
if (hours == 0) hours = 12;
}
if (hours > 0) {
int count = 0;
for(count = hours; count > 0; --count) {
play_hour_chime();
}
}
// chiming quarters (if needed)
if (quarters > 0) {
int count = 0;
for(count = quarters; count > 0; --count) {
play_quarter_chime();
}
}
// chiming minutes (if needed)
if (minutes > 0) {
int count = 0;
for(count = minutes; count > 0; --count) {
play_minute_chime();
}
}
break;
default:
return movement_default_loop_handler(event, settings);
}
return true;
}
void repetition_minute_face_resign(movement_settings_t *settings, void *context) {
(void) settings;
(void) context;
}
bool repetition_minute_face_wants_background_task(movement_settings_t *settings, void *context) {
(void) settings;
repetition_minute_state_t *state = (repetition_minute_state_t *)context;
if (!state->signal_enabled) return false;
watch_date_time date_time = watch_rtc_get_date_time();
return date_time.unit.minute == 0;
}

View file

@ -0,0 +1,83 @@
/*
* MIT License
*
* Copyright (c) 2023 Jonas Termeau
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef REPETITION_MINUTE_FACE_H_
#define REPETITION_MINUTE_FACE_H_
#include "movement.h"
/*
* A hopefully useful complication for friendly neighbors in the dark
*
* Originating from 1676 from reverend and mechanician Edward Barlow, and
* perfected in 1820 by neighbor Abraham Breguet, a minute repeater or
* "repetition minute" is a complication in a mechanical watch or clock that
* chimes the hours and often minutes at the press of a button. There are many
* types of repeater, from the simple repeater which merely strikes the number
* of hours, to the minute repeater which chimes the time down to the minute,
* using separate tones for hours, quarter hours, and minutes. They originated
* before widespread artificial illumination, to allow the time to be determined
* in the dark, and were also used by the visually impaired.
*
*
* How to use it :
*
* Long press the light button to get an auditive reading of the time like so :
* 0..23 (1..12 if 24-hours format isn't enabled) low beep(s) for the hours
* 0..3 low-high couple pitched beeps for the quarters
* 0..14 high pitched beep(s) for the remaining minutes
*
* Prerequisite : a watch with a working buzzer
*
* ~ Only in the darkness can you see the stars. - Martin Luther King ~
*
*/
typedef struct {
uint32_t previous_date_time;
uint8_t last_battery_check;
uint8_t watch_face_index;
bool signal_enabled;
bool battery_low;
bool alarm_enabled;
} repetition_minute_state_t;
void play_hour_chime(void);
void play_quarter_chime(void);
void play_minute_chime(void);
void repetition_minute_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr);
void repetition_minute_face_activate(movement_settings_t *settings, void *context);
bool repetition_minute_face_loop(movement_event_t event, movement_settings_t *settings, void *context);
void repetition_minute_face_resign(movement_settings_t *settings, void *context);
bool repetition_minute_face_wants_background_task(movement_settings_t *settings, void *context);
#define repetition_minute_face ((const watch_face_t){ \
repetition_minute_face_setup, \
repetition_minute_face_activate, \
repetition_minute_face_loop, \
repetition_minute_face_resign, \
repetition_minute_face_wants_background_task, \
})
#endif // REPETITION_MINUTE_FACE_H_

View file

@ -0,0 +1,450 @@
/*
* MIT License
*
* Copyright (c) 2023 Konrad Rieck
* Copyright (c) 2022 Joey Castillo
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/*
* World Clock 2
* =============
*
* This is an alternative world clock face that allows the user to cycle
* through a list of selected time zones. It extends the original
* implementation by Joey Castillo. The face has two modes *display mode*
* and *settings mode*.
*
* ### Settings mode
*
* When the clock face is activated for the first time, it enters
* *settings mode*. Here, the user can select the time zones they want to
* display. The face shows a summary of the current time zone:
*
* - The top of the face displays the first two letters of the time zone
* abbreviation, such as "PS" for Pacific Standard Time or CE for
* "Central European Time".
*
* - The upper-right corner shows the index number of the time zone. This
* helps avoid confusion when multiple time zones have the same
* two-letter abbreviation.
*
* - The main display shows the offset from UTC, with a "+" indicating a
* positive offset and a "-" indicating a negative offset. For example,
* the offset for Japanese Standard Time is displayed as "+9:00".
*
* The user can navigate through the time zones and select them using the
* following buttons:
*
* - The *alarm button* moves forward to the next time zone, while the
* *light button* moves backward to the previous zone. This way, the
* user can cycle through all 41 supported time zones.
*
* - A *long press* on the *light button* selects the current time zone,
* and the signal indicator appears at the top left. Another *long
* press* of the *light button* deselects the time zone.
*
* - A *long press* on the *alarm button* exits settings mode and returns
* to display mode.
*
* ### Display mode
*
* In the display mode, the face shows the time of the currently selected
* time zone. The face includes the following components:
*
* - The top of the face displays the first two letters of the time zone
* abbreviation, such as "PS" for Pacific Standard Time or "CE" for
* Central European Time.
*
* - The upper-right corner shows the current day of the month, which
* helps indicate time zones that cross the international date line
* with respect to the local time.
*
* - The main display shows the time in the selected time zone in either
* 12-hour or 24-hour form. There is no timeout, allowing users to keep
* the chosen time zone displayed for as long as they wish.
*
* The user can navigate through the selected time zones using the
* following buttons:
*
* - The *alarm button* moves to the next selected time zone, while the
* light button moves to the *previous zone*. If no time zone is
* selected, the face simply shows UTC.
*
* - A *long press* on the *alarm button* enters settings mode and
* enables the user to re-configure the selected time zones.
*
* - A *long press* on the *light button* activates the LED illumination
* of the watch.
*
*/
#include <stdlib.h>
#include <string.h>
#include "world_clock2_face.h"
#include "watch.h"
#include "watch_utility.h"
#include "watch_utility.h"
static bool refresh_face;
/* Simple macros for navigation */
#define FORWARD +1
#define BACKWARD -1
/* Activate refresh of time */
#define REFRESH_TIME 0xffffffff
/* List of all time zone names */
const char *zone_names[] = {
"UTC", // 0 : 0:00:00 (UTC)
"CET", // 1 : 1:00:00 (Central European Time)
"SAST", // 2 : 2:00:00 (South African Standard Time)
"ARST", // 3 : 3:00:00 (Arabia Standard Time)
"IRST", // 4 : 3:30:00 (Iran Standard Time)
"GET", // 5 : 4:00:00 (Georgia Standard Time)
"AFT", // 6 : 4:30:00 (Afghanistan Time)
"PKT", // 7 : 5:00:00 (Pakistan Standard Time)
"IST", // 8 : 5:30:00 (Indian Standard Time)
"NPT", // 9 : 5:45:00 (Nepal Time)
"KGT", // 10 : 6:00:00 (Kyrgyzstan time)
"MYST", // 11 : 6:30:00 (Myanmar Time)
"THA", // 12 : 7:00:00 (Thailand Standard Time)
"CST", // 13 : 8:00:00 (China Standard Time, Australian Western Standard Time)
"ACWS", // 14 : 8:45:00 (Australian Central Western Standard Time)
"JST", // 15 : 9:00:00 (Japan Standard Time, Korea Standard Time)
"ACST", // 16 : 9:30:00 (Australian Central Standard Time)
"AEST", // 17 : 10:00:00 (Australian Eastern Standard Time)
"LHST", // 18 : 10:30:00 (Lord Howe Standard Time)
"SBT", // 19 : 11:00:00 (Solomon Islands Time)
"NZST", // 20 : 12:00:00 (New Zealand Standard Time)
"CHAS", // 21 : 12:45:00 (Chatham Standard Time)
"TOT", // 22 : 13:00:00 (Tonga Time)
"CHAD", // 23 : 13:45:00 (Chatham Daylight Time)
"LINT", // 24 : 14:00:00 (Line Islands Time)
"BIT", // 25 : -12:00:00 (Baker Island Time)
"NUT", // 26 : -11:00:00 (Niue Time)
"HST", // 27 : -10:00:00 (Hawaii-Aleutian Standard Time)
"MART", // 28 : -9:30:00 (Marquesas Islands Time)
"AKST", // 29 : -9:00:00 (Alaska Standard Time)
"PST", // 30 : -8:00:00 (Pacific Standard Time)
"MST", // 31 : -7:00:00 (Mountain Standard Time)
"CST", // 32 : -6:00:00 (Central Standard Time)
"EST", // 33 : -5:00:00 (Eastern Standard Time)
"VET", // 34 : -4:30:00 (Venezuelan Standard Time)
"AST", // 35 : -4:00:00 (Atlantic Standard Time)
"NST", // 36 : -3:30:00 (Newfoundland Standard Time)
"BRT", // 37 : -3:00:00 (Brasilia Time)
"NDT", // 38 : -2:30:00 (Newfoundland Daylight Time)
"FNT", // 39 : -2:00:00 (Fernando de Noronha Time)
"AZOT", // 40 : -1:00:00 (Azores Standard Time)
};
/* Modulo function */
static inline unsigned int mod(int a, int b)
{
int r = a % b;
return r < 0 ? r + b : r;
}
/* Find the next selected time zone */
static inline uint8_t find_selected_zone(world_clock2_state_t *state, int direction)
{
uint8_t i = state->current_zone;
do {
i = mod(i + direction, NUM_TIME_ZONES);
/* Could not find a selected zone. Return UTC */
if (i == state->current_zone) {
return 0;
}
} while (!state->zones[i].selected);
return i;
}
/* Beep when zone is enabled. An octave up */
static void beep_enable() {
watch_buzzer_play_note(BUZZER_NOTE_G7, 50);
watch_buzzer_play_note(BUZZER_NOTE_REST, 75);
watch_buzzer_play_note(BUZZER_NOTE_C8, 75);
}
/* Beep when zone id disable. An octave down */
static void beep_disable() {
watch_buzzer_play_note(BUZZER_NOTE_C8, 50);
watch_buzzer_play_note(BUZZER_NOTE_REST, 75);
watch_buzzer_play_note(BUZZER_NOTE_G7, 75);
}
void world_clock2_face_setup(movement_settings_t *settings, uint8_t watch_face_index, void **context_ptr)
{
(void) settings;
(void) watch_face_index;
if (*context_ptr == NULL) {
*context_ptr = malloc(sizeof(world_clock2_state_t));
memset(*context_ptr, 0, sizeof(world_clock2_state_t));
/* Start in settings mode */
world_clock2_state_t *state = (world_clock2_state_t *) * context_ptr;
state->current_mode = WORLD_CLOCK2_MODE_SETTINGS;
}
}
void world_clock2_face_activate(movement_settings_t *settings, void *context)
{
(void) settings;
world_clock2_state_t *state = (world_clock2_state_t *) context;
if (watch_tick_animation_is_running())
watch_stop_tick_animation();
switch (state->current_mode) {
case WORLD_CLOCK2_MODE_DISPLAY:
/* Normal tick frequency */
movement_request_tick_frequency(1);
break;
case WORLD_CLOCK2_MODE_SETTINGS:
/* Faster frequency for blinking effect */
movement_request_tick_frequency(4);
break;
}
refresh_face = true;
}
static bool mode_display(movement_event_t event, movement_settings_t *settings, world_clock2_state_t *state)
{
char buf[11];
uint8_t pos;
uint32_t timestamp;
uint32_t previous_date_time;
watch_date_time date_time;
switch (event.event_type) {
case EVENT_ACTIVATE:
case EVENT_TICK:
case EVENT_LOW_ENERGY_UPDATE:
/* Update indicators and colon on refresh */
if (refresh_face) {
watch_clear_indicator(WATCH_INDICATOR_SIGNAL);
watch_set_colon();
if (settings->bit.clock_mode_24h)
watch_set_indicator(WATCH_INDICATOR_24H);
state->previous_date_time = REFRESH_TIME;
refresh_face = false;
}
/* Determine current time at time zone and store date/time */
date_time = watch_rtc_get_date_time();
timestamp = watch_utility_date_time_to_unix_time(date_time, movement_timezone_offsets[settings->bit.time_zone] * 60);
date_time = watch_utility_date_time_from_unix_time(timestamp, movement_timezone_offsets[state->current_zone] * 60);
previous_date_time = state->previous_date_time;
state->previous_date_time = date_time.reg;
if ((date_time.reg >> 6) == (previous_date_time >> 6) && event.event_type != EVENT_LOW_ENERGY_UPDATE) {
/* Everything before seconds is the same, don't waste cycles setting those segments. */
pos = 8;
sprintf(buf, "%02d", date_time.unit.second);
} else if ((date_time.reg >> 12) == (previous_date_time >> 12) && event.event_type != EVENT_LOW_ENERGY_UPDATE) {
/* Everything before minutes is the same. */
pos = 6;
sprintf(buf, "%02d%02d", date_time.unit.minute, date_time.unit.second);
} else {
/* Other stuff changed; Let's do it all. */
if (!settings->bit.clock_mode_24h) {
/* If we are in 12 hour mode, do some cleanup. */
if (date_time.unit.hour < 12) {
watch_clear_indicator(WATCH_INDICATOR_PM);
} else {
watch_set_indicator(WATCH_INDICATOR_PM);
}
date_time.unit.hour %= 12;
if (date_time.unit.hour == 0)
date_time.unit.hour = 12;
}
pos = 0;
if (event.event_type == EVENT_LOW_ENERGY_UPDATE) {
if (!watch_tick_animation_is_running())
watch_start_tick_animation(500);
sprintf(buf, "%.2s%2d%2d%02d ",
zone_names[state->current_zone],
date_time.unit.day,
date_time.unit.hour,
date_time.unit.minute);
} else {
sprintf(buf, "%.2s%2d%2d%02d%02d",
zone_names[state->current_zone],
date_time.unit.day,
date_time.unit.hour,
date_time.unit.minute,
date_time.unit.second);
}
}
watch_display_string(buf, pos);
break;
case EVENT_ALARM_BUTTON_UP:
state->current_zone = find_selected_zone(state, FORWARD);
state->previous_date_time = REFRESH_TIME;
break;
case EVENT_LIGHT_BUTTON_DOWN:
/* Do nothing. */
break;
case EVENT_LIGHT_BUTTON_UP:
state->current_zone = find_selected_zone(state, BACKWARD);
state->previous_date_time = REFRESH_TIME;
break;
case EVENT_LIGHT_LONG_PRESS:
movement_illuminate_led();
break;
case EVENT_ALARM_LONG_PRESS:
/* Switch to settings mode */
state->current_mode = WORLD_CLOCK2_MODE_SETTINGS;
refresh_face = true;
movement_request_tick_frequency(1);
if (settings->bit.button_should_sound)
watch_buzzer_play_note(BUZZER_NOTE_C8, 50);
break;
case EVENT_MODE_BUTTON_UP:
/* Reset frequency and move to next face */
movement_request_tick_frequency(1);
movement_move_to_next_face();
break;
default:
return movement_default_loop_handler(event, settings);
}
return true;
}
static bool mode_settings(movement_event_t event, movement_settings_t *settings, world_clock2_state_t *state)
{
char buf[11];
int8_t hours, minutes;
uint8_t zone;
div_t result;
switch (event.event_type) {
case EVENT_ACTIVATE:
case EVENT_TICK:
case EVENT_LOW_ENERGY_UPDATE:
/* Update indicator and colon on refresh */
if (refresh_face) {
watch_clear_colon();
watch_clear_indicator(WATCH_INDICATOR_24H);
watch_clear_indicator(WATCH_INDICATOR_PM);
refresh_face = false;
}
result = div(movement_timezone_offsets[state->current_zone], 60);
hours = result.quot;
minutes = result.rem;
/*
* Display time zone. The range of the parameters is reduced
* to avoid accidentally overflowing the buffer and to suppress
* corresponding compiler warnings.
*/
sprintf(buf, "%.2s%2d %c%02d%02d",
zone_names[state->current_zone],
state->current_zone % 100,
hours < 0 ? '-' : '+',
abs(hours) % 24,
abs(minutes) % 60);
/* Let the zone number blink */
if (event.subsecond % 2)
buf[2] = buf[3] = ' ';
if (state->zones[state->current_zone].selected)
watch_set_indicator(WATCH_INDICATOR_SIGNAL);
else
watch_clear_indicator(WATCH_INDICATOR_SIGNAL);
watch_display_string(buf, 0);
break;
case EVENT_ALARM_BUTTON_UP:
state->current_zone = mod(state->current_zone + FORWARD, NUM_TIME_ZONES);
break;
case EVENT_LIGHT_BUTTON_UP:
state->current_zone = mod(state->current_zone + BACKWARD, NUM_TIME_ZONES);
break;
case EVENT_LIGHT_BUTTON_DOWN:
/* Do nothing */
break;
case EVENT_ALARM_LONG_PRESS:
/* Find next selected zone */
if (!state->zones[state->current_zone].selected)
state->current_zone = find_selected_zone(state, FORWARD);
/* Switch to display mode */
state->current_mode = WORLD_CLOCK2_MODE_DISPLAY;
refresh_face = true;
movement_request_tick_frequency(1);
if (settings->bit.button_should_sound)
watch_buzzer_play_note(BUZZER_NOTE_C8, 50);
break;
case EVENT_LIGHT_LONG_PRESS:
/* Toggle selection of current zone */
zone = state->current_zone;
state->zones[zone].selected = !state->zones[zone].selected;
if (settings->bit.button_should_sound) {
if (state->zones[zone].selected) {
beep_enable();
} else {
beep_disable();
}
}
break;
case EVENT_MODE_BUTTON_UP:
/* Reset frequency and move to next face */
movement_request_tick_frequency(1);
movement_move_to_next_face();
break;
default:
return movement_default_loop_handler(event, settings);
}
return true;
}
bool world_clock2_face_loop(movement_event_t event, movement_settings_t *settings, void *context)
{
world_clock2_state_t *state = (world_clock2_state_t *) context;
switch (state->current_mode) {
case WORLD_CLOCK2_MODE_DISPLAY:
return mode_display(event, settings, state);
case WORLD_CLOCK2_MODE_SETTINGS:
return mode_settings(event, settings, state);
}
return false;
}
void world_clock2_face_resign(movement_settings_t *settings, void *context)
{
(void) settings;
(void) context;
}

Some files were not shown because too many files have changed in this diff Show more