UR4QTP: записная книжка 

На главную

Программы

Cwdaemon – демон для работы CW в Linux

cwdaemon-0.9


Это всего лишь вольный перевод файла /usr/share/cwdaemon/README и справочной страницы из дистрибутива Debian 6. Любая конструктивная критика, исправления и дополнения к этому тексту категорически приветствуются.

Приведенную ниже информацию в виде текстового файла (в кодировке utf-8) и двух схем (jpg) можно скачать в виде архива tar.bz2 или zip.


Cwdaemon – маленький демон, который через параллельный или последовательный порт IBM PC-совместимого компьютера и простые транзисторные ключи производит телеграфную манипуляцию передатчика из текстовых сообщений, принимаемых по сети (протокол UDP). Звуковой контроль осуществляется через звуковую карту или динамик компьютера. Cwdaemon служит хорошим примером для иллюстрации традиции UNIX отделения политики от механизма.

Демон должен быть запущен с правами суперпользователя:

cwdaemon -p <portnumber> -d <device>

По умолчанию после первого запуска в дальнейшем cwdaemon автоматически запускается при начальной загрузке.

Если номер порта <portnumber> не указан, по умолчанию используется порт 6789. В качестве <device> могут быть использованы последовательные (ttyS0, ttyS1…) или параллельные (parport0, parport1…) интерфейсы. Наименования интерфейсов могут отличаться в разных дистрибутивах Linux/BSD/Unix; можно посмотреть в каталог /dev/, чтобы уточнить, какие присутствуют в системе. Если интерфейс не указан, по умолчанию в Linux используется parport0.

Для FreeBSD используются последовательные ttyd0, ttyd1… и параллельные ppi0, ppi1… интерфейсы. По умолчанию используется ppi0.

Для OpenBSD – tty00, tty01… Параллельный интерфейс не поддерживается, по умолчанию используется tty00.

Также возможно использование устройства /dev/null, которое, разумеется, никаких физических действий не производит.

Cwdaemon также генерирует сигнал PTT и идентификатор диапазона для автоматического переключения антенн, фильтров и т. п. По номерам контактов в разъёмах имеется совместимость с программами CT, TRlog.

Полный список опций:

-d <device> назначить интерфейс для взаимодействия с трансивером.
-h выдать справочную информацию.
-n выдать отладочную информацию.
-p <port> назначить порт UDP; по умолчанию 6789.
-P <priority> уменьшить приоритет для демона; по умолчанию 0 (стандартный), допустимо от -20 (максимальный) до 20 (минимальный).
-s <speed> установить скорость манипуляции, слов в минуту; по умолчанию 24, допустимо не менее 4.
-t <time> назначить задержку PTT; по умолчанию 0, допустимые значения от 0 до 50 (миллисекунды).
-v <volume> установить громкость для звуковой карты.
-V вывести информацию о версии и закончить работу.
-w <weight> назначить weighting; по умолчанию 0, допустимые значения от -50 до 50.
-x <device> назначить звуковое устройство для самоконтроля; допустимые варианты:
c console динамик PC-совместимого компьютера; используется по умолчанию.
s soundcard звуковая карта.
b both оба устройства одновременно.
n none не использовать ничего.

Замечание.

BSD, Linux, как и Windows, и большинство других операционных систем общего применения, не являются операционными системами реального времени (ОС РВ). К примеру, таймер ядра Linux имеет разрешение 10 миллисекунд. Эффект может проявляться при использовании PTT и установке задержки PTT, а также на больших скоростях манипуляции. Если возникают проблемы с задержками, можно использовать стандартный механизм Linux для повышения приоритета cwdaemon. При запуске cwdaemon можно использовать флаг -P для изменения приоритета демона. Значение по умолчанию – 0, максимальный приоритет достигается при значении −20 (минус 20). Также приоритет любого процесса при запуске можно определить командой nice, а изменить приоритет иже запущенного процесса – при помощи renice. Аргументы этих команд (допустимы в пределах от −20 до +20) ПОНИЖАЮТ приоритет, поэтому при понижении приоритета указывается положительное значение, а при повышении – отрицательное. Некоторые ОС могут быть настроены так, что автоматически с течением времени понижают приоритет определённых процессов, что может служить источником трудно определимых проблем с задержками.

Файл конфигурации cwdaemon

