Баузбенд FM100B: - найден прозрачный мост ПК<->модуль (включение с зажатой МЕНЮ), проверен живьём - расшифрована контрольная сумма кадров (one's complement, BE), сверена с ответом рации - инструмент tools/fm100b.py (ping/send/raw/scan) - cmd 0x25 = запрос версии, модуль отвечает V1.2.0.32 (совпало с офиц. образом) - разобран диспетчер входящих кадров: 193 записи, реальный код у 10 команд - cmd 0x59 = индикация приёма, она же управляет гейтом звука PA14 - исправлено: boot-handshake это cmd 0x84, а не 0x64 (research/re/dmr.md) Спектроанализатор REFV DualTachyon (docs/refw-spectrum.md): - вызывается как функция горячей клавиши №22 Analog Spectrum - вход 0x08009CAA -> обычный 0x080139E4 / по зоне 0x08015318 - спектр это экран №11; тик 0x08013BA4 (автомат на 4 состояния), клавиши 0x08013BFC Декомпозиция (docs/firmware-parts.md): - два процессора + внешний SPI = три канала внедрения - карта ресурсов SPI: шрифты, пиньинь, голос, таблица Unicode - найден штатный загрузчик ресурсов FontVoicePicture (шрифты/голос/картинки) - дерево меню целиком: MIC/SPK Gain, RX/TX Limit, SMS Format уже в стоке - аудио двухступенчатое: PA2 питание УНЧ, PA14 гейт от DMR-модуля Прочее: - везде исправлен режим прошивки: тангента PTT вместо клавиши "*" - устаревший Ru-4D_Flasher.exe удалён из репозитория - добавлены инструменты реверса: xref, refs, gpiomap, gpioscan, schem
22 строки
760 B
Python
22 строки
760 B
Python
#!/usr/bin/env python3
|
|
"""Render a clipped region of the RT-4D schematic PDF at high DPI.
|
|
python schem.py <x0> <y0> <x1> <y1> <dpi> <out.png> (coords in PDF points)
|
|
Sheets (approx, points): 1: y 12-582 | 2: y 600-1170 | 3: y 1200-1764 | 4: y 1794-2370
|
|
Page is 864 x 2400 pt.
|
|
"""
|
|
import sys, fitz
|
|
|
|
PDF = "/mnt/c/Users/vikto/Downloads/Telegram Desktop/RT4DDLT01.pdf"
|
|
|
|
def render(x0, y0, x1, y1, dpi, out):
|
|
doc = fitz.open(PDF)
|
|
p = doc[0]
|
|
clip = fitz.Rect(x0, y0, x1, y1)
|
|
pm = p.get_pixmap(dpi=dpi, clip=clip)
|
|
pm.save(out)
|
|
print(f"{out}: {pm.width}x{pm.height} clip=({x0},{y0})-({x1},{y1}) dpi={dpi}")
|
|
|
|
if __name__ == "__main__":
|
|
a = sys.argv[1:]
|
|
render(float(a[0]), float(a[1]), float(a[2]), float(a[3]), int(a[4]), a[5])
|