Tabs replaced by spaces.

This commit is contained in:
klaute 2016-08-17 19:47:39 +02:00
parent f0eeb38c49
commit 5a0e74de7a
5 changed files with 436 additions and 847 deletions

View file

@ -1951,432 +1951,21 @@
(zone (net 1) (net_name GND) (layer F.Cu) (tstamp 579A43AE) (hatch edge 0.508) (zone (net 1) (net_name GND) (layer F.Cu) (tstamp 579A43AE) (hatch edge 0.508)
(connect_pads (clearance 0.508)) (connect_pads (clearance 0.508))
(min_thickness 0.254) (min_thickness 0.254)
(fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
(polygon (polygon
(pts (pts
(xy 124.46 91.44) (xy 124.46 116.84) (xy 190.246 116.84) (xy 190.246 91.44) (xy 124.46 91.44) (xy 124.46 116.84) (xy 190.246 116.84) (xy 190.246 91.44)
) )
) )
(filled_polygon
(pts
(xy 151.004673 92.233301) (xy 150.908 92.46669) (xy 150.908 92.93225) (xy 151.06675 93.091) (xy 152.166 93.091)
(xy 152.166 93.071) (xy 152.42 93.071) (xy 152.42 93.091) (xy 152.44 93.091) (xy 152.44 93.345)
(xy 152.42 93.345) (xy 152.42 93.365) (xy 152.166 93.365) (xy 152.166 93.345) (xy 151.06675 93.345)
(xy 150.908 93.50375) (xy 150.908 93.96931) (xy 150.940429 94.0476) (xy 147.337142 94.0476) (xy 147.337362 93.794833)
(xy 147.195317 93.451057) (xy 146.932527 93.187808) (xy 146.588999 93.045162) (xy 146.217033 93.044838) (xy 145.873257 93.186883)
(xy 145.840082 93.22) (xy 138.512038 93.22) (xy 138.493162 93.119683) (xy 138.35409 92.903559) (xy 138.14189 92.758569)
(xy 137.89 92.70756) (xy 136.39 92.70756) (xy 136.154683 92.751838) (xy 135.938559 92.89091) (xy 135.890866 92.960711)
(xy 135.85409 92.903559) (xy 135.64189 92.758569) (xy 135.39 92.70756) (xy 133.89 92.70756) (xy 133.654683 92.751838)
(xy 133.438559 92.89091) (xy 133.293569 93.10311) (xy 133.269898 93.22) (xy 133.075689 93.22) (xy 133.061622 93.145243)
(xy 132.92255 92.929119) (xy 132.71035 92.784129) (xy 132.45846 92.73312) (xy 131.25958 92.73312) (xy 131.024263 92.777398)
(xy 130.808139 92.91647) (xy 130.807457 92.917467) (xy 130.61231 92.784129) (xy 130.36042 92.73312) (xy 129.16154 92.73312)
(xy 128.926223 92.777398) (xy 128.710099 92.91647) (xy 128.565109 93.12867) (xy 128.5141 93.38056) (xy 128.5141 94.57944)
(xy 128.558378 94.814757) (xy 128.69745 95.030881) (xy 128.90965 95.175871) (xy 129.001 95.19437) (xy 129.001 95.303328)
(xy 128.926223 95.317398) (xy 128.710099 95.45647) (xy 128.565109 95.66867) (xy 128.5141 95.92056) (xy 128.5141 97.11944)
(xy 128.558378 97.354757) (xy 128.69745 97.570881) (xy 128.90965 97.715871) (xy 129.16154 97.76688) (xy 130.36042 97.76688)
(xy 130.595737 97.722602) (xy 130.811861 97.58353) (xy 130.812543 97.582533) (xy 131.00769 97.715871) (xy 131.25958 97.76688)
(xy 132.45846 97.76688) (xy 132.693777 97.722602) (xy 132.909901 97.58353) (xy 133.054891 97.37133) (xy 133.073386 97.28)
(xy 133.267962 97.28) (xy 133.286838 97.380317) (xy 133.42591 97.596441) (xy 133.63811 97.741431) (xy 133.89 97.79244)
(xy 135.39 97.79244) (xy 135.625317 97.748162) (xy 135.841441 97.60909) (xy 135.889134 97.539289) (xy 135.92591 97.596441)
(xy 136.13811 97.741431) (xy 136.39 97.79244) (xy 137.89 97.79244) (xy 138.125317 97.748162) (xy 138.341441 97.60909)
(xy 138.44671 97.455023) (xy 138.606067 97.455162) (xy 138.949843 97.313117) (xy 139.039774 97.223342) (xy 139.240773 97.424692)
(xy 139.584301 97.567338) (xy 139.956267 97.567662) (xy 140.300043 97.425617) (xy 140.563292 97.162827) (xy 140.663904 96.920529)
(xy 140.75011 96.979431) (xy 141.002 97.03044) (xy 142.502 97.03044) (xy 142.595033 97.012935) (xy 143.467199 97.885101)
(xy 143.713761 98.049848) (xy 144.0046 98.1077) (xy 148.08245 98.1077) (xy 148.14575 98.171) (xy 149.245 98.171)
(xy 149.245 98.151) (xy 149.499 98.151) (xy 149.499 98.171) (xy 149.519 98.171) (xy 149.519 98.425)
(xy 149.499 98.425) (xy 149.499 98.445) (xy 149.245 98.445) (xy 149.245 98.425) (xy 148.14575 98.425)
(xy 147.987 98.58375) (xy 147.987 98.808) (xy 145.624038 98.808) (xy 145.605162 98.707683) (xy 145.46609 98.491559)
(xy 145.25389 98.346569) (xy 145.002 98.29556) (xy 143.502 98.29556) (xy 143.266683 98.339838) (xy 143.050559 98.47891)
(xy 143.002866 98.548711) (xy 142.96609 98.491559) (xy 142.75389 98.346569) (xy 142.502 98.29556) (xy 141.002 98.29556)
(xy 140.766683 98.339838) (xy 140.550559 98.47891) (xy 140.405569 98.69111) (xy 140.35456 98.943) (xy 140.35456 100.193)
(xy 140.398534 100.4267) (xy 137.658 100.4267) (xy 137.658 100.38175) (xy 137.49925 100.223) (xy 136.525 100.223)
(xy 136.525 100.243) (xy 136.271 100.243) (xy 136.271 100.223) (xy 135.29675 100.223) (xy 135.138 100.38175)
(xy 135.138 100.4267) (xy 134.26694 100.4267) (xy 134.26694 99.97567) (xy 134.10819 99.81692) (xy 132.50926 99.81692)
(xy 132.50926 99.83692) (xy 132.25526 99.83692) (xy 132.25526 99.81692) (xy 130.65633 99.81692) (xy 130.49758 99.97567)
(xy 130.49758 100.81572) (xy 130.594253 101.049109) (xy 130.772882 101.227737) (xy 130.815294 101.245304) (xy 130.76838 101.292218)
(xy 130.498067 101.021434) (xy 130.099583 100.855969) (xy 129.66811 100.855592) (xy 129.269337 101.020362) (xy 128.963974 101.325193)
(xy 128.798509 101.723677) (xy 128.798132 102.15515) (xy 128.962902 102.553923) (xy 129.267733 102.859286) (xy 129.666217 103.024751)
(xy 130.09769 103.025128) (xy 130.2454 102.964095) (xy 130.2454 104.14) (xy 130.303252 104.430839) (xy 130.467999 104.677401)
(xy 130.68326 104.821233) (xy 130.68326 105.19029) (xy 130.709583 105.330184) (xy 130.6957 105.3637) (xy 130.6957 105.456355)
(xy 130.8405 105.601155) (xy 130.848249 105.613198) (xy 130.6957 105.613198) (xy 130.6957 105.618692) (xy 130.498067 105.420714)
(xy 130.099583 105.255249) (xy 129.66811 105.254872) (xy 129.269337 105.419642) (xy 128.963974 105.724473) (xy 128.798509 106.122957)
(xy 128.798132 106.55443) (xy 128.962902 106.953203) (xy 129.267733 107.258566) (xy 129.666217 107.424031) (xy 130.09769 107.424408)
(xy 130.496463 107.259638) (xy 130.801826 106.954807) (xy 130.967291 106.556323) (xy 130.967318 106.525033) (xy 130.971002 106.528717)
(xy 131.204391 106.62539) (xy 132.19557 106.62539) (xy 132.35432 106.46664) (xy 132.35432 105.865295) (xy 132.60832 105.865295)
(xy 132.60832 106.46664) (xy 132.76707 106.62539) (xy 133.758249 106.62539) (xy 133.991638 106.528717) (xy 134.170267 106.350089)
(xy 134.26694 106.1167) (xy 134.26694 106.024045) (xy 134.10819 105.865295) (xy 132.60832 105.865295) (xy 132.35432 105.865295)
(xy 132.33432 105.865295) (xy 132.33432 105.83773) (xy 133.63194 105.83773) (xy 133.867257 105.793452) (xy 134.083381 105.65438)
(xy 134.114588 105.608707) (xy 134.26694 105.456355) (xy 134.26694 105.3637) (xy 134.25171 105.326931) (xy 134.27938 105.19029)
(xy 134.27938 104.68991) (xy 134.250147 104.534548) (xy 134.27938 104.39019) (xy 134.27938 104.218019) (xy 134.328767 104.218062)
(xy 134.672543 104.076017) (xy 134.935792 103.813227) (xy 135.078438 103.469699) (xy 135.078537 103.356) (xy 135.127442 103.356)
(xy 135.169838 103.581317) (xy 135.30891 103.797441) (xy 135.52111 103.942431) (xy 135.707967 103.98027) (xy 135.860599 104.208701)
(xy 135.938458 104.28656) (xy 135.773 104.28656) (xy 135.537683 104.330838) (xy 135.321559 104.46991) (xy 135.176569 104.68211)
(xy 135.12556 104.934) (xy 135.12556 106.434) (xy 135.169838 106.669317) (xy 135.30891 106.885441) (xy 135.377006 106.931969)
(xy 135.234673 107.074302) (xy 135.138 107.307691) (xy 135.138 107.89825) (xy 135.29675 108.057) (xy 136.271 108.057)
(xy 136.271 108.037) (xy 136.525 108.037) (xy 136.525 108.057) (xy 137.49925 108.057) (xy 137.658 107.89825)
(xy 137.658 107.307691) (xy 137.561327 107.074302) (xy 137.42009 106.933064) (xy 137.474441 106.89809) (xy 137.479778 106.89028)
(xy 137.761199 107.171701) (xy 138.007761 107.336448) (xy 138.2986 107.3943) (xy 141.950798 107.3943) (xy 144.225394 109.668896)
(xy 144.183569 109.73011) (xy 144.145457 109.918314) (xy 144.113162 109.746683) (xy 143.97409 109.530559) (xy 143.76189 109.385569)
(xy 143.51 109.33456) (xy 142.494 109.33456) (xy 142.258683 109.378838) (xy 142.042559 109.51791) (xy 141.897569 109.73011)
(xy 141.859 109.920569) (xy 141.859 109.85569) (xy 141.762327 109.622301) (xy 141.583698 109.443673) (xy 141.350309 109.347)
(xy 141.00175 109.347) (xy 140.843 109.50575) (xy 140.843 110.871) (xy 140.863 110.871) (xy 140.863 111.125)
(xy 140.843 111.125) (xy 140.843 112.49025) (xy 141.00175 112.649) (xy 141.113995 112.649) (xy 141.030767 112.77356)
(xy 140.962 112.77356) (xy 140.726683 112.817838) (xy 140.510559 112.95691) (xy 140.464031 113.025006) (xy 140.321698 112.882673)
(xy 140.088309 112.786) (xy 139.49775 112.786) (xy 139.339 112.94475) (xy 139.339 113.919) (xy 139.359 113.919)
(xy 139.359 114.173) (xy 139.339 114.173) (xy 139.339 115.14725) (xy 139.49775 115.306) (xy 140.088309 115.306)
(xy 140.321698 115.209327) (xy 140.462936 115.06809) (xy 140.49791 115.122441) (xy 140.71011 115.267431) (xy 140.962 115.31844)
(xy 142.462 115.31844) (xy 142.697317 115.274162) (xy 142.913441 115.13509) (xy 142.996538 115.013474) (xy 143.003673 115.030699)
(xy 143.182302 115.209327) (xy 143.415691 115.306) (xy 144.00625 115.306) (xy 144.165 115.14725) (xy 144.165 114.173)
(xy 144.145 114.173) (xy 144.145 113.919) (xy 144.165 113.919) (xy 144.165 113.899) (xy 144.419 113.899)
(xy 144.419 113.919) (xy 144.439 113.919) (xy 144.439 114.173) (xy 144.419 114.173) (xy 144.419 115.14725)
(xy 144.57775 115.306) (xy 145.136998 115.306) (xy 145.364799 115.533801) (xy 145.61136 115.698548) (xy 145.659614 115.708146)
(xy 145.9022 115.7564) (xy 154.3594 115.7564) (xy 154.650239 115.698548) (xy 154.896801 115.533801) (xy 155.810801 114.619801)
(xy 155.86145 114.544) (xy 156.41225 114.544) (xy 156.571 114.38525) (xy 156.571 113.411) (xy 156.825 113.411)
(xy 156.825 114.38525) (xy 156.98375 114.544) (xy 157.574309 114.544) (xy 157.807698 114.447327) (xy 157.986327 114.268699)
(xy 158.083 114.03531) (xy 158.083 113.56975) (xy 157.92425 113.411) (xy 156.825 113.411) (xy 156.571 113.411)
(xy 156.551 113.411) (xy 156.551 113.157) (xy 156.571 113.157) (xy 156.571 113.137) (xy 156.825 113.137)
(xy 156.825 113.157) (xy 157.92425 113.157) (xy 158.083 112.99825) (xy 158.083 112.78775) (xy 158.506 112.78775)
(xy 158.506 113.378309) (xy 158.602673 113.611698) (xy 158.781301 113.790327) (xy 159.01469 113.887) (xy 159.48025 113.887)
(xy 159.639 113.72825) (xy 159.639 112.629) (xy 158.66475 112.629) (xy 158.506 112.78775) (xy 158.083 112.78775)
(xy 158.083 112.53269) (xy 157.986327 112.299301) (xy 157.807698 112.120673) (xy 157.574309 112.024) (xy 157.189102 112.024)
(xy 157.235401 111.977701) (xy 157.379233 111.76244) (xy 157.448 111.76244) (xy 157.683317 111.718162) (xy 157.899441 111.57909)
(xy 158.044431 111.36689) (xy 158.09544 111.115) (xy 158.09544 110.356543) (xy 158.278298 110.539401) (xy 158.404221 110.623539)
(xy 158.49356 110.683233) (xy 158.49356 110.752) (xy 158.537838 110.987317) (xy 158.67691 111.203441) (xy 158.745006 111.249969)
(xy 158.602673 111.392302) (xy 158.506 111.625691) (xy 158.506 112.21625) (xy 158.66475 112.375) (xy 159.639 112.375)
(xy 159.639 112.355) (xy 159.893 112.355) (xy 159.893 112.375) (xy 159.913 112.375) (xy 159.913 112.629)
(xy 159.893 112.629) (xy 159.893 113.72825) (xy 160.05175 113.887) (xy 160.51731 113.887) (xy 160.750699 113.790327)
(xy 160.929327 113.611698) (xy 161.026 113.378309) (xy 161.026 113.087754) (xy 161.20644 113.20832) (xy 161.20644 113.41608)
(xy 161.250718 113.651397) (xy 161.38979 113.867521) (xy 161.463777 113.918074) (xy 161.378559 113.97291) (xy 161.233569 114.18511)
(xy 161.18256 114.437) (xy 161.18256 115.687) (xy 161.226838 115.922317) (xy 161.36591 116.138441) (xy 161.390145 116.155)
(xy 125.145 116.155) (xy 125.145 114.33175) (xy 137.827 114.33175) (xy 137.827 114.79731) (xy 137.923673 115.030699)
(xy 138.102302 115.209327) (xy 138.335691 115.306) (xy 138.92625 115.306) (xy 139.085 115.14725) (xy 139.085 114.173)
(xy 137.98575 114.173) (xy 137.827 114.33175) (xy 125.145 114.33175) (xy 125.145 113.29469) (xy 137.827 113.29469)
(xy 137.827 113.76025) (xy 137.98575 113.919) (xy 139.085 113.919) (xy 139.085 112.94475) (xy 138.92625 112.786)
(xy 138.335691 112.786) (xy 138.102302 112.882673) (xy 137.923673 113.061301) (xy 137.827 113.29469) (xy 125.145 113.29469)
(xy 125.145 111.28375) (xy 139.573 111.28375) (xy 139.573 112.14031) (xy 139.669673 112.373699) (xy 139.848302 112.552327)
(xy 140.081691 112.649) (xy 140.43025 112.649) (xy 140.589 112.49025) (xy 140.589 111.125) (xy 139.73175 111.125)
(xy 139.573 111.28375) (xy 125.145 111.28375) (xy 125.145 109.999116) (xy 125.273782 110.127897) (xy 125.507171 110.22457)
(xy 126.59741 110.22457) (xy 126.75616 110.06582) (xy 126.75616 108.71708) (xy 127.01016 108.71708) (xy 127.01016 110.06582)
(xy 127.16891 110.22457) (xy 128.259149 110.22457) (xy 128.492538 110.127897) (xy 128.671167 109.949269) (xy 128.76784 109.71588)
(xy 128.76784 108.87583) (xy 130.49758 108.87583) (xy 130.49758 109.71588) (xy 130.594253 109.949269) (xy 130.772882 110.127897)
(xy 131.006271 110.22457) (xy 132.09651 110.22457) (xy 132.25526 110.06582) (xy 132.25526 108.71708) (xy 132.50926 108.71708)
(xy 132.50926 110.06582) (xy 132.66801 110.22457) (xy 133.758249 110.22457) (xy 133.991638 110.127897) (xy 134.170267 109.949269)
(xy 134.209028 109.85569) (xy 139.573 109.85569) (xy 139.573 110.71225) (xy 139.73175 110.871) (xy 140.589 110.871)
(xy 140.589 109.50575) (xy 140.43025 109.347) (xy 140.081691 109.347) (xy 139.848302 109.443673) (xy 139.669673 109.622301)
(xy 139.573 109.85569) (xy 134.209028 109.85569) (xy 134.26694 109.71588) (xy 134.26694 108.87583) (xy 134.10819 108.71708)
(xy 132.50926 108.71708) (xy 132.25526 108.71708) (xy 130.65633 108.71708) (xy 130.49758 108.87583) (xy 128.76784 108.87583)
(xy 128.60909 108.71708) (xy 127.01016 108.71708) (xy 126.75616 108.71708) (xy 126.73616 108.71708) (xy 126.73616 108.46975)
(xy 135.138 108.46975) (xy 135.138 109.060309) (xy 135.234673 109.293698) (xy 135.413301 109.472327) (xy 135.64669 109.569)
(xy 136.11225 109.569) (xy 136.271 109.41025) (xy 136.271 108.311) (xy 136.525 108.311) (xy 136.525 109.41025)
(xy 136.68375 109.569) (xy 137.14931 109.569) (xy 137.382699 109.472327) (xy 137.561327 109.293698) (xy 137.658 109.060309)
(xy 137.658 108.46975) (xy 137.49925 108.311) (xy 136.525 108.311) (xy 136.271 108.311) (xy 135.29675 108.311)
(xy 135.138 108.46975) (xy 126.73616 108.46975) (xy 126.73616 108.46308) (xy 126.75616 108.46308) (xy 126.75616 107.11434)
(xy 127.01016 107.11434) (xy 127.01016 108.46308) (xy 128.60909 108.46308) (xy 128.76784 108.30433) (xy 128.76784 107.46428)
(xy 130.49758 107.46428) (xy 130.49758 108.30433) (xy 130.65633 108.46308) (xy 132.25526 108.46308) (xy 132.25526 107.11434)
(xy 132.50926 107.11434) (xy 132.50926 108.46308) (xy 134.10819 108.46308) (xy 134.26694 108.30433) (xy 134.26694 107.46428)
(xy 134.170267 107.230891) (xy 133.991638 107.052263) (xy 133.758249 106.95559) (xy 132.66801 106.95559) (xy 132.50926 107.11434)
(xy 132.25526 107.11434) (xy 132.09651 106.95559) (xy 131.006271 106.95559) (xy 130.772882 107.052263) (xy 130.594253 107.230891)
(xy 130.49758 107.46428) (xy 128.76784 107.46428) (xy 128.671167 107.230891) (xy 128.492538 107.052263) (xy 128.259149 106.95559)
(xy 127.16891 106.95559) (xy 127.01016 107.11434) (xy 126.75616 107.11434) (xy 126.59741 106.95559) (xy 125.507171 106.95559)
(xy 125.273782 107.052263) (xy 125.145 107.181044) (xy 125.145 101.098956) (xy 125.273782 101.227737) (xy 125.507171 101.32441)
(xy 126.59741 101.32441) (xy 126.75616 101.16566) (xy 126.75616 99.81692) (xy 127.01016 99.81692) (xy 127.01016 101.16566)
(xy 127.16891 101.32441) (xy 128.259149 101.32441) (xy 128.492538 101.227737) (xy 128.671167 101.049109) (xy 128.76784 100.81572)
(xy 128.76784 99.97567) (xy 128.60909 99.81692) (xy 127.01016 99.81692) (xy 126.75616 99.81692) (xy 126.73616 99.81692)
(xy 126.73616 99.56292) (xy 126.75616 99.56292) (xy 126.75616 98.21418) (xy 127.01016 98.21418) (xy 127.01016 99.56292)
(xy 128.60909 99.56292) (xy 128.76784 99.40417) (xy 128.76784 98.56412) (xy 130.49758 98.56412) (xy 130.49758 99.40417)
(xy 130.65633 99.56292) (xy 132.25526 99.56292) (xy 132.25526 98.21418) (xy 132.50926 98.21418) (xy 132.50926 99.56292)
(xy 134.10819 99.56292) (xy 134.26694 99.40417) (xy 134.26694 99.219691) (xy 135.138 99.219691) (xy 135.138 99.81025)
(xy 135.29675 99.969) (xy 136.271 99.969) (xy 136.271 98.86975) (xy 136.525 98.86975) (xy 136.525 99.969)
(xy 137.49925 99.969) (xy 137.658 99.81025) (xy 137.658 99.219691) (xy 137.561327 98.986302) (xy 137.382699 98.807673)
(xy 137.14931 98.711) (xy 136.68375 98.711) (xy 136.525 98.86975) (xy 136.271 98.86975) (xy 136.11225 98.711)
(xy 135.64669 98.711) (xy 135.413301 98.807673) (xy 135.234673 98.986302) (xy 135.138 99.219691) (xy 134.26694 99.219691)
(xy 134.26694 98.56412) (xy 134.170267 98.330731) (xy 133.991638 98.152103) (xy 133.758249 98.05543) (xy 132.66801 98.05543)
(xy 132.50926 98.21418) (xy 132.25526 98.21418) (xy 132.09651 98.05543) (xy 131.006271 98.05543) (xy 130.772882 98.152103)
(xy 130.594253 98.330731) (xy 130.49758 98.56412) (xy 128.76784 98.56412) (xy 128.671167 98.330731) (xy 128.492538 98.152103)
(xy 128.259149 98.05543) (xy 127.16891 98.05543) (xy 127.01016 98.21418) (xy 126.75616 98.21418) (xy 126.59741 98.05543)
(xy 125.507171 98.05543) (xy 125.273782 98.152103) (xy 125.145 98.280884) (xy 125.145 92.125) (xy 151.112975 92.125)
)
)
(filled_polygon
(pts
(xy 189.561 116.155) (xy 171.086025 116.155) (xy 171.089327 116.151698) (xy 171.186 115.918309) (xy 171.186 115.32775)
(xy 171.02725 115.169) (xy 170.053 115.169) (xy 170.053 115.189) (xy 169.799 115.189) (xy 169.799 115.169)
(xy 168.82475 115.169) (xy 168.666 115.32775) (xy 168.666 115.918309) (xy 168.762673 116.151698) (xy 168.765975 116.155)
(xy 166.260025 116.155) (xy 166.368327 116.046699) (xy 166.465 115.81331) (xy 166.465 115.34775) (xy 166.30625 115.189)
(xy 165.207 115.189) (xy 165.207 115.209) (xy 164.953 115.209) (xy 164.953 115.189) (xy 164.933 115.189)
(xy 164.933 114.935) (xy 164.953 114.935) (xy 164.953 114.915) (xy 165.207 114.915) (xy 165.207 114.935)
(xy 166.30625 114.935) (xy 166.465 114.77625) (xy 166.465 114.31069) (xy 166.368327 114.077301) (xy 166.354546 114.06352)
(xy 168.09212 114.06352) (xy 168.327437 114.019242) (xy 168.543561 113.88017) (xy 168.688551 113.66797) (xy 168.712439 113.550008)
(xy 168.83691 113.743441) (xy 168.905006 113.789969) (xy 168.762673 113.932302) (xy 168.666 114.165691) (xy 168.666 114.75625)
(xy 168.82475 114.915) (xy 169.799 114.915) (xy 169.799 114.895) (xy 170.053 114.895) (xy 170.053 114.915)
(xy 171.02725 114.915) (xy 171.186 114.75625) (xy 171.186 114.165691) (xy 171.089327 113.932302) (xy 170.94809 113.791064)
(xy 171.002441 113.75609) (xy 171.147431 113.54389) (xy 171.19844 113.292) (xy 171.19844 111.792) (xy 171.154162 111.556683)
(xy 171.01509 111.340559) (xy 170.80289 111.195569) (xy 170.551 111.14456) (xy 169.7357 111.14456) (xy 169.7357 110.7892)
(xy 169.677848 110.498361) (xy 169.677848 110.49836) (xy 169.513101 110.251799) (xy 168.954801 109.693499) (xy 168.73956 109.54968)
(xy 168.73956 109.34192) (xy 168.718831 109.23175) (xy 170.444 109.23175) (xy 170.444 109.822309) (xy 170.540673 110.055698)
(xy 170.719301 110.234327) (xy 170.95269 110.331) (xy 171.41825 110.331) (xy 171.577 110.17225) (xy 171.577 109.073)
(xy 170.60275 109.073) (xy 170.444 109.23175) (xy 168.718831 109.23175) (xy 168.695282 109.106603) (xy 168.634762 109.012553)
(xy 168.784201 108.912701) (xy 169.066302 108.6306) (xy 170.444 108.6306) (xy 170.444 108.66025) (xy 170.60275 108.819)
(xy 171.577 108.819) (xy 171.577 108.799) (xy 171.831 108.799) (xy 171.831 108.819) (xy 171.851 108.819)
(xy 171.851 109.073) (xy 171.831 109.073) (xy 171.831 110.17225) (xy 171.98975 110.331) (xy 172.45531 110.331)
(xy 172.688699 110.234327) (xy 172.867327 110.055698) (xy 172.964 109.822309) (xy 172.964 109.324502) (xy 173.650058 110.01056)
(xy 173.522 110.01056) (xy 173.286683 110.054838) (xy 173.070559 110.19391) (xy 172.925569 110.40611) (xy 172.87456 110.658)
(xy 172.87456 112.158) (xy 172.899918 112.292763) (xy 172.812162 112.504101) (xy 172.811838 112.876067) (xy 172.953883 113.219843)
(xy 173.216673 113.483092) (xy 173.560201 113.625738) (xy 173.932167 113.626062) (xy 174.275943 113.484017) (xy 174.299449 113.460551)
(xy 176.040899 115.202001) (xy 176.287461 115.366748) (xy 176.5783 115.4246) (xy 184.9572 115.4246) (xy 185.248039 115.366748)
(xy 185.494601 115.202001) (xy 186.59612 114.100482) (xy 186.66792 114.325259) (xy 187.223279 114.526718) (xy 187.813458 114.500315)
(xy 188.23608 114.325259) (xy 188.316353 114.073958) (xy 187.452 113.209605) (xy 187.437858 113.223748) (xy 187.258253 113.044143)
(xy 187.272395 113.03) (xy 187.631605 113.03) (xy 188.495958 113.894353) (xy 188.747259 113.81408) (xy 188.948718 113.258721)
(xy 188.922315 112.668542) (xy 188.747259 112.24592) (xy 188.495958 112.165647) (xy 187.631605 113.03) (xy 187.272395 113.03)
(xy 187.258253 113.015858) (xy 187.437858 112.836253) (xy 187.452 112.850395) (xy 188.316353 111.986042) (xy 188.244148 111.76)
(xy 188.316353 111.533958) (xy 187.452 110.669605) (xy 187.437858 110.683748) (xy 187.258253 110.504143) (xy 187.272395 110.49)
(xy 187.631605 110.49) (xy 188.495958 111.354353) (xy 188.747259 111.27408) (xy 188.948718 110.718721) (xy 188.922315 110.128542)
(xy 188.747259 109.70592) (xy 188.495958 109.625647) (xy 187.631605 110.49) (xy 187.272395 110.49) (xy 186.408042 109.625647)
(xy 186.19036 109.695181) (xy 186.171656 109.649914) (xy 185.754283 109.231812) (xy 185.726443 109.220252) (xy 185.752086 109.209656)
(xy 185.96816 108.993958) (xy 186.587647 108.993958) (xy 186.659852 109.22) (xy 186.587647 109.446042) (xy 187.452 110.310395)
(xy 188.316353 109.446042) (xy 188.244148 109.22) (xy 188.316353 108.993958) (xy 187.452 108.129605) (xy 186.587647 108.993958)
(xy 185.96816 108.993958) (xy 186.170188 108.792283) (xy 186.189951 108.744688) (xy 186.408042 108.814353) (xy 187.272395 107.95)
(xy 187.631605 107.95) (xy 188.495958 108.814353) (xy 188.747259 108.73408) (xy 188.948718 108.178721) (xy 188.922315 107.588542)
(xy 188.747259 107.16592) (xy 188.495958 107.085647) (xy 187.631605 107.95) (xy 187.272395 107.95) (xy 186.408042 107.085647)
(xy 186.19036 107.155181) (xy 186.171656 107.109914) (xy 185.754283 106.691812) (xy 185.726443 106.680252) (xy 185.752086 106.669656)
(xy 185.96816 106.453958) (xy 186.587647 106.453958) (xy 186.659852 106.68) (xy 186.587647 106.906042) (xy 187.452 107.770395)
(xy 188.316353 106.906042) (xy 188.244148 106.68) (xy 188.316353 106.453958) (xy 187.452 105.589605) (xy 186.587647 106.453958)
(xy 185.96816 106.453958) (xy 186.170188 106.252283) (xy 186.189951 106.204688) (xy 186.408042 106.274353) (xy 187.272395 105.41)
(xy 187.631605 105.41) (xy 188.495958 106.274353) (xy 188.747259 106.19408) (xy 188.948718 105.638721) (xy 188.922315 105.048542)
(xy 188.747259 104.62592) (xy 188.495958 104.545647) (xy 187.631605 105.41) (xy 187.272395 105.41) (xy 186.408042 104.545647)
(xy 186.19036 104.615181) (xy 186.171656 104.569914) (xy 185.754283 104.151812) (xy 185.726443 104.140252) (xy 185.752086 104.129656)
(xy 185.96816 103.913958) (xy 186.587647 103.913958) (xy 186.659852 104.14) (xy 186.587647 104.366042) (xy 187.452 105.230395)
(xy 188.316353 104.366042) (xy 188.244148 104.14) (xy 188.316353 103.913958) (xy 187.452 103.049605) (xy 186.587647 103.913958)
(xy 185.96816 103.913958) (xy 186.170188 103.712283) (xy 186.189951 103.664688) (xy 186.408042 103.734353) (xy 187.272395 102.87)
(xy 187.631605 102.87) (xy 188.495958 103.734353) (xy 188.747259 103.65408) (xy 188.948718 103.098721) (xy 188.922315 102.508542)
(xy 188.747259 102.08592) (xy 188.495958 102.005647) (xy 187.631605 102.87) (xy 187.272395 102.87) (xy 186.408042 102.005647)
(xy 186.19036 102.075181) (xy 186.171656 102.029914) (xy 186.070011 101.928091) (xy 186.596483 101.401619) (xy 186.659852 101.6)
(xy 186.587647 101.826042) (xy 187.452 102.690395) (xy 188.316353 101.826042) (xy 188.244148 101.6) (xy 188.316353 101.373958)
(xy 187.452 100.509605) (xy 187.437858 100.523748) (xy 187.258253 100.344143) (xy 187.272395 100.33) (xy 187.631605 100.33)
(xy 188.495958 101.194353) (xy 188.747259 101.11408) (xy 188.948718 100.558721) (xy 188.922315 99.968542) (xy 188.747259 99.54592)
(xy 188.495958 99.465647) (xy 187.631605 100.33) (xy 187.272395 100.33) (xy 187.258253 100.315858) (xy 187.437858 100.136253)
(xy 187.452 100.150395) (xy 188.316353 99.286042) (xy 188.23608 99.034741) (xy 188.162462 99.008036) (xy 188.175923 99.00246)
(xy 188.243912 98.761517) (xy 187.452 97.969605) (xy 187.437858 97.983748) (xy 187.258253 97.804143) (xy 187.272395 97.79)
(xy 187.631605 97.79) (xy 188.423517 98.581912) (xy 188.66446 98.513923) (xy 188.849201 97.994829) (xy 188.82123 97.444552)
(xy 188.66446 97.066077) (xy 188.423517 96.998088) (xy 187.631605 97.79) (xy 187.272395 97.79) (xy 187.258253 97.775858)
(xy 187.437858 97.596253) (xy 187.452 97.610395) (xy 188.243912 96.818483) (xy 188.175923 96.57754) (xy 188.166362 96.574137)
(xy 188.23608 96.545259) (xy 188.316353 96.293958) (xy 187.452 95.429605) (xy 187.437858 95.443748) (xy 187.258253 95.264143)
(xy 187.272395 95.25) (xy 187.631605 95.25) (xy 188.495958 96.114353) (xy 188.747259 96.03408) (xy 188.948718 95.478721)
(xy 188.922315 94.888542) (xy 188.747259 94.46592) (xy 188.495958 94.385647) (xy 187.631605 95.25) (xy 187.272395 95.25)
(xy 187.258253 95.235858) (xy 187.437858 95.056253) (xy 187.452 95.070395) (xy 188.316353 94.206042) (xy 188.23608 93.954741)
(xy 187.680721 93.753282) (xy 187.090542 93.779685) (xy 186.66792 93.954741) (xy 186.596919 94.177017) (xy 185.918701 93.498799)
(xy 185.672139 93.334052) (xy 185.3813 93.2762) (xy 181.4149 93.2762) (xy 181.124061 93.334052) (xy 180.877499 93.498799)
(xy 179.16944 95.206858) (xy 179.16944 93.709) (xy 179.125162 93.473683) (xy 178.98609 93.257559) (xy 178.77389 93.112569)
(xy 178.560605 93.069378) (xy 178.560662 93.003833) (xy 178.418617 92.660057) (xy 178.155827 92.396808) (xy 177.812299 92.254162)
(xy 177.440333 92.253838) (xy 177.096557 92.395883) (xy 177.031913 92.460414) (xy 176.7845 92.4112) (xy 176.517063 92.4112)
(xy 176.484927 92.379008) (xy 176.141399 92.236362) (xy 175.769433 92.236038) (xy 175.425657 92.378083) (xy 175.162408 92.640873)
(xy 175.019762 92.984401) (xy 175.019695 93.06156) (xy 174.822 93.06156) (xy 174.718329 93.081067) (xy 174.622 93.06156)
(xy 174.172 93.06156) (xy 174.068329 93.081067) (xy 173.972 93.06156) (xy 173.522 93.06156) (xy 173.286683 93.105838)
(xy 173.070559 93.24491) (xy 172.925569 93.45711) (xy 172.87456 93.709) (xy 172.87456 94.322167) (xy 172.79309 94.195559)
(xy 172.58089 94.050569) (xy 172.329 93.99956) (xy 171.079 93.99956) (xy 170.843683 94.043838) (xy 170.627559 94.18291)
(xy 170.482569 94.39511) (xy 170.43156 94.647) (xy 170.43156 96.147) (xy 170.475838 96.382317) (xy 170.61491 96.598441)
(xy 170.683006 96.644969) (xy 170.540673 96.787302) (xy 170.444 97.020691) (xy 170.444 97.61125) (xy 170.60275 97.77)
(xy 171.577 97.77) (xy 171.577 97.75) (xy 171.831 97.75) (xy 171.831 97.77) (xy 172.80525 97.77)
(xy 172.964 97.61125) (xy 172.964 97.020691) (xy 172.867327 96.787302) (xy 172.72609 96.646064) (xy 172.780441 96.61109)
(xy 172.925431 96.39889) (xy 172.946611 96.2943) (xy 173.388598 96.2943) (xy 175.167698 98.0734) (xy 173.1103 98.0734)
(xy 172.897065 98.115815) (xy 172.80525 98.024) (xy 171.831 98.024) (xy 171.831 98.044) (xy 171.577 98.044)
(xy 171.577 98.024) (xy 170.60275 98.024) (xy 170.444 98.18275) (xy 170.444 98.773309) (xy 170.540673 99.006698)
(xy 170.719301 99.185327) (xy 170.95269 99.282) (xy 171.41825 99.282) (xy 171.576998 99.123252) (xy 171.576998 99.282)
(xy 171.586898 99.282) (xy 171.006896 99.862002) (xy 171.006962 99.786233) (xy 170.864917 99.442457) (xy 170.602127 99.179208)
(xy 170.258599 99.036562) (xy 169.886633 99.036238) (xy 169.542857 99.178283) (xy 169.509682 99.2114) (xy 168.8279 99.2114)
(xy 168.53706 99.269252) (xy 168.50095 99.29338) (xy 168.415527 99.207808) (xy 168.071999 99.065162) (xy 167.700033 99.064838)
(xy 167.356257 99.206883) (xy 167.323082 99.24) (xy 167.24444 99.24) (xy 167.24444 98.925) (xy 167.220056 98.795411)
(xy 167.24444 98.675) (xy 167.24444 98.125) (xy 167.220056 97.995411) (xy 167.24444 97.875) (xy 167.24444 97.325)
(xy 167.200162 97.089683) (xy 167.06109 96.873559) (xy 166.84889 96.728569) (xy 166.597 96.67756) (xy 165.097 96.67756)
(xy 165.062546 96.684043) (xy 165.06944 96.65) (xy 165.06944 95.15) (xy 165.042053 95.004449) (xy 165.230802 94.8157)
(xy 165.628 94.8157) (xy 165.918839 94.757848) (xy 166.165401 94.593101) (xy 166.233997 94.49044) (xy 166.378 94.49044)
(xy 166.613317 94.446162) (xy 166.829441 94.30709) (xy 166.875969 94.238994) (xy 167.018302 94.381327) (xy 167.251691 94.478)
(xy 167.84225 94.478) (xy 168.001 94.31925) (xy 168.001 93.345) (xy 168.255 93.345) (xy 168.255 94.31925)
(xy 168.41375 94.478) (xy 169.004309 94.478) (xy 169.237698 94.381327) (xy 169.416327 94.202699) (xy 169.513 93.96931)
(xy 169.513 93.50375) (xy 169.35425 93.345) (xy 168.255 93.345) (xy 168.001 93.345) (xy 167.981 93.345)
(xy 167.981 93.091) (xy 168.001 93.091) (xy 168.001 93.071) (xy 168.255 93.071) (xy 168.255 93.091)
(xy 169.35425 93.091) (xy 169.513 92.93225) (xy 169.513 92.46669) (xy 169.416327 92.233301) (xy 169.308025 92.125)
(xy 189.561 92.125)
)
)
(filled_polygon
(pts
(xy 147.987 100.55225) (xy 148.14575 100.711) (xy 149.245 100.711) (xy 149.245 100.691) (xy 149.499 100.691)
(xy 149.499 100.711) (xy 149.519 100.711) (xy 149.519 100.965) (xy 149.499 100.965) (xy 149.499 101.93925)
(xy 149.65775 102.098) (xy 150.248309 102.098) (xy 150.481698 102.001327) (xy 150.622936 101.86009) (xy 150.65791 101.914441)
(xy 150.87011 102.059431) (xy 151.109509 102.10791) (xy 150.886683 102.149838) (xy 150.670559 102.28891) (xy 150.624031 102.357006)
(xy 150.481698 102.214673) (xy 150.248309 102.118) (xy 149.65775 102.118) (xy 149.499 102.27675) (xy 149.499 103.251)
(xy 149.519 103.251) (xy 149.519 103.505) (xy 149.499 103.505) (xy 149.499 104.47925) (xy 149.65775 104.638)
(xy 150.220198 104.638) (xy 150.200198 104.658) (xy 149.65775 104.658) (xy 149.499 104.81675) (xy 149.499 105.791)
(xy 149.519 105.791) (xy 149.519 106.045) (xy 149.499 106.045) (xy 149.499 106.065) (xy 149.245 106.065)
(xy 149.245 106.045) (xy 148.14575 106.045) (xy 147.987 106.20375) (xy 147.987 106.66931) (xy 148.083673 106.902699)
(xy 148.262302 107.081327) (xy 148.495691 107.178) (xy 148.923198 107.178) (xy 147.204498 108.8967) (xy 145.602802 108.8967)
(xy 142.803001 106.096899) (xy 142.743946 106.05744) (xy 144.8308 106.05744) (xy 145.066117 106.013162) (xy 145.282241 105.87409)
(xy 145.427231 105.66189) (xy 145.47824 105.41) (xy 145.47824 105.16669) (xy 147.987 105.16669) (xy 147.987 105.63225)
(xy 148.14575 105.791) (xy 149.245 105.791) (xy 149.245 104.81675) (xy 149.08625 104.658) (xy 148.495691 104.658)
(xy 148.262302 104.754673) (xy 148.083673 104.933301) (xy 147.987 105.16669) (xy 145.47824 105.16669) (xy 145.47824 103.66375)
(xy 147.987 103.66375) (xy 147.987 104.12931) (xy 148.083673 104.362699) (xy 148.262302 104.541327) (xy 148.495691 104.638)
(xy 149.08625 104.638) (xy 149.245 104.47925) (xy 149.245 103.505) (xy 148.14575 103.505) (xy 147.987 103.66375)
(xy 145.47824 103.66375) (xy 145.47824 103.378) (xy 145.433962 103.142683) (xy 145.29489 102.926559) (xy 145.08269 102.781569)
(xy 144.8308 102.73056) (xy 141.1732 102.73056) (xy 140.937883 102.774838) (xy 140.721759 102.91391) (xy 140.576769 103.12611)
(xy 140.52576 103.378) (xy 140.52576 105.41) (xy 140.570038 105.645317) (xy 140.70911 105.861441) (xy 140.72793 105.8743)
(xy 138.613402 105.8743) (xy 137.885701 105.146599) (xy 137.67044 105.002767) (xy 137.67044 104.934) (xy 137.6332 104.736087)
(xy 137.6332 104.1465) (xy 137.63088 104.134838) (xy 137.575348 103.85566) (xy 137.510063 103.757955) (xy 137.619431 103.59789)
(xy 137.67044 103.346) (xy 137.67044 102.62669) (xy 147.987 102.62669) (xy 147.987 103.09225) (xy 148.14575 103.251)
(xy 149.245 103.251) (xy 149.245 102.27675) (xy 149.08625 102.118) (xy 148.495691 102.118) (xy 148.262302 102.214673)
(xy 148.083673 102.393301) (xy 147.987 102.62669) (xy 137.67044 102.62669) (xy 137.67044 101.9467) (xy 141.0836 101.9467)
(xy 141.374439 101.888848) (xy 141.621001 101.724101) (xy 142.221352 101.12375) (xy 147.987 101.12375) (xy 147.987 101.58931)
(xy 148.083673 101.822699) (xy 148.262302 102.001327) (xy 148.495691 102.098) (xy 149.08625 102.098) (xy 149.245 101.93925)
(xy 149.245 100.965) (xy 148.14575 100.965) (xy 147.987 101.12375) (xy 142.221352 101.12375) (xy 142.289401 101.055701)
(xy 142.433234 100.84044) (xy 142.502 100.84044) (xy 142.737317 100.796162) (xy 142.953441 100.65709) (xy 143.001134 100.587289)
(xy 143.03791 100.644441) (xy 143.25011 100.789431) (xy 143.502 100.84044) (xy 145.002 100.84044) (xy 145.237317 100.796162)
(xy 145.453441 100.65709) (xy 145.598431 100.44489) (xy 145.622102 100.328) (xy 147.987 100.328)
)
)
(filled_polygon
(pts
(xy 170.586862 100.872101) (xy 170.586538 101.244067) (xy 170.617703 101.319492) (xy 170.495108 101.441873) (xy 170.352462 101.785401)
(xy 170.352138 102.157367) (xy 170.494183 102.501143) (xy 170.756973 102.764392) (xy 171.100501 102.907038) (xy 171.472467 102.907362)
(xy 171.816243 102.765317) (xy 172.079492 102.502527) (xy 172.097044 102.460258) (xy 172.796601 101.760701) (xy 172.820942 101.724272)
(xy 172.820838 101.843867) (xy 172.962883 102.187643) (xy 173.225673 102.450892) (xy 173.372452 102.51184) (xy 173.372338 102.642367)
(xy 173.508252 102.971305) (xy 173.400499 102.926562) (xy 173.028533 102.926238) (xy 172.684757 103.068283) (xy 172.421508 103.331073)
(xy 172.278862 103.674601) (xy 172.278538 104.046567) (xy 172.420583 104.390343) (xy 172.683373 104.653592) (xy 172.879234 104.734921)
(xy 172.87456 104.758) (xy 172.87456 105.371167) (xy 172.79309 105.244559) (xy 172.58089 105.099569) (xy 172.329 105.04856)
(xy 171.079 105.04856) (xy 170.843683 105.092838) (xy 170.627559 105.23191) (xy 170.622222 105.23972) (xy 170.3663 104.983798)
(xy 170.3663 104.628) (xy 170.308448 104.337161) (xy 170.143701 104.090599) (xy 169.92844 103.946767) (xy 169.92844 103.878)
(xy 169.884162 103.642683) (xy 169.74509 103.426559) (xy 169.676994 103.380031) (xy 169.819327 103.237698) (xy 169.916 103.004309)
(xy 169.916 102.41375) (xy 169.75725 102.255) (xy 168.783 102.255) (xy 168.783 102.275) (xy 168.529 102.275)
(xy 168.529 102.255) (xy 168.509 102.255) (xy 168.509 102.001) (xy 168.529 102.001) (xy 168.529 101.981)
(xy 168.783 101.981) (xy 168.783 102.001) (xy 169.75725 102.001) (xy 169.916 101.84225) (xy 169.916 101.251691)
(xy 169.819327 101.018302) (xy 169.640699 100.839673) (xy 169.40731 100.743) (xy 169.131102 100.743) (xy 169.142702 100.7314)
(xy 169.509337 100.7314) (xy 169.541473 100.763592) (xy 169.885001 100.906238) (xy 170.256967 100.906562) (xy 170.600743 100.764517)
(xy 170.653335 100.712016)
)
)
(filled_polygon
(pts
(xy 164.426559 92.12891) (xy 164.281569 92.34111) (xy 164.23056 92.593) (xy 164.23056 93.666338) (xy 163.832198 94.0647)
(xy 161.599488 94.0647) (xy 161.639 93.96931) (xy 161.639 93.50375) (xy 161.48025 93.345) (xy 160.381 93.345)
(xy 160.381 93.365) (xy 160.127 93.365) (xy 160.127 93.345) (xy 160.107 93.345) (xy 160.107 93.091)
(xy 160.127 93.091) (xy 160.127 93.071) (xy 160.381 93.071) (xy 160.381 93.091) (xy 161.48025 93.091)
(xy 161.639 92.93225) (xy 161.639 92.46669) (xy 161.542327 92.233301) (xy 161.434025 92.125) (xy 164.432635 92.125)
)
)
) )
(zone (net 1) (net_name GND) (layer B.Cu) (tstamp 579A43CA) (hatch edge 0.508) (zone (net 1) (net_name GND) (layer B.Cu) (tstamp 579A43CA) (hatch edge 0.508)
(connect_pads (clearance 0.508)) (connect_pads (clearance 0.508))
(min_thickness 0.254) (min_thickness 0.254)
(fill yes (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508))
(polygon (polygon
(pts (pts
(xy 190.246 91.44) (xy 124.46 91.44) (xy 124.46 116.84) (xy 190.246 116.84) (xy 190.246 91.44) (xy 124.46 91.44) (xy 124.46 116.84) (xy 190.246 116.84)
) )
) )
(filled_polygon
(pts
(xy 166.563299 99.343899) (xy 166.398552 99.590461) (xy 166.3407 99.8813) (xy 166.3407 100.178137) (xy 166.308508 100.210273)
(xy 166.165862 100.553801) (xy 166.165538 100.925767) (xy 166.307583 101.269543) (xy 166.570373 101.532792) (xy 166.913901 101.675438)
(xy 167.285867 101.675762) (xy 167.629643 101.533717) (xy 167.892892 101.270927) (xy 168.032328 100.935129) (xy 168.070367 100.935162)
(xy 168.414143 100.793117) (xy 168.447318 100.76) (xy 168.810998 100.76) (xy 169.185199 101.134201) (xy 169.431761 101.298948)
(xy 169.7226 101.3568) (xy 170.4898 101.3568) (xy 170.602858 101.334311) (xy 170.495108 101.441873) (xy 170.352462 101.785401)
(xy 170.352138 102.157367) (xy 170.41222 102.302778) (xy 167.46712 105.247878) (xy 167.421633 105.247838) (xy 167.077857 105.389883)
(xy 166.814608 105.652673) (xy 166.671962 105.996201) (xy 166.671884 106.0858) (xy 159.620502 106.0858) (xy 158.960822 105.42612)
(xy 158.960862 105.380633) (xy 158.818817 105.036857) (xy 158.556027 104.773608) (xy 158.212499 104.630962) (xy 157.840533 104.630638)
(xy 157.496757 104.772683) (xy 157.233508 105.035473) (xy 157.090862 105.379001) (xy 157.090538 105.750967) (xy 157.232583 106.094743)
(xy 157.495373 106.357992) (xy 157.838901 106.500638) (xy 157.885777 106.500679) (xy 158.768299 107.383201) (xy 159.01486 107.547948)
(xy 159.3057 107.6058) (xy 172.718 107.6058) (xy 172.742521 107.600923) (xy 175.405178 110.26358) (xy 175.405138 110.309067)
(xy 175.547183 110.652843) (xy 175.809973 110.916092) (xy 176.153501 111.058738) (xy 176.525467 111.059062) (xy 176.869243 110.917017)
(xy 177.132492 110.654227) (xy 177.275138 110.310699) (xy 177.275462 109.938733) (xy 177.133417 109.594957) (xy 176.870627 109.331708)
(xy 176.527099 109.189062) (xy 176.480223 109.189021) (xy 173.6501 106.358898) (xy 173.6501 105.382902) (xy 180.920489 112.653291)
(xy 180.887258 112.733319) (xy 180.886743 113.324089) (xy 180.953189 113.4849) (xy 175.615802 113.4849) (xy 174.682122 112.55122)
(xy 174.682162 112.505733) (xy 174.540117 112.161957) (xy 174.277327 111.898708) (xy 173.933799 111.756062) (xy 173.561833 111.755738)
(xy 173.218057 111.897783) (xy 172.954808 112.160573) (xy 172.812162 112.504101) (xy 172.811838 112.876067) (xy 172.953883 113.219843)
(xy 173.216673 113.483092) (xy 173.560201 113.625738) (xy 173.607077 113.625779) (xy 174.763599 114.782301) (xy 175.010161 114.947048)
(xy 175.301 115.0049) (xy 182.8528 115.0049) (xy 183.143639 114.947048) (xy 183.390201 114.782301) (xy 183.977096 114.195406)
(xy 184.069717 114.288188) (xy 184.615319 114.514742) (xy 185.206089 114.515257) (xy 185.752086 114.289656) (xy 185.96816 114.073958)
(xy 186.587647 114.073958) (xy 186.66792 114.325259) (xy 187.223279 114.526718) (xy 187.813458 114.500315) (xy 188.23608 114.325259)
(xy 188.316353 114.073958) (xy 187.452 113.209605) (xy 186.587647 114.073958) (xy 185.96816 114.073958) (xy 186.170188 113.872283)
(xy 186.189951 113.824688) (xy 186.408042 113.894353) (xy 187.272395 113.03) (xy 187.631605 113.03) (xy 188.495958 113.894353)
(xy 188.747259 113.81408) (xy 188.948718 113.258721) (xy 188.922315 112.668542) (xy 188.747259 112.24592) (xy 188.495958 112.165647)
(xy 187.631605 113.03) (xy 187.272395 113.03) (xy 186.408042 112.165647) (xy 186.19036 112.235181) (xy 186.171656 112.189914)
(xy 185.754283 111.771812) (xy 185.726443 111.760252) (xy 185.752086 111.749656) (xy 185.96816 111.533958) (xy 186.587647 111.533958)
(xy 186.659852 111.76) (xy 186.587647 111.986042) (xy 187.452 112.850395) (xy 188.316353 111.986042) (xy 188.244148 111.76)
(xy 188.316353 111.533958) (xy 187.452 110.669605) (xy 186.587647 111.533958) (xy 185.96816 111.533958) (xy 186.170188 111.332283)
(xy 186.189951 111.284688) (xy 186.408042 111.354353) (xy 187.272395 110.49) (xy 187.631605 110.49) (xy 188.495958 111.354353)
(xy 188.747259 111.27408) (xy 188.948718 110.718721) (xy 188.922315 110.128542) (xy 188.747259 109.70592) (xy 188.495958 109.625647)
(xy 187.631605 110.49) (xy 187.272395 110.49) (xy 186.408042 109.625647) (xy 186.19036 109.695181) (xy 186.171656 109.649914)
(xy 186.079852 109.55795) (xy 186.601252 109.03655) (xy 186.659852 109.22) (xy 186.587647 109.446042) (xy 187.452 110.310395)
(xy 188.316353 109.446042) (xy 188.244148 109.22) (xy 188.316353 108.993958) (xy 187.452 108.129605) (xy 187.437858 108.143748)
(xy 187.258253 107.964143) (xy 187.272395 107.95) (xy 187.631605 107.95) (xy 188.495958 108.814353) (xy 188.747259 108.73408)
(xy 188.948718 108.178721) (xy 188.922315 107.588542) (xy 188.747259 107.16592) (xy 188.495958 107.085647) (xy 187.631605 107.95)
(xy 187.272395 107.95) (xy 187.258253 107.935858) (xy 187.437858 107.756253) (xy 187.452 107.770395) (xy 188.316353 106.906042)
(xy 188.244148 106.68) (xy 188.316353 106.453958) (xy 187.452 105.589605) (xy 187.437858 105.603748) (xy 187.258253 105.424143)
(xy 187.272395 105.41) (xy 187.631605 105.41) (xy 188.495958 106.274353) (xy 188.747259 106.19408) (xy 188.948718 105.638721)
(xy 188.922315 105.048542) (xy 188.747259 104.62592) (xy 188.495958 104.545647) (xy 187.631605 105.41) (xy 187.272395 105.41)
(xy 186.408042 104.545647) (xy 186.19036 104.615181) (xy 186.171656 104.569914) (xy 186.061818 104.459884) (xy 186.592512 103.92919)
(xy 186.659852 104.14) (xy 186.587647 104.366042) (xy 187.452 105.230395) (xy 188.316353 104.366042) (xy 188.244148 104.14)
(xy 188.316353 103.913958) (xy 187.452 103.049605) (xy 187.437858 103.063748) (xy 187.258253 102.884143) (xy 187.272395 102.87)
(xy 187.631605 102.87) (xy 188.495958 103.734353) (xy 188.747259 103.65408) (xy 188.948718 103.098721) (xy 188.922315 102.508542)
(xy 188.747259 102.08592) (xy 188.495958 102.005647) (xy 187.631605 102.87) (xy 187.272395 102.87) (xy 187.258253 102.855858)
(xy 187.437858 102.676253) (xy 187.452 102.690395) (xy 188.316353 101.826042) (xy 188.244148 101.6) (xy 188.316353 101.373958)
(xy 187.452 100.509605) (xy 187.437858 100.523748) (xy 187.258253 100.344143) (xy 187.272395 100.33) (xy 187.631605 100.33)
(xy 188.495958 101.194353) (xy 188.747259 101.11408) (xy 188.948718 100.558721) (xy 188.922315 99.968542) (xy 188.747259 99.54592)
(xy 188.495958 99.465647) (xy 187.631605 100.33) (xy 187.272395 100.33) (xy 186.408042 99.465647) (xy 186.19036 99.535181)
(xy 186.171656 99.489914) (xy 185.96814 99.286042) (xy 186.587647 99.286042) (xy 187.452 100.150395) (xy 188.316353 99.286042)
(xy 188.23608 99.034741) (xy 188.162462 99.008036) (xy 188.175923 99.00246) (xy 188.243912 98.761517) (xy 187.452 97.969605)
(xy 186.660088 98.761517) (xy 186.728077 99.00246) (xy 186.737638 99.005863) (xy 186.66792 99.034741) (xy 186.587647 99.286042)
(xy 185.96814 99.286042) (xy 185.754283 99.071812) (xy 185.726443 99.060252) (xy 185.752086 99.049656) (xy 186.170188 98.632283)
(xy 186.22945 98.489564) (xy 186.23954 98.513923) (xy 186.480483 98.581912) (xy 187.272395 97.79) (xy 187.631605 97.79)
(xy 188.423517 98.581912) (xy 188.66446 98.513923) (xy 188.849201 97.994829) (xy 188.82123 97.444552) (xy 188.66446 97.066077)
(xy 188.423517 96.998088) (xy 187.631605 97.79) (xy 187.272395 97.79) (xy 186.480483 96.998088) (xy 186.23954 97.066077)
(xy 186.230338 97.091934) (xy 186.171656 96.949914) (xy 185.754283 96.531812) (xy 185.726443 96.520252) (xy 185.752086 96.509656)
(xy 185.96816 96.293958) (xy 186.587647 96.293958) (xy 186.66792 96.545259) (xy 186.741538 96.571964) (xy 186.728077 96.57754)
(xy 186.660088 96.818483) (xy 187.452 97.610395) (xy 188.243912 96.818483) (xy 188.175923 96.57754) (xy 188.166362 96.574137)
(xy 188.23608 96.545259) (xy 188.316353 96.293958) (xy 187.452 95.429605) (xy 186.587647 96.293958) (xy 185.96816 96.293958)
(xy 186.170188 96.092283) (xy 186.189951 96.044688) (xy 186.408042 96.114353) (xy 187.272395 95.25) (xy 187.631605 95.25)
(xy 188.495958 96.114353) (xy 188.747259 96.03408) (xy 188.948718 95.478721) (xy 188.922315 94.888542) (xy 188.747259 94.46592)
(xy 188.495958 94.385647) (xy 187.631605 95.25) (xy 187.272395 95.25) (xy 186.408042 94.385647) (xy 186.19036 94.455181)
(xy 186.171656 94.409914) (xy 185.96814 94.206042) (xy 186.587647 94.206042) (xy 187.452 95.070395) (xy 188.316353 94.206042)
(xy 188.23608 93.954741) (xy 187.680721 93.753282) (xy 187.090542 93.779685) (xy 186.66792 93.954741) (xy 186.587647 94.206042)
(xy 185.96814 94.206042) (xy 185.754283 93.991812) (xy 185.208681 93.765258) (xy 184.617911 93.764743) (xy 184.071914 93.990344)
(xy 183.653812 94.407717) (xy 183.642252 94.435557) (xy 183.631656 94.409914) (xy 183.214283 93.991812) (xy 182.668681 93.765258)
(xy 182.077911 93.764743) (xy 181.531914 93.990344) (xy 181.113812 94.407717) (xy 180.887258 94.953319) (xy 180.886743 95.544089)
(xy 181.112344 96.090086) (xy 181.529717 96.508188) (xy 181.557557 96.519748) (xy 181.531914 96.530344) (xy 181.113812 96.947717)
(xy 180.887258 97.493319) (xy 180.886743 98.084089) (xy 181.112344 98.630086) (xy 181.529717 99.048188) (xy 181.557557 99.059748)
(xy 181.531914 99.070344) (xy 181.113812 99.487717) (xy 180.887258 100.033319) (xy 180.886743 100.624089) (xy 181.112344 101.170086)
(xy 181.175323 101.233175) (xy 180.203199 102.205299) (xy 180.038452 102.451861) (xy 179.9806 102.7427) (xy 179.9806 104.406337)
(xy 179.948408 104.438473) (xy 179.805762 104.782001) (xy 179.80569 104.8643) (xy 179.051249 104.8643) (xy 179.148892 104.766827)
(xy 179.291538 104.423299) (xy 179.291862 104.051333) (xy 179.149817 103.707557) (xy 179.036661 103.594203) (xy 179.140638 103.343799)
(xy 179.140744 103.2216) (xy 179.153948 103.201839) (xy 179.2118 102.911) (xy 179.2118 94.0153) (xy 179.153948 93.724461)
(xy 178.989201 93.477899) (xy 178.560622 93.04932) (xy 178.560662 93.003833) (xy 178.418617 92.660057) (xy 178.155827 92.396808)
(xy 177.812299 92.254162) (xy 177.765423 92.254121) (xy 177.636302 92.125) (xy 189.561 92.125) (xy 189.561 116.155)
(xy 125.145 116.155) (xy 125.145 106.55443) (xy 128.798132 106.55443) (xy 128.962902 106.953203) (xy 129.267733 107.258566)
(xy 129.666217 107.424031) (xy 130.09769 107.424408) (xy 130.496463 107.259638) (xy 130.801826 106.954807) (xy 130.967291 106.556323)
(xy 130.967668 106.12485) (xy 130.802898 105.726077) (xy 130.498067 105.420714) (xy 130.099583 105.255249) (xy 129.66811 105.254872)
(xy 129.269337 105.419642) (xy 128.963974 105.724473) (xy 128.798509 106.122957) (xy 128.798132 106.55443) (xy 125.145 106.55443)
(xy 125.145 103.468067) (xy 133.208438 103.468067) (xy 133.350483 103.811843) (xy 133.613273 104.075092) (xy 133.956801 104.217738)
(xy 134.328767 104.218062) (xy 134.672543 104.076017) (xy 134.935792 103.813227) (xy 135.078438 103.469699) (xy 135.078762 103.097733)
(xy 134.936717 102.753957) (xy 134.9036 102.720782) (xy 134.9036 102.574802) (xy 139.91078 97.567622) (xy 139.956267 97.567662)
(xy 140.300043 97.425617) (xy 140.563292 97.162827) (xy 140.705938 96.819299) (xy 140.705983 96.7671) (xy 144.851798 96.7671)
(xy 152.224378 104.13968) (xy 152.224338 104.185167) (xy 152.366383 104.528943) (xy 152.629173 104.792192) (xy 152.972701 104.934838)
(xy 153.344667 104.935162) (xy 153.688443 104.793117) (xy 153.951692 104.530327) (xy 154.094338 104.186799) (xy 154.094662 103.814833)
(xy 153.952617 103.471057) (xy 153.689827 103.207808) (xy 153.346299 103.065162) (xy 153.299423 103.065121) (xy 145.704001 95.469699)
(xy 145.457439 95.304952) (xy 145.1666 95.2471) (xy 138.9338 95.2471) (xy 138.642961 95.304952) (xy 138.396399 95.469699)
(xy 138.28122 95.584878) (xy 138.235733 95.584838) (xy 137.891957 95.726883) (xy 137.628708 95.989673) (xy 137.486062 96.333201)
(xy 137.485738 96.705167) (xy 137.627783 97.048943) (xy 137.890573 97.312192) (xy 137.979627 97.349171) (xy 133.606199 101.722599)
(xy 133.441452 101.969161) (xy 133.3836 102.26) (xy 133.3836 102.720437) (xy 133.351408 102.752573) (xy 133.208762 103.096101)
(xy 133.208438 103.468067) (xy 125.145 103.468067) (xy 125.145 102.15515) (xy 128.798132 102.15515) (xy 128.962902 102.553923)
(xy 129.267733 102.859286) (xy 129.666217 103.024751) (xy 130.09769 103.025128) (xy 130.496463 102.860358) (xy 130.801826 102.555527)
(xy 130.967291 102.157043) (xy 130.967668 101.72557) (xy 130.802898 101.326797) (xy 130.498067 101.021434) (xy 130.099583 100.855969)
(xy 129.66811 100.855592) (xy 129.269337 101.020362) (xy 128.963974 101.325193) (xy 128.798509 101.723677) (xy 128.798132 102.15515)
(xy 125.145 102.15515) (xy 125.145 94.165167) (xy 145.467038 94.165167) (xy 145.609083 94.508943) (xy 145.871873 94.772192)
(xy 146.215401 94.914838) (xy 146.262277 94.914879) (xy 154.822327 103.474929) (xy 154.927283 103.728943) (xy 155.190073 103.992192)
(xy 155.533601 104.134838) (xy 155.905567 104.135162) (xy 156.249343 103.993117) (xy 156.512592 103.730327) (xy 156.655238 103.386799)
(xy 156.655562 103.014833) (xy 156.513517 102.671057) (xy 156.250727 102.407808) (xy 155.907199 102.265162) (xy 155.762038 102.265036)
(xy 147.337322 93.84032) (xy 147.337362 93.794833) (xy 147.195317 93.451057) (xy 146.932527 93.187808) (xy 146.588999 93.045162)
(xy 146.217033 93.044838) (xy 145.873257 93.186883) (xy 145.610008 93.449673) (xy 145.467362 93.793201) (xy 145.467038 94.165167)
(xy 125.145 94.165167) (xy 125.145 92.125) (xy 173.782198 92.125)
)
)
) )
) )