В Debian 6 это файл /etc/default/cwdaemon. В нём определяется:

  1. Будет ли стартовать cwdaemon при начальной загрузке?
  2. Интерфейс для взаимодействия с трансивером (манипуляция, PTT, переключение диапазонов).
  3. Порт UDP.
  4. Приоритет для демона.
  5. Скорость манипуляции по умолчанию.
  6. Задержка PTT.
  7. Громкость самоконтроля по умолчанию.
  8. Weight по умолчанию. Не понял, что это.
  9. Звуковое устройство.

Для того, чтобы изменения в этом файле вступили в силу, необходимо перезапустить cwdaemon:

/etc/init.d/cwdaemon restart

Быстрый старт

В Linux запустите сценарий cwsetup.sh (команда sh /usr/share/cwdaemon/cwsetup.sh) с правами root. Этот сценарий при необходимости создаёт устройство parport0, подгружает необходимые модули ядра и выгружает мешающие (lp). После этого необходимо запустить cwdaemon с ключом -n (команда /usr/sbin/cwdaemon -n) и с правами root. Предполагается, что в системе присутствует параллельный интерфейс, при его отсутствии или при наличии других проблем будет выдано сообщение об ошибке. Это не значит, что cwdaemon нельзя использовать. Просто читайте дальше :-).

Параллельный интерфейс в Linux для cwdaemon

Для начала неплохо бы убедиться, что параллельный интерфейс распознаётся в BIOS и включён в нём. Проверка наличия параллельного интерфейса в системе:

ls -al /dev/parport*

Если после этой команды ничего не выводится, устройства parport0 в системе нет. Возможно, параллельный интерфейс в Вашей системе называется иначе, или просто файл устройства не создан, что в современных системах при физическом наличии интерфейса маловероятно. Можно создать файл устройства командой с правами root:

cd /dev; ./MAKEDEV parport

Далее проверьте, загружены ли необходимые модули ядра. На i386-совместимой машине команда lsmod должна выдать что-то наподобие:

parport_pc   23304   0   (autoclean)
parport      25992   0   (autoclean)   [parport_pc]

Необходимые модули – parport_pc и parport. Если в списке присутствует модуль lp, необходимый для работы принтера, работа cwdaemon будет невозможна. Модуль lp нужно выгрузить командой (с правами root):

rmmod lp

Разумеется, принтер через параллельный интерфейс теперь работать не сможет.

Если Вы не видите по команде lsmod необходимых для параллельного интерфейса модулей ядра, проверьте в файле /etc/modules.conf наличие строки

alias parport_lowlevel parport_pc

и загрузите необходимые модули:

modprobe parport
modprobe parport_pc

Если Вы используете нестандартный адрес интерфейса и/или номер прерывания, можно указать это, к примеру, для трёх интерфейсов так:

modprobe parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto

Здесь первый параллельный интерфейс имеет адрес 3BCh и не имеет закреплённого за ним прерывания, второй имеет адрес 378h и обслуживается прерыванием 7, а третий имеет адрес 278h, а номер прерывания выделяется ему автоматически.

Когда cwdaemon запускается, модуль ядра ppdev должен подгружаться автоматически. Если этого не происходит, просто введите:

modprobe ppdev

ВНИМАНИЕ: для ядер, более ранних, чем 2.4, совместная работа ppdev и cwdaemon не гарантируется.

Последовательный интерфейс в Linux для cwdaemon

Установка последовательных интерфейсов проста. Команда

setserial -g /dev/ttyS*

подскажет, какие последовательные интерфейсы сконфигурированы. Если в качестве ответа эта команда выводит

UART: unknown

то это, по всей видимости, означает, что последовательные интерфейсы физически не установлены.

Чтобы попытаться автоматически сконфигурировать первый последовательный интерфейс, выполните с правами root команду

setserial /dev/ttyS0 -v autoconfig

Другие допустимые команды:

setserial /dev/ttyS1 auto_irq skip_test autoconfig
setserial /dev/ttyS3 irq 5 uart 16550A skip_test

Более-менее новые дистрибутивы используют файл /etc/serial.conf, в котором сохраняется информация о последовательных интерфейсах.

Параллельные интерфейсы в FreeBSD для cwdaemon

Вам потребуются модули ppbus и ppi, встроенные в ядро либо подгружаемые во время начальной загрузки. ppbus и ppi определены в стандартном ядре, следовательно, должны работать, если, конечно, Вы их не удалили. В противном случае, можно добавить следующие строки в конфигурацию ядра, перекомпилировать и перезагрузить ядро, как это описано в руководстве по FreeBSD:

# Parallel port
device   ppbus   # Parallel port bus (required)
device   ppi     # Parallel port interface device

