Modificaties voor de Godox C100-camera

Firmware

De firmware-patches worden toegevoegd bovenop de standaard firmware van Godox, die vervolgens op de officiële manier wordt geïnstalleerd. Dit is mogelijk omdat:

  • De standaard firmware niet is versleuteld, waardoor deze eenvoudig kan worden gelezen en geanalyseerd.
  • Er ongebruikte ruimte is voor de code van de patch: zowel in het RAM-geheugen voor processen bij het opstarten als in het flashgeheugen voor extra functies.
  • De updater alleen de bestandsgrootte en de eerste vier bytes controleert voordat het bestand wordt geflasht; er is geen sprake van een digitale handtekening of checksum.

Referenties naar andere projecten

Dit project bouwt voort op de volgende firmware-patches:

  • mullwar/godoxc100custom_firmware: Behandelt het afbeeldingsformaat, resource packing en de eerste geluidsmodificaties.
  • mombotro/Godox-C100-GHDK: Behandelt de firmware map, file API, NOR read-adressen en de sensor ID.
  • kelleyvanevert/godox_c100: Richt zich op retro dithered foto's, gebouwd in de browser.

Waarschuwing: Deze modificaties zijn officieus. Een foutieve flash kan de camera onbruikbaar maken (bricken). Raadpleeg eerst de sectie 'Herstel'.

Functionaliteiten

Getest op een C100 met build V1.1.6:

  • USB-webcam: Ondersteuning voor MJPEG 1920x1080 vanaf de volledige sensor, met circa 27 fps.
  • USB-modus per schakelaarsituatie:
  • Stand 'Photo' = USB-schijf.
  • Stand 'Video' en 'Metering' = webcam.
  • Hot-plugging: De webcam kan worden losgekoppeld en opnieuw aangesloten, ook tijdens een actieve stream.
  • Aanpasbare instellingen: Schakel het display, de LED en geluiden uit via een instellingenbestand op de SD-kaart.
  • Sneltoets: Een lange druk op de middelste knop schakelt het display en de LED aan of uit.
  • Debug-output: Wanneer ingeschakeld, wordt een LOG.TXT op de kaart geschreven met de eigen debug-output van de firmware.
  • CMD.TXT: Een bestand op de kaart dat wordt uitgevoerd zodra de camera dit vindt:
  • webcam [MIN]: Start één keer op als webcam, ongeacht de stand van de schakelaar.
  • drive: Start één keer op als USB-schijf, ongeacht de stand van de schakelaar.
  • PC-aansturing: Verstuur commando's vanaf de PC terwijl de camera in webcam-modus staat (via firmware/tools/c100cmd.py), zelfs tijdens het streamen.
  • Stroomvoorziening: Geen automatische uitschakeling bij gebruik van USB-stroom.

Gebouwd, maar nog niet getest op de camera:

  • Webcam-frameformaten: 1280x720, 640x360, 320x180, 256x144 en 128x72 (allemaal vanaf de volledige sensor).

Beperkingen

  • Na gebruik van de camera als USB-schijf (op een PC of oplader) moet het apparaat opnieuw worden opgestart voordat de webcam-modus werkt.
  • Geen audio-ondersteuning over USB.

Installatie

Downloaden en Bouwen

Een kant-en-klaar GPCARDVRUPGRADE.BIN bestand en bijbehorende SHA256SUMS zijn beschikbaar op de Releases-pagina. Voor het zelf bouwen van de firmware is het volgende nodig:

  • Standaard firmware V1.1.6 (GodoxC100V1.1.6.zip van godox.com).
  • arm-none-eabi-gcc en uv.

Build-proces:

  1. Gebruik het bestand GPCARDVRUPGRADE.BIN uit de zip.
  2. Voer uit: firmware/build.sh path/to/GPCARDVRUPGRADE.BIN
  3. Output: firmware/build/GPCARDVRUPGRADE.BIN.

Voor tests in de emulator: uv run --group test python tests/testv5.py build/GPCARDVR_UPGRADE.BIN obj/v5.sym. Om releases voor te bereiden: firmware/release.sh STOCK.BIN.

Flashen

  1. Laad de batterij volledig op.
  2. Kopieer firmware/build/GPCARDVRUPGRADE.BIN naar de root van de microSD-kaart.
  3. Plaats de kaart in de camera zonder USB-kabel en zet de schakelaar op 'Photo'.
  4. De LED knippert gedurende 10-15 seconden; de camera verwijdert vervolgens het bestand en start automatisch opnieuw op. De klok wordt gereset.
  5. Let op: Alleen de eerste kaartmontage na het inschakelen kan flashen. Als er niets gebeurt, schakel de camera dan uit en opnieuw in met de kaart erin.

Herstel (Recovery)

Flash de standaard V1.1.6 GPCARDVRUPGRADE.BIN op dezelfde manier als beschreven hierboven. De kaart-updater is onderdeel van de firmware-app en draait bij de eerste kaartmontage na het inschakelen.

