acme-camera: note fixes, broker/software-design placeholders, PowerReading fields, Weekday derives

e6cddda · Gabriel Morell · 2026-10-13 18:41

3 files +20 -10

Files changed

modified content/presentations/acme-camera.md
+20 −10
@@ -40,7 +40,7 @@ ultra-low power attached to motion sensors, lighting, and power control
40 40
41 41 ## SOC
42 42
43 −attached to camera/storage and spends most of its' time in deep sleep
43 +attached to camera/storage and spends most of its time in deep sleep
44 44
45 45 --
46 46
@@ -86,7 +86,7 @@ to support Infrared and Visible Spots for lighting areas for improved visibility
86 86
87 87 # Power Subsystem
88 88
89 −- Battery Charge Controller & Guage
89 +- Battery Charge Controller & Gauge
90 90
91 91 <iframe src="https://diogramos.neiam.co/embed/oUXMw7KPyT-jBwSnzi-s3QGE?mode=frame"
92 92 width="900" height="500" style="border:0" loading="lazy"
@@ -96,7 +96,7 @@ to support Infrared and Visible Spots for lighting areas for improved visibility
96 96
97 97 ## What about solar?
98 98
99 −Let us set an expectation that expect that any input power source provides 5v regulated power,
99 +Let's set the expectation that any input power source provides regulated 5V,
100 100 solar included <!-- .element: class="fragment" -->
101 101
102 102 --
@@ -123,10 +123,12 @@ nPM1300 does not provide the MPP support for the solar cells so we need an exter
123 123
124 124 Note:
125 125 mcuctl sets the motion and light mode on the embedded mcu
126 −powerctl controls the power domain for the battery charger and reads the fuel guage
126 +powerctl controls the power domain for the battery charger and reads the fuel gauge
127 127 portalctl provides the initial configuration UI and subsequent status web portals
128 128 cameractl reads frames and dispatches them to whatever has been configured
129 129 configctl is the source of truth that gets configuration requests
130 +broker: TODO
131 +infctl: TODO (bonus)
130 132
131 133 ---
132 134
@@ -146,6 +148,8 @@ Uses an A+B boot that only changes the boot target once we've booted successfull
146 148 - MQTT
147 149
148 150 Note: on unix socket for the ability to have granular security
151 +TODO: why a unix socket over TCP (file permissions / peer credentials per component)
152 +TODO: topic layout and which components publish/subscribe
149 153
150 154 ---
151 155
@@ -187,21 +191,27 @@ struct TimerConfig {
187 191 schedule_days: HashSet<Weekday>
188 192 }
189 193
194 +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
190 195 enum Weekday { M, T, W, R, F, S, U }
191 196 ```
192 197
193 198 Note:
194 −Collects power usage data, rundown and fuel guage from the PMIC
199 +Collects power usage data, rundown and fuel gauge from the PMIC
195 200
196 201 --
197 202
198 203 ## Power Readings
199 204
200 205 ```rust
206 +enum PowerSource { Battery, External }
207 +
201 208 struct PowerReading {
202 − raw: u64,
203 − calculated: f32,
204 − display: String,
209 + source: PowerSource,
210 + timestamp: u64,
211 + voltage_mv: u32,
212 + current_ma: i32, // + charge / - drain
213 + state_of_charge: Option<u8>, // fuel gauge, %
214 + time_to_empty_s: Option<u32>, // rundown estimate
205 215 }
206 216 ```
207 217
@@ -217,7 +227,7 @@ Interactive wireless authentication and cloud configuration
217 227 # Component: Cameractl
218 228
219 229 Note:
220 −Reads frames from the camera and decides to do further processing depending on Config
230 +Reads frames from the camera and decides to do further processing depending on config
221 231
222 232 ---
223 233
@@ -252,4 +262,4 @@ _leading to insights for better_ <!-- .element: class="fragment" -->
252 262
253 263 # Instrumentation
254 264
255 −- Collection of combined environmental, fuel guage
265 +- Collection of combined environmental, fuel gauge

Parents: ee9fd58