Также возможно подгружать модули ppbus.ko и ppi.ko во время начальной загрузки вместо того, чтобы встраивать их в ядро. Для этого в /boot нужно добавить:

ppbus_load="YES"
ppi_load="YES"

Более подробно также можно посмотреть в руководстве по FreeBSD.

Последовательные интерфейсы в FreeBSD для cwdaemon

Драйвер последовательного интерфейса в стандартном ядре загружается по умолчанию. В противном случае, можно переконфигурировать ядро, добавив

# Serial (COM) ports
device   sio   # 8250, 16[45]50 based serial ports

в конфигурацию ядра и пересобрав его. Подробности – традиционно в руководстве.

Как работает cwdaemon

После запуска демон отсоединяется от своего управляющего терминала, после чего управление осуществляется посредством протокола UDP через сетевой порт.

Формат сообщений:

<ESC>"0" Сброс к значениям по умолчанию
<ESC>"2"<"speed value"> Установка скорости манипуляции (5…60 слов в минуту)
<ESC>"3"<"tone value"> Установка частоты тона самоконтроля (300…1000 Гц)
<ESC>"3"<"0"> Выключить самоконтроль
<ESC>"4" Аварийное прекращение работы
<ESC>"5" Выход (остановить работу демона)
<ESC>"6" Set uninterruptable (word- ) mode for simulator - ?
<ESC>"7"<"weight value"> Set weighting (-50 ... 50) - ?
<ESC>"8"<"device"> Назначить устройство для манипуляции (то же, что и опция -d при старте)
<ESC>"9"<"port number"> Устарело
<ESC>"a"<"0|1"> PTT выключить/включить
<ESC>"b"<"0|1"> SSB-сигнал с микрофона/звуковой карты
<ESC>"c"<"x"> Настройка длительностью x секунд (не более 10 секунд)
<ESC>"d"<"delay"> Задержка PTT (0…50) (0…50 мс)
<ESC>"e"<"bandindex"> Номер диапазона выводится на контакты 9, 8, 7, 2 параллельного интерфейса; контакт 9 – старший бит, 2 – младший.
0001 1,8 МГц
0010 3,5 МГц
0011 7 МГц
0100 10 МГц
0101 14 МГц
0110 18 МГц
0111 21 МГц
1000 24 МГц
1001 28 МГц
<ESC>"f"<"sound device"> Назначение звукового устройства (то же, что и опция -x при старте)
<ESC>"g"<"volume"> Назначение уровня громкости для звуковой карты (0…100)
<ESC>"h"<"opt.text"> cwdaemon отвечает "h" и <optionally text> для сообщения программе, что исполнение завершено (to logging program when playing is done - ?)
Any message Передать сообщение кодом Морзе (максимально – 1 пакет!)
qrz de pa0rct ++test-- Увеличение и уменьшение скорости на лету на 2 слова в минуту
de d~l~2~w~r~j pse k Добавить после каждого символа половину паузы (half-space delay - ?)

Значения по умолчанию при запуске

Скорость 24 слова в минуту
Тон самоконтроля 800 Гц
Звук включен
Wordmode (?) выкл.
Weight (?) 0
UDP-порт 6789
Задержка PTT 0 (выкл.)
Интерфейс parport0
Звуковое устройство console

Cwdaemon поддерживает следующие специальные символы

* AR
= BT
< SK
( KN
! SN
& AS
> BK

Электрические принципиальные схемы подлючения параллельного и последовательного интерфейсов

Подключение через параллельный интерфейс:
Схема работы cwdaemon через параллельный интерфейс

Подключение через последовательный интерфейс:
Схема работы cwdaemon через последовательный интерфейс

Тестирование cwdaemon

Запуск тестовой программы:

sh /usr/share/cwdaemon/cwtest.sh

Она работает, только если установлен netcat (что это такое, можно посмотреть здесь).

Список участников

PG4I Conversion to stand-alone utility, basic work, POSIX porting, integration with unixcw and initial FreeBSD support.AR
PA0R Networking, daemon mode and band switching.
OK1ZIA Rework of the device handling, echo-ing and Debian init.d support.
DL2WRJ Many contributions.
G0FRD Unixcw library.
VA3DB FreeBSD support.
AI4JW OpenBSD and multi-platform support.
     
PA3ABA Upstream maintainer for cwdaemon.


Весь код распространяется под лицензией GNU GPL.

19 мая 2012 г.


Программы

На главную

 UR4QTP: записная книжка