View file

@ -45,24 +45,24 @@
*/ */
const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
.USBSpecification = VERSION_BCD(1,1,0), .USBSpecification = VERSION_BCD(1,1,0),
.Class = USB_CSCP_IADDeviceClass, .Class = USB_CSCP_IADDeviceClass,
.SubClass = USB_CSCP_IADDeviceSubclass, .SubClass = USB_CSCP_IADDeviceSubclass,
.Protocol = USB_CSCP_IADDeviceProtocol, .Protocol = USB_CSCP_IADDeviceProtocol,
.Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
.VendorID = 0x03EB, .VendorID = 0x03EB,
.ProductID = 0x204E, .ProductID = 0x204E,
.ReleaseNumber = VERSION_BCD(0,0,1), .ReleaseNumber = VERSION_BCD(0,0,1),
.ManufacturerStrIndex = STRING_ID_Manufacturer, .ManufacturerStrIndex = STRING_ID_Manufacturer,
.ProductStrIndex = STRING_ID_Product, .ProductStrIndex = STRING_ID_Product,
.SerialNumStrIndex = USE_INTERNAL_SERIAL, .SerialNumStrIndex = USE_INTERNAL_SERIAL,
.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
}; };
/** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage /** Configuration descriptor structure. This descriptor, located in FLASH memory, describes the usage
@ -72,222 +72,222 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
*/ */
const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
{ {
.Config = .Config =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
.TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
.TotalInterfaces = 4, .TotalInterfaces = 4,
.ConfigurationNumber = 1, .ConfigurationNumber = 1,
.ConfigurationStrIndex = NO_DESCRIPTOR, .ConfigurationStrIndex = NO_DESCRIPTOR,
.ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED), .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_SELFPOWERED),
.MaxPowerConsumption = USB_CONFIG_POWER_MA(100) .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
}, },
.CDC1_IAD = .CDC1_IAD =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
.FirstInterfaceIndex = INTERFACE_ID_CDC1_CCI, .FirstInterfaceIndex = INTERFACE_ID_CDC1_CCI,
.TotalInterfaces = 2, .TotalInterfaces = 2,
.Class = CDC_CSCP_CDCClass, .Class = CDC_CSCP_CDCClass,
.SubClass = CDC_CSCP_ACMSubclass, .SubClass = CDC_CSCP_ACMSubclass,
.Protocol = CDC_CSCP_ATCommandProtocol, .Protocol = CDC_CSCP_ATCommandProtocol,
.IADStrIndex = NO_DESCRIPTOR .IADStrIndex = NO_DESCRIPTOR
}, },
.CDC1_CCI_Interface = .CDC1_CCI_Interface =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
.InterfaceNumber = INTERFACE_ID_CDC1_CCI, .InterfaceNumber = INTERFACE_ID_CDC1_CCI,
.AlternateSetting = 0, .AlternateSetting = 0,
.TotalEndpoints = 1, .TotalEndpoints = 1,
.Class = CDC_CSCP_CDCClass, .Class = CDC_CSCP_CDCClass,
.SubClass = CDC_CSCP_ACMSubclass, .SubClass = CDC_CSCP_ACMSubclass,
.Protocol = CDC_CSCP_ATCommandProtocol, .Protocol = CDC_CSCP_ATCommandProtocol,
.InterfaceStrIndex = NO_DESCRIPTOR .InterfaceStrIndex = NO_DESCRIPTOR
}, },
.CDC1_Functional_Header = .CDC1_Functional_Header =
{ {
.Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
.Subtype = CDC_DSUBTYPE_CSInterface_Header, .Subtype = CDC_DSUBTYPE_CSInterface_Header,
.CDCSpecification = VERSION_BCD(1,1,0), .CDCSpecification = VERSION_BCD(1,1,0),
}, },
.CDC1_Functional_ACM = .CDC1_Functional_ACM =
{ {
.Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
.Subtype = CDC_DSUBTYPE_CSInterface_ACM, .Subtype = CDC_DSUBTYPE_CSInterface_ACM,
.Capabilities = 0x06, .Capabilities = 0x06,
}, },
.CDC1_Functional_Union = .CDC1_Functional_Union =
{ {
.Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
.Subtype = CDC_DSUBTYPE_CSInterface_Union, .Subtype = CDC_DSUBTYPE_CSInterface_Union,
.MasterInterfaceNumber = INTERFACE_ID_CDC1_CCI, .MasterInterfaceNumber = INTERFACE_ID_CDC1_CCI,
.SlaveInterfaceNumber = INTERFACE_ID_CDC1_DCI, .SlaveInterfaceNumber = INTERFACE_ID_CDC1_DCI,
}, },
.CDC1_ManagementEndpoint = .CDC1_ManagementEndpoint =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
.EndpointAddress = CDC1_NOTIFICATION_EPADDR, .EndpointAddress = CDC1_NOTIFICATION_EPADDR,
.Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize = CDC_NOTIFICATION_EPSIZE, .EndpointSize = CDC_NOTIFICATION_EPSIZE,
.PollingIntervalMS = 0xFF .PollingIntervalMS = 0xFF
}, },
.CDC1_DCI_Interface = .CDC1_DCI_Interface =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
.InterfaceNumber = INTERFACE_ID_CDC1_DCI, .InterfaceNumber = INTERFACE_ID_CDC1_DCI,
.AlternateSetting = 0, .AlternateSetting = 0,
.TotalEndpoints = 2, .TotalEndpoints = 2,
.Class = CDC_CSCP_CDCDataClass, .Class = CDC_CSCP_CDCDataClass,
.SubClass = CDC_CSCP_NoDataSubclass, .SubClass = CDC_CSCP_NoDataSubclass,
.Protocol = CDC_CSCP_NoDataProtocol, .Protocol = CDC_CSCP_NoDataProtocol,
.InterfaceStrIndex = NO_DESCRIPTOR .InterfaceStrIndex = NO_DESCRIPTOR
}, },
.CDC1_DataOutEndpoint = .CDC1_DataOutEndpoint =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
.EndpointAddress = CDC1_RX_EPADDR, .EndpointAddress = CDC1_RX_EPADDR,
.Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize = CDC_TXRX_EPSIZE, .EndpointSize = CDC_TXRX_EPSIZE,
.PollingIntervalMS = 0x05 .PollingIntervalMS = 0x05
}, },
.CDC1_DataInEndpoint = .CDC1_DataInEndpoint =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
.EndpointAddress = CDC1_TX_EPADDR, .EndpointAddress = CDC1_TX_EPADDR,
.Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize = CDC_TXRX_EPSIZE, .EndpointSize = CDC_TXRX_EPSIZE,
.PollingIntervalMS = 0x05 .PollingIntervalMS = 0x05
}, },
.CDC2_IAD = .CDC2_IAD =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
.FirstInterfaceIndex = INTERFACE_ID_CDC2_CCI, .FirstInterfaceIndex = INTERFACE_ID_CDC2_CCI,
.TotalInterfaces = 2, .TotalInterfaces = 2,
.Class = CDC_CSCP_CDCClass, .Class = CDC_CSCP_CDCClass,
.SubClass = CDC_CSCP_ACMSubclass, .SubClass = CDC_CSCP_ACMSubclass,
.Protocol = CDC_CSCP_ATCommandProtocol, .Protocol = CDC_CSCP_ATCommandProtocol,
.IADStrIndex = NO_DESCRIPTOR .IADStrIndex = NO_DESCRIPTOR
}, },
.CDC2_CCI_Interface = .CDC2_CCI_Interface =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
.InterfaceNumber = INTERFACE_ID_CDC2_CCI, .InterfaceNumber = INTERFACE_ID_CDC2_CCI,
.AlternateSetting = 0, .AlternateSetting = 0,
.TotalEndpoints = 1, .TotalEndpoints = 1,
.Class = CDC_CSCP_CDCClass, .Class = CDC_CSCP_CDCClass,
.SubClass = CDC_CSCP_ACMSubclass, .SubClass = CDC_CSCP_ACMSubclass,
.Protocol = CDC_CSCP_ATCommandProtocol, .Protocol = CDC_CSCP_ATCommandProtocol,
.InterfaceStrIndex = NO_DESCRIPTOR .InterfaceStrIndex = NO_DESCRIPTOR
}, },
.CDC2_Functional_Header = .CDC2_Functional_Header =
{ {
.Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface}, .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
.Subtype = CDC_DSUBTYPE_CSInterface_Header, .Subtype = CDC_DSUBTYPE_CSInterface_Header,
.CDCSpecification = VERSION_BCD(1,1,0), .CDCSpecification = VERSION_BCD(1,1,0),
}, },
.CDC2_Functional_ACM = .CDC2_Functional_ACM =
{ {
.Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
.Subtype = CDC_DSUBTYPE_CSInterface_ACM, .Subtype = CDC_DSUBTYPE_CSInterface_ACM,
.Capabilities = 0x06, .Capabilities = 0x06,
}, },
.CDC2_Functional_Union = .CDC2_Functional_Union =
{ {
.Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
.Subtype = CDC_DSUBTYPE_CSInterface_Union, .Subtype = CDC_DSUBTYPE_CSInterface_Union,
.MasterInterfaceNumber = INTERFACE_ID_CDC2_CCI, .MasterInterfaceNumber = INTERFACE_ID_CDC2_CCI,
.SlaveInterfaceNumber = INTERFACE_ID_CDC2_DCI, .SlaveInterfaceNumber = INTERFACE_ID_CDC2_DCI,
}, },
.CDC2_ManagementEndpoint = .CDC2_ManagementEndpoint =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
.EndpointAddress = CDC2_NOTIFICATION_EPADDR, .EndpointAddress = CDC2_NOTIFICATION_EPADDR,
.Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize = CDC_NOTIFICATION_EPSIZE, .EndpointSize = CDC_NOTIFICATION_EPSIZE,
.PollingIntervalMS = 0xFF .PollingIntervalMS = 0xFF
}, },
.CDC2_DCI_Interface = .CDC2_DCI_Interface =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
.InterfaceNumber = INTERFACE_ID_CDC2_DCI, .InterfaceNumber = INTERFACE_ID_CDC2_DCI,
.AlternateSetting = 0, .AlternateSetting = 0,
.TotalEndpoints = 2, .TotalEndpoints = 2,
.Class = CDC_CSCP_CDCDataClass, .Class = CDC_CSCP_CDCDataClass,
.SubClass = CDC_CSCP_NoDataSubclass, .SubClass = CDC_CSCP_NoDataSubclass,
.Protocol = CDC_CSCP_NoDataProtocol, .Protocol = CDC_CSCP_NoDataProtocol,
.InterfaceStrIndex = NO_DESCRIPTOR .InterfaceStrIndex = NO_DESCRIPTOR
}, },
.CDC2_DataOutEndpoint = .CDC2_DataOutEndpoint =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
.EndpointAddress = CDC2_RX_EPADDR, .EndpointAddress = CDC2_RX_EPADDR,
.Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize = CDC_TXRX_EPSIZE, .EndpointSize = CDC_TXRX_EPSIZE,
.PollingIntervalMS = 0x05 .PollingIntervalMS = 0x05
}, },
.CDC2_DataInEndpoint = .CDC2_DataInEndpoint =
{ {
.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
.EndpointAddress = CDC2_TX_EPADDR, .EndpointAddress = CDC2_TX_EPADDR,
.Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
.EndpointSize = CDC_TXRX_EPSIZE, .EndpointSize = CDC_TXRX_EPSIZE,
.PollingIntervalMS = 0x05 .PollingIntervalMS = 0x05
} }
}; };
/** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests /** Language descriptor structure. This descriptor, located in FLASH memory, is returned when the host requests
@ -318,43 +318,43 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint16_t wIndex, const uint16_t wIndex,
const void** const DescriptorAddress) const void** const DescriptorAddress)
{ {
const uint8_t DescriptorType = (wValue >> 8); const uint8_t DescriptorType = (wValue >> 8);
const uint8_t DescriptorNumber = (wValue & 0xFF); const uint8_t DescriptorNumber = (wValue & 0xFF);
const void* Address = NULL; const void* Address = NULL;
uint16_t Size = NO_DESCRIPTOR; uint16_t Size = NO_DESCRIPTOR;
switch (DescriptorType) switch (DescriptorType)
{ {
case DTYPE_Device: case DTYPE_Device:
Address = &DeviceDescriptor; Address = &DeviceDescriptor;
Size = sizeof(USB_Descriptor_Device_t); Size = sizeof(USB_Descriptor_Device_t);
break; break;
case DTYPE_Configuration: case DTYPE_Configuration:
Address = &ConfigurationDescriptor; Address = &ConfigurationDescriptor;
Size = sizeof(USB_Descriptor_Configuration_t); Size = sizeof(USB_Descriptor_Configuration_t);
break; break;
case DTYPE_String: case DTYPE_String:
switch (DescriptorNumber) switch (DescriptorNumber)
{ {
case STRING_ID_Language: case STRING_ID_Language:
Address = &LanguageString; Address = &LanguageString;
Size = pgm_read_byte(&LanguageString.Header.Size); Size = pgm_read_byte(&LanguageString.Header.Size);
break; break;
case STRING_ID_Manufacturer: case STRING_ID_Manufacturer:
Address = &ManufacturerString; Address = &ManufacturerString;
Size = pgm_read_byte(&ManufacturerString.Header.Size); Size = pgm_read_byte(&ManufacturerString.Header.Size);
break; break;
case STRING_ID_Product: case STRING_ID_Product:
Address = &ProductString; Address = &ProductString;
Size = pgm_read_byte(&ProductString.Header.Size); Size = pgm_read_byte(&ProductString.Header.Size);
break; break;
} }
break; break;
} }
*DescriptorAddress = Address; *DescriptorAddress = Address;
return Size; return Size;
} }

View file

@ -36,100 +36,100 @@
#ifndef _DESCRIPTORS_H_ #ifndef _DESCRIPTORS_H_
#define _DESCRIPTORS_H_ #define _DESCRIPTORS_H_
/* Includes: */ /* Includes: */
#include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/USB.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
/* Macros: */ /* Macros: */
/** Endpoint address of the first CDC interface's device-to-host data IN endpoint. */ /** Endpoint address of the first CDC interface's device-to-host data IN endpoint. */
#define CDC1_TX_EPADDR (ENDPOINT_DIR_IN | 1) #define CDC1_TX_EPADDR (ENDPOINT_DIR_IN | 1)
/** Endpoint address of the first CDC interface's host-to-device data OUT endpoint. */ /** Endpoint address of the first CDC interface's host-to-device data OUT endpoint. */
#define CDC1_RX_EPADDR (ENDPOINT_DIR_OUT | 2) #define CDC1_RX_EPADDR (ENDPOINT_DIR_OUT | 2)
/** Endpoint address of the first CDC interface's device-to-host notification IN endpoint. */ /** Endpoint address of the first CDC interface's device-to-host notification IN endpoint. */
#define CDC1_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 3) #define CDC1_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 3)
/** Endpoint address of the second CDC interface's device-to-host data IN endpoint. */ /** Endpoint address of the second CDC interface's device-to-host data IN endpoint. */
#define CDC2_TX_EPADDR (ENDPOINT_DIR_IN | 4) #define CDC2_TX_EPADDR (ENDPOINT_DIR_IN | 4)
/** Endpoint address of the second CDC interface's host-to-device data OUT endpoint. */ /** Endpoint address of the second CDC interface's host-to-device data OUT endpoint. */
#define CDC2_RX_EPADDR (ENDPOINT_DIR_OUT | 5) #define CDC2_RX_EPADDR (ENDPOINT_DIR_OUT | 5)
/** Endpoint address of the second CDC interface's device-to-host notification IN endpoint. */ /** Endpoint address of the second CDC interface's device-to-host notification IN endpoint. */
#define CDC2_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 6) #define CDC2_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 6)
/** Size in bytes of the CDC device-to-host notification IN endpoints. */ /** Size in bytes of the CDC device-to-host notification IN endpoints. */
#define CDC_NOTIFICATION_EPSIZE 8 #define CDC_NOTIFICATION_EPSIZE 8
/** Size in bytes of the CDC data IN and OUT endpoints. */ /** Size in bytes of the CDC data IN and OUT endpoints. */
#define CDC_TXRX_EPSIZE 16 #define CDC_TXRX_EPSIZE 16
/* Type Defines: */ /* Type Defines: */
/** Type define for the device configuration descriptor structure. This must be defined in the /** Type define for the device configuration descriptor structure. This must be defined in the
* application code, as the configuration descriptor contains several sub-descriptors which * application code, as the configuration descriptor contains several sub-descriptors which
* vary between devices, and which describe the device's usage to the host. * vary between devices, and which describe the device's usage to the host.
*/ */
typedef struct typedef struct
{ {
USB_Descriptor_Configuration_Header_t Config; USB_Descriptor_Configuration_Header_t Config;
// First CDC Control Interface // First CDC Control Interface
USB_Descriptor_Interface_Association_t CDC1_IAD; USB_Descriptor_Interface_Association_t CDC1_IAD;
USB_Descriptor_Interface_t CDC1_CCI_Interface; USB_Descriptor_Interface_t CDC1_CCI_Interface;
USB_CDC_Descriptor_FunctionalHeader_t CDC1_Functional_Header; USB_CDC_Descriptor_FunctionalHeader_t CDC1_Functional_Header;
USB_CDC_Descriptor_FunctionalACM_t CDC1_Functional_ACM; USB_CDC_Descriptor_FunctionalACM_t CDC1_Functional_ACM;
USB_CDC_Descriptor_FunctionalUnion_t CDC1_Functional_Union; USB_CDC_Descriptor_FunctionalUnion_t CDC1_Functional_Union;
USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint; USB_Descriptor_Endpoint_t CDC1_ManagementEndpoint;
// First CDC Data Interface // First CDC Data Interface
USB_Descriptor_Interface_t CDC1_DCI_Interface; USB_Descriptor_Interface_t CDC1_DCI_Interface;
USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint; USB_Descriptor_Endpoint_t CDC1_DataOutEndpoint;
USB_Descriptor_Endpoint_t CDC1_DataInEndpoint; USB_Descriptor_Endpoint_t CDC1_DataInEndpoint;
// Second CDC Control Interface // Second CDC Control Interface
USB_Descriptor_Interface_Association_t CDC2_IAD; USB_Descriptor_Interface_Association_t CDC2_IAD;
USB_Descriptor_Interface_t CDC2_CCI_Interface; USB_Descriptor_Interface_t CDC2_CCI_Interface;
USB_CDC_Descriptor_FunctionalHeader_t CDC2_Functional_Header; USB_CDC_Descriptor_FunctionalHeader_t CDC2_Functional_Header;
USB_CDC_Descriptor_FunctionalACM_t CDC2_Functional_ACM; USB_CDC_Descriptor_FunctionalACM_t CDC2_Functional_ACM;
USB_CDC_Descriptor_FunctionalUnion_t CDC2_Functional_Union; USB_CDC_Descriptor_FunctionalUnion_t CDC2_Functional_Union;
USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint; USB_Descriptor_Endpoint_t CDC2_ManagementEndpoint;
// Second CDC Data Interface // Second CDC Data Interface
USB_Descriptor_Interface_t CDC2_DCI_Interface; USB_Descriptor_Interface_t CDC2_DCI_Interface;
USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint; USB_Descriptor_Endpoint_t CDC2_DataOutEndpoint;
USB_Descriptor_Endpoint_t CDC2_DataInEndpoint; USB_Descriptor_Endpoint_t CDC2_DataInEndpoint;
} USB_Descriptor_Configuration_t; } USB_Descriptor_Configuration_t;
/** Enum for the device interface descriptor IDs within the device. Each interface descriptor /** Enum for the device interface descriptor IDs within the device. Each interface descriptor
* should have a unique ID index associated with it, which can be used to refer to the * should have a unique ID index associated with it, which can be used to refer to the
* interface from other descriptors. * interface from other descriptors.
*/ */
enum InterfaceDescriptors_t enum InterfaceDescriptors_t
{ {
INTERFACE_ID_CDC1_CCI = 0, /**< CDC1 CCI interface descriptor ID */ INTERFACE_ID_CDC1_CCI = 0, /**< CDC1 CCI interface descriptor ID */
INTERFACE_ID_CDC1_DCI = 1, /**< CDC1 DCI interface descriptor ID */ INTERFACE_ID_CDC1_DCI = 1, /**< CDC1 DCI interface descriptor ID */
INTERFACE_ID_CDC2_CCI = 2, /**< CDC2 CCI interface descriptor ID */ INTERFACE_ID_CDC2_CCI = 2, /**< CDC2 CCI interface descriptor ID */
INTERFACE_ID_CDC2_DCI = 3, /**< CDC2 DCI interface descriptor ID */ INTERFACE_ID_CDC2_DCI = 3, /**< CDC2 DCI interface descriptor ID */
}; };
/** Enum for the device string descriptor IDs within the device. Each string descriptor should /** Enum for the device string descriptor IDs within the device. Each string descriptor should
* have a unique ID index associated with it, which can be used to refer to the string from * have a unique ID index associated with it, which can be used to refer to the string from
* other descriptors. * other descriptors.
*/ */
enum StringDescriptors_t enum StringDescriptors_t
{ {
STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */
STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */
STRING_ID_Product = 2, /**< Product string ID */ STRING_ID_Product = 2, /**< Product string ID */
}; };
/* Function Prototypes: */ /* Function Prototypes: */
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
const uint16_t wIndex, const uint16_t wIndex,
const void** const DescriptorAddress) const void** const DescriptorAddress)
ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
#endif #endif