Configuratiebestanden

C100.TXT

Dit optionele bestand in de root van de kaart wordt bij elke mount gelezen. De standaardinstellingen (uitgeschakeld) zijn:

# Godox C100 settings. Ontcommentariër een regel om deze te wijzigen.
# LCD aan of uit. Een lange druk op de middelste knop wisselt display en LED.
#display=on
# Status LED.
#led=on
# Toets-, sluiter- en inschakelgeluiden.
#sound=on
# Schrijf LOG.TXT: de regels van de patch en de debug-output van de firmware.
#log=off
# USB per schakelpositie: drive of webcam.
#usb_photo=drive
#usb_video=webcam
#usb_meter=webcam
# Pin-niveau dat betekent dat de LED uit is, GPIO 43 en 95.
#led_off43=0
#led_off95=0

CMD.TXT

Commando's in dit bestand (één per regel) worden ongeveer elke 3 seconden gecontroleerd terwijl de kaart is geplaatst. Ze worden uitgevoerd en vervolgens verwijderd; resultaten worden opgeslagen in LOG.TXT (mits log=on). Er worden geen commando's uitgevoerd als er een GPCARDVRUPGRADE.BIN op de kaart staat.

  • display on|off (ook voor led en sound)
  • set KEY=VALUE: Past direct een regel uit C100.TXT aan.
  • reboot: Flush de log en start opnieuw op (behalve tijdens opname of capture).
  • webcam [MIN]: Start opnieuw op als webcam, ongeacht de schakelaar. Bij toevoeging van MIN (1 tot 1440) start de camera na X minuten opnieuw op en volgt weer de schakelaar.
  • drive: Start opnieuw op als USB-schijf, ongeacht de schakelaar.

Commando's vanaf de PC

Wanneer de camera als webcam fungeert, kan een Linux-PC individuele regels van CMD.TXT versturen, zelfs tijdens het streamen:

uv run firmware/tools/c100cmd.py display off uv run firmware/tools/c100cmd.py drive

De camera voert de regel uit alsof deze uit CMD.TXT komt en logt dit als xu: <line>. De tool identificeert de camera via de USB ID (gebruik --device /dev/videoN om een specifieke camera te kiezen) en vereist Python 3.11. Regels mogen maximaal 32 tekens zijn.

LOG.TXT

Alleen actief bij log=on in C100.TXT. Gegevens worden elke 2 seconden toegevoegd. Blokken beginnen met == <ms sinds boot> <dag>d HH:MM:SS. Regels getagd met [v5] komen van de patch, de rest is standaard firmware-output. Log-rotatie wordt niet ondersteund.

USB-specificaties

De camera wordt alleen herkend wanneer de kabel wordt aangesloten op een camera die al is ingeschakeld.

  • Drive (1b3f:8301): Knoppen en de schakelaar doen niets terwijl een PC verbonden is. Het loskoppelen van de kabel schakelt de camera uit.
  • Webcam (1b3f:2002): Voorbeeld van gebruik met ustreamer:

ustreamer --device=/dev/v4l/by-id/usb-GENERALGENERAL-_UVC-video-index0 --format=MJPEG --encoder=HW --resolution=1920x1080 --host=0.0.0.0 --port=8080 Open vervolgens http://localhost:8080/stream.

Beschikbare frameformaten (16:9, volledige sensor): 1920x1080 (standaard), 1280x720, 640x360, 320x180, 256x144, 128x72. Selecteer een formaat via --resolution=256x144 in ustreamer of via v4l2-ctl --set-fmt-video=width=256,height=144,pixelformat=MJPG. Alleen 1920x1080 is fysiek getest op de camera.

Documentatie

Verdere technische details zijn te vinden in de volgende bestanden:

  • firmware/docs/hardware.md: Board, scherm, LED, knoppen, pins.
  • firmware/docs/firmware.md: Image layout, boot, kaart-updater, recovery limieten.
  • firmware/docs/hooks.md: Werking van de patch, de overlay, de hook-tabel en tests.
  • firmware/docs/usb.md: USB-modi en de bijbehorende statussen.
  • firmware/docs/webcam.md: 1080p, frameformaten, streaming en de extension unit.

Behuizing (Case)

Er is een geprinte behuizing bestaande uit twee delen:

  • De camera bevindt zich in een houder aan de bovenzijde met een USB-C aansluiting in de bodem.
  • Intern is er ruimte voor een Raspberry Pi Zero W, een 1200 mAh batterij met lader, en aan de achterzijde een 128x64 1-bit OLED-scherm.
  • De Pi draait ghee om beelden op het OLED-scherm te tonen.

Details over onderdelen, printen en bedrading staan in case/README.md. Visuele weergave is beschikbaar op: https://holofermes.github.io/godox-c100-mods/