Fill in one report per tested hardware revision and firmware build (FW-8). The procedures are in docs/testing.md; each section below names the rules it verifies and the testing.md section to follow. Write measured values with units, keep the raw data files (CSV logs, photos, scope screenshots) next to this report and name them in the “Data file” cells. Mark sections that do not apply “n.a.” with a reason. End with the summary table: a release is tested when every requirement ID from requirements.md has a result.
| Field | Entry |
|---|---|
| Product | <...> |
| Hardware revision (silkscreen) | <...> |
Firmware version (console ver) |
<...> |
| Board header name | <firmware/boards/.../board.h> |
| Cell used (make, model, capacity) | <...> |
| Tester | <...> |
| Date(s) | <YYYY-MM-DD> |
| Ambient temperature | <...> °C |
| Raw data folder | <path> |
| Item | Model | Serial / ID | Calibration date or reference |
|---|---|---|---|
| Multimeter (µA range) | |||
| Bench supply with current limit | |||
| USB power meter | |||
| Thermocouple meter | |||
| Lux meter | |||
| Lumen tube or sphere (calibration light) | |||
| Photodiode + oscilloscope | |||
| Laser power meter (if laser fitted) |
Verifies DRV-7, DRV-9, BAT-9, BAT-6, DRV-2, DRV-3. Procedure: docs/testing.md, “Bring-up of a new board”.
| Check | Result | OK? |
|---|---|---|
| All LED and laser outputs off during reset and without firmware | ||
ver output |
||
Battery voltage: multimeter / status cell_mV / BAT_CAL set |
<...> mV / <...> mV / <...> mV |
Standby current (limit from BAT-6: <...> µA)
| State | Current (µA) | OK? |
|---|---|---|
| Off | ||
| Lockout | ||
| After LVP cut-off |
LED current per level (set with level N)
| Level | LED current (mA, meter) | status cell_mA |
Cell current (mA, meter) | Notes |
|---|---|---|---|---|
| 1 | ||||
| 30 | ||||
| 70 | ||||
| 100 | ||||
| 120 | ||||
| 150 |
Verifies REQ-2. Procedure: docs/testing.md, “Output and runtime”.
Method: <lumen tube calibrated against ... / integrating sphere>, cell charged to
<...> V at start.
| Mode | 0 s (lm) | 30 s (lm) | 2 min (lm) | 10 min (lm) | Requirement ID | Data file |
|---|---|---|---|---|---|---|
| Moon | ||||||
| Low | ||||||
| Medium | ||||||
| High | ||||||
| Turbo |
Verifies REQ-2. Procedure: docs/testing.md, “Output and runtime”. Runtime = time from the 30 s value until output falls to 10 % of it.
| Mode | 30 s value (lm) | Runtime to 10 % (h:min) | End reason (10 % / LVP) | Requirement ID | Data file |
|---|---|---|---|---|---|
| Low | |||||
| Medium | |||||
| High | |||||
| Turbo |
Verifies REQ-2, LED-1.
Procedure: docs/testing.md, “Intensity and beam distance”.
cd = lux x d²; beam distance = 2 x sqrt(cd); see tools/lux_calc.py.
| Mode | Distance d (m) | Illuminance (lx) | Intensity (cd) | Beam distance (m) | Requirement ID |
|---|---|---|---|---|---|
| High | |||||
| Turbo |
Verifies THM-1, THM-4, THM-5, THM-6. Procedure: docs/testing.md, “Thermal and touch temperature”.
Setup: <held / hanging>, still air, thermocouple on <hottest touchable point>.
Surface temperature over time (°C)
| Mode | 0 min | 1 min | 2 min | 5 min | 10 min | Max | THM-1 OK? |
|---|---|---|---|---|---|---|---|
| Medium | |||||||
| High | |||||||
| Turbo |
Turbo: time to first step-down <...> s, regulated level after 10 min <...>.
Sensor vs surface (THM_OFFSET calibration)
| Condition | Reference (°C) | Sensor status temp_dC / 10 (°C) |
Difference (°C) |
|---|---|---|---|
| Rested 1 h at room temperature | |||
| Regulated at THM_LIMIT, end of 10 min |
Values set: THM_OFFSET <...>, THM_LIMIT <...>, THM_SHUTDN <...>.
Verifies BAT-4, BAT-5, CHG-1, CHG-2, CHG-3, CHG-6. Procedure: docs/testing.md, “Battery and charging”.
Low-voltage protection (bench supply ramped down slowly)
| Event | Parameter | Set (mV) | Measured at the cell (mV) | OK? |
|---|---|---|---|---|
| Warning / step-down | LVP_WARN | |||
| Cut-off | LVP_CUT | |||
| Allowed on again | LVP_RESUME |
Charging
| Check | Result | OK? |
|---|---|---|
| Charges with a C-to-C cable / with an A-to-C cable | ||
| Charge current, CC phase (A) | ||
| Voltage at the cell at termination (4.20 V +-1 %) | ||
| Termination current (mA) | ||
| Charge time, empty to full (h:min) | ||
| Charge pauses below CHG_TMIN / above CHG_TMAX | ||
| Charge indicator and level limit on USB (CHG_MAXLVL) | ||
| Reversed cell: no damage, no output (removable cells) |
Verifies LED-6, FW-4. Procedure: docs/testing.md, “Flicker”. Mod % = 100 x (Lmax - Lmin) / (Lmax + Lmin).
Method: <phone camera / photodiode + oscilloscope>
| Level | Frequency (Hz) | Lmax | Lmin | Modulation (%) | OK? |
|---|---|---|---|---|---|
Low (level <...>) |
|||||
Medium (level <...>) |
|||||
High (level <...>) |
|||||
| During thermal regulation |
Verifies MEC-3, REQ-2.
Procedure: docs/testing.md, “Durability”. Height <...> m onto
concrete.
| Drop | Orientation | Damage seen | Works after? |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | |||
| 6 |
Verifies MEC-2, REQ-2. Procedure: docs/testing.md, “Durability”.
| Check | Result | OK? |
|---|---|---|
| Rating tested (IPX4 / IPX7 / IPX8) | ||
| Depth and duration | ||
| Done after the drop test? | ||
| Water inside after opening? | ||
| Works after the test? |
Verifies LAS-1, LAS-2, LAS-3. Procedure: docs/testing.md, “Optical safety”.
| Check | Result | OK? |
|---|---|---|
| Measured output power (mW), meter and wavelength setting | ||
| Laser class and label | ||
| Hardware interlock open: no emission, whatever the firmware does | ||
| Emission indicator works | ||
| Stops after LASER_S; refused above LASER_TMAX and below LASER_VMIN |
Verifies FW-3, FW-5, FW-6, BAT-7, FW-8. Procedure: docs/testing.md, “Firmware tests”; button map in docs/firmware/user-interface.md.
| Gesture | Expected | OK? |
|---|---|---|
make test for this firmware build |
all tests pass | |
| 1C from off / from on | on at remembered level / off | |
| Hold from off | moon, then ramps up | |
| 2C | turbo; steps down after TURBO_S | |
| 3C | battery voltage as blinks | |
| 4C from off / in lockout | lockout on (3 blinks) / lockout off | |
| Lockout after battery removal and reboot | still locked | |
| Button held in lockout | dark (or moon if LOCK_MOON = 1); ignored after 10 s | |
| 9C from off | factory reset (5 blinks), defaults restored | |
| Laser gesture (1C, then hold) | laser while held; refused in lockout |
| Requirement ID | Requirement | Target | Result | Pass / fail | Section |
|---|---|---|---|---|---|
| R1 | |||||
| R2 | |||||
| R3 |
Open issues: <...>
Tester signature and date: <...>