Compare commits
2 Commits
af4f209026
...
1ce4d74a65
Author | SHA1 | Date | |
---|---|---|---|
1ce4d74a65 | |||
e7556b7ec9 |
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 1,
|
||||
"active_layer": 37,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": false,
|
||||
"hidden_netclasses": [],
|
||||
|
File diff suppressed because it is too large
Load Diff
149
board/Symbol_CC-ShareAlike_CopperTop_Big.kicad_mod
Normal file
149
board/Symbol_CC-ShareAlike_CopperTop_Big.kicad_mod
Normal file
@ -0,0 +1,149 @@
|
||||
(footprint "Symbol_CC-ShareAlike_CopperTop_Big"
|
||||
(version 20240108)
|
||||
(generator "pcbnew")
|
||||
(generator_version "8.0")
|
||||
(layer "F.Cu")
|
||||
(descr "Creative Commons symbol, CC-SA, copper layer, 10mm")
|
||||
(tags "share-alike license graphic")
|
||||
(property "Reference" "REF**"
|
||||
(at 0 -6.5 0)
|
||||
(layer "F.SilkS")
|
||||
(hide yes)
|
||||
(uuid "a49c0903-c5e9-4447-afb9-8f0238ae1ab2")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "Symbol_CC-ShareAlike_CopperTop_Big"
|
||||
(at 0 6.5 0)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "deef8cfb-8120-4aec-8aa1-4863d25f9b8e")
|
||||
(effects
|
||||
(font
|
||||
(size 1 1)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Symbol:Symbol_CC-ShareAlike_CopperTop_Big"
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "b50a4d32-5827-4b35-8141-3c032c0996b8")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "d2bf2ff2-8e87-4610-a6d3-62e18d7fa853")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(at 0 0 0)
|
||||
(unlocked yes)
|
||||
(layer "F.Fab")
|
||||
(hide yes)
|
||||
(uuid "ed3b082c-1a46-4cc1-935d-4e9b01d5fd0f")
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
(thickness 0.15)
|
||||
)
|
||||
)
|
||||
)
|
||||
(attr exclude_from_pos_files exclude_from_bom allow_missing_courtyard)
|
||||
(fp_circle
|
||||
(center 0 0)
|
||||
(end 5 0)
|
||||
(stroke
|
||||
(width 0.8)
|
||||
(type default)
|
||||
)
|
||||
(fill none)
|
||||
(layer "F.SilkS")
|
||||
(uuid "5a9cf86c-ff7e-4655-b229-311827e915f6")
|
||||
)
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy 0.174524 -3.205464) (xy 0.342418 -3.194917) (xy 0.50586 -3.17734) (xy 0.664848 -3.152735) (xy 0.81938 -3.121101)
|
||||
(xy 0.969454 -3.082441) (xy 1.115069 -3.036755) (xy 1.256224 -2.984045) (xy 1.392916 -2.924311) (xy 1.525144 -2.857555)
|
||||
(xy 1.652906 -2.783777) (xy 1.776202 -2.70298) (xy 1.895028 -2.615163) (xy 2.009384 -2.520328) (xy 2.119268 -2.418476)
|
||||
(xy 2.224678 -2.309609) (xy 2.324628 -2.195178) (xy 2.418131 -2.076777) (xy 2.505187 -1.954404) (xy 2.585797 -1.828061)
|
||||
(xy 2.659959 -1.697749) (xy 2.727674 -1.563467) (xy 2.788941 -1.425217) (xy 2.84376 -1.282999) (xy 2.892131 -1.136813)
|
||||
(xy 2.934053 -0.986661) (xy 2.969527 -0.832542) (xy 2.998551 -0.674457) (xy 3.021126 -0.512406) (xy 3.037251 -0.346391)
|
||||
(xy 3.046926 -0.176412) (xy 3.050152 -0.002468) (xy 3.046803 0.166411) (xy 3.036756 0.331688) (xy 3.020014 0.493363)
|
||||
(xy 2.996574 0.651436) (xy 2.966439 0.805907) (xy 2.929609 0.956776) (xy 2.886084 1.104044) (xy 2.835866 1.247711)
|
||||
(xy 2.778953 1.387777) (xy 2.715348 1.524243) (xy 2.64505 1.657109) (xy 2.56806 1.786375) (xy 2.484379 1.912041)
|
||||
(xy 2.394007 2.034108) (xy 2.296945 2.152576) (xy 2.193193 2.267445) (xy 2.083982 2.376985) (xy 1.970819 2.479466)
|
||||
(xy 1.853701 2.574887) (xy 1.732626 2.663247) (xy 1.607593 2.744544) (xy 1.478599 2.818777) (xy 1.345641 2.885946)
|
||||
(xy 1.208718 2.946048) (xy 1.067828 2.999084) (xy 0.922968 3.045052) (xy 0.774136 3.083952) (xy 0.62133 3.11578)
|
||||
(xy 0.464548 3.140538) (xy 0.303787 3.158224) (xy 0.139046 3.168836) (xy -0.029677 3.172373) (xy -0.154278 3.170018)
|
||||
(xy -0.27673 3.162953) (xy -0.397033 3.151177) (xy -0.515186 3.134689) (xy -0.63119 3.11349) (xy -0.745043 3.087577)
|
||||
(xy -0.856746 3.056952) (xy -0.966299 3.021614) (xy -1.0737 2.981561) (xy -1.178951 2.936793) (xy -1.28205 2.887311)
|
||||
(xy -1.382997 2.833112) (xy -1.481793 2.774197) (xy -1.578436 2.710566) (xy -1.672926 2.642217) (xy -1.765264 2.56915)
|
||||
(xy -1.854284 2.491742) (xy -1.938751 2.41037) (xy -2.018665 2.325035) (xy -2.094029 2.235734) (xy -2.164843 2.142468)
|
||||
(xy -2.231107 2.045236) (xy -2.292822 1.944038) (xy -2.34999 1.838873) (xy -2.402611 1.72974) (xy -2.450685 1.61664)
|
||||
(xy -2.494214 1.49957) (xy -2.533199 1.378532) (xy -2.567639 1.253524) (xy -2.597537 1.124546) (xy -2.622893 0.991596)
|
||||
(xy -2.643707 0.854676) (xy -1.151114 0.854676) (xy -1.146647 0.921095) (xy -1.139843 0.985406) (xy -1.130703 1.047609)
|
||||
(xy -1.119226 1.107703) (xy -1.105413 1.165688) (xy -1.089264 1.221565) (xy -1.070778 1.275333) (xy -1.049955 1.326992)
|
||||
(xy -1.026797 1.376543) (xy -1.001301 1.423986) (xy -0.97347 1.46932) (xy -0.943301 1.512545) (xy -0.910797 1.553662)
|
||||
(xy -0.875956 1.59267) (xy -0.838778 1.62957) (xy -0.799264 1.664361) (xy -0.757414 1.697043) (xy -0.713227 1.727617)
|
||||
(xy -0.666704 1.756083) (xy -0.617844 1.78244) (xy -0.566648 1.806688) (xy -0.513115 1.828828) (xy -0.457246 1.848859)
|
||||
(xy -0.399041 1.866782) (xy -0.338499 1.882596) (xy -0.27562 1.896302) (xy -0.210405 1.907899) (xy -0.142854 1.917387)
|
||||
(xy -0.072966 1.924767) (xy -0.000742 1.930038) (xy 0.073819 1.933201) (xy 0.150716 1.934255) (xy 0.227767 1.932146)
|
||||
(xy 0.302929 1.925818) (xy 0.3762 1.915271) (xy 0.447579 1.900507) (xy 0.517064 1.881526) (xy 0.584653 1.858328)
|
||||
(xy 0.650347 1.830914) (xy 0.714143 1.799285) (xy 0.776039 1.76344) (xy 0.836035 1.723382) (xy 0.89413 1.679109)
|
||||
(xy 0.950321 1.630623) (xy 1.004607 1.577925) (xy 1.056988 1.521014) (xy 1.107462 1.459891) (xy 1.156027 1.394558)
|
||||
(xy 1.202215 1.325708) (xy 1.245422 1.254038) (xy 1.285647 1.17955) (xy 1.322891 1.102244) (xy 1.357154 1.022122)
|
||||
(xy 1.388436 0.939185) (xy 1.416737 0.853435) (xy 1.442058 0.764873) (xy 1.4644 0.6735) (xy 1.483761 0.579317)
|
||||
(xy 1.500143 0.482327) (xy 1.513546 0.38253) (xy 1.52397 0.279928) (xy 1.531415 0.174522) (xy 1.535882 0.066314)
|
||||
(xy 1.537371 -0.044696) (xy 1.536006 -0.160693) (xy 1.531911 -0.273172) (xy 1.525087 -0.382131) (xy 1.515534 -0.487572)
|
||||
(xy 1.503253 -0.589497) (xy 1.488244 -0.687905) (xy 1.470508 -0.782797) (xy 1.450045 -0.874175) (xy 1.426857 -0.962039)
|
||||
(xy 1.400943 -1.046389) (xy 1.372304 -1.127228) (xy 1.34094 -1.204555) (xy 1.306853 -1.278371) (xy 1.270043 -1.348677)
|
||||
(xy 1.230509 -1.415475) (xy 1.188254 -1.478764) (xy 1.143374 -1.538344) (xy 1.096105 -1.594082) (xy 1.046445 -1.645978)
|
||||
(xy 0.994393 -1.694031) (xy 0.939947 -1.738242) (xy 0.883105 -1.77861) (xy 0.823866 -1.815134) (xy 0.762228 -1.847815)
|
||||
(xy 0.69819 -1.876652) (xy 0.63175 -1.901645) (xy 0.562906 -1.922794) (xy 0.491656 -1.940098) (xy 0.418 -1.953557)
|
||||
(xy 0.341935 -1.963171) (xy 0.26346 -1.96894) (xy 0.182573 -1.970863) (xy 0.038416 -1.966771) (xy -0.097629 -1.954497)
|
||||
(xy -0.225562 -1.93404) (xy -0.345384 -1.9054) (xy -0.402254 -1.888011) (xy -0.457097 -1.868576)
|
||||
(xy -0.509913 -1.847096) (xy -0.560701 -1.823569) (xy -0.609462 -1.797996) (xy -0.656197 -1.770377)
|
||||
(xy -0.700904 -1.740712) (xy -0.743585 -1.709001) (xy -0.784239 -1.675244) (xy -0.822867 -1.639441)
|
||||
(xy -0.859468 -1.601591) (xy -0.894043 -1.561695) (xy -0.926592 -1.519753) (xy -0.957115 -1.475764)
|
||||
(xy -0.985611 -1.42973) (xy -1.012082 -1.381648) (xy -1.036527 -1.331521) (xy -1.058946 -1.279347)
|
||||
(xy -1.07934 -1.225126) (xy -1.097708 -1.168859) (xy -1.114051 -1.110545) (xy -1.128368 -1.050185)
|
||||
(xy -1.150928 -0.923324) (xy -0.716985 -0.923324) (xy -1.891576 0.251453) (xy -3.066352 -0.923324)
|
||||
(xy -2.60111 -0.923139) (xy -2.577854 -1.057483) (xy -2.550382 -1.187981) (xy -2.518695 -1.314633)
|
||||
(xy -2.482791 -1.437439) (xy -2.44267 -1.5564) (xy -2.398331 -1.671514) (xy -2.349774 -1.782782)
|
||||
(xy -2.296998 -1.890204) (xy -2.240003 -1.993781) (xy -2.178788 -2.093511) (xy -2.113353 -2.189395)
|
||||
(xy -2.043697 -2.281434) (xy -1.969819 -2.369626) (xy -1.891719 -2.453973) (xy -1.809397 -2.534473)
|
||||
(xy -1.722852 -2.611128) (xy -1.633032 -2.683524) (xy -1.540815 -2.75125) (xy -1.4462 -2.814304)
|
||||
(xy -1.349188 -2.872688) (xy -1.249778 -2.926402) (xy -1.147969 -2.975444) (xy -1.04376 -3.019816)
|
||||
(xy -0.937152 -3.059517) (xy -0.828143 -3.094547) (xy -0.716733 -3.124907) (xy -0.602922 -3.150596)
|
||||
(xy -0.486708 -3.171614) (xy -0.368092 -3.187962) (xy -0.247072 -3.199639) (xy -0.123649 -3.206645)
|
||||
(xy 0.002179 -3.20898)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type solid)
|
||||
)
|
||||
(fill solid)
|
||||
(layer "F.SilkS")
|
||||
(uuid "41d5e322-5748-458c-a279-878e83506369")
|
||||
)
|
||||
)
|
@ -1,13 +1,15 @@
|
||||
P CODE 00
|
||||
P UNITS CUST 0
|
||||
P arrayDim N
|
||||
317MS0 VIA MD0157PA00X+060551Y-029982X0315Y0000R000S3
|
||||
317NET-(D78-A) VIA MD0157PA00X+051224Y-020209X0315Y0000R000S3
|
||||
317NET-(U3-QH) VIA MD0157PA00X+052075Y-019748X0315Y0000R000S3
|
||||
317NET-(U3-QG) VIA MD0157PA00X+052094Y-018283X0315Y0000R000S3
|
||||
317USB_BUS VIA MD0157PA00X+045815Y-007589X0315Y0000R000S3
|
||||
317GND VIA MD0157PA00X+043850Y-005904X0315Y0000R000S3
|
||||
317NET-(C5-PAD2) VIA MD0157PA00X+047657Y-007291X0315Y0000R000S3
|
||||
317FLOW VIA MD0157PA00X+042075Y-009862X0315Y0000R000S3
|
||||
317TANK_SENSOR VIA MD0157PA00X+042327Y-010150X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+041118Y-010346X0315Y0000R000S3
|
||||
317BOOT_SEL VIA MD0157PA00X+045268Y-011406X0315Y0000R000S3
|
||||
317NET-(J7-CC2) VIA MD0157PA00X+044890Y-007972X0315Y0000R000S3
|
||||
317USB_BUS VIA MD0157PA00X+044539Y-007606X0315Y0000R000S3
|
||||
317NET-(J7-CC1) VIA MD0157PA00X+046236Y-007630X0315Y0000R000S3
|
||||
317USB_D+ VIA MD0157PA00X+045796Y-007685X0315Y0000R000S3
|
||||
317USB_D- VIA MD0157PA00X+045503Y-007977X0315Y0000R000S3
|
||||
317VBAT VIA MD0157PA00X+076417Y-014941X0315Y0000R000S3
|
||||
317VBAT VIA MD0157PA00X+069921Y-014409X0315Y0000R000S3
|
||||
317VBAT VIA MD0157PA00X+074213Y-042482X0315Y0000R000S3
|
||||
@ -70,10 +72,8 @@ P arrayDim N
|
||||
317G1 VIA MD0157PA00X+049350Y-028287X0315Y0000R000S3
|
||||
317G1 VIA MD0157PA00X+046526Y-025453X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+058169Y-021654X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+051473Y-021677X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+048216Y-017723X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+053071Y-012008X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+043278Y-007992X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+049557Y-013563X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+046539Y-010842X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+062933Y-032776X0315Y0000R000S3
|
||||
@ -84,7 +84,6 @@ P arrayDim N
|
||||
3173_3V VIA MD0157PA00X+048720Y-021555X0315Y0000R000S3
|
||||
3173_3V VIA MD0157PA00X+071720Y-032776X0315Y0000R000S3
|
||||
317TEMP VIA MD0157PA00X+045984Y-015315X0315Y0000R000S3
|
||||
317TEMP VIA MD0157PA00X+041860Y-026398X0315Y0000R000S3
|
||||
317S2 VIA MD0157PA00X+049990Y-025433X0315Y0000R000S3
|
||||
317S2 VIA MD0157PA00X+049990Y-026850X0315Y0000R000S3
|
||||
317S2 VIA MD0157PA00X+065531Y-028268X0315Y0000R000S3
|
||||
@ -96,7 +95,6 @@ P arrayDim N
|
||||
317-(PUMP2-PIN_1) VIA MD0157PA00X+061811Y-017402X0315Y0000R000S3
|
||||
317PUMP_ENABLE VIA MD0157PA00X+041102Y-015591X0315Y0000R000S3
|
||||
317PUMP_ENABLE VIA MD0157PA00X+076959Y-024311X0315Y0000R000S3
|
||||
317TANK_SENSOR VIA MD0157PA00X+042598Y-009843X0315Y0000R000S3
|
||||
317TANK_SENSOR VIA MD0157PA00X+041850Y-036457X0315Y0000R000S3
|
||||
317-(PUMP3-PIN_1) VIA MD0157PA00X+063701Y-017402X0315Y0000R000S3
|
||||
317-(PUMP4-PIN_1) VIA MD0157PA00X+065669Y-017402X0315Y0000R000S3
|
||||
@ -115,7 +113,7 @@ P arrayDim N
|
||||
317G3 VIA MD0157PA00X+050335Y-028287X0315Y0000R000S3
|
||||
317G3 VIA MD0157PA00X+054380Y-025492X0315Y0000R000S3
|
||||
317ESP_RX VIA MD0157PA00X+042638Y-015551X0315Y0000R000S3
|
||||
317ESP_TX VIA MD0157PA00X+042165Y-015591X0315Y0000R000S3
|
||||
317ESP_TX VIA MD0157PA00X+042726Y-015059X0315Y0000R000S3
|
||||
317T-(BOOT1-PAD2) VIA MD0157PA00X+040945Y-017165X0315Y0000R000S3
|
||||
317SDA VIA MD0157PA00X+054291Y-013563X0315Y0000R000S3
|
||||
317SDA VIA MD0157PA00X+055315Y-015945X0315Y0000R000S3
|
||||
@ -128,12 +126,14 @@ P arrayDim N
|
||||
317S4 VIA MD0157PA00X+066516Y-028268X0315Y0000R000S3
|
||||
317S4 VIA MD0157PA00X+057884Y-026831X0315Y0000R000S3
|
||||
317S4 VIA MD0157PA00X+057865Y-025405X0315Y0000R000S3
|
||||
317NET-(D10-K) VIA MD0157PA00X+049764Y-017480X0315Y0000R000S3
|
||||
317NET-(D10-K) VIA MD0157PA00X+052598Y-021811X0315Y0000R000S3
|
||||
317G5 VIA MD0157PA00X+051339Y-028287X0315Y0000R000S3
|
||||
317G5 VIA MD0157PA00X+062343Y-025413X0315Y0000R000S3
|
||||
317NET-(D78-A) VIA MD0157PA00X+052766Y-017579X0315Y0000R000S3
|
||||
317S5 VIA MD0157PA00X+067008Y-028268X0315Y0000R000S3
|
||||
317S5 VIA MD0157PA00X+061791Y-026811X0315Y0000R000S3
|
||||
317S5 VIA MD0157PA00X+061802Y-025406X0315Y0000R000S3
|
||||
317NET-(C5-PAD2) VIA MD0157PA00X+047657Y-007291X0315Y0000R000S3
|
||||
317NET-(C5-PAD2) VIA MD0157PA00X+043238Y-007333X0315Y0000R000S3
|
||||
317S6 VIA MD0157PA00X+065741Y-025396X0315Y0000R000S3
|
||||
317S6 VIA MD0157PA00X+067500Y-028287X0315Y0000R000S3
|
||||
@ -163,15 +163,12 @@ P arrayDim N
|
||||
317PUMP8 VIA MD0157PA00X+071270Y-041388X0315Y0000R000S3
|
||||
317PUMP2 VIA MD0157PA00X+044232Y-018110X0315Y0000R000S3
|
||||
317PUMP2 VIA MD0157PA00X+047638Y-041230X0315Y0000R000S3
|
||||
317NET-(D78-K) VIA MD0157PA00X+052598Y-021181X0315Y0000R000S3
|
||||
317NET-(D78-K) VIA MD0157PA00X+074350Y-023346X0315Y0000R000S3
|
||||
317NET-(D78-K) VIA MD0157PA00X+052717Y-018976X0315Y0000R000S3
|
||||
317S8 VIA MD0157PA00X+073652Y-025394X0315Y0000R000S3
|
||||
317S8 VIA MD0157PA00X+068524Y-028307X0315Y0000R000S3
|
||||
317S8 VIA MD0157PA00X+073642Y-026791X0315Y0000R000S3
|
||||
317SIGNAL VIA MD0157PA00X+064547Y-029567X0315Y0000R000S3
|
||||
317SIGNAL VIA MD0157PA00X+072618Y-032244X0315Y0000R000S3
|
||||
317SIGNAL VIA MD0157PA00X+046063Y-023959X0315Y0000R000S3
|
||||
317SIGNAL VIA MD0157PA00X+043747Y-017822X0315Y0000R000S3
|
||||
317SIGNAL VIA MD0157PA00X+072083Y-030039X0315Y0000R000S3
|
||||
317SERIALIN VIA MD0157PA00X+045079Y-021654X0315Y0000R000S3
|
||||
317SERIALIN VIA MD0157PA00X+044134Y-015551X0315Y0000R000S3
|
||||
@ -225,6 +222,7 @@ P arrayDim N
|
||||
317CD4 VIA MD0157PA00X+057067Y-026821X0315Y0000R000S3
|
||||
317CD5 VIA MD0157PA00X+059173Y-028278X0315Y0000R000S3
|
||||
317CD5 VIA MD0157PA00X+061014Y-026841X0315Y0000R000S3
|
||||
317NET-(D10-A) VIA MD0157PA00X+052756Y-020925X0315Y0000R000S3
|
||||
317NET-(D2-K) VIA MD0157PA00X+051575Y-017717X0315Y0000R000S3
|
||||
317CD6 VIA MD0157PA00X+064961Y-026811X0315Y0000R000S3
|
||||
317CD6 VIA MD0157PA00X+059665Y-028278X0315Y0000R000S3
|
||||
@ -251,6 +249,8 @@ P arrayDim N
|
||||
3171K_3_3 VIA MD0157PA00X+058504Y-022913X0315Y0000R000S3
|
||||
317T-(P_FAULT1-K) VIA MD0157PA00X+058465Y-019409X0315Y0000R000S3
|
||||
317CD_PROBE VIA MD0157PA00X+072579Y-030020X0315Y0000R000S3
|
||||
317CD_PROBE VIA MD0157PA00X+046811Y-023583X0315Y0000R000S3
|
||||
317CD_PROBE VIA MD0157PA00X+043747Y-017822X0315Y0000R000S3
|
||||
317CD_PROBE VIA MD0157PA00X+050787Y-023465X0315Y0000R000S3
|
||||
317CD_PROBE VIA MD0157PA00X+056693Y-028268X0315Y0000R000S3
|
||||
317SENSORS_ON VIA MD0157PA00X+050291Y-018370X0315Y0000R000S3
|
||||
@ -268,9 +268,10 @@ P arrayDim N
|
||||
317MS1 VIA MD0157PA00X+061673Y-030238X0315Y0000R000S3
|
||||
317MS1 VIA MD0157PA00X+069528Y-029626X0315Y0000R000S3
|
||||
317MS1 VIA MD0157PA00X+046295Y-028953X0315Y0000R000S3
|
||||
317MS0 VIA MD0157PA00X+049213Y-021575X0315Y0000R000S3
|
||||
317MS0 VIA MD0157PA00X+049183Y-021978X0315Y0000R000S3
|
||||
317MS0 VIA MD0157PA00X+053346Y-029982X0315Y0000R000S3
|
||||
317MS0 VIA MD0157PA00X+046957Y-029240X0315Y0000R000S3
|
||||
317MS0 VIA MD0157PA00X+060551Y-029982X0315Y0000R000S3
|
||||
317MS0 VIA MD0157PA00X+069035Y-029626X0315Y0000R000S3
|
||||
317MS3 VIA MD0157PA00X+062165Y-031122X0315Y0000R000S3
|
||||
317MS3 VIA MD0157PA00X+045000Y-029071X0315Y0000R000S3
|
||||
@ -282,28 +283,24 @@ P arrayDim N
|
||||
317MS2 VIA MD0157PA00X+045638Y-030114X0315Y0000R000S3
|
||||
317MS2 VIA MD0157PA00X+061654Y-031378X0315Y0000R000S3
|
||||
317MS2 VIA MD0157PA00X+053839Y-031378X0315Y0000R000S3
|
||||
317ISDAY VIA MD0157PA00X+049291Y-007254X0315Y0000R000S3
|
||||
317ISDAY VIA MD0157PA00X+049429Y-008356X0315Y0000R000S3
|
||||
317ISDAY VIA MD0157PA00X+044026Y-010039X0315Y0000R000S3
|
||||
317S_VIN VIA MD0157PA00X+051071Y-009472X0315Y0000R000S3
|
||||
317S_VIN VIA MD0157PA00X+051161Y-009744X0315Y0000R000S3
|
||||
3175K_VBAT VIA MD0157PA00X+069921Y-016063X0315Y0000R000S3
|
||||
317LED_ENABLE VIA MD0157PA00X+045630Y-011880X0315Y0000R000S3
|
||||
317LED_ENABLE VIA MD0157PA00X+045630Y-013976X0315Y0000R000S3
|
||||
317LED_ENABLE VIA MD0157PA00X+070768Y-013091X0315Y0000R000S3
|
||||
317LED_ENABLE VIA MD0157PA00X+070778Y-014331X0315Y0000R000S3
|
||||
317NET-(I2C3-A) VIA MD0157PA00X+054528Y-014213X0315Y0000R000S3
|
||||
317NET-(I2C3-A) VIA MD0157PA00X+076575Y-017421X0315Y0000R000S3
|
||||
317/LIGHT+ VIA MD0157PA00X+073996Y-016280X0315Y0000R000S3
|
||||
317/LIGHT+ VIA MD0157PA00X+073587Y-020394X0315Y0000R000S3
|
||||
317NET-(D98-K) VIA MD0157PA00X+063150Y-010472X0315Y0000R000S3
|
||||
317NET-(D98-K) VIA MD0157PA00X+066969Y-011063X0315Y0000R000S3
|
||||
317NET-(D98-A) VIA MD0157PA00X+064252Y-009370X0315Y0000R000S3
|
||||
317NET-(U6-CSP) VIA MD0157PA00X+058248Y-012461X0315Y0000R000S3
|
||||
317NET-(U6-CSP) VIA MD0157PA00X+064587Y-010846X0315Y0000R000S3
|
||||
317NET-(CD2-A) VIA MD0157PA00X+050650Y-011181X0315Y0000R000S3
|
||||
317NET-(U6-CSP) VIA MD0157PA00X+064744Y-010748X0315Y0000R000S3
|
||||
317NET-(U6-CSP) VIA MD0157PA00X+058337Y-012126X0315Y0000R000S3
|
||||
317NET-(J3-PIN_1) VIA MD0157PA00X+040965Y-039134X0315Y0000R000S3
|
||||
317ENABLE_TANK VIA MD0157PA00X+046122Y-011969X0315Y0000R000S3
|
||||
317ENABLE_TANK VIA MD0157PA00X+041220Y-035000X0315Y0000R000S3
|
||||
317NET-(D11-A) VIA MD0157PA00X+049439Y-008873X0315Y0000R000S3
|
||||
317USB_D- VIA MD0157PA00X+045433Y-008081X0315Y0000R000S3
|
||||
317USB_D+ VIA MD0157PA00X+045433Y-007667X0315Y0000R000S3
|
||||
317NET-(D11-A) VIA MD0157PA00X+050236Y-010591X0315Y0000R000S3
|
||||
317BOOT_SEL VIA MD0157PA00X+042756Y-016850X0315Y0000R000S3
|
||||
317BOOT_SEL VIA MD0157PA00X+047087Y-015433X0315Y0000R000S3
|
||||
317WARN_LED VIA MD0157PA00X+043140Y-009843X0315Y0000R000S3
|
||||
@ -341,22 +338,20 @@ P arrayDim N
|
||||
317FAULT6 VIA MD0157PA00X+054232Y-018268X0315Y0000R000S3
|
||||
317FAULT7 VIA MD0157PA00X+053880Y-018143X0315Y0000R000S3
|
||||
317FAULT8 VIA MD0157PA00X+053386Y-018228X0315Y0000R000S3
|
||||
317OE VIA MD0157PA00X+046240Y-021764X0315Y0000R000S3
|
||||
317OE VIA MD0157PA00X+046201Y-022018X0315Y0000R000S3
|
||||
317OE VIA MD0157PA00X+050197Y-021575X0315Y0000R000S3
|
||||
317OE VIA MD0157PA00X+054893Y-021555X0315Y0000R000S3
|
||||
317OE VIA MD0157PA00X+044154Y-017358X0315Y0000R000S3
|
||||
327NET-(U3-QG) TP2 -1 A01X+053110Y-018976X0787Y0787R000S2
|
||||
327NET-(U3-QH) TP1 -1 A01X+053110Y-020209X0787Y0787R000S2
|
||||
327GND C6 -1 A04X+048189Y-007692X0423Y0374R090S1
|
||||
327EN C6 -2 A04X+048189Y-008371X0423Y0374R090S1
|
||||
327GND C4 -1 A04X+041383Y-018386X0423Y0374R000S1
|
||||
327BOOT_SEL C4 -2 A04X+042062Y-018386X0423Y0374R000S1
|
||||
327USB_D+ U8 -1 A04X+045291Y-006892X0522Y0236R270S1
|
||||
327GND U8 -2 A04X+044917Y-006892X0522Y0236R270S1
|
||||
327USB_D- U8 -3 A04X+044543Y-006892X0522Y0236R270S1
|
||||
327SLASH}O2-PAD4) U8 -4 A04X+044543Y-005996X0522Y0236R270S1
|
||||
327USB_BUS U8 -5 A04X+044917Y-005996X0522Y0236R270S1
|
||||
327SLASH}O1-PAD6) U8 -6 A04X+045291Y-005996X0522Y0236R270S1
|
||||
317NET-(D53-K) VIA MD0157PA00X+053563Y-010453X0315Y0000R000S3
|
||||
317NET-(D53-K) VIA MD0157PA00X+052559Y-019764X0315Y0000R000S3
|
||||
317CHARGING VIA MD0157PA00X+051496Y-018307X0315Y0000R000S3
|
||||
317CHARGING VIA MD0157PA00X+053622Y-012795X0315Y0000R000S3
|
||||
317SOL_CHARGE VIA MD0157PA00X+054882Y-012913X0315Y0000R000S3
|
||||
317SOL_CHARGE VIA MD0157PA00X+066732Y-011417X0315Y0000R000S3
|
||||
327NET-(J7-CC2) R38 -1 A04X+044232Y-007006X0315Y0374R270S1
|
||||
327GND R38 -2 A04X+044232Y-006356X0315Y0374R270S1
|
||||
327NET-(J7-CC1) R31 -1 A04X+046362Y-006947X0315Y0374R270S1
|
||||
327GND R31 -2 A04X+046362Y-006297X0315Y0374R270S1
|
||||
327S11 S_P_11-1 A01X+053937Y-035728X0394Y2165R180S2
|
||||
327CD11 S_P_11-2 A01X+053150Y-035728X0394Y2165R180S2
|
||||
327GND S_P_11-MP A01X+054882Y-036614X0630Y1181R180S2
|
||||
@ -369,17 +364,8 @@ P arrayDim N
|
||||
327GND S_P_2 -MP A01X+048258Y-026319X0630Y1181R180S2
|
||||
317GND SolarI-1 D0709PA00X+071240Y-008622X1181Y1181R270S0
|
||||
317S_VIN SolarI-2 D0709PA00X+071240Y-006654X1181Y0000R270S0
|
||||
327NET-(D10-K) D10 -1 A01X+051924Y-019011X0384Y0551R180S2
|
||||
327S_VIN D10 -2 A01X+051186Y-019011X0384Y0551R180S2
|
||||
327USB_BUS USB1 -1 A01X+046051Y-008967X0197Y0669R180S2
|
||||
327USB_D- USB1 -2 A01X+045736Y-008967X0197Y0669R180S2
|
||||
327USB_D+ USB1 -3 A01X+045421Y-008967X0197Y0669R180S2
|
||||
327(USB1-ID-PAD4) USB1 -4 A01X+045106Y-008967X0197Y0669R180S2
|
||||
327GND USB1 -5 A01X+044791Y-008967X0197Y0669R180S2
|
||||
327GND USB1 -6 A01X+047063Y-008888X0571Y0748R180S2
|
||||
327GND USB1 -7 A01X+047063Y-006722X0571Y0748R180S2
|
||||
327GND USB1 -8 A01X+043780Y-006722X0571Y0748R180S2
|
||||
327GND USB1 -9 A01X+043780Y-008888X0571Y0748R180S2
|
||||
327NET-(D10-K) D10 -1 A01X+051811Y-021437X0384Y0551R180S2
|
||||
327NET-(D10-A) D10 -2 A01X+051073Y-021437X0384Y0551R180S2
|
||||
327GND Boot1 -1 A01X+040846Y-013091X0591Y0591R090S2
|
||||
327T-(BOOT1-PAD2) Boot1 -2 A01X+040846Y-016161X0591Y0591R090S2
|
||||
327NET-(Q24-C) SD10 -1 A01X+061083Y-023312X0384Y0551R270S2
|
||||
@ -406,10 +392,13 @@ P arrayDim N
|
||||
327CD9 S_P_9 -2 A01X+045276Y-035748X0394Y2165R180S2
|
||||
327GND S_P_9 -MP A01X+047008Y-036634X0630Y1181R180S2
|
||||
327GND S_P_9 -MP A01X+044331Y-036634X0630Y1181R180S2
|
||||
327NET-(CD1-K) CD1 -1 A01X+051973Y-023435X0384Y0551R180S2
|
||||
327CD_PROBE CD1 -2 A01X+051235Y-023435X0384Y0551R180S2
|
||||
317GND J6 -1 D0394PA00X+040935Y-023140X0669Y0669R000S0
|
||||
3173_3V J6 -2 D0394PA00X+040935Y-024140X0669Y0669R000S0
|
||||
317FLOW J6 -3 D0394PA00X+040935Y-025140X0669Y0669R000S0
|
||||
327NET-(CD1-K) CD1 -1 A01X+051806Y-023425X0384Y0551R180S2
|
||||
327CD_PROBE CD1 -2 A01X+051068Y-023425X0384Y0551R180S2
|
||||
317GND ExtCha-1 D0709PA00X+075453Y-008622X1181Y1181R270S0
|
||||
317NET-(D4-A) ExtCha-2 D0709PA00X+075453Y-006654X1181Y0000R270S0
|
||||
317NET-(D10-A) ExtCha-2 D0709PA00X+075453Y-006654X1181Y0000R270S0
|
||||
327S16 S_P_16-1 A01X+073661Y-035709X0394Y2165R180S2
|
||||
327CD16 S_P_16-2 A01X+072874Y-035709X0394Y2165R180S2
|
||||
327GND S_P_16-MP A01X+074606Y-036594X0630Y1181R180S2
|
||||
@ -424,15 +413,15 @@ P arrayDim N
|
||||
3271K_3_3 SD15 -2 A01X+070965Y-022653X0384Y0551R270S2
|
||||
327NET-(Q21-C) SD7 -1 A01X+070965Y-021373X0384Y0551R270S2
|
||||
3271K_3_3 SD7 -2 A01X+070965Y-020635X0384Y0551R270S2
|
||||
317GND 1WIRE1-1 D0374PA00X+040945Y-029724X0669Y0768R270S0
|
||||
317TEMP 1WIRE1-2 D0374PA00X+040945Y-028740X0669Y0768R270S0
|
||||
3173_3V 1WIRE1-3 D0374PA00X+040945Y-027756X0669Y0768R270S0
|
||||
317GND 1WIRE1-1 D0374PA00X+040935Y-027746X0669Y0768R090S0
|
||||
317TEMP 1WIRE1-2 D0374PA00X+040935Y-028730X0669Y0768R090S0
|
||||
3173_3V 1WIRE1-3 D0374PA00X+040935Y-029715X0669Y0768R090S0
|
||||
327S13 S_P_13-1 A01X+061811Y-035748X0394Y2165R180S2
|
||||
327CD13 S_P_13-2 A01X+061024Y-035748X0394Y2165R180S2
|
||||
327GND S_P_13-MP A01X+062756Y-036634X0630Y1181R180S2
|
||||
327GND S_P_13-MP A01X+060079Y-036634X0630Y1181R180S2
|
||||
327NET-(D2-K) D2 -1 A01X+051885Y-016924X0384Y0551R180S2
|
||||
327WARN_LED D2 -2 A01X+051147Y-016924X0384Y0551R180S2
|
||||
327NET-(D2-K) D2 -1 A01X+051806Y-016924X0384Y0551R180S2
|
||||
327WARN_LED D2 -2 A01X+051068Y-016924X0384Y0551R180S2
|
||||
317GND J4 -1 D0394PA00X+077559Y-033661X0669Y0669R000S0
|
||||
317VBAT J4 -2 D0394PA00X+077559Y-034661X0669Y0669R000S0
|
||||
3173_3V J4 -3 D0394PA00X+077559Y-035661X0669Y0669R000S0
|
||||
@ -489,10 +478,10 @@ P arrayDim N
|
||||
317VBAT PUMP2 -2 D0394PA00X+049606Y-042482X0669Y0787R000S0
|
||||
317-(PUMP8-PIN_1) PUMP8 -1 D0394PA00X+072244Y-042482X0669Y0787R000S0
|
||||
317VBAT PUMP8 -2 D0394PA00X+073228Y-042482X0669Y0787R000S0
|
||||
327NET-(D98-K) D98 -1 A01X+051818Y-013303X0384Y0551R180S2
|
||||
327NET-(D98-A) D98 -2 A01X+051080Y-013303X0384Y0551R180S2
|
||||
327-(PUMP4-PIN_1) PUMP_D-1 A01X+065059Y-017397X0384Y0551R270S2
|
||||
3275K_VBAT PUMP_D-2 A01X+065059Y-016658X0384Y0551R270S2
|
||||
327NET-(D53-K) D53 -1 A01X+051826Y-020531X0384Y0551R180S2
|
||||
3273_3V D53 -2 A01X+051088Y-020531X0384Y0551R180S2
|
||||
327S10 S_P_10-1 A01X+050000Y-035728X0394Y2165R180S2
|
||||
327CD10 S_P_10-2 A01X+049213Y-035728X0394Y2165R180S2
|
||||
327GND S_P_10-MP A01X+050945Y-036614X0630Y1181R180S2
|
||||
@ -511,7 +500,7 @@ P arrayDim N
|
||||
3275K_VBAT PUMP_D-2 A01X+070965Y-016658X0384Y0551R270S2
|
||||
327T-(P_FAULT1-K) P_FAUL-1 A01X+067028Y-019380X0384Y0551R270S2
|
||||
327FAULT5 P_FAUL-2 A01X+067028Y-018642X0384Y0551R270S2
|
||||
327SIGNAL TP25 -1 A01X+045354Y-023209X0787Y0787R270S2
|
||||
327CD_PROBE TP25 -1 A01X+045354Y-023209X0787Y0787R270S2
|
||||
327T-(P_FAULT1-K) P_FAUL-1 A01X+061122Y-019365X0384Y0551R270S2
|
||||
327FAULT2 P_FAUL-2 A01X+061122Y-018627X0384Y0551R270S2
|
||||
327S15 S_P_15-1 A01X+069646Y-035738X0394Y2165R180S2
|
||||
@ -522,33 +511,32 @@ P arrayDim N
|
||||
327NET-(I2C3-A) I2C3 -2 A01X+051088Y-015005X0384Y0551R180S2
|
||||
317GND LIGHT1-1 D0394PA00X+076772Y-019173X0669Y0787R270S0
|
||||
317/LIGHT+ LIGHT1-2 D0394PA00X+076772Y-018189X0669Y0787R270S0
|
||||
317GND RV1 -1 D0315PA00X+072904Y-010953X0567Y0000R270S0
|
||||
317GND RV1 -2 D0315PA00X+072904Y-011953X0567Y0000R270S0
|
||||
317NET-(R24-PAD2) RV1 -3 D0315PA00X+072904Y-012953X0567Y0000R270S0
|
||||
317GND RV1 -1 D0315PA00X+072894Y-010909X0567Y0000R270S0
|
||||
317GND RV1 -2 D0315PA00X+072894Y-011909X0567Y0000R270S0
|
||||
317NET-(R24-PAD2) RV1 -3 D0315PA00X+072894Y-012909X0567Y0000R270S0
|
||||
327-(PUMP3-PIN_1) PUMP_D-1 A01X+063091Y-017397X0384Y0551R270S2
|
||||
3275K_VBAT PUMP_D-2 A01X+063091Y-016658X0384Y0551R270S2
|
||||
327NET-(Q19-C) SD5 -1 A01X+066988Y-021358X0384Y0551R270S2
|
||||
3271K_3_3 SD5 -2 A01X+066988Y-020620X0384Y0551R270S2
|
||||
327NET-(Q17-C) SD3 -1 A01X+063051Y-021334X0384Y0551R270S2
|
||||
3271K_3_3 SD3 -2 A01X+063051Y-020595X0384Y0551R270S2
|
||||
327NET-(D78-K) D78 -1 A01X+051964Y-020940X0384Y0551R180S2
|
||||
327NET-(D78-A) D78 -2 A01X+051225Y-020940X0384Y0551R180S2
|
||||
327NET-(D78-K) D78 -1 A01X+051865Y-018976X0384Y0551R180S2
|
||||
327NET-(D78-A) D78 -2 A01X+051127Y-018976X0384Y0551R180S2
|
||||
327NET-(J3-PIN_1) J3 -1 A01X+042067Y-039528X0394Y2165R270S2
|
||||
327TANK_SENSOR J3 -2 A01X+042067Y-038740X0394Y2165R270S2
|
||||
327GND J3 -MP A01X+041181Y-040472X0630Y1181R270S2
|
||||
327GND J3 -MP A01X+041181Y-037795X0630Y1181R270S2
|
||||
317S_VIN C9 -1 D0315PA00X+067953Y-006435X0630Y0630R090S0
|
||||
317GND C9 -2 D0315PA00X+067953Y-007222X0630Y0000R090S0
|
||||
327ISDAY IsDay1-1 A01X+044262Y-011033X0787Y0787R000S2
|
||||
317GND J2 -1 D0394PA00X+040945Y-021752X0669Y0669R000S0
|
||||
317ESP_TX J2 -2 D0394PA00X+040945Y-022752X0669Y0669R000S0
|
||||
317ESP_RX J2 -3 D0394PA00X+040945Y-023752X0669Y0669R000S0
|
||||
317GND J2 -1 D0394PA00X+040945Y-019281X0669Y0669R000S0
|
||||
317ESP_TX J2 -2 D0394PA00X+040945Y-020281X0669Y0669R000S0
|
||||
317ESP_RX J2 -3 D0394PA00X+040945Y-021281X0669Y0669R000S0
|
||||
327T-(P_FAULT1-K) P_FAUL-1 A01X+072913Y-019370X0384Y0551R270S2
|
||||
327FAULT8 P_FAUL-2 A01X+072913Y-018632X0384Y0551R270S2
|
||||
317-(PUMP1-PIN_1) PUMP1 -1 D0394PA00X+044685Y-042482X0669Y0787R000S0
|
||||
317VBAT PUMP1 -2 D0394PA00X+045669Y-042482X0669Y0787R000S0
|
||||
327GND D11 -1 A01X+051826Y-011094X0384Y0551R180S2
|
||||
327NET-(D11-A) D11 -2 A01X+051088Y-011094X0384Y0551R180S2
|
||||
327GND D11 -1 A01X+051865Y-013012X0384Y0551R180S2
|
||||
327NET-(D11-A) D11 -2 A01X+051127Y-013012X0384Y0551R180S2
|
||||
327S1 S_P_1 -1 A01X+046053Y-025433X0394Y2165R180S2
|
||||
327CD1 S_P_1 -2 A01X+045266Y-025433X0394Y2165R180S2
|
||||
327GND S_P_1 -MP A01X+046998Y-026319X0630Y1181R180S2
|
||||
@ -565,8 +553,10 @@ P arrayDim N
|
||||
327GND S_P_5 -MP A01X+060069Y-026299X0630Y1181R180S2
|
||||
327NET-(Q18-C) SD4 -1 A01X+065020Y-021319X0384Y0551R270S2
|
||||
3271K_3_3 SD4 -2 A01X+065020Y-020581X0384Y0551R270S2
|
||||
327ET-(SIGNAL1-K) SIGNAL-1 A01X+051969Y-022549X0384Y0551R180S2
|
||||
327SENSORS_ON SIGNAL-2 A01X+051230Y-022549X0384Y0551R180S2
|
||||
327GND CD2 -1 A01X+051826Y-011122X0384Y0551R180S2
|
||||
327NET-(CD2-A) CD2 -2 A01X+051088Y-011122X0384Y0551R180S2
|
||||
327ET-(SIGNAL1-K) SIGNAL-1 A01X+051801Y-022539X0384Y0551R180S2
|
||||
327SENSORS_ON SIGNAL-2 A01X+051063Y-022539X0384Y0551R180S2
|
||||
327NET-(Q30-C) SD16 -1 A01X+073110Y-023391X0384Y0551R270S2
|
||||
3271K_3_3 SD16 -2 A01X+073110Y-022653X0384Y0551R270S2
|
||||
327S14 S_P_14-1 A01X+065748Y-035748X0394Y2165R180S2
|
||||
@ -577,9 +567,15 @@ P arrayDim N
|
||||
3271K_3_3 SD2 -2 A01X+061083Y-020595X0384Y0551R270S2
|
||||
327T-(P_FAULT1-K) P_FAUL-1 A01X+070965Y-019350X0384Y0551R270S2
|
||||
327FAULT7 P_FAUL-2 A01X+070965Y-018612X0384Y0551R270S2
|
||||
317GND J1 -1 D0394PA00X+055039Y-009378X0669Y0669R000S0
|
||||
317SCL J1 -2 D0394PA00X+055039Y-010378X0669Y0669R000S0
|
||||
317SDA J1 -3 D0394PA00X+055039Y-011378X0669Y0669R000S0
|
||||
317GND J1 -1 D0394PA00X+052933Y-008327X0669Y0669R090S0
|
||||
317SCL J1 -2 D0394PA00X+051933Y-008327X0669Y0669R090S0
|
||||
317SDA J1 -3 D0394PA00X+050933Y-008327X0669Y0669R090S0
|
||||
317S_VIN RV2 -1 D0315PA00X+069813Y-010931X0567Y0000R270S0
|
||||
317NET-(U6-MPPT) RV2 -2 D0315PA00X+069813Y-011931X0567Y0000R270S0
|
||||
317TED-(RV2-PAD3) RV2 -3 D0315PA00X+069813Y-012931X0567Y0000R270S0
|
||||
317NET-(U6-BAT) RV3 -1 D0315PA00X+064114Y-010884X0567Y0000R270S0
|
||||
317NET-(U6-FB) RV3 -2 D0315PA00X+064114Y-011884X0567Y0000R270S0
|
||||
317TED-(RV3-PAD3) RV3 -3 D0315PA00X+064114Y-012884X0567Y0000R270S0
|
||||
327NET-(Q15-B) Q15 -1 A04X+044188Y-025217X0354Y0315R000S1
|
||||
327GND Q15 -2 A04X+044188Y-024469X0354Y0315R000S1
|
||||
327NET-(Q15-C) Q15 -3 A04X+044975Y-024843X0354Y0315R000S1
|
||||
@ -604,6 +600,8 @@ P arrayDim N
|
||||
3273_3V C2 -2 A04X+042756Y-006639X0423Y0374R090S1
|
||||
3273_3V R12 -1 A04X+045512Y-017726X0315Y0374R270S1
|
||||
327SDA R12 -2 A04X+045512Y-017077X0315Y0374R270S1
|
||||
327GND C6 -1 A04X+048189Y-007692X0423Y0374R090S1
|
||||
327EN C6 -2 A04X+048189Y-008371X0423Y0374R090S1
|
||||
327GND C10 -1 A04X+073725Y-032283X0423Y0374R180S1
|
||||
327NET-(U2-CV) C10 -2 A04X+073046Y-032283X0423Y0374R180S1
|
||||
327NET-(Q21-C) CTimer-1 A04X+070837Y-024779X0423Y0374R090S1
|
||||
@ -638,8 +636,8 @@ P arrayDim N
|
||||
327MS3 U3 -3 A04X+049691Y-018996X0787Y0236R090S1
|
||||
327SENSORS_ON U3 -4 A04X+050191Y-018996X0787Y0236R090S1
|
||||
327MS1 U3 -5 A04X+050691Y-018996X0787Y0236R090S1
|
||||
327NET-(U3-QG) U3 -6 A04X+051191Y-018996X0787Y0236R090S1
|
||||
327NET-(U3-QH) U3 -7 A04X+051691Y-018996X0787Y0236R090S1
|
||||
327CHARGING U3 -6 A04X+051191Y-018996X0787Y0236R090S1
|
||||
327WORKING U3 -7 A04X+051691Y-018996X0787Y0236R090S1
|
||||
327GND U3 -8 A04X+052191Y-018996X0787Y0236R090S1
|
||||
327NET-(U3-QH') U3 -9 A04X+052191Y-020965X0787Y0236R090S1
|
||||
3273_3V U3 -10 A04X+051691Y-020965X0787Y0236R090S1
|
||||
@ -697,6 +695,9 @@ P arrayDim N
|
||||
327S16 CTimer-2 A04X+074823Y-035773X0423Y0374R090S1
|
||||
327NET-(Q29-C) CTimer-1 A04X+070797Y-035113X0423Y0374R090S1
|
||||
327S15 CTimer-2 A04X+070797Y-035792X0423Y0374R090S1
|
||||
327GND D54 -1 A04X+042840Y-024395X0581Y0236R180S1
|
||||
3273_3V D54 -2 A04X+042840Y-025143X0581Y0236R180S1
|
||||
327FLOW D54 -3 A04X+042101Y-024769X0581Y0236R180S1
|
||||
327GND D35 -1 A04X+075935Y-036693X0581Y0236R000S1
|
||||
3273_3V D35 -2 A04X+075935Y-035945X0581Y0236R000S1
|
||||
327SIGNAL D35 -3 A04X+076673Y-036319X0581Y0236R000S1
|
||||
@ -738,8 +739,8 @@ P arrayDim N
|
||||
327NET-(Q3-S) R33 -4 A04X+056994Y-009967X0902Y0799R270S1
|
||||
327NET-(Q5-G) R50 -1 A04X+044528Y-039528X0315Y0374R000S1
|
||||
327GND R50 -2 A04X+045177Y-039528X0315Y0374R000S1
|
||||
327NET-(U6-BAT) R30 -1 A04X+064449Y-012234X0315Y0374R090S1
|
||||
327NET-(U6-FB) R30 -2 A04X+064449Y-012884X0315Y0374R090S1
|
||||
327NET-(CD2-A) R36 -1 A04X+048780Y-016929X0315Y0374R090S1
|
||||
327WORKING R36 -2 A04X+048780Y-017579X0315Y0374R090S1
|
||||
327FAULT8 U7 -1 A04X+053364Y-018996X0787Y0236R090S1
|
||||
327FAULT7 U7 -2 A04X+053864Y-018996X0787Y0236R090S1
|
||||
327FAULT6 U7 -3 A04X+054364Y-018996X0787Y0236R090S1
|
||||
@ -773,11 +774,17 @@ P arrayDim N
|
||||
327NET-(Q27-B) Q27 -1 A04X+059931Y-035502X0354Y0315R000S1
|
||||
327GND Q27 -2 A04X+059931Y-034754X0354Y0315R000S1
|
||||
327NET-(Q27-C) Q27 -3 A04X+060719Y-035128X0354Y0315R000S1
|
||||
327USB_D+ U8 -1 A04X+045670Y-007034X0522Y0236R270S1
|
||||
327GND U8 -2 A04X+045296Y-007034X0522Y0236R270S1
|
||||
327USB_D- U8 -3 A04X+044922Y-007034X0522Y0236R270S1
|
||||
327SLASH}O2-PAD4) U8 -4 A04X+044922Y-006139X0522Y0236R270S1
|
||||
327USB_BUS U8 -5 A04X+045296Y-006139X0522Y0236R270S1
|
||||
327SLASH}O1-PAD6) U8 -6 A04X+045670Y-006139X0522Y0236R270S1
|
||||
327S_VIN C73 -1 A04X+066875Y-008780X0423Y0374R180S1
|
||||
327NET-(U6-VG) C73 -2 A04X+066196Y-008780X0423Y0374R180S1
|
||||
327GND D3 -1 A04X+042151Y-029114X0581Y0236R000S1
|
||||
3273_3V D3 -2 A04X+042151Y-028366X0581Y0236R000S1
|
||||
327TEMP D3 -3 A04X+042889Y-028740X0581Y0236R000S1
|
||||
327GND D3 -1 A04X+042889Y-028366X0581Y0236R180S1
|
||||
3273_3V D3 -2 A04X+042889Y-029114X0581Y0236R180S1
|
||||
327TEMP D3 -3 A04X+042151Y-028740X0581Y0236R180S1
|
||||
327SIGNAL U13 -1 A04X+064528Y-028898X0807Y0236R090S1
|
||||
327S1 U13 -2 A04X+065028Y-028898X0807Y0236R090S1
|
||||
327S2 U13 -3 A04X+065528Y-028898X0807Y0236R090S1
|
||||
@ -877,8 +884,8 @@ P arrayDim N
|
||||
327NET-(Q16-B) R84 -2 A04X+048661Y-025846X0315Y0374R000S1
|
||||
327OE R34 -1 A04X+044811Y-017077X0315Y0374R090S1
|
||||
3273_3V R34 -2 A04X+044811Y-017726X0315Y0374R090S1
|
||||
3273_3V R1 -1 A04X+042195Y-027638X0315Y0374R000S1
|
||||
327TEMP R1 -2 A04X+042844Y-027638X0315Y0374R000S1
|
||||
3273_3V R1 -1 A04X+042844Y-029872X0315Y0374R180S1
|
||||
327TEMP R1 -2 A04X+042195Y-029872X0315Y0374R180S1
|
||||
327GND R96 -1 A04X+071654Y-025797X0315Y0374R000S1
|
||||
327NET-(Q22-B) R96 -2 A04X+072303Y-025797X0315Y0374R000S1
|
||||
327/LIGHT+ C17 -1 A04X+074177Y-020221X0463Y0571R270S1
|
||||
@ -893,8 +900,8 @@ P arrayDim N
|
||||
327S_VIN Q6 -3 A04X+066496Y-006061X0236Y0866R090S1
|
||||
327S_VIN Q6 -3 A04X+066496Y-006561X0236Y0866R090S1
|
||||
327S_VIN Q6 -3 A04X+066496Y-007061X0236Y0866R090S1
|
||||
327S_VIN R25 -1 A04X+064892Y-008819X0315Y0374R180S1
|
||||
327NET-(D98-A) R25 -2 A04X+064242Y-008819X0315Y0374R180S1
|
||||
327NET-(D53-K) R25 -1 A04X+053179Y-010354X0315Y0374R180S1
|
||||
327NET-(JP2-C) R25 -2 A04X+052530Y-010354X0315Y0374R180S1
|
||||
327GND D41 -1 A04X+052096Y-037510X0581Y0236R000S1
|
||||
3273_3V D41 -2 A04X+052096Y-036762X0581Y0236R000S1
|
||||
327CD11 D41 -3 A04X+052835Y-037136X0581Y0236R000S1
|
||||
@ -967,6 +974,8 @@ P arrayDim N
|
||||
327NET-(Q23-B) Q23 -1 A04X+044198Y-035512X0354Y0315R000S1
|
||||
327GND Q23 -2 A04X+044198Y-034764X0354Y0315R000S1
|
||||
327NET-(Q23-C) Q23 -3 A04X+044985Y-035138X0354Y0315R000S1
|
||||
327GND C4 -1 A04X+041383Y-018386X0423Y0374R000S1
|
||||
327BOOT_SEL C4 -2 A04X+042062Y-018386X0423Y0374R000S1
|
||||
327GND D49 -1 A04X+067795Y-037500X0581Y0236R000S1
|
||||
3273_3V D49 -2 A04X+067795Y-036752X0581Y0236R000S1
|
||||
327CD15 D49 -3 A04X+068533Y-037126X0581Y0236R000S1
|
||||
@ -1027,12 +1036,13 @@ P arrayDim N
|
||||
327NET-(Q21-B) Q21 -1 A04X+067790Y-025167X0354Y0315R000S1
|
||||
327GND Q21 -2 A04X+067790Y-024419X0354Y0315R000S1
|
||||
327NET-(Q21-C) Q21 -3 A04X+068578Y-024793X0354Y0315R000S1
|
||||
327S_VIN R31 -1 A04X+068921Y-009299X0315Y0374R090S1
|
||||
327NET-(U6-MPPT) R31 -2 A04X+068921Y-009949X0315Y0374R090S1
|
||||
327TANK_SENSOR R29 -1 A04X+041235Y-036965X0404Y0551R180S1
|
||||
3273_3V R29 -2 A04X+040517Y-036965X0404Y0551R180S1
|
||||
327PUMP3 R55 -1 A04X+051575Y-040876X0315Y0374R270S1
|
||||
327NET-(Q7-G) R55 -2 A04X+051575Y-040226X0315Y0374R270S1
|
||||
327CHARGING JP2 -1 A04X+054032Y-012323X0394Y0197R270S1
|
||||
327NET-(JP2-C) JP2 -2 A04X+054032Y-011811X0394Y0591R270S1
|
||||
327SOL_CHARGE JP2 -3 A04X+054032Y-011299X0394Y0197R270S1
|
||||
327GND D43 -1 A04X+056024Y-037500X0581Y0236R000S1
|
||||
3273_3V D43 -2 A04X+056024Y-036752X0581Y0236R000S1
|
||||
327CD12 D43 -3 A04X+056762Y-037126X0581Y0236R000S1
|
||||
@ -1077,12 +1087,12 @@ P arrayDim N
|
||||
327GND U37 -1 A04X+040634Y-009293X0591Y0354R090S1
|
||||
3273_3V U37 -2 A04X+041134Y-009293X0591Y0354R090S1
|
||||
327EN U37 -3 A04X+041634Y-009293X0591Y0354R090S1
|
||||
327(U37-IO4-PAD4) U37 -4 A04X+042134Y-009293X0591Y0354R090S1
|
||||
327FLOW U37 -4 A04X+042134Y-009293X0591Y0354R090S1
|
||||
327TANK_SENSOR U37 -5 A04X+042634Y-009293X0591Y0354R090S1
|
||||
327WARN_LED U37 -6 A04X+043134Y-009293X0591Y0354R090S1
|
||||
327ISDAY U37 -7 A04X+043634Y-009293X0591Y0354R090S1
|
||||
327(U37-IO0-PAD8) U37 -8 A04X+044134Y-009293X0591Y0354R090S1
|
||||
327(U37-IO1-PAD9) U37 -9 A04X+044634Y-009293X0591Y0354R090S1
|
||||
327BOOT_SEL U37 -9 A04X+044634Y-009293X0591Y0354R090S1
|
||||
327U37-IO8-PAD10) U37 -10 A04X+045134Y-009293X0591Y0354R090S1
|
||||
327LED_ENABLE U37 -11 A04X+045634Y-009293X0591Y0354R090S1
|
||||
327ENABLE_TANK U37 -12 A04X+046134Y-009293X0591Y0354R090S1
|
||||
@ -1093,7 +1103,7 @@ P arrayDim N
|
||||
327SCL U37 -17 A04X+046134Y-016183X0591Y0354R090S1
|
||||
327SDA U37 -18 A04X+045634Y-016183X0591Y0354R090S1
|
||||
327OE U37 -19 A04X+045134Y-016183X0591Y0354R090S1
|
||||
327SIGNAL U37 -20 A04X+044634Y-016183X0591Y0354R090S1
|
||||
327CD_PROBE U37 -20 A04X+044634Y-016183X0591Y0354R090S1
|
||||
327SERIALIN U37 -21 A04X+044134Y-016183X0591Y0354R090S1
|
||||
327(U37-NC-PAD22) U37 -22 A04X+043634Y-016183X0591Y0354R090S1
|
||||
327CLOCK U37 -23 A04X+043134Y-016183X0591Y0354R090S1
|
||||
@ -1178,8 +1188,8 @@ P arrayDim N
|
||||
327NET-(Q30-B) R119 -2 A04X+072333Y-036102X0315Y0374R000S1
|
||||
327PUMP7 R67 -1 A04X+067323Y-040876X0315Y0374R270S1
|
||||
327NET-(Q11-G) R67 -2 A04X+067323Y-040226X0315Y0374R270S1
|
||||
327GND R27 -1 A04X+068921Y-011209X0315Y0374R270S1
|
||||
327NET-(U6-MPPT) R27 -2 A04X+068921Y-010559X0315Y0374R270S1
|
||||
327GND R27 -1 A04X+069183Y-011132X0315Y0374R180S1
|
||||
327NET-(U6-MPPT) R27 -2 A04X+068533Y-011132X0315Y0374R180S1
|
||||
327NET-(U5-BST) C16 -1 A04X+071717Y-018391X0423Y0374R090S1
|
||||
327/LIGHT_COOL C16 -2 A04X+071717Y-019070X0423Y0374R090S1
|
||||
327NET-(D11-A) R35 -1 A04X+048976Y-008228X0315Y0374R270S1
|
||||
@ -1191,7 +1201,7 @@ P arrayDim N
|
||||
327NET-(U5-FB) C72 -2 A04X+072460Y-015581X0423Y0374R180S1
|
||||
327NET-(U6-VG) U6 -1 A04X+067638Y-009961X0236Y0689R090S1
|
||||
327GND U6 -2 A04X+067638Y-010354X0236Y0689R090S1
|
||||
327NET-(D98-K) U6 -3 A04X+067638Y-010748X0236Y0689R090S1
|
||||
327SOL_CHARGE U6 -3 A04X+067638Y-010748X0236Y0689R090S1
|
||||
327NET-(U6-MPPT) U6 -4 A04X+067638Y-011142X0236Y0689R090S1
|
||||
327NET-(U6-COM) U6 -5 A04X+067638Y-011535X0236Y0689R090S1
|
||||
327NET-(U6-FB) U6 -6 A04X+065433Y-011535X0236Y0689R090S1
|
||||
@ -1248,6 +1258,8 @@ P arrayDim N
|
||||
327NET-(C5-PAD2) C5 -2 A04X+048169Y-006757X0423Y0374R090S1
|
||||
327G12 R104 -1 A04X+057815Y-036122X0315Y0374R180S1
|
||||
327NET-(Q26-B) R104 -2 A04X+057165Y-036122X0315Y0374R180S1
|
||||
3273_3V R30 -1 A04X+042470Y-026526X0315Y0374R270S1
|
||||
327FLOW R30 -2 A04X+042470Y-025876X0315Y0374R270S1
|
||||
327G10 R100 -1 A04X+049931Y-036142X0315Y0374R180S1
|
||||
327NET-(Q24-B) R100 -2 A04X+049281Y-036142X0315Y0374R180S1
|
||||
327GND R40 -1 A04X+053317Y-023425X0315Y0374R180S1
|
||||
@ -1277,7 +1289,7 @@ P arrayDim N
|
||||
327EN R16 -1 A04X+042795Y-008356X0315Y0374R270S1
|
||||
3273_3V R16 -2 A04X+042795Y-007707X0315Y0374R270S1
|
||||
327S_VIN D4 -1 A04X+073396Y-007766X0630Y0748R270S1
|
||||
327NET-(D4-A) D4 -2 A04X+073396Y-006073X0630Y0748R270S1
|
||||
327NET-(D10-A) D4 -2 A04X+073396Y-006073X0630Y0748R270S1
|
||||
3273_3V U22 -1 A04X+053051Y-012500X0522Y0236R180S1
|
||||
327/3_3IN U22 -2 A04X+053051Y-012874X0522Y0236R180S1
|
||||
327/3_3IN U22 -3 A04X+053051Y-013248X0522Y0236R180S1
|
||||
@ -1297,8 +1309,8 @@ P arrayDim N
|
||||
327GND C21 -2 A04X+046176Y-039449X0463Y0571R180S1
|
||||
327MS2 R52 -1 A04X+045650Y-031459X0315Y0374R090S1
|
||||
327GND R52 -2 A04X+045650Y-032108X0315Y0374R090S1
|
||||
327GND R9 -1 A04X+050886Y-017402X0315Y0374R180S1
|
||||
327NET-(D10-K) R9 -2 A04X+050236Y-017402X0315Y0374R180S1
|
||||
327GND R9 -1 A04X+054961Y-022579X0315Y0374R180S1
|
||||
327NET-(D10-K) R9 -2 A04X+054311Y-022579X0315Y0374R180S1
|
||||
327GND D19 -1 A04X+059941Y-027205X0581Y0236R000S1
|
||||
3273_3V D19 -2 A04X+059941Y-026457X0581Y0236R000S1
|
||||
327CD5 D19 -3 A04X+060679Y-026831X0581Y0236R000S1
|
||||
@ -1312,8 +1324,8 @@ P arrayDim N
|
||||
327GND R54 -2 A04X+049892Y-009567X0315Y0374R090S1
|
||||
327NET-(Q14-G) R111 -1 A04X+048494Y-039469X0315Y0374R000S1
|
||||
327GND R111 -2 A04X+049144Y-039469X0315Y0374R000S1
|
||||
327NET-(Q2-G) R19 -1 A04X+071024Y-012608X0315Y0374R270S1
|
||||
327GND R19 -2 A04X+071024Y-011959X0315Y0374R270S1
|
||||
327NET-(Q2-G) R19 -1 A04X+070728Y-012500X0315Y0374R000S1
|
||||
327GND R19 -2 A04X+071378Y-012500X0315Y0374R000S1
|
||||
3273_3V C30 -1 A04X+050325Y-014154X0463Y0571R000S1
|
||||
327GND C30 -2 A04X+051142Y-014154X0463Y0571R000S1
|
||||
327NET-(Q25-B) Q25 -1 A04X+052062Y-035472X0354Y0315R000S1
|
||||
@ -1339,4 +1351,26 @@ P arrayDim N
|
||||
327NET-(R14-PAD2) R14 -2 A04X+043356Y-017441X0315Y0374R000S1
|
||||
327NET-(Q10-G) R65 -1 A04X+064144Y-039469X0315Y0374R000S1
|
||||
327GND R65 -2 A04X+064793Y-039469X0315Y0374R000S1
|
||||
367N/C USB-C D0256UA00X+046470Y-008061X0256Y0000R180S0
|
||||
367N/C USB-C D0256UA00X+044195Y-008061X0256Y0000R180S0
|
||||
327GND USB-C -A1 A01X+046612Y-008630X0236Y0571R180S2
|
||||
327USB_BUS USB-C -A4 A01X+046297Y-008630X0236Y0571R180S2
|
||||
327NET-(J7-CC1) USB-C -A5 A01X+045825Y-008630X0118Y0571R180S2
|
||||
327USB_D+ USB-C -A6 A01X+045431Y-008630X0118Y0571R180S2
|
||||
327USB_D- USB-C -A7 A01X+045234Y-008630X0118Y0571R180S2
|
||||
327J7-SBU1-PADA8) USB-C -A8 A01X+044841Y-008630X0118Y0571R180S2
|
||||
327USB_BUS USB-C -A9 A01X+044368Y-008630X0236Y0571R180S2
|
||||
327GND USB-C -A12 A01X+044053Y-008630X0236Y0571R180S2
|
||||
327GND USB-C -B1 A01X+044053Y-008630X0236Y0571R180S2
|
||||
327USB_BUS USB-C -B4 A01X+044368Y-008630X0236Y0571R180S2
|
||||
327NET-(J7-CC2) USB-C -B5 A01X+044644Y-008630X0118Y0571R180S2
|
||||
327USB_D+ USB-C -B6 A01X+045037Y-008630X0118Y0571R180S2
|
||||
327USB_D- USB-C -B7 A01X+045628Y-008630X0118Y0571R180S2
|
||||
327J7-SBU2-PADB8) USB-C -B8 A01X+046022Y-008630X0118Y0571R180S2
|
||||
327USB_BUS USB-C -B9 A01X+046297Y-008630X0236Y0571R180S2
|
||||
327GND USB-C -B12 A01X+046612Y-008630X0236Y0571R180S2
|
||||
317GND USB-C -S1 D0236PA00X+047033Y-008270X0394Y0827R180S0
|
||||
317GND USB-C -S1 D0236PA00X+047033Y-006624X0394Y0630R180S0
|
||||
317GND USB-C -S1 D0236PA00X+043632Y-008270X0394Y0827R180S0
|
||||
317GND USB-C -S1 D0236PA00X+043632Y-006624X0394Y0630R180S0
|
||||
999
|
||||
|
@ -956,6 +956,8 @@ fn wait_infinity(wait_type: WaitType, reboot_now: Arc<AtomicBool>) -> ! {
|
||||
}
|
||||
}
|
||||
if reboot_now.load(std::sync::atomic::Ordering::Relaxed) {
|
||||
//ensure clean http answer
|
||||
Delay::new_default().delay_ms(500);
|
||||
BOARD_ACCESS.lock().unwrap().deep_sleep( 1);
|
||||
}
|
||||
}
|
||||
@ -1067,9 +1069,17 @@ fn get_version() -> VersionInfo {
|
||||
let branch = env!("VERGEN_GIT_BRANCH").to_owned();
|
||||
let hash = &env!("VERGEN_GIT_SHA")[0..8];
|
||||
|
||||
let running_partition = unsafe { esp_ota_get_running_partition() };
|
||||
let address = unsafe { (*running_partition).address };
|
||||
let partition = if address > 20000 {
|
||||
"ota_1"
|
||||
} else {
|
||||
"ota_0"
|
||||
};
|
||||
return VersionInfo {
|
||||
git_hash: (branch + "@" + hash),
|
||||
build_time: env!("VERGEN_BUILD_TIMESTAMP").to_owned(),
|
||||
partition: partition.to_owned()
|
||||
};
|
||||
}
|
||||
|
||||
@ -1077,4 +1087,5 @@ fn get_version() -> VersionInfo {
|
||||
struct VersionInfo {
|
||||
git_hash: String,
|
||||
build_time: String,
|
||||
partition: String,
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ use esp_idf_svc::wifi::EspWifi;
|
||||
use measurements::Temperature;
|
||||
use once_cell::sync::Lazy;
|
||||
use plant_ctrl2::sipo::ShiftRegister40;
|
||||
use esp_idf_sys::{esp_deep_sleep, esp_sleep_enable_ext1_wakeup, esp_sleep_ext1_wakeup_mode_t_ESP_EXT1_WAKEUP_ANY_LOW};
|
||||
use esp_idf_sys::{esp_deep_sleep, esp_sleep_enable_ext1_wakeup, esp_sleep_ext1_wakeup_mode_t_ESP_EXT1_WAKEUP_ANY_LOW, esp_spiffs_info};
|
||||
use esp_idf_sys::esp_restart;
|
||||
|
||||
use anyhow::{anyhow, Context};
|
||||
@ -182,6 +182,8 @@ pub struct FileInfo {
|
||||
|
||||
#[derive(Serialize, Debug)]
|
||||
pub struct FileList {
|
||||
total: usize,
|
||||
used: usize,
|
||||
files: Vec<FileInfo>,
|
||||
file_system_corrupt: Option<String>,
|
||||
iter_error: Option<String>,
|
||||
@ -232,19 +234,8 @@ impl PlantCtrlBoard<'_> {
|
||||
|
||||
pub fn list_files(&self, filename: &str) -> FileList {
|
||||
let storage = CString::new(SPIFFS_PARTITION_NAME).unwrap();
|
||||
let error = unsafe {
|
||||
esp! {
|
||||
esp_spiffs_check(storage.as_ptr())
|
||||
}
|
||||
};
|
||||
|
||||
let mut file_system_corrupt = match error {
|
||||
OkStd(_) => None,
|
||||
Err(err) => {
|
||||
println!("Corrupt spiffs {err:?}");
|
||||
Some(format!("{err:?}"))
|
||||
}
|
||||
};
|
||||
let mut file_system_corrupt = Option::None;
|
||||
|
||||
let mut iter_error = None;
|
||||
let mut result = Vec::new();
|
||||
@ -280,8 +271,15 @@ impl PlantCtrlBoard<'_> {
|
||||
file_system_corrupt = Some(format!("{err:?}"));
|
||||
}
|
||||
}
|
||||
let mut total:usize = 0;
|
||||
let mut used:usize = 0;
|
||||
unsafe {
|
||||
esp_spiffs_info(storage.as_ptr(), &mut total, &mut used);
|
||||
}
|
||||
|
||||
return FileList {
|
||||
total,
|
||||
used,
|
||||
file_system_corrupt,
|
||||
files: result,
|
||||
iter_error,
|
||||
|
@ -5,7 +5,7 @@ use std::{
|
||||
sync::{atomic::AtomicBool, Arc},
|
||||
};
|
||||
use crate::{
|
||||
espota::OtaUpdate, get_version, map_range_moisture, plant_hal::FileInfo, BOARD_ACCESS,
|
||||
espota::OtaUpdate, get_version, map_range_moisture, plant_hal::{FileInfo, PLANT_COUNT}, BOARD_ACCESS,
|
||||
};
|
||||
use anyhow::bail;
|
||||
use chrono::DateTime;
|
||||
@ -159,6 +159,7 @@ fn get_battery_state(
|
||||
fn get_version_web(
|
||||
_request: &mut Request<&mut EspHttpConnection>,
|
||||
) -> Result<Option<std::string::String>, anyhow::Error> {
|
||||
|
||||
anyhow::Ok(Some(serde_json::to_string(&get_version())?))
|
||||
}
|
||||
|
||||
@ -197,19 +198,30 @@ fn list_files(
|
||||
fn ota(
|
||||
request: &mut Request<&mut EspHttpConnection>,
|
||||
) -> Result<Option<std::string::String>, anyhow::Error> {
|
||||
let mut board = BOARD_ACCESS.lock().unwrap();
|
||||
let mut ota = OtaUpdate::begin()?;
|
||||
println!("start ota");
|
||||
|
||||
|
||||
//having a larger buffer is not really faster, requires more stack and prevents the progress bar from working ;)
|
||||
const BUFFER_SIZE: usize = 512;
|
||||
let mut buffer: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE];
|
||||
let mut total_read: usize = 0;
|
||||
let mut lastiter = 0;
|
||||
loop {
|
||||
let read = request.read(&mut buffer)?;
|
||||
total_read += read;
|
||||
println!("received {read} bytes ota {total_read}");
|
||||
let to_write = &buffer[0..read];
|
||||
|
||||
let iter = (total_read/1024)%8;
|
||||
if iter != lastiter {
|
||||
for i in 0..PLANT_COUNT {
|
||||
board.fault(i, iter==i);
|
||||
|
||||
}
|
||||
lastiter = iter;
|
||||
}
|
||||
|
||||
ota.write(to_write)?;
|
||||
println!("wrote {read} bytes ota {total_read}");
|
||||
if read == 0 {
|
||||
@ -222,6 +234,8 @@ fn ota(
|
||||
|
||||
let mut finalizer = ota.finalize()?;
|
||||
println!("changing boot partition");
|
||||
board.set_restart_to_conf(true);
|
||||
drop(board);
|
||||
finalizer.set_as_boot_partition()?;
|
||||
finalizer.restart();
|
||||
}
|
||||
@ -413,10 +427,11 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
|
||||
server
|
||||
.fn_handler("/file", Method::Post, move |mut request| {
|
||||
let filename = query_param(request.uri(), "filename").unwrap();
|
||||
let file_handle = BOARD_ACCESS
|
||||
.lock()
|
||||
.unwrap()
|
||||
.get_file_handle(&filename, true);
|
||||
let lock = BOARD_ACCESS
|
||||
.lock()
|
||||
.unwrap();
|
||||
let file_handle =
|
||||
lock.get_file_handle(&filename, true);
|
||||
match file_handle {
|
||||
//TODO get free filesystem size, check against during write if not to large
|
||||
|
||||
@ -424,13 +439,21 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
|
||||
const BUFFER_SIZE: usize = 512;
|
||||
let mut buffer: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE];
|
||||
let mut total_read: usize = 0;
|
||||
let mut lastiter = 0;
|
||||
loop {
|
||||
|
||||
let iter = (total_read/1024)%8;
|
||||
if iter != lastiter {
|
||||
for i in 0..PLANT_COUNT {
|
||||
lock.fault(i, iter==i);
|
||||
}
|
||||
lastiter = iter;
|
||||
}
|
||||
|
||||
let read = request.read(&mut buffer)?;
|
||||
total_read += read;
|
||||
println!("sending {read} bytes of {total_read} for upload {filename}");
|
||||
let to_write = &buffer[0..read];
|
||||
std::io::Write::write(&mut file_handle, to_write)?;
|
||||
println!("wrote {read} bytes of {total_read} for upload {filename}");
|
||||
if read == 0 {
|
||||
break;
|
||||
}
|
||||
@ -444,6 +467,7 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
|
||||
cors_response(request, 500, &error_text)?;
|
||||
}
|
||||
}
|
||||
drop(lock);
|
||||
anyhow::Ok(())
|
||||
})
|
||||
.unwrap();
|
||||
@ -466,6 +490,11 @@ pub fn httpd(reboot_now: Arc<AtomicBool>) -> Box<EspHttpServer<'static>> {
|
||||
anyhow::Ok(())
|
||||
})
|
||||
.unwrap();
|
||||
server
|
||||
.fn_handler("/file", Method::Options, |request| {
|
||||
cors_response(request, 200, "")
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
server
|
||||
.fn_handler("/flashbattery", Method::Post, move |request| {
|
||||
@ -529,6 +558,7 @@ fn cors_response(
|
||||
let headers = [
|
||||
("Access-Control-Allow-Origin", "*"),
|
||||
("Access-Control-Allow-Headers", "*"),
|
||||
("Access-Control-Allow-Methods", "*"),
|
||||
];
|
||||
let mut response = request.into_response(status, None, &headers)?;
|
||||
response.write(body.as_bytes())?;
|
||||
|
10
rust/src_webpack/package-lock.json
generated
10
rust/src_webpack/package-lock.json
generated
@ -6,6 +6,7 @@
|
||||
"": {
|
||||
"dependencies": {
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"fast-equals": "^5.2.2",
|
||||
"source-map-loader": "^4.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
@ -1765,6 +1766,15 @@
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
|
||||
},
|
||||
"node_modules/fast-equals": {
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz",
|
||||
"integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-glob": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
||||
|
@ -11,6 +11,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"fast-equals": "^5.2.2",
|
||||
"source-map-loader": "^4.0.1"
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,19 @@ interface NetworkConfig {
|
||||
base_topic: string
|
||||
}
|
||||
|
||||
interface FileList {
|
||||
total: number,
|
||||
used: number,
|
||||
files: FileInfo[],
|
||||
file_system_corrupt: string,
|
||||
iter_error: string,
|
||||
}
|
||||
|
||||
interface FileInfo{
|
||||
filename: string,
|
||||
size: number,
|
||||
}
|
||||
|
||||
interface NightLampConfig {
|
||||
night_lamp_hour_start: number,
|
||||
night_lamp_hour_end: number,
|
||||
@ -64,7 +77,8 @@ interface Moistures {
|
||||
|
||||
interface VersionInfo {
|
||||
git_hash: string,
|
||||
build_time: string
|
||||
build_time: string,
|
||||
partition: string
|
||||
}
|
||||
|
||||
interface BatteryState {
|
||||
|
@ -1,3 +1,13 @@
|
||||
<style>
|
||||
.powerflexkey {
|
||||
min-width: 150px;
|
||||
}
|
||||
.powerflexvalue {
|
||||
text-wrap: nowrap;
|
||||
flex-grow: 1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="flexcontainer">
|
||||
<div class="subtitle">
|
||||
Battery:
|
||||
|
72
rust/src_webpack/src/fileview.html
Normal file
72
rust/src_webpack/src/fileview.html
Normal file
@ -0,0 +1,72 @@
|
||||
<style>
|
||||
.filecheckbox {
|
||||
margin: 0px;
|
||||
min-width: 20px
|
||||
}
|
||||
|
||||
.filekey {
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.filevalue {
|
||||
flex-grow: 1;
|
||||
width: 25%;
|
||||
min-width: 200px;
|
||||
}
|
||||
|
||||
.filenumberbox {
|
||||
min-width: 50px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.filetitle {
|
||||
border-top-style: dotted;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.fileentryouter {
|
||||
flex-grow: 1;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="subtitle">Files:</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="filekey">Total Size</div>
|
||||
<div id="filetotalsize" class="filevalue"></div>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="filekey">Used Size</div>
|
||||
<div id="fileusedsize" class="filevalue"></div>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="filekey">Free Size</div>
|
||||
<div id="filefreesize" class="filevalue"></div>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<div class="flexcontainer" style="border-left-style: double; border-right-style: double; border-top-style: double;">
|
||||
<div class="subtitle" >Upload:</div>
|
||||
</div>
|
||||
<div class="flexcontainer" style="border-left-style: double; border-right-style: double;">
|
||||
<div class="flexcontainer">
|
||||
<div class="filekey">
|
||||
File:
|
||||
</div>
|
||||
<input id="fileuploadfile" class="filevalue" type="file">
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="filekey">
|
||||
Name:
|
||||
</div>
|
||||
<input id="fileuploadname" class="filevalue" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="flexcontainer" style="border-left-style: double; border-right-style: double; border-bottom-style: double;">
|
||||
<button id="fileuploadbtn" class="subtitle">Upload</button>
|
||||
</div>
|
||||
<br>
|
||||
<div class="flexcontainer" style="border-left-style: double; border-right-style: double; border-top-style: double;">
|
||||
<div class="subtitle">List:</div>
|
||||
</div>
|
||||
<div id="fileList" class="flexcontainer" style="border-left-style: double; border-right-style: double; border-bottom-style: double;">
|
||||
</div>
|
97
rust/src_webpack/src/fileview.ts
Normal file
97
rust/src_webpack/src/fileview.ts
Normal file
@ -0,0 +1,97 @@
|
||||
import { Controller } from "./main";
|
||||
|
||||
const regex = /[^a-zA-Z0-9_.]/g;
|
||||
|
||||
function sanitize(str:string){
|
||||
return str.replaceAll(regex, '_')
|
||||
}
|
||||
|
||||
export class FileView {
|
||||
readonly fileListView: HTMLElement;
|
||||
readonly controller: Controller;
|
||||
readonly filefreesize: HTMLElement;
|
||||
readonly filetotalsize: HTMLElement;
|
||||
readonly fileusedsize: HTMLElement;
|
||||
|
||||
constructor(controller: Controller) {
|
||||
(document.getElementById("fileview") as HTMLElement).innerHTML = require('./fileview.html') as string;
|
||||
this.fileListView = document.getElementById("fileList") as HTMLElement
|
||||
this.filefreesize = document.getElementById("filefreesize") as HTMLElement
|
||||
this.filetotalsize = document.getElementById("filetotalsize") as HTMLElement
|
||||
this.fileusedsize = document.getElementById("fileusedsize") as HTMLElement
|
||||
|
||||
let fileuploadfile = document.getElementById("fileuploadfile") as HTMLInputElement
|
||||
let fileuploadname = document.getElementById("fileuploadname") as HTMLInputElement
|
||||
let fileuploadbtn = document.getElementById("fileuploadbtn") as HTMLInputElement
|
||||
fileuploadfile.onchange = () => {
|
||||
var selectedFile = fileuploadfile.files?.[0];
|
||||
if (selectedFile == null) {
|
||||
//TODO error dialog here
|
||||
return
|
||||
}
|
||||
|
||||
fileuploadname.value = sanitize(selectedFile.name)
|
||||
};
|
||||
|
||||
fileuploadname.onchange = () => {
|
||||
let input = fileuploadname.value
|
||||
let clean = sanitize(fileuploadname.value)
|
||||
if (input != clean){
|
||||
fileuploadname.value = clean
|
||||
}
|
||||
}
|
||||
|
||||
fileuploadbtn.onclick = () => {
|
||||
var selectedFile = fileuploadfile.files?.[0];
|
||||
if (selectedFile == null) {
|
||||
//TODO error dialog here
|
||||
return
|
||||
}
|
||||
controller.uploadFile(selectedFile, selectedFile.name)
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.controller = controller;
|
||||
}
|
||||
|
||||
setFileList(fileList: FileList, public_url: string) {
|
||||
this.filetotalsize.innerText = Math.floor(fileList.total / 1024) + "kB"
|
||||
this.fileusedsize.innerText = Math.ceil(fileList.used / 1024) + "kB"
|
||||
this.filefreesize.innerText = Math.ceil((fileList.total - fileList.used) / 1024) + "kB"
|
||||
|
||||
//fast clear
|
||||
this.fileListView.textContent = ""
|
||||
for (let i = 0; i < fileList.files.length; i++) {
|
||||
let file = fileList.files[i]
|
||||
new FileEntry(this.controller, i, file, this.fileListView, public_url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FileEntry {
|
||||
view: HTMLElement;
|
||||
constructor(controller: Controller, fileid: number, fileinfo: FileInfo, parent: HTMLElement, public_url: string) {
|
||||
this.view = document.createElement("div") as HTMLElement
|
||||
parent.appendChild(this.view)
|
||||
this.view.classList.add("fileentryouter")
|
||||
|
||||
const template = require('./fileviewentry.html') as string;
|
||||
const fileRaw = template.replaceAll("${fileid}", String(fileid));
|
||||
this.view.innerHTML = fileRaw
|
||||
|
||||
let name = document.getElementById("file_" + fileid + "_name") as HTMLElement;
|
||||
let size = document.getElementById("file_" + fileid + "_size") as HTMLElement;
|
||||
let deleteBtn = document.getElementById("file_" + fileid + "_delete") as HTMLButtonElement;
|
||||
deleteBtn.onclick = () => {
|
||||
controller.deleteFile(fileinfo.filename);
|
||||
}
|
||||
|
||||
let downloadBtn = document.getElementById("file_" + fileid + "_download") as HTMLAnchorElement;
|
||||
downloadBtn.href = public_url + "/file?filename=" + fileinfo.filename
|
||||
downloadBtn.download = fileinfo.filename
|
||||
|
||||
name.innerText = fileinfo.filename;
|
||||
size.innerText = fileinfo.size.toString()
|
||||
}
|
||||
}
|
11
rust/src_webpack/src/fileviewentry.html
Normal file
11
rust/src_webpack/src/fileviewentry.html
Normal file
@ -0,0 +1,11 @@
|
||||
<div class="flexcontainer">
|
||||
<div id="file_${fileid}_name" class="filetitle">Name</div>
|
||||
</div>
|
||||
|
||||
<div class="flexcontainer">
|
||||
<div class="filekey">Size</div>
|
||||
<div id = "file_${fileid}_size" class="filevalue"></div>
|
||||
<a id = "file_${fileid}_download" class="filevalue" target="_blank">Download</a>
|
||||
<button id = "file_${fileid}_delete" class="filevalue">Delete</button>
|
||||
</div>
|
||||
|
@ -1,6 +1,7 @@
|
||||
<style>
|
||||
.progressPane {
|
||||
display: block;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@ -8,27 +9,21 @@
|
||||
padding: 0;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color: lightgrey;
|
||||
background-color: grey;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.progressPaneCenter {
|
||||
display: inline-block;
|
||||
margin-top: 48%;
|
||||
position: absolute;
|
||||
height: 4%;
|
||||
width: 50%;
|
||||
margin-left: 25%;
|
||||
margin-right: 25%;
|
||||
}
|
||||
|
||||
.progress {
|
||||
height: 1.5em;
|
||||
width: 100%;
|
||||
background-color: #c9c9c9;
|
||||
background-color: #555;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.progressSpacer{
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.progress:after {
|
||||
content: attr(data-label);
|
||||
font-size: 0.8em;
|
||||
@ -40,13 +35,13 @@
|
||||
}
|
||||
|
||||
.progress .value {
|
||||
background-color: #7cc4ff;
|
||||
background-color: darkcyan;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.progress .valueIndeterminate {
|
||||
background-color: #7cc4ff;
|
||||
background-color: darkcyan;
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
animation: indeterminateAnimation 1s infinite linear;
|
||||
@ -73,8 +68,13 @@
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.flexcontainer-rev{
|
||||
display: flex;
|
||||
flex-wrap: wrap-reverse;
|
||||
}
|
||||
.subcontainer {
|
||||
min-width: 300px;
|
||||
max-width: 900px;
|
||||
flex-grow: 1;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
@ -100,7 +100,7 @@
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 900px) {
|
||||
@media (min-width: 1100px) {
|
||||
.plantcontainer {
|
||||
flex-grow: 1;
|
||||
min-width: 20%;
|
||||
@ -109,7 +109,7 @@
|
||||
padding: 8px;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1800px) {
|
||||
@media (min-width: 2150px) {
|
||||
.plantcontainer {
|
||||
flex-grow: 1;
|
||||
min-width: 200px;
|
||||
@ -132,75 +132,6 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.powerflexkey {
|
||||
min-width: 150px;
|
||||
}
|
||||
.powerflexvalue {
|
||||
text-wrap: nowrap;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.basicnetworkkey{
|
||||
min-width: 200px;
|
||||
}
|
||||
.basicnetworkvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.basicnetworkkeyssid1{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.basicnetworkkeyssid2{
|
||||
min-width: 50px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.mqttkey{
|
||||
min-width: 100px;
|
||||
}
|
||||
.mqttvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.otakey{
|
||||
min-width: 100px;
|
||||
}
|
||||
.otavalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.otaform {
|
||||
min-width: 100px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.otachooser {
|
||||
min-width: 100px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.lightcheckbox{
|
||||
margin: 0px;
|
||||
min-width: 20px
|
||||
}
|
||||
.lightkey{
|
||||
min-width: 200px;
|
||||
}
|
||||
.lightvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.lightnumberbox{
|
||||
min-width: 75px;
|
||||
}
|
||||
|
||||
.tankcheckbox {
|
||||
min-width: 20px;
|
||||
margin: 0px;
|
||||
}
|
||||
.tankkey{
|
||||
min-width: 250px;
|
||||
}
|
||||
.tankvalue{
|
||||
flex-grow: 1;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
@ -208,11 +139,11 @@
|
||||
|
||||
<div class="container-xl">
|
||||
<div style="display:flex; flex-wrap: wrap;">
|
||||
<div id="firmwareview" style="border-width: 1px; border-style: solid; flex-grow: 1; min-width: 350px">
|
||||
<div id="firmwareview" class="subcontainer">
|
||||
</div>
|
||||
<div id="timeview" style="border-width: 1px; border-style: solid; flex-grow: 1;">
|
||||
<div id="timeview" class="subcontainer">
|
||||
</div>
|
||||
<div id="batteryview" style="border-width: 1px; border-style: solid; flex-grow: 1;">
|
||||
<div id="batteryview" class="subcontainer">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -224,31 +155,32 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>config</h2>
|
||||
<h3>Plants:</h3>
|
||||
<button id="measure_moisture">Measure Moisture</button>
|
||||
<div id="plants" class="plantlist"></div>
|
||||
|
||||
<button id="submit">Submit</button>
|
||||
<div id="submit_status"></div>
|
||||
<br>
|
||||
<textarea id="json" cols=50 rows=10></textarea>
|
||||
<script src="bundle.js"></script>
|
||||
<div class="flexcontainer-rev">
|
||||
<div>
|
||||
<textarea id="json" cols=50 rows=10></textarea>
|
||||
<button id="submit">Submit</button>
|
||||
<div id="submit_status"></div>
|
||||
</div>
|
||||
<div id="fileview" class="subcontainer">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button id="exit">Exit</button>
|
||||
<button id="reboot">Reboot</button>
|
||||
|
||||
<script src="bundle.js"></script>
|
||||
</div>
|
||||
|
||||
<div id="progressPane" class="progressPane">
|
||||
<div class="progressPaneCenter">
|
||||
<div id="progressPaneBar" class="progress" data-label="50% Complete">
|
||||
<span id="progressPaneSpan" class="value" style="width:100%;"></span>
|
||||
</div>
|
||||
<div class="progressSpacer"></div>>
|
||||
<div id="progressPaneBar" class="progress" data-label="50% Complete">
|
||||
<span id="progressPaneSpan" class="value" style="width:100%;"></span>
|
||||
</div>
|
||||
<div class="progressSpacer"></div>>
|
||||
</div>
|
@ -1,4 +1,6 @@
|
||||
|
||||
import { deepEqual } from 'fast-equals';
|
||||
|
||||
declare var PUBLIC_URL: string;
|
||||
console.log("Url is " + PUBLIC_URL);
|
||||
|
||||
@ -14,8 +16,69 @@ import { SubmitView } from "./submitView";
|
||||
import { ProgressView } from "./progress";
|
||||
import { OTAView } from "./ota";
|
||||
import { BatteryView } from "./batteryview";
|
||||
import { FileView } from './fileview';
|
||||
|
||||
export class Controller {
|
||||
updateFileList() {
|
||||
fetch(PUBLIC_URL + "/files")
|
||||
.then(response => response.json())
|
||||
.then(json => json as FileList)
|
||||
.then(filelist => {
|
||||
controller.fileview.setFileList(filelist, PUBLIC_URL)
|
||||
})
|
||||
.catch(error => {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
uploadFile(file: File, name:string) {
|
||||
var current = 0;
|
||||
var max = 100;
|
||||
controller.progressview.addProgress("file_upload", (current / max) * 100, "Uploading File " + name + "(" + current + "/" + max + ")")
|
||||
var ajax = new XMLHttpRequest();
|
||||
ajax.upload.addEventListener("progress", event => {
|
||||
current = event.loaded / 1000;
|
||||
max = event.total / 1000;
|
||||
controller.progressview.addProgress("file_upload", (current / max) * 100, "Uploading File " + name + "(" + current + "/" + max + ")")
|
||||
}, false);
|
||||
ajax.addEventListener("load", () => {
|
||||
controller.progressview.removeProgress("file_upload")
|
||||
controller.updateFileList()
|
||||
}, false);
|
||||
ajax.addEventListener("error", () => {
|
||||
alert("Error upload")
|
||||
controller.progressview.removeProgress("file_upload")
|
||||
controller.updateFileList()
|
||||
}, false);
|
||||
ajax.addEventListener("abort", () => {
|
||||
alert("abort upload")
|
||||
controller.progressview.removeProgress("file_upload")
|
||||
controller.updateFileList()
|
||||
}, false);
|
||||
ajax.open("POST", PUBLIC_URL + "/file?filename="+name);
|
||||
ajax.send(file);
|
||||
}
|
||||
deleteFile(name:string) {
|
||||
controller.progressview.addIndeterminate("file_delete", "Deleting " + name);
|
||||
var ajax = new XMLHttpRequest();
|
||||
ajax.open("DELETE", PUBLIC_URL + "/file?filename="+name);
|
||||
ajax.send();
|
||||
ajax.addEventListener("error", () => {
|
||||
controller.progressview.removeProgress("file_delete")
|
||||
alert("Error delete")
|
||||
controller.updateFileList()
|
||||
}, false);
|
||||
ajax.addEventListener("abort", () => {
|
||||
controller.progressview.removeProgress("file_delete")
|
||||
alert("Error upload")
|
||||
controller.updateFileList()
|
||||
}, false);
|
||||
ajax.addEventListener("load", () => {
|
||||
controller.progressview.removeProgress("file_delete")
|
||||
controller.updateFileList()
|
||||
}, false);
|
||||
controller.updateFileList()
|
||||
}
|
||||
|
||||
updateRTCData() {
|
||||
fetch(PUBLIC_URL + "/time")
|
||||
.then(response => response.json())
|
||||
@ -81,12 +144,16 @@ export class Controller {
|
||||
.then(response => response.json())
|
||||
.then(loaded => {
|
||||
var currentConfig = loaded as PlantControllerConfig;
|
||||
this.setConfig(currentConfig);
|
||||
controller.setInitialConfig(currentConfig);
|
||||
controller.setConfig(currentConfig);
|
||||
//sync json view initially
|
||||
this.configChanged();
|
||||
controller.progressview.removeProgress("get_config")
|
||||
})
|
||||
}
|
||||
setInitialConfig(currentConfig: PlantControllerConfig) {
|
||||
this.initialConfig = currentConfig
|
||||
}
|
||||
uploadConfig(json: string, statusCallback: (status: string) => void) {
|
||||
controller.progressview.addIndeterminate("set_config", "Uploading Config")
|
||||
fetch(PUBLIC_URL + "/set_config", {
|
||||
@ -96,6 +163,8 @@ export class Controller {
|
||||
.then(response => response.text())
|
||||
.then(text => statusCallback(text))
|
||||
controller.progressview.removeProgress("set_config")
|
||||
//load from remote to be clean
|
||||
controller.downloadConfig()
|
||||
}
|
||||
syncRTCFromBrowser() {
|
||||
controller.progressview.addIndeterminate("write_rtc", "Writing RTC")
|
||||
@ -113,12 +182,19 @@ export class Controller {
|
||||
|
||||
configChanged() {
|
||||
const current = controller.getConfig();
|
||||
var pretty = JSON.stringify(current, undefined, 1);
|
||||
console.log(pretty)
|
||||
var pretty = JSON.stringify(current, undefined, 0);
|
||||
var initial = JSON.stringify(this.initialConfig, undefined, 0);
|
||||
controller.submitView.setJson(pretty);
|
||||
|
||||
if (deepEqual(current, controller.initialConfig)) {
|
||||
document.title = "PlantCtrl"
|
||||
} else {
|
||||
document.title = "*PlantCtrl"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
testPlant(plantId: number) {
|
||||
let counter = 0
|
||||
let limit = 30
|
||||
@ -261,8 +337,7 @@ export class Controller {
|
||||
setTimeout(this.waitForReboot, 1000)
|
||||
}
|
||||
|
||||
|
||||
|
||||
initialConfig: PlantControllerConfig | null = null
|
||||
readonly rebootBtn: HTMLButtonElement
|
||||
readonly exitBtn: HTMLButtonElement
|
||||
readonly timeView: TimeView;
|
||||
@ -274,6 +349,7 @@ export class Controller {
|
||||
readonly firmWareView: OTAView;
|
||||
readonly progressview: ProgressView;
|
||||
readonly batteryView: BatteryView;
|
||||
readonly fileview: FileView;
|
||||
constructor() {
|
||||
this.timeView = new TimeView(this)
|
||||
this.plantViews = new PlantViews(this)
|
||||
@ -284,6 +360,7 @@ export class Controller {
|
||||
this.submitView = new SubmitView(this)
|
||||
this.firmWareView = new OTAView(this)
|
||||
this.progressview = new ProgressView(this)
|
||||
this.fileview = new FileView(this)
|
||||
this.rebootBtn = document.getElementById("reboot") as HTMLButtonElement
|
||||
this.rebootBtn.onclick = () => {
|
||||
controller.reboot();
|
||||
@ -300,5 +377,6 @@ controller.updateBatteryData();
|
||||
controller.downloadConfig();
|
||||
//controller.measure_moisture();
|
||||
controller.version();
|
||||
controller.updateFileList();
|
||||
controller.progressview.removeProgress("rebooting");
|
||||
|
||||
|
@ -1,3 +1,25 @@
|
||||
<style>
|
||||
.basicnetworkkey{
|
||||
min-width: 200px;
|
||||
}
|
||||
.basicnetworkvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.basicnetworkkeyssid1{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.basicnetworkkeyssid2{
|
||||
min-width: 50px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.mqttkey{
|
||||
min-width: 100px;
|
||||
}
|
||||
.mqttvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
</style>
|
||||
<div>
|
||||
<div class="flexcontainer">
|
||||
<div class="subcontainer">
|
||||
@ -14,7 +36,7 @@
|
||||
|
||||
<div class="flexcontainer">
|
||||
<label class="basicnetworkkey" for="ssid">Station Mode:</label>
|
||||
<input class="basicnetworkkeyssid1" type="text" id="ssid" list="ssidlist">
|
||||
<input class="basicnetworkkeyssid1" type="search" id="ssid" list="ssidlist">
|
||||
<datalist id="ssidlist">
|
||||
<option value="Not scanned yet">
|
||||
</datalist>
|
||||
|
@ -1,5 +1,22 @@
|
||||
<style>
|
||||
.lightcheckbox{
|
||||
margin: 0px;
|
||||
min-width: 20px
|
||||
}
|
||||
.lightkey{
|
||||
min-width: 200px;
|
||||
}
|
||||
.lightvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.lightnumberbox{
|
||||
min-width: 50px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="subtitle">Light:</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="flexcontainer" style="text-decoration-line: line-through;">
|
||||
<div class="lightkey">Enable Nightlight</div>
|
||||
<input class="lightcheckbox" type="checkbox" id="night_lamp_enabled" checked="false">
|
||||
</div>
|
||||
|
@ -1,3 +1,19 @@
|
||||
<style>
|
||||
.otakey{
|
||||
min-width: 100px;
|
||||
}
|
||||
.otavalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.otaform {
|
||||
min-width: 100px;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.otachooser {
|
||||
min-width: 100px;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div class="flexcontainer">
|
||||
<div class="subtitle">
|
||||
Current Firmware
|
||||
@ -11,6 +27,10 @@
|
||||
<span class="otakey">Buildhash:</span>
|
||||
<span class="otavalue" id="firmware_githash"></span>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<span class="otakey">Partition:</span>
|
||||
<span class="otavalue" id="firmware_partition"></span>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<form class="otaform" id="upload_form" method="post">
|
||||
<input class="otachooser" type="file" name="file1" id="firmware_file"><br>
|
||||
|
@ -1,16 +1,19 @@
|
||||
import { Controller } from "./main";
|
||||
|
||||
export class OTAView {
|
||||
file1Upload: HTMLInputElement;
|
||||
firmware_buildtime: HTMLDivElement;
|
||||
firmware_githash: HTMLDivElement;
|
||||
readonly file1Upload: HTMLInputElement;
|
||||
readonly firmware_buildtime: HTMLDivElement;
|
||||
readonly firmware_githash: HTMLDivElement;
|
||||
readonly firmware_partition: HTMLDivElement;
|
||||
|
||||
constructor(controller: Controller) {
|
||||
(document.getElementById("firmwareview") as HTMLElement).innerHTML = require("./ota.html")
|
||||
|
||||
this.firmware_buildtime = document.getElementById("firmware_buildtime") as HTMLDivElement;
|
||||
this.firmware_githash = document.getElementById("firmware_githash") as HTMLDivElement;
|
||||
this.firmware_partition = document.getElementById("firmware_partition") as HTMLDivElement;
|
||||
|
||||
|
||||
const file = document.getElementById("firmware_file") as HTMLInputElement;
|
||||
this.file1Upload = file
|
||||
this.file1Upload.onchange = () => {
|
||||
@ -26,5 +29,6 @@ export class OTAView {
|
||||
setVersion(versionInfo: VersionInfo) {
|
||||
this.firmware_buildtime.innerText = versionInfo.build_time;
|
||||
this.firmware_githash.innerText = versionInfo.git_hash;
|
||||
this.firmware_partition.innerText = versionInfo.partition;
|
||||
}
|
||||
}
|
@ -1,65 +1,88 @@
|
||||
<style>
|
||||
.plantsensorkey{
|
||||
min-width: 100px;
|
||||
}
|
||||
.plantsensorvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.plantkey{
|
||||
min-width: 175px;
|
||||
}
|
||||
.plantvalue{
|
||||
flex-grow: 1;
|
||||
}
|
||||
.plantcheckbox{
|
||||
min-width: 20px;
|
||||
margin: 0px;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div>
|
||||
<div style="font-weight: bold; text-align: center; flex-grow: 1;"
|
||||
id="plant_${plantId}_header">Plant ${plantId}</div>
|
||||
<div class="subtitle"
|
||||
id="plant_${plantId}_header">
|
||||
Plant ${plantId}
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col-1"></div>
|
||||
<button class="col-10" id="plant_${plantId}_test">Test</button>
|
||||
<div class="col-1"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">Live:</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">Sensor A:</div>
|
||||
<span class="col-4" id="plant_${plantId}_moisture_a">loading</span>
|
||||
<div class="col-7">Sensor B:</div>
|
||||
<span class="col-4" id="plant_${plantId}_moisture_b">loading</span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">
|
||||
Mode:
|
||||
</div>
|
||||
<select class="col-4" id="plant_${plantId}_mode">
|
||||
<select class="plantvalue" id="plant_${plantId}_mode">
|
||||
<option value="OFF">Off</option>
|
||||
<option value="TargetMoisture">Target</option>
|
||||
<option value="TimerOnly">Timer</option>
|
||||
</select>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">Target Moisture:</div>
|
||||
<input class="col-4" id="plant_${plantId}_target_moisture" type="number" min="0" max="100" placeholder="0">
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">Target Moisture:</div>
|
||||
<input class="plantvalue" id="plant_${plantId}_target_moisture" type="number" min="0" max="100" placeholder="0">
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">Pump Time (s):</div>
|
||||
<input class="col-4" id="plant_${plantId}_pump_time_s" type="number" min="0" max="600" placeholder="30">
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">Pump Time (s):</div>
|
||||
<input class="plantvalue" id="plant_${plantId}_pump_time_s" type="number" min="0" max="600" placeholder="30">
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-7">Pump Cooldown (m):</div>
|
||||
<input class="col-4" id="plant_${plantId}_pump_cooldown_min" type="number" min="0" max="600" placeholder="30">
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">Pump Cooldown (m):</div>
|
||||
<input class="plantvalue" id="plant_${plantId}_pump_cooldown_min" type="number" min="0" max="600" placeholder="30">
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">"Pump Hour Start":</div>
|
||||
<select class="col-4" id="plant_${plantId}_pump_hour_start">10</select>
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">"Pump Hour Start":</div>
|
||||
<select class="plantvalue" id="plant_${plantId}_pump_hour_start">10</select>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">"Pump Hour End":</div>
|
||||
<select class="col-4" id="plant_${plantId}_pump_hour_end">19</select>
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">"Pump Hour End":</div>
|
||||
<select class="plantvalue" id="plant_${plantId}_pump_hour_end">19</select>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">Sensor B installed:</div>
|
||||
<input class="col-4" id="plant_${plantId}_sensor_b" type="checkbox">
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7">Warn Pump Count:</div>
|
||||
<input class="col-4" id="plant_${plantId}_max_consecutive_pump_count" type="number" min="1" , max="50" ,
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">Warn Pump Count:</div>
|
||||
<input class="plantvalue" id="plant_${plantId}_max_consecutive_pump_count" type="number" min="1" , max="50" ,
|
||||
placeholder="10">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flexcontainer">
|
||||
<div class="plantkey">Sensor B installed:</div>
|
||||
<input class="plantcheckbox" id="plant_${plantId}_sensor_b" type="checkbox">
|
||||
</div>
|
||||
|
||||
<div class="flexcontainer">
|
||||
<button class="subtitle" id="plant_${plantId}_test">Test Pump</button>
|
||||
</div>
|
||||
|
||||
<div class="flexcontainer">
|
||||
<div class="subtitle">Live:</div>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<span class="plantsensorkey">Sensor A:</span>
|
||||
<span class="plantsensorvalue" id="plant_${plantId}_moisture_a">loading</span>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="plantsensorkey">Sensor B:</div>
|
||||
<span class="plantsensorvalue" id="plant_${plantId}_moisture_b">loading</span>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
@ -144,7 +144,6 @@ export class PlantView {
|
||||
}
|
||||
|
||||
setConfig(plantConfig: PlantConfig) {
|
||||
console.log("apply config to ui plant " + this.plantId + " config: " + JSON.stringify(plantConfig))
|
||||
this.mode.value = plantConfig.mode;
|
||||
this.targetMoisture.value = plantConfig.target_moisture.toString();
|
||||
this.pumpTimeS.value = plantConfig.pump_time_s.toString();
|
||||
|
@ -44,14 +44,14 @@ export class ProgressView{
|
||||
|
||||
addIndeterminate(id:string, displayText:string){
|
||||
this.progresses.set(id, new ProgressInfo(displayText,0,true))
|
||||
this.progressPane.style.display = "block"
|
||||
this.progressPane.style.display = "flex"
|
||||
this.updateView();
|
||||
|
||||
}
|
||||
|
||||
addProgress(id:string, value:number, displayText:string) {
|
||||
this.progresses.set(id, new ProgressInfo(displayText,value, false))
|
||||
this.progressPane.style.display = "block"
|
||||
this.progressPane.style.display = "flex"
|
||||
this.updateView();
|
||||
}
|
||||
removeProgress(id:string){
|
||||
|
@ -1,7 +1,21 @@
|
||||
<style>
|
||||
.tankcheckbox {
|
||||
min-width: 20px;
|
||||
margin: 0px;
|
||||
}
|
||||
.tankkey{
|
||||
min-width: 250px;
|
||||
}
|
||||
.tankvalue{
|
||||
flex-grow: 1;
|
||||
margin: 0px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="flexcontainer">
|
||||
<div class="subtitle">Tank:</div>
|
||||
</div>
|
||||
<div class="flexcontainer">
|
||||
<div class="flexcontainer" style="text-decoration-line: line-through;">
|
||||
<span class="tankkey">Enable Tank Sensor</span>
|
||||
<input class="tankcheckbox" type="checkbox" id="tank_sensor_enabled">
|
||||
</div>
|
||||
|
@ -8,7 +8,8 @@ const isDevServer = process.env.WEBPACK_SERVE;
|
||||
console.log("Dev server is " + isDevServer);
|
||||
var host;
|
||||
if (isDevServer){
|
||||
host = 'http://10.23.43.24';
|
||||
//ensure no trailing /
|
||||
host = 'http://192.168.1.172';
|
||||
} else {
|
||||
host = '';
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user