/* * T-Modem-c1224 — USB KISS half-TNC (HDLC on Pico + bitbang to TCM3105). * No softmodem · no transparent Host↔Chip bit bridge · one FW · rate = crystal. * SPDX-License-Identifier: GPL-3.0-or-later */ #include "pico/stdlib.h" #include "board_pins.h" #include "status.h" #include "ptt.h" #include "modem_probe.h" #include "usb_cmd.h" #include "display.h" #include "crystal_steer.h" #include "baud_config.h" #include "config.h" #include "sense.h" #include "afsk_bitbang.h" #include "banner.h" #include "hardware/gpio.h" #include int main(void) { stdio_init_all(); sleep_ms(800); board_pins_init(); ptt_init(); config_init(); display_init(); sense_init(); afsk_bitbang_init(); usb_cmd_init(); afsk_rx_set_callback(usb_cmd_on_rx_frame); status_set(C1224_STATE_STARTING); status_publish(); /* Fixed boot banner — always once after CDC ready; source-only (banner.c). */ banner_print(); modem_probe_result_t probe = modem_probe_run(); if (probe.ready) { status_set(C1224_STATE_READY); } else { status_set(C1224_STATE_FAULT); } status_publish(); while (true) { usb_cmd_poll(); afsk_rx_poll(); sense_poll(); gpio_put(PIN_LED_DCD, sense_signal_active() ? 1 : 0); gpio_put(PIN_LED_PTT, ptt_get() ? 1 : 0); gpio_put(PIN_LED_TXRX, sense_packet_active() ? 1 : 0); status_tick(); sleep_us(50); } }