mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-08-16 04:43:28 +00:00
5c2d1d3dfb
Implements MDC-1200 single and double-packet TX as a PPMA external app. Features: - Supports PTT ID, Emergency, Radio Check, Stun/Unstun, Call Alert, Selective Call (1 & 2), Status Request/Response, Remote Monitor, Message - Auto-fills Arg byte on Op selection - AFSK FSK modulation: 1800 Hz mark / 1200 Hz space, 1200 baud - NRZI encoding with Golay FEC per MDC-1200 spec - Tap-to-edit frequency via keypad - Default TX gain of 30 dB - Uses AFSK baseband (same as POCSAG/SAME TX) - All buffers kept off the stack to avoid hard faults in ext app environment * mdc_tx: address PR review feedback - Move MDC helpers into ui::external_app::mdc_tx namespace (drop anonymous namespace) - Use AFSK_TX_SAMPLERATE macro instead of hardcoded 1536000 - Add #include "modems.hpp" explicitly for AFSK_TX_SAMPLERATE - Replace n*8/n*16 pixel positions with UI_POS_X/UI_POS_Y macros - Fix field comments: 'hex bytes' -> 'decimal bytes (0-255)' - Fix TransmitterView frequency_step: 1750000 -> 12500 (12.5kHz NFM step) - Fix MDC preamble: replace leading 0x00 bytes with 0xAA after NRZI encoding stayed 0x00, terminating TX on the first word. 0xAA bytes NRZI-encode to 0xFF (continuous 1800Hz mark tone), which is the standard MDC-1200 preamble and does not trigger the sentinel.
84 lines
2.2 KiB
C++
84 lines
2.2 KiB
C++
/*
|
|
* Copyright (C) 2025 Sarah Rose
|
|
*
|
|
* This file is part of PortaPack.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street,
|
|
* Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "ui.hpp"
|
|
#include "ui_mdc_tx.hpp"
|
|
#include "ui_navigation.hpp"
|
|
#include "external_app.hpp"
|
|
|
|
namespace ui::external_app::mdc_tx {
|
|
void initialize_app(ui::NavigationView& nav) {
|
|
nav.push<MdcTxView>();
|
|
}
|
|
} // namespace ui::external_app::mdc_tx
|
|
|
|
extern "C" {
|
|
|
|
__attribute__((section(".external_app.app_mdc_tx.application_information"), used))
|
|
application_information_t _application_information_mdc_tx = {
|
|
/*.memory_location = */ (uint8_t*)0x00000000,
|
|
/*.externalAppEntry = */ ui::external_app::mdc_tx::initialize_app,
|
|
/*.header_version = */ CURRENT_HEADER_VERSION,
|
|
/*.app_version = */ VERSION_MD5,
|
|
|
|
/*.app_name = */ "MDC-1200 TX",
|
|
/*.bitmap_data = */ {
|
|
0x00,
|
|
0x00,
|
|
0xFE,
|
|
0x7F,
|
|
0xFF,
|
|
0xFF,
|
|
0xBB,
|
|
0xD0,
|
|
0xFF,
|
|
0xFF,
|
|
0xFF,
|
|
0xFF,
|
|
0x0B,
|
|
0xE1,
|
|
0xFF,
|
|
0xFF,
|
|
0xFF,
|
|
0xFF,
|
|
0xEB,
|
|
0xD0,
|
|
0xFF,
|
|
0xFF,
|
|
0xFE,
|
|
0x7F,
|
|
0x70,
|
|
0x00,
|
|
0x30,
|
|
0x00,
|
|
0x10,
|
|
0x00,
|
|
0x00,
|
|
0x00,
|
|
},
|
|
/*.icon_color = */ ui::Color::orange().v,
|
|
/*.menu_location = */ app_location_t::TX,
|
|
/*.desired_menu_position = */ -1,
|
|
/*.m4_app_tag = */ {'P', 'A', 'F', 'T'},
|
|
/*.m4_app_offset = */ 0x00000000,
|
|
};
|
|
}
|