codeplugger English GitHub ↗

Código abierto · Chicago Offline

Programar una radio debería ser una compilación, no una sesión de CPS.

codeplugger combina datos de RF compartidos con tu perfil bajo control de versiones para compilar un codeplug validado y neutral de radio. Expórtalo, o escríbelo directamente en una radio compatible.

logotipo de codeplugger: una radio portátil con un glifo de código en la pantalla y clavijas de enchufe en la base

Cómo funciona

Los hechos y las preferencias se mantienen separados. Los datos de RF describen lo que existe; un perfil describe lo que quieres en una radio concreta. Todo lo intermedio es determinista y revisable.

Datos SSRF

Planes de canales, repetidores y talkgroups públicos de SSRF-Lite, combinados con capas compartidas o privadas por ID de registro estable.

Perfil

Tu política en YAML: qué asignaciones, en qué orden, en qué zonas, con listas de escaneo, grupos RX, contactos y ajustes de la radio. Los perfiles pueden heredar unos de otros.

Resolver y validar

codeplugger une las entradas y comprueba cada canal contra las capacidades de la radio de destino: bandas, modos, longitud de nombres, límites de zonas y listas, capacidad dependiente del firmware.

Exportar o programar

Exporta CHIRP CSV o qdmr YAML; aplica un perfil a una línea base P4 decodificada para TOML; o usa un backend con confirmación para escribir en una radio compatible.

Codeplugs comunitarios precompilados

CI los compila a partir de perfiles comunitarios públicos y datos de RF a medida que cambian las fuentes, y luego publica archivos de importación, referencias imprimibles y sumas de verificación SHA-256. No hace falta instalar codeplugger.

Radios compatibles