View file

@ -68,51 +68,51 @@ static CDC_LineEncoding_t LineEncoding2 = { .BaudRateBPS = 0,
*/ */
int main(void) int main(void)
{ {
SetupHardware(); SetupHardware();
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
SET_ERR_MASK(ERRMASK_USB_NOTREADY); SET_ERR_MASK(ERRMASK_USB_NOTREADY);
GlobalInterruptEnable(); GlobalInterruptEnable();
for (;;) for (;;)
{ {
CDC1_Task(); CDC1_Task();
CDC2_Task(); CDC2_Task();
USB_USBTask(); USB_USBTask();
} }
} }
/** Configures the board hardware and chip peripherals for the demo's functionality. */ /** Configures the board hardware and chip peripherals for the demo's functionality. */
void SetupHardware(void) void SetupHardware(void)
{ {
#if (ARCH == ARCH_AVR8) #if (ARCH == ARCH_AVR8)
/* Disable watchdog if enabled by bootloader/fuses */ /* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF); MCUSR &= ~(1 << WDRF);
wdt_disable(); wdt_disable();
/* Disable clock division */ /* Disable clock division */
clock_prescale_set(clock_div_1); clock_prescale_set(clock_div_1);
#elif (ARCH == ARCH_XMEGA) #elif (ARCH == ARCH_XMEGA)
/* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */ /* Start the PLL to multiply the 2MHz RC oscillator to 32MHz and switch the CPU core to run from it */
XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU); XMEGACLK_StartPLL(CLOCK_SRC_INT_RC2MHZ, 2000000, F_CPU);
XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL); XMEGACLK_SetCPUClockSource(CLOCK_SRC_PLL);
/* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */ /* Start the 32MHz internal RC oscillator and start the DFLL to increase it to 48MHz using the USB SOF as a reference */
XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ); XMEGACLK_StartInternalOscillator(CLOCK_SRC_INT_RC32MHZ);
XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB); XMEGACLK_StartDFLL(CLOCK_SRC_INT_RC32MHZ, DFLL_REF_INT_USBSOF, F_USB);
PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm; PMIC.CTRL = PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;
#endif #endif
/* UART Hardware Initialization */ /* UART Hardware Initialization */
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
/* USB Hardware Initialization */ /* USB Hardware Initialization */
USB_Init(); USB_Init();
} }
/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and /** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs and
@ -120,8 +120,8 @@ void SetupHardware(void)
*/ */
void EVENT_USB_Device_Connect(void) void EVENT_USB_Device_Connect(void)
{ {
/* Indicate USB enumerating */ /* Indicate USB enumerating */
SET_ERR_MASK(ERRMASK_USB_ENUMERATING); SET_ERR_MASK(ERRMASK_USB_ENUMERATING);
} }
/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via /** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via
@ -129,8 +129,8 @@ void EVENT_USB_Device_Connect(void)
*/ */
void EVENT_USB_Device_Disconnect(void) void EVENT_USB_Device_Disconnect(void)
{ {
/* Indicate USB not ready */ /* Indicate USB not ready */
SET_ERR_MASK(ERRMASK_USB_NOTREADY); SET_ERR_MASK(ERRMASK_USB_NOTREADY);
} }
/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration /** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration
@ -138,24 +138,24 @@ void EVENT_USB_Device_Disconnect(void)
*/ */
void EVENT_USB_Device_ConfigurationChanged(void) void EVENT_USB_Device_ConfigurationChanged(void)
{ {
bool ConfigSuccess = true; bool ConfigSuccess = true;
/* Setup first CDC Interface's Endpoints */ /* Setup first CDC Interface's Endpoints */
ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1);
ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1);
ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1); ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC1_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1);
/* Setup second CDC Interface's Endpoints */ /* Setup second CDC Interface's Endpoints */
ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1);
ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1); ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1);
ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1); ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC2_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, 1);
/* Reset line encoding baud rates so that the host knows to send new values */ /* Reset line encoding baud rates so that the host knows to send new values */
LineEncoding1.BaudRateBPS = 0; LineEncoding1.BaudRateBPS = 0;
LineEncoding2.BaudRateBPS = 0; LineEncoding2.BaudRateBPS = 0;
/* Indicate endpoint configuration success or failure */ /* Indicate endpoint configuration success or failure */
SET_ERR_MASK(ConfigSuccess ? ERRMASK_USB_READY : ERRMASK_USB_ERROR); SET_ERR_MASK(ConfigSuccess ? ERRMASK_USB_READY : ERRMASK_USB_ERROR);
} }
/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to /** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
@ -164,43 +164,43 @@ void EVENT_USB_Device_ConfigurationChanged(void)
*/ */
void EVENT_USB_Device_ControlRequest(void) void EVENT_USB_Device_ControlRequest(void)
{ {
/* Determine which interface's Line Coding data is being set from the wIndex parameter */ /* Determine which interface's Line Coding data is being set from the wIndex parameter */
void* LineEncodingData = (USB_ControlRequest.wIndex == 0) ? &LineEncoding1 : &LineEncoding2; void* LineEncodingData = (USB_ControlRequest.wIndex == 0) ? &LineEncoding1 : &LineEncoding2;
/* Process CDC specific control requests */ /* Process CDC specific control requests */
switch (USB_ControlRequest.bRequest) switch (USB_ControlRequest.bRequest)
{ {
case CDC_REQ_GetLineEncoding: case CDC_REQ_GetLineEncoding:
if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
{ {
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Write the line coding data to the control endpoint */ /* Write the line coding data to the control endpoint */
Endpoint_Write_Control_Stream_LE(LineEncodingData, sizeof(CDC_LineEncoding_t)); Endpoint_Write_Control_Stream_LE(LineEncodingData, sizeof(CDC_LineEncoding_t));
Endpoint_ClearOUT(); Endpoint_ClearOUT();
} }
break; break;
case CDC_REQ_SetLineEncoding: case CDC_REQ_SetLineEncoding:
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
{ {
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
/* Read the line coding data in from the host into the global struct */ /* Read the line coding data in from the host into the global struct */
Endpoint_Read_Control_Stream_LE(LineEncodingData, sizeof(CDC_LineEncoding_t)); Endpoint_Read_Control_Stream_LE(LineEncodingData, sizeof(CDC_LineEncoding_t));
Endpoint_ClearIN(); Endpoint_ClearIN();
} }
break; break;
case CDC_REQ_SetControlLineState: case CDC_REQ_SetControlLineState:
if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
{ {
Endpoint_ClearSETUP(); Endpoint_ClearSETUP();
Endpoint_ClearStatusStage(); Endpoint_ClearStatusStage();
} }
break; break;
} }
} }
/** Function to manage CDC data transmission and reception to and from the host for the first CDC interface, /** Function to manage CDC data transmission and reception to and from the host for the first CDC interface,
@ -208,33 +208,33 @@ void EVENT_USB_Device_ControlRequest(void)
*/ */
void CDC1_Task(void) void CDC1_Task(void)
{ {
char* ReportString = NULL; char* ReportString = NULL;
static bool ActionSent = false; static bool ActionSent = false;
/* Device must be connected and configured for the task to run */ /* Device must be connected and configured for the task to run */
if (USB_DeviceState != DEVICE_STATE_Configured) if (USB_DeviceState != DEVICE_STATE_Configured)
return; return;
//=========================================================================== //===========================================================================
/* Select the Serial Rx Endpoint */ /* Select the Serial Rx Endpoint */
Endpoint_SelectEndpoint(CDC1_RX_EPADDR); Endpoint_SelectEndpoint(CDC1_RX_EPADDR);
if (Endpoint_IsOUTReceived()) if (Endpoint_IsOUTReceived())
{ {
// TODO disable this line if data should be received // TODO disable this line if data should be received
Endpoint_ClearOUT(); // Throw away any received data from the host at this point Endpoint_ClearOUT(); // Throw away any received data from the host at this point
/* Create a temp buffer big enough to hold the incoming endpoint packet */ /* Create a temp buffer big enough to hold the incoming endpoint packet */
uint8_t Buffer[Endpoint_BytesInEndpoint()]; uint8_t Buffer[Endpoint_BytesInEndpoint()];
/* Remember how large the incoming packet is */ /* Remember how large the incoming packet is */
uint16_t DataLength = Endpoint_BytesInEndpoint(); uint16_t DataLength = Endpoint_BytesInEndpoint();
/* Read in the incoming packet into the buffer */ /* Read in the incoming packet into the buffer */
Endpoint_Read_Stream_LE(&Buffer, DataLength, NULL); Endpoint_Read_Stream_LE(&Buffer, DataLength, NULL);
/* Finalize the stream transfer to send the last packet */ /* Finalize the stream transfer to send the last packet */
Endpoint_ClearOUT(); Endpoint_ClearOUT();
// TODO Read the data from the host // TODO Read the data from the host
// process the received data and descide to do an action // process the received data and descide to do an action
@ -246,30 +246,30 @@ void CDC1_Task(void)
} }
//=========================================================================== //===========================================================================
/* Determine if data/answeres should be sent to the host /* Determine if data/answeres should be sent to the host
* the previous RX section should be clarify that behaviour. * the previous RX section should be clarify that behaviour.
*/ */
/* Flag management - Only allow one string to be sent per action */ /* Flag management - Only allow one string to be sent per action */
if ((ReportString != NULL) && (ActionSent == false) && LineEncoding1.BaudRateBPS) if ((ReportString != NULL) && (ActionSent == false) && LineEncoding1.BaudRateBPS)
{ {
ActionSent = true; ActionSent = true;
/* Select the Serial Tx Endpoint */ /* Select the Serial Tx Endpoint */
Endpoint_SelectEndpoint(CDC1_TX_EPADDR); Endpoint_SelectEndpoint(CDC1_TX_EPADDR);
/* Write the String to the Endpoint */ /* Write the String to the Endpoint */
Endpoint_Write_Stream_LE(ReportString, strlen(ReportString), NULL); Endpoint_Write_Stream_LE(ReportString, strlen(ReportString), NULL);
/* Finalize the stream transfer to send the last packet */ /* Finalize the stream transfer to send the last packet */
Endpoint_ClearIN(); Endpoint_ClearIN();
/* Wait until the endpoint is ready for another packet */ /* Wait until the endpoint is ready for another packet */
Endpoint_WaitUntilReady(); Endpoint_WaitUntilReady();
/* Send an empty packet to ensure that the host does not buffer data sent to it */ /* Send an empty packet to ensure that the host does not buffer data sent to it */
Endpoint_ClearIN(); Endpoint_ClearIN();
} }
} }
@ -278,28 +278,28 @@ void CDC1_Task(void)
*/ */
void CDC2_Task(void) void CDC2_Task(void)
{ {
/* Device must be connected and configured for the task to run */ /* Device must be connected and configured for the task to run */
if (USB_DeviceState != DEVICE_STATE_Configured) if (USB_DeviceState != DEVICE_STATE_Configured)
return; return;
//=========================================================================== //===========================================================================
/* Select the Serial Rx Endpoint */ /* Select the Serial Rx Endpoint */
Endpoint_SelectEndpoint(CDC2_RX_EPADDR); Endpoint_SelectEndpoint(CDC2_RX_EPADDR);
/* Check to see if any data has been received */ /* Check to see if any data has been received */
if (Endpoint_IsOUTReceived()) if (Endpoint_IsOUTReceived())
{ {
/* Create a temp buffer big enough to hold the incoming endpoint packet */ /* Create a temp buffer big enough to hold the incoming endpoint packet */
uint8_t Buffer[Endpoint_BytesInEndpoint()]; uint8_t Buffer[Endpoint_BytesInEndpoint()];
/* Remember how large the incoming packet is */ /* Remember how large the incoming packet is */
uint16_t DataLength = Endpoint_BytesInEndpoint(); uint16_t DataLength = Endpoint_BytesInEndpoint();
/* Read in the incoming packet into the buffer */ /* Read in the incoming packet into the buffer */
Endpoint_Read_Stream_LE(&Buffer, DataLength, NULL); Endpoint_Read_Stream_LE(&Buffer, DataLength, NULL);
/* Finalize the stream transfer to send the last packet */ /* Finalize the stream transfer to send the last packet */
Endpoint_ClearOUT(); Endpoint_ClearOUT();
// TODO at this point send the data to the USART // TODO at this point send the data to the USART
// Send USART &Buffer // Send USART &Buffer
@ -307,7 +307,7 @@ void CDC2_Task(void)
{ {
uart_putc(Buffer[i]); uart_putc(Buffer[i]);
} }
} }
//=========================================================================== //===========================================================================
uint8_t outBuffer[OUTPUT_BUFFER_SIZE]; uint8_t outBuffer[OUTPUT_BUFFER_SIZE];
@ -315,7 +315,7 @@ void CDC2_Task(void)
// Fill &Buffer with USART data or send the USART input buffer direct // Fill &Buffer with USART data or send the USART input buffer direct
uint16_t cnt = 0; uint16_t cnt = 0;
uint8_t c = uart_getc(); uint8_t c = uart_getc();
while (c != UART_NO_DATA && cnt < OUTPUT_BUFFER_SIZE) while (!(c & UART_NO_DATA) && cnt < OUTPUT_BUFFER_SIZE)
{ {
outBuffer[cnt] = c; outBuffer[cnt] = c;
c = uart_getc(); c = uart_getc();

View file

@ -36,53 +36,53 @@
#ifndef _DUAL_VIRTUALSERIAL_H_ #ifndef _DUAL_VIRTUALSERIAL_H_
#define _DUAL_VIRTUALSERIAL_H_ #define _DUAL_VIRTUALSERIAL_H_
/* Includes: */ /* Includes: */
#include <avr/io.h> #include <avr/io.h>
#include <avr/wdt.h> #include <avr/wdt.h>
#include <avr/power.h> #include <avr/power.h>
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <string.h> #include <string.h>
#include "Descriptors.h" #include "Descriptors.h"
#include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/USB.h>
#include <LUFA/Platform/Platform.h> #include <LUFA/Platform/Platform.h>
uint8_t error_mask = 0x00; uint8_t error_mask = 0x00;
/* UART definitions: */ /* UART definitions: */
#define UART_BAUD_RATE 115200 #define UART_BAUD_RATE 115200
#define OUTPUT_BUFFER_SIZE 100 #define OUTPUT_BUFFER_SIZE 100
#include "uart/uart.h" // include after the definition #include "uart/uart.h" // include after the definition
/* Macros: */ /* Macros: */
#define SET_ERR_MASK(m) error_mask = m #define SET_ERR_MASK(m) error_mask = m
/** Error mask, to indicate that the USB interface is not ready. */ /** Error mask, to indicate that the USB interface is not ready. */
#define ERRMASK_USB_NOTREADY (1 << 0) #define ERRMASK_USB_NOTREADY (1 << 0)
/** Error mask, to indicate that the USB interface is enumerating. */ /** Error mask, to indicate that the USB interface is enumerating. */
#define ERRMASK_USB_ENUMERATING ((1 << 1) | (1 << 2)) #define ERRMASK_USB_ENUMERATING ((1 << 1) | (1 << 2))
/** Error mask, to indicate that the USB interface is ready. */ /** Error mask, to indicate that the USB interface is ready. */
#define ERRMASK_USB_READY ((1 << 1) | (1 << 3)) #define ERRMASK_USB_READY ((1 << 1) | (1 << 3))
/** Error mask, to indicate that an error has occurred in the USB interface. */ /** Error mask, to indicate that an error has occurred in the USB interface. */
#define ERRMASK_USB_ERROR ((1 << 0) | (1 << 2)) #define ERRMASK_USB_ERROR ((1 << 0) | (1 << 2))
/* Function Prototypes: */ /* Function Prototypes: */
void CDC1_Task(void); void CDC1_Task(void);
void CDC2_Task(void); void CDC2_Task(void);
void SetupHardware(void); void SetupHardware(void);
void EVENT_USB_Device_Connect(void); void EVENT_USB_Device_Connect(void);
void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_Disconnect(void);
void EVENT_USB_Device_ConfigurationChanged(void); void EVENT_USB_Device_ConfigurationChanged(void);
void EVENT_USB_Device_ControlRequest(void); void EVENT_USB_Device_ControlRequest(void);
#endif #endif