Dit artikel beschrijft diverse modificaties voor de Godox C100-camera, onderverdeeld in software en hardware.
Firmware-aanpassingen: Omdat de standaardfirmware niet versleuteld is, kunnen patches worden toegevoegd die nieuwe functionaliteiten ontsluiten. De belangrijkste toevoegingen zijn:
- USB-webcam modus: Ondersteuning voor MJPEG 1920x1080 (ca. 27 fps).
- Aanpasbare configuratie: Via bestanden op de SD-kaart (
C100.TXT en CMD.TXT) kunnen instellingen zoals de LED, het display en geluiden worden beheerd.
- PC-aansturing: De mogelijkheid om commando's vanaf een Linux-PC te versturen via een Python-script.
- USB-modi: De camera kan afhankelijk van de schakelaarsituatie fungeren als USB-schijf of webcam.
Installatie en Herstel: De firmware wordt geflasht via een .BIN-bestand op een microSD-kaart. Indien de camera 'gebrickt' raakt, is herstel mogelijk door de standaard firmware opnieuw te flashen.
Hardwaremodificaties: Er is een 3D-geprinte behuizing beschikbaar waarin de camera wordt geplaatst samen met een Raspberry Pi Zero W, een batterij met lader en een OLED-scherm voor beeldweergave via de software ghee.
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:
- Gebruik het bestand
GPCARDVRUPGRADE.BIN uit de zip.
- Voer uit:
firmware/build.sh path/to/GPCARDVRUPGRADE.BIN
- 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
- Laad de batterij volledig op.
- Kopieer
firmware/build/GPCARDVRUPGRADE.BIN naar de root van de microSD-kaart.
- Plaats de kaart in de camera zonder USB-kabel en zet de schakelaar op 'Photo'.
- De LED knippert gedurende 10-15 seconden; de camera verwijdert vervolgens het bestand en start automatisch opnieuw op. De klok wordt gereset.
- 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/
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:
- Gebruik het bestand
GPCARDVRUPGRADE.BIN uit de zip.
- Voer uit:
firmware/build.sh path/to/GPCARDVRUPGRADE.BIN
- 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
- Laad de batterij volledig op.
- Kopieer
firmware/build/GPCARDVRUPGRADE.BIN naar de root van de microSD-kaart.
- Plaats de kaart in de camera zonder USB-kabel en zet de schakelaar op 'Photo'.
- De LED knippert gedurende 10-15 seconden; de camera verwijdert vervolgens het bestand en start automatisch opnieuw op. De klok wordt gereset.
- 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/