Watch
0
0
Fork
You've already forked esp32-c_its-companion
0

Compare commits

..
Author SHA1 Message Date
Jannik Beyerstedt
3733f056ef WIP denm: Show warning symbol
TODO: Show distance to DENM?
2026-09-07 16:26:37 +02:00
15 changed files with 22 additions and 240279 deletions

3
.gitignore vendored
View file

@ -28,6 +28,3 @@ target/
# Ignore KiCad backups and lock files
hardware/c_its-companion/c_its-companion-backups/
*.kicad_pro.lck
# Ignore FreeCAD backups
*.FCBak

View file

@ -120,24 +120,6 @@ The unit tests in this project are meant to be run on the host:
cargo test --target host-tuple --bin test --no-default-features -F std,spat
```
## PCB and Housing
A simple PCB to combine the u-blox SAM-M10Q, a XIAO ESP32-C5 and the screen can be found in [hardware/c_its-companion/](./hardware/c_its-companion/) including finished gerber files.
Additional hardware:
- SMD Pin-Header 8 pos.: Amphenol 10129380-908001BLF
- Snap-in stand-off 8mm: WE 702910000
(You may try to put the display lower with header Samtech TSM-108-04-T-SV and stand-off WE 702917000, but antenna needs to be plugged in before putting the display on then.)
The housing is a FreeCAD model at [hardware/housing/c_its-companion-housing.FCStd](./hardware/housing/c_its-companion-housing.FCStd), but the same folder also contains finished 3mf models that can be loaded into a 3D printer slicer.
Exports are available for:
- 2mm: no battery (just display standoffs)
- 7mm: EREMIT 654060 (6.5x40x60 mm) LiPo battery
- 9mm: Some 9x40x60 mm LiPo battery, e.g. LP803860 (2000 mAh)
The display is expected to be soldered to the pin header directly to save height.
## Tips and Tricks
### Create TGA Assets

View file

@ -99,7 +99,6 @@
)
(capping no)
(filling no)
(aux_axis_origin 80 169)
(pcbplotparams
(layerselection 0x00000000_00000000_55555555_5755f5ff)
(plot_on_all_layers_selection 0x00000000_00000000_00000000_00000000)
@ -563,8 +562,8 @@
(xy -3.020759 1.67015) (xy -2.902296 1.799665) (xy -2.80614 1.946593) (xy -2.735551 2.107712) (xy -2.716425 2.170804)
(xy -2.698044 2.270947) (xy -2.689557 2.388431) (xy -2.690963 2.510483) (xy -2.702263 2.624336)
(xy -2.716425 2.693699) (xy -2.77566 2.856203) (xy -2.861703 3.007451) (xy -2.970947 3.143618) (xy -3.099784 3.260884)
(xy -3.244606 3.355424) (xy -3.401806 3.423421) (xy -3.406737 3.425031) (xy -3.51052 3.449266) (xy -3.63247 3.463095)
(xy -3.760725 3.466236) (xy -3.883419 3.458403) (xy -3.988688 3.43931) (xy -3.989598 3.439065) (xy -4.154267 3.380019)
(xy -3.244606 3.355425) (xy -3.401806 3.423421) (xy -3.406737 3.425031) (xy -3.51052 3.449266) (xy -3.63247 3.463095)
(xy -3.760725 3.466236) (xy -3.883419 3.458403) (xy -3.988688 3.43931) (xy -3.989598 3.439065) (xy -4.154266 3.380019)
(xy -4.303264 3.295183) (xy -4.440833 3.182095) (xy -4.454033 3.169227) (xy -4.572775 3.033788)
(xy -4.661492 2.89078) (xy -4.721491 2.737075) (xy -4.754073 2.569545) (xy -4.761303 2.432252) (xy -4.167311 2.432252)
(xy -4.152257 2.536497) (xy -4.110172 2.636271) (xy -4.045673 2.72544) (xy -3.963374 2.797871) (xy -3.867894 2.84743)
@ -574,7 +573,7 @@
(xy -3.525746 2.046501) (xy -3.630353 2.009563) (xy -3.740415 1.997868) (xy -3.848554 2.012415)
(xy -3.924207 2.041274) (xy -4.006823 2.09932) (xy -4.077345 2.179239) (xy -4.130646 2.272782) (xy -4.161596 2.371703)
(xy -4.167311 2.432252) (xy -4.761303 2.432252) (xy -4.748663 2.252944) (xy -4.70981 2.089807) (xy -4.643347 1.939497)
(xy -4.547876 1.798667) (xy -4.452658 1.693534) (xy -4.31628 1.579375) (xy -4.163124 1.489123) (xy -3.999316 1.426267)
(xy -4.547876 1.798667) (xy -4.452659 1.693534) (xy -4.31628 1.579375) (xy -4.163124 1.489123) (xy -3.999316 1.426267)
(xy -3.969878 1.418311) (xy -3.883859 1.40358) (xy -3.77933 1.396204) (xy -3.668608 1.396182)
)
(stroke
@ -592,19 +591,19 @@
(xy 6.803727 2.037089) (xy 6.830589 2.107423) (xy 6.855054 2.205848) (xy 6.870081 2.323058) (xy 6.875185 2.447441)
(xy 6.869883 2.567382) (xy 6.854007 2.669931) (xy 6.813031 2.805683) (xy 6.755203 2.927307) (xy 6.676058 3.042494)
(xy 6.571128 3.158938) (xy 6.56849 3.161579) (xy 6.462413 3.258894) (xy 6.360114 3.332673) (xy 6.252438 3.388308)
(xy 6.13023 3.431194) (xy 6.093984 3.441175) (xy 5.992929 3.459437) (xy 5.874733 3.467883) (xy 5.752404 3.466428)
(xy 5.638968 3.454984) (xy 5.585658 3.444542) (xy 5.42618 3.390141) (xy 5.277218 3.3084) (xy 5.142273 3.202873)
(xy 6.13023 3.431194) (xy 6.093984 3.441175) (xy 5.992929 3.459437) (xy 5.874732 3.467883) (xy 5.752404 3.466428)
(xy 5.638968 3.454984) (xy 5.585658 3.444542) (xy 5.42618 3.390141) (xy 5.277218 3.308399) (xy 5.142273 3.202873)
(xy 5.024848 3.077127) (xy 4.928443 2.934723) (xy 4.856563 2.779222) (xy 4.823972 2.669931) (xy 4.807942 2.565727)
(xy 4.802794 2.445638) (xy 4.803359 2.432252) (xy 5.40394 2.432251) (xy 5.418595 2.549248) (xy 5.461436 2.652939)
(xy 5.530774 2.740594) (xy 5.624919 2.809483) (xy 5.643233 2.819114) (xy 5.711573 2.849154) (xy 5.771665 2.864046)
(xy 5.838989 2.867997) (xy 5.907387 2.863892) (xy 5.96748 2.848772) (xy 6.034746 2.819114) (xy 6.128982 2.755368)
(xy 6.201818 2.671708) (xy 6.250892 2.57337) (xy 6.273842 2.465588) (xy 6.268306 2.353598) (xy 6.260436 2.318842)
(xy 6.216702 2.214791) (xy 6.148741 2.126763) (xy 6.06148 2.058537) (xy 5.959841 2.013888) (xy 5.848749 1.996595)
(xy 6.216702 2.214791) (xy 6.148741 2.126763) (xy 6.06148 2.058537) (xy 5.959841 2.013888) (xy 5.84875 1.996595)
(xy 5.840136 1.996506) (xy 5.726105 2.011219) (xy 5.623684 2.052887) (xy 5.536582 2.117807) (xy 5.468506 2.202275)
(xy 5.423165 2.302586) (xy 5.404265 2.415036) (xy 5.40394 2.432251) (xy 4.803359 2.432252) (xy 4.808046 2.321278)
(xy 4.823213 2.204255) (xy 4.84739 2.107421) (xy 4.915607 1.952101) (xy 5.009378 1.80597) (xy 5.108782 1.692104)
(xy 4.823213 2.204255) (xy 4.84739 2.107422) (xy 4.915607 1.952101) (xy 5.009378 1.80597) (xy 5.108782 1.692104)
(xy 5.227529 1.588985) (xy 5.353843 1.509207) (xy 5.499074 1.445614) (xy 5.500936 1.444936) (xy 5.551179 1.427688)
(xy 5.595672 1.415871) (xy 5.64244 1.408486) (xy 5.699516 1.404534) (xy 5.774919 1.403016) (xy 5.838989 1.402863)
(xy 5.595672 1.415871) (xy 5.642441 1.408486) (xy 5.699516 1.404534) (xy 5.774919 1.403016) (xy 5.838989 1.402863)
)
(stroke
(width 0)
@ -621,9 +620,9 @@
(xy 0.38529 -2.153105) (xy 0.422645 -2.126534) (xy 0.447277 -2.101608) (xy 0.451031 -2.095582) (xy 0.454427 -2.08621)
(xy 0.457484 -2.071964) (xy 0.460219 -2.051314) (xy 0.462651 -2.022731) (xy 0.464797 -1.984688)
(xy 0.466677 -1.935655) (xy 0.468307 -1.874104) (xy 0.469706 -1.798505) (xy 0.470893 -1.707331)
(xy 0.471885 -1.599052) (xy 0.472699 -1.472141) (xy 0.473356 -1.325065) (xy 0.473871 -1.1563) (xy 0.474265 -0.964318)
(xy 0.471885 -1.599052) (xy 0.472699 -1.472141) (xy 0.473356 -1.325065) (xy 0.473871 -1.1563) (xy 0.474265 -0.964317)
(xy 0.474554 -0.747584) (xy 0.474756 -0.504574) (xy 0.474891 -0.233759) (xy 0.474975 0.06639) (xy 0.475006 0.24164)
(xy 0.475358 2.551091) (xy -0.522895 2.551091) (xy -1.521148 2.551091) (xy -1.521148 0.238895) (xy -1.521146 -0.929276)
(xy 0.475358 2.551091) (xy -0.522895 2.551091) (xy -1.521148 2.551091) (xy -1.521148 0.238895) (xy -1.521147 -0.929276)
(xy -1.204242 -0.929276) (xy -1.204144 -0.800708) (xy -1.203653 -0.699729) (xy -1.202479 -0.622239)
(xy -1.20033 -0.564137) (xy -1.196913 -0.521322) (xy -1.191937 -0.489693) (xy -1.18511 -0.465149)
(xy -1.17614 -0.44359) (xy -1.16859 -0.428392) (xy -1.138226 -0.378967) (xy -1.102126 -0.343806)
@ -638,10 +637,10 @@
(xy 0.072506 -1.466584) (xy 0.036101 -1.496396) (xy -0.015148 -1.517264) (xy -0.086182 -1.530941)
(xy -0.181945 -1.53918) (xy -0.225795 -1.541247) (xy -0.411978 -1.548656) (xy -0.411978 -0.924858)
(xy -0.665501 -0.924858) (xy -0.665502 -1.532219) (xy -0.830709 -1.541574) (xy -0.935156 -1.54482)
(xy -1.013902 -1.540428) (xy -1.072228 -1.527432) (xy -1.115412 -1.504867) (xy -1.137021 -1.48552)
(xy -1.013902 -1.540428) (xy -1.072228 -1.527432) (xy -1.115413 -1.504867) (xy -1.137021 -1.48552)
(xy -1.156155 -1.462999) (xy -1.171293 -1.43833) (xy -1.182897 -1.407684) (xy -1.191429 -1.367229)
(xy -1.197354 -1.313136) (xy -1.201133 -1.241574) (xy -1.203229 -1.148712) (xy -1.204106 -1.03072)
(xy -1.204242 -0.929276) (xy -1.521146 -0.929276) (xy -1.521148 -2.073302) (xy -1.480126 -2.122054)
(xy -1.204242 -0.929276) (xy -1.521147 -0.929276) (xy -1.521148 -2.073302) (xy -1.480126 -2.122054)
(xy -1.439104 -2.170805) (xy -0.544212 -2.170805)
)
(stroke
@ -658,7 +657,7 @@
(xy 3.758519 -1.796373) (xy 3.813961 -1.782842) (xy 3.865837 -1.765225) (xy 3.918162 -1.743043)
(xy 3.970277 -1.718132) (xy 3.998375 -1.702797) (xy 4.031507 -1.681607) (xy 4.071624 -1.652945)
(xy 4.120678 -1.615192) (xy 4.180618 -1.566731) (xy 4.253398 -1.505941) (xy 4.340968 -1.431207)
(xy 4.445277 -1.340909) (xy 4.56828 -1.23343) (xy 4.711926 -1.107151) (xy 4.790186 -1.038144) (xy 4.919766 -0.924138)
(xy 4.445277 -1.340909) (xy 4.56828 -1.23343) (xy 4.711926 -1.107151) (xy 4.790186 -1.038144) (xy 4.919767 -0.924138)
(xy 5.044022 -0.815478) (xy 5.160619 -0.714156) (xy 5.267232 -0.622165) (xy 5.361533 -0.541497)
(xy 5.441194 -0.474144) (xy 5.503887 -0.422099) (xy 5.547285 -0.387355) (xy 5.567732 -0.372633)
(xy 5.611519 -0.352992) (xy 5.683694 -0.328238) (xy 5.78152 -0.299205) (xy 5.902257 -0.266724) (xy 5.983755 -0.246127)
@ -688,11 +687,11 @@
(xy 2.602471 2.161395) (xy 2.602063 2.012563) (xy 2.601756 1.843069) (xy 2.601554 1.65475) (xy 2.601459 1.449444)
(xy 2.601476 1.228989) (xy 2.601606 0.995223) (xy 2.601852 0.749985) (xy 2.602218 0.495111) (xy 2.602477 0.348596)
(xy 2.605615 -1.317759) (xy 2.955146 -1.317759) (xy 2.955146 -0.763538) (xy 2.955216 -0.616152)
(xy 2.955542 -0.497162) (xy 2.956302 -0.403273) (xy 2.957672 -0.33119) (xy 2.959831 -0.277617) (xy 2.962955 -0.239263)
(xy 2.955542 -0.497162) (xy 2.956302 -0.403273) (xy 2.957672 -0.33119) (xy 2.959831 -0.277617) (xy 2.962955 -0.239262)
(xy 2.967222 -0.212827) (xy 2.972808 -0.195018) (xy 2.97989 -0.182542) (xy 2.986837 -0.174092) (xy 3.021094 -0.143478)
(xy 3.050218 -0.125897) (xy 3.0722 -0.12321) (xy 3.122548 -0.120668) (xy 3.197938 -0.118332) (xy 3.295047 -0.116264)
(xy 3.410551 -0.114524) (xy 3.541125 -0.113174) (xy 3.683446 -0.112277) (xy 3.805947 -0.111922)
(xy 4.529986 -0.110917) (xy 4.574444 -0.14912) (xy 4.592199 -0.165305) (xy 4.604601 -0.18197) (xy 4.612777 -0.204936)
(xy 4.529986 -0.110917) (xy 4.574444 -0.14912) (xy 4.5922 -0.165305) (xy 4.604601 -0.18197) (xy 4.612777 -0.204936)
(xy 4.61786 -0.240027) (xy 4.620984 -0.29306) (xy 4.623282 -0.369858) (xy 4.624125 -0.404463) (xy 4.625383 -0.487394)
(xy 4.62515 -0.56159) (xy 4.623544 -0.619924) (xy 4.620683 -0.655272) (xy 4.619902 -0.659238) (xy 4.606064 -0.678508)
(xy 4.571452 -0.715461) (xy 4.519312 -0.767112) (xy 4.45289 -0.830475) (xy 4.375435 -0.902563) (xy 4.290192 -0.980391)
@ -739,7 +738,7 @@
(xy -1.737183 -1.730301) (xy -1.738548 -1.593847) (xy -1.739713 -1.434015) (xy -1.740685 -1.249698)
(xy -1.741473 -1.039789) (xy -1.742087 -0.803179) (xy -1.742534 -0.538761) (xy -1.742824 -0.245426)
(xy -1.742965 0.077933) (xy -1.742982 0.252618) (xy -1.742982 2.551091) (xy -2.025776 2.551091)
(xy -2.30857 2.551093) (xy -2.318325 2.380597) (xy -2.345454 2.170031) (xy -2.401206 1.970426) (xy -2.484079 1.784062)
(xy -2.30857 2.551092) (xy -2.318325 2.380597) (xy -2.345454 2.170031) (xy -2.401206 1.970426) (xy -2.484079 1.784062)
(xy -2.592573 1.613221) (xy -2.725189 1.460182) (xy -2.880426 1.327227) (xy -3.056784 1.216635)
(xy -3.097754 1.195783) (xy -3.289659 1.119032) (xy -3.487713 1.072201) (xy -3.688712 1.054929)
(xy -3.889457 1.066856) (xy -4.086743 1.107622) (xy -4.277367 1.176867) (xy -4.458126 1.274231)
@ -763,7 +762,7 @@
(xy -4.028433 -0.526412) (xy -3.95776 -0.4867) (xy -3.894178 -0.450473) (xy -3.816412 -0.406572)
(xy -3.748466 -0.369481) (xy -3.694936 -0.341606) (xy -3.660412 -0.32535) (xy -3.649512 -0.322374)
(xy -3.638054 -0.339418) (xy -3.61475 -0.377855) (xy -3.582859 -0.431997) (xy -3.545632 -0.496155)
(xy -3.506328 -0.564639) (xy -3.468202 -0.631763) (xy -3.434509 -0.69183) (xy -3.408505 -0.739159)
(xy -3.506328 -0.564639) (xy -3.468202 -0.631762) (xy -3.434509 -0.69183) (xy -3.408505 -0.739159)
(xy -3.393447 -0.768057) (xy -3.391009 -0.774085) (xy -3.404141 -0.784864) (xy -3.440476 -0.808347)
(xy -3.495537 -0.841806) (xy -3.564848 -0.882507) (xy -3.628572 -0.919027) (xy -3.706151 -0.963539)
(xy -3.773122 -1.002933) (xy -3.825012 -1.034498) (xy -3.857348 -1.055523) (xy -3.866134 -1.062977)
@ -786,7 +785,7 @@
(xy -7.288713 -1.354772) (xy -7.288656 -1.576176) (xy -7.28853 -1.829676) (xy -7.288333 -2.057246)
(xy -7.288048 -2.260328) (xy -7.287658 -2.440361) (xy -7.287147 -2.598785) (xy -7.286497 -2.737041)
(xy -7.286487 -2.738455) (xy -6.718403 -2.738455) (xy -6.71632 -2.64197) (xy -6.709211 -2.572017)
(xy -6.695784 -2.523654) (xy -6.674746 -2.491944) (xy -6.649253 -2.47406) (xy -6.619686 -2.467824)
(xy -6.695784 -2.523654) (xy -6.674746 -2.491944) (xy -6.649253 -2.47406) (xy -6.619687 -2.467824)
(xy -6.561212 -2.463351) (xy -6.476559 -2.460748) (xy -6.368465 -2.460125) (xy -6.308983 -2.460562)
(xy -6.002557 -2.463943) (xy -5.964348 -2.508401) (xy -5.947373 -2.530542) (xy -5.936323 -2.554353)
(xy -5.929941 -2.586969) (xy -5.92697 -2.635531) (xy -5.926154 -2.707173) (xy -5.926139 -2.72539)
@ -812,8 +811,8 @@
(xy -2.354218 -2.997367) (xy -2.411725 -2.998243) (xy -2.52783 -2.999894) (xy -2.616461 -3.000787)
(xy -2.681834 -3.000486) (xy -2.728164 -2.998557) (xy -2.759668 -2.994567) (xy -2.78056 -2.98808)
(xy -2.795057 -2.978662) (xy -2.807373 -2.965879) (xy -2.81526 -2.956655) (xy -2.831694 -2.934926)
(xy -2.842382 -2.910842) (xy -2.848545 -2.877307) (xy -2.851394 -2.827231) (xy -2.852143 -2.753522)
(xy -2.852152 -2.741384) (xy -5.926248 -2.741384) (xy -5.926667 -2.802648) (xy -5.929088 -2.855359)
(xy -2.842382 -2.910842) (xy -2.848545 -2.877307) (xy -2.851394 -2.827231) (xy -2.852144 -2.753522)
(xy -2.852152 -2.741384) (xy -5.926248 -2.741384) (xy -5.926667 -2.802648) (xy -5.929089 -2.855359)
(xy -5.934666 -2.890659) (xy -5.944653 -2.915685) (xy -5.960307 -2.937575) (xy -5.964377 -2.942377)
(xy -6.002616 -2.986832) (xy -6.30109 -2.996639) (xy -6.397268 -2.999082) (xy -6.484282 -2.999951)
(xy -6.556481 -2.999292) (xy -6.608213 -2.997158) (xy -6.633616 -2.99368) (xy -6.66858 -2.974935)
@ -826,7 +825,7 @@
(xy -7.162357 -3.444481) (xy -7.153911 -3.447159) (xy -7.142305 -3.449641) (xy -7.126454 -3.451938)
(xy -7.105275 -3.454055) (xy -7.077685 -3.456) (xy -7.042598 -3.457781) (xy -6.998933 -3.459402)
(xy -6.945605 -3.460874) (xy -6.88153 -3.462203) (xy -6.805626 -3.463396) (xy -6.716807 -3.464461)
(xy -6.613993 -3.465405) (xy -6.496094 -3.466235) (xy -6.362033 -3.466958) (xy -6.210722 -3.467583)
(xy -6.613992 -3.465405) (xy -6.496094 -3.466235) (xy -6.362033 -3.466958) (xy -6.210722 -3.467583)
(xy -6.04108 -3.468115) (xy -5.852022 -3.468563) (xy -5.642465 -3.468934) (xy -5.411324 -3.469235)
(xy -5.157517 -3.469473) (xy -4.879959 -3.469656) (xy -4.577567 -3.469791) (xy -4.249257 -3.469885)
(xy -3.893946 -3.469946) (xy -3.51055 -3.46998) (xy -3.097985 -3.469996) (xy -2.655167 -3.47) (xy -2.503555 -3.47)

View file

@ -622,7 +622,7 @@
"netlist": "",
"plot": "",
"specctra_dsn": "",
"step": "../housing/c_its-companion-v1.0.step",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""

File diff suppressed because it is too large Load diff

View file

@ -585,7 +585,6 @@ async fn main(spawner: Spawner) -> ! {
.update(screen::ScreenState::DenmWarning(cc))
.inspect_err(log_screen_error);
}
// TODO: cancel screen, if None?
_ => {}
}

View file

@ -7,9 +7,6 @@ use embedded_graphics::{geometry, mono_font, pixelcolor, primitives, text};
use crate::applogic;
#[cfg(feature = "denm")]
const DENM_MIN_DISPLAY_TIME: esp_hal::time::Duration = esp_hal::time::Duration::from_secs(5);
pub struct DisplaySize {
width: u16,
height: u16,
@ -28,8 +25,6 @@ where
prev_state: ScreenState,
hb_state: bool,
gnss_hb_state: bool,
#[cfg(feature = "denm")]
denm_display_start_time: esp_hal::time::Instant,
// assets
#[cfg(feature = "spat")]
@ -140,8 +135,6 @@ where
prev_state: ScreenState::Uninitialized,
hb_state: false,
gnss_hb_state: false,
#[cfg(feature = "denm")]
denm_display_start_time: esp_hal::time::Instant::EPOCH,
#[cfg(feature = "spat")]
bike_image,
// #[cfg(feature = "denm")]
@ -156,27 +149,6 @@ where
}
pub fn update(&mut self, state: ScreenState) -> Result<(), D::Error> {
#[cfg(feature = "denm")]
let now = esp_hal::time::Instant::now();
#[cfg(feature = "denm")]
// when a DENM was shown before, make sure it's shown for a minimum time
if let ScreenState::DenmWarning(_) = self.prev_state {
use core::ops::Sub;
// update DENM display, if there are updates
if self.prev_state != state
&& let ScreenState::DenmWarning(cause_code_choice) = &state
{
return self.draw_denm_warning(cause_code_choice);
}
// otherwise early return when timer isn't expired yet
if now.sub(self.denm_display_start_time) < DENM_MIN_DISPLAY_TIME {
return Ok(());
}
}
if self.prev_state != state {
match &state {
ScreenState::Uninitialized | ScreenState::Initial => self.draw_slash_screen()?,
@ -195,7 +167,6 @@ where
ScreenState::Error(msg) => self.draw_message(msg)?,
#[cfg(feature = "denm")]
ScreenState::DenmWarning(cause_code_choice) => {
self.denm_display_start_time = now;
self.draw_denm_warning(cause_code_choice)?
}
}
@ -234,7 +205,6 @@ where
}
// on big screns: uses full screen width and height from 250 to 280 pixels
#[cfg(feature = "gnss_ubx")]
pub fn update_gnss(
&mut self,
pvt: &ublox::nav_pvt::proto27::NavPvtRef,