La tabla combina las capacidades de cada radio con los detalles de exportación y verificación en hardware registrados en el repositorio. Su generador comprueba que cada entrada radios/*/capabilities.json tenga una fila correspondiente.

Radio Modos CHIRP CSV exportación Importar en qdmr YAML Importar en p64tool TOML Importar en CPS del fabricante archivos propietarios Escritura directa sin interfaz, a la radio
Baofeng DM-32 DM-32UV 2 codeplugs DMR · FM · AM RX No compatible Compatible No compatible No compatible dmrconfhw
Baofeng DM-1701 DM-1701 / RT84 DMR · FM No compatible Compatible No compatible No compatible dmrconfhw
Retevis MateTalk P4 UHF DMR DMR · FM No compatible No compatible Compatible No compatible p64toolhw
Baofeng UV-5R Mini UV-17Pro family 2 codeplugs FM · AM RX Compatible No compatible No compatible No compatible chirp-writer
Baofeng BF-C50 70 cm, no display FM Compatible No compatible No compatible No compatible no CHIRP driver
Baofeng BF-888S UHF, no display 2 codeplugs FM Compatible No compatible No compatible No compatible chirp-writer
Baofeng BF-1909 UHF, no display Codeplug FM hw No compatible No compatible No compatible chirp-writerhw
Baofeng W31E UHF, no display FM Compatible No compatible No compatible No compatible chirp-writer
Ailunce HA2 Dual-band analog FM · AM RX Compatible No compatible No compatible No compatible chirp-writer
Retevis C64 Dual-band analog FM hw No compatible No compatible No compatible chirp-writer
Retevis RT3S (OpenGD77) MD-UV380 family, OpenGD77 DMR · FM No compatible Compatible No compatible No compatible dmrconfhw
Baofeng DM-1701 (OpenGD77) MD-UV380 family, OpenGD77 DMR · FM No compatible Compatible No compatible No compatible dmrconf
Vero VR-N76 Dual-band, Bluetooth FM · AM RX No compatible No compatible No compatible No compatible benlink
BTECH UV-Pro Dual-band, Bluetooth 2 codeplugs FM · AM RX No compatible No compatible No compatible No compatible benlink
Yaesu FT-270R 2 m submersible FM as VX-170 No compatible No compatible No compatible chirp-writer
Yaesu FT-270R (MARS/CAP) TX-modded variant FM as VX-170 No compatible No compatible No compatible chirp-writer
Yaesu FT-277R 70 cm submersible FM as VX-177hw No compatible No compatible No compatible chirp-writer
Yaesu FT-277R (MARS/CAP) TX-modded variant FM as VX-177 No compatible No compatible No compatible chirp-writer
Yaesu FT-2800M 2 m mobile FM hw No compatible No compatible No compatible chirp-writerhw
Yaesu FT-2800M (extended TX) TX-modded variant FM Compatible No compatible No compatible No compatible chirp-writer
Yaesu VX-6R Tri-band submersible FM · AM RX as VX-6 No compatible No compatible No compatible chirp-writer
TYT TH-9800 Quad-band mobile FM · AM RX experimental driver No compatible No compatible No compatible chirp-writer
TYT TH-9800 (extended TX) TX-modded variant FM · AM RX experimental driver No compatible No compatible No compatible chirp-writer
Quansheng UV-K5 (F4HWN) Quansheng UV-K5 (F4HWN) FM · AM RX Compatible No compatible No compatible No compatible chirp-writer

hw verificado en una radio física · compatible hoy · no aplicable o no implementado

CHIRP CSV

Canales FM analógicos y AM de solo recepción en el orden del perfil, comprobados contra los límites de la radio. Importa y carga en CHIRP donde exista un controlador, o usa chirp-writer en las radios compatibles.

qdmr YAML

Codeplug extensible de qdmr con zonas, listas de escaneo, listas de grupos RX, contactos y varios IDs DMR. Los ajustes nativos de la radio pasan a través de extensions.qdmr.

p64tool TOML

Se aplica sobre una línea base de p64tool decode para que los ajustes no tocados sobrevivan, y luego se vuelve a codificar para la P4.

plan benlink

Un plan de canales declarativo para portátiles con protocolo Benshi, que no tienen CPS de escritorio ni controlador CHIRP: la única vía de entrada es Bluetooth. Las zonas se asignan a las regiones de la radio, y las regiones que el plan omite nunca se escriben.

Escritura directa

Las escrituras requieren confirmación explícita y comprobaciones de seguridad propias de cada backend. La copia de seguridad y la relectura varían según el backend; las operaciones pueden registrarse. Backends: dmrconf, p64tool, chirp-writer y benlink por Bluetooth.

Planificado: ampliar la cobertura de radios y formatos de exportación sin cambiar la resolución central de perfiles.

Funciones

Hecho para quienes mantienen más de una radio coherente y quieren saber exactamente qué entró en cada una.

Compilaciones deterministas

Las mismas entradas siempre producen el mismo codeplug, hasta un SHA-256 estable. Los archivos generados son artefactos desechables, nunca una fuente de datos.

Validación de capacidades

Bandas, rangos TX frente a solo RX, modos, ancho de banda, longitud de nombres, límites de zonas y listas, y capacidad de contactos dependiente del firmware, clasificados como aviso / advertencia / crítico, con todos los críticos informados en una sola ejecución.

Escrituras con confirmación

Confirmación explícita, comprobaciones de identidad propias de cada backend y registros de escritura; verificación previa y relectura donde esté disponible.

Zonas, listas de escaneo, grupos RX, contactos

Los talkgroups son hechos SSRF; la pertenencia y el contacto TX, grupo RX y lista de escaneo por asignación son política del perfil, todo aplicado contra los límites de la radio.

Herencia de perfiles

Comparte un perfil base y deriva variantes con extends, zones_only y omit_zones. Un perfil base que no nombra ninguna radio es reutilizable en cualquier radio con capacidad para él. Revisa el resultado combinado con --print-merged-profile.

IDs DMR de identidad múltiple

Una instancia de radio puede llevar varios IDs DMR; los perfiles vinculan uno por zona o por asignación y los exportadores emiten solo las identidades realmente usadas.

Registro de flota y simulación

Un registro de instancias asocia radios físicas a perfiles. codeplugger-fleet resuelve y valida cada radio e informa de su estado antes de escribir nada.

Hechos de canal derivados

Ancho de banda a partir del designador de emisión de la UIT, modo AM para asignaciones de banda aérea de solo recepción, nombres de pantalla sobrescritos desde capas.

Artefactos de referencia

Referencias de canales en HTML y Markdown más registros de operación por instancia de radio, para que lo que hay en la radio esté siempre documentado.

Extensiones con espacio de nombres

Los ajustes nativos de cada exportador viven bajo extensions.<backend> a nivel de perfil o de asignación, manteniendo el esquema central neutral de radio.

Cómo fluyen los datos

Los datos de RF públicos y las capas alimentan una compilación basada en perfiles; exporta un archivo o programa una radio compatible.

flowchart LR
  rf["📡 rf-survey"] -- "informes de recepción" --> ssrf["🗃 ssrf-lite"]
  ov["capas · compartidas + privadas"] --> ssrf
  ssrf -- "datos de RF validados" --> cp["⚙ codeplugger"]
  prof["👤 perfiles"] --> cp
  cp -- "exportar: CHIRP CSV · qdmr YAML · P4 TOML · plan benlink" --> files(["archivos de radio"])
  files --> radios(["📻 radios"])
  cp -- "escribir: dmrconf · p64tool · chirp-writer · benlink" --> radios
  click rf "https://chicago-offline.github.io/rf-survey/" _blank
  click ssrf "https://chicago-offline.github.io/ssrf-lite/" _blank
  click cp "https://chicago-offline.github.io/codeplugger/" _blank
  click prof "https://chicago-offline.github.io/chioff-codeplugger-profiles-shared/" _blank
        

Inicio rápido

Clona codeplugger y usa uv. La instalación trae sus propios datos de RF, así que un caso de uso no necesita nada más; para tus propios perfiles conviene tener ssrf-lite y un repositorio de perfiles clonados al lado.

Programar una radio nueva

# qué es compatible, y qué puede ir en cada radio
uv run codeplugger radios
uv run codeplugger use-cases

# compilar, sin tocar el hardware
uv run codeplugger build \
  --radio baofeng_bf888s --use-case gmrs

# o los canales de un grupo comunitario, por nombre
uv run codeplugger build \
  --radio baofeng_bf888s --profile chioff

# luego escribirlo, con la confirmación del backend
uv run codeplugger program \
  --radio baofeng_bf888s --use-case gmrs \
  --port /dev/cu.usbserial-10 --confirm

Validar un perfil

uv run codeplugger-profile ruta/al/perfil.yml \
  --ssrf-root ../ssrf-lite/ssrf \
  --ssrf-root ../chioff-ssrf-shared/ssrf

Exportar para una radio

# radios analógicas: importar en CHIRP
uv run codeplugger-profile perfil.yml \
  --ssrf-root ../ssrf-lite/ssrf \
  --output-format chirp-csv > salida.csv

# DM-32: qdmr YAML, luego escribir con dmrconf
uv run codeplugger-profile perfil.yml \
  --ssrf-root ../ssrf-lite/ssrf \
  --output-format qdmr-yaml > codeplug.yaml

Comprobar toda la flota

uv run codeplugger-fleet \
  --instance-registry ../mis-perfiles/instances.yml \
  --profiles-root ../mis-perfiles/profiles \
  --ssrf-root ../ssrf-lite/ssrf

Un perfil mínimo

version: "0.1"
id: "dm32_reference"
name: "DM-32 reference"
radio: "baofeng_dm32"
radio_instance: "dm32_green_01"
zones:
  - id: "community"
    name: "Community"
    assignments:
      - "asg_chio_all"
      - "asg_chio_road"
      - "asg_chio_repeater"