Автор |
Сообщение |
|
Дата: 17 Апр 2016 00:49:00 · Поправил: 9CXX (17 Апр 2016 00:49:22)
#
avk
Жаль :( В GM350 этот пин просто один из программируемых, которые через транзисторные ключи идут на входы GPIO в CPU.
Ну а уже CPU может их интерпретировать как хочет.
Я знаю. В Waris так же сделано. В "классике" этого нет - здесь программируются соседние пины, и в них есть куча всяких функций, включая переключение каналов, авария, запрет передачи и так далее, но PTT среди них нет.
|
|
Дата: 17 Апр 2016 11:57:04
#
9CXX
Итак, результаты исследований по вашей проблеме, а именно, чтобы PTT активировалось по низкому уровню RTS, и чтобы после завершения программы RTS возвращался в состояние high и оставался в таковом до следующего запуска программы.
1. Состояние, в котором будут находится служебные сигналы типа RTS/DTR, когда порт не открыт ни одной из программ, задается в самом драйвере при его написании.
Средств в Win32 API, дающих возможность влиять на этот аспект работы драйвера, мне найти не удалось.
Причем искал я не только непосредственно в функциях API, но и среди IOCTL-запросов напрямую к драйверу.
Я также экспериментировал с несколькими функциями и IOCTL-запросами, которые потенциально могли бы на это влиять, но, увы, безуспешно.
2. Поиск в интернете на эту тему также ничего не дал.
Скорее, наоборот - как выяснилось, на некоторых платформах сигналы RTS/DTR по умолчанию находятся в состоянии high до открытия порта, и у людей, среди которых есть и наши коллеги по хобби, проблема обратная - как сделать так, чтобы они были по умолчанию в состоянии low.
На некоторых платформах это решалось настройками в BIOS, что-то типа UART Protection, но общего решения этой проблемы на уровне ОС мне также найти не удалось.
Может быть, автору PE как раз и попалась такая платформа, на которой RTS был по умолчанию в high?
Собственно, дальнейших путей решения проблемы мне видится два:
1. Переделать цепь от RTS к PTT. Вы писали, что у вас там сейчас стоит инвертирующий транзисторный ключ. Тогда все должно быть просто - нужно просто подать RTS на PTT через диод и токоограничивающий резистор.
2. Можно переделать логику работы pocsag2sdr, сделав в ней два режима - серверный, в котором она бы один раз открывала COM-порт и держала его постоянно открытым, установив RTS в high, и клиентский, в котором она бы обращалась к серверному экземпляру для непосредственно отправки сообщения.
Лично мне предпочтительным видится первый вариант, опять же по двум причинам:
1. Станция не будет включаться на передачу при выключении компа, перехода его в спящий режим и периода до запуска программы.
2. Я стараюсь не усложнять софт без излишней на то необходимости. Реализация взаимодействия серверного и клиентского экземпляров программы потребует не только существенного дописывания кода, но и как следствие сделает ее работу менее надежной.
Если бы это действительно было бы надо для случая, например, удаленного передатчика с ограниченным доступом к компу, к которому он подсоединен - безусловно, об этом стоило бы задуматься.
Но делать это только ради того, чтобы работать также неправильно, как это делала PE под голым DOS'ом или Windows 9x, мне лично кажется излишним.
|
Реклама Google
|
|
|
Дата: 17 Апр 2016 13:40:58 · Поправил: 9CXX (17 Апр 2016 13:45:58)
#
avk
Я со всем согласен и не хочу вас нагружать ерундой. Поменяю железку, тем более, что качество сигнала у нее ничуть не лучше. Прошью там PTT на high и попробую P2S опять. Потом выйду на связь. Спасибо, что потратили время на эту эту проблему.
|
|
Дата: 17 Апр 2016 14:04:46
#
9CXX
Прошью там PTT на high и попробую P2S опять. Потом выйду на связь.
O.K., принято.
А вам спасибо за подробный и познавательный обзор по использованию Motorola GM для передачи POCSAG'а - было интересно прочитать.
|
|
Дата: 17 Апр 2016 14:13:43 · Поправил: 9CXX (17 Апр 2016 14:15:25)
#
avk
Да не за что, всего пару дней убил :) Зато убедился сам, что это уровень на 3,5 по пятибальной шкале. Качество так не получить.
Про PTT high - так не получается. Моторола сама встает на передачу при включении. Уровень придется придется понижать софтом, что опять возвращает к проблеме инвертированной PTT. Придется программировать PTT в low назад и модернизировать ключ управления.
|
|
Дата: 17 Апр 2016 16:13:43 · Поправил: 9CXX (17 Апр 2016 16:23:21)
#
avk
PTT сделал в прямую сторону, стало легче жить. И все завелось с вашим софтом без лишних ключей. Так что спасибо!
Пока играю и смотрю что с сигналом и стабильностью приема. Для этого не помешало бы вот что:
1. Передача текста из внешнего txt-файла (нужны большие объемы, а в консоли с ними тяжело и неудобно)
2. Генератор batch'ей (например, чтобы программа фигачила Test 1, Test 2, Test X). Чтобы отследить надежность приема - здесь важно знать сколько послано и сколько принято, и чтобы внутри сообщения был его номер. Или опять же, из текстового файла, но построчно (содержимое я нагенерю сам). Сначала софт посылает первую строчку, потом вторую, потом третью и так далее до конца файла. Можно не TXT, а Excel.
Если вас не затруднит, сделайте, пожалуйста. Тогда будет проще сделать тест на улице.
|
|
Дата: 17 Апр 2016 17:16:00 · Поправил: avk (17 Апр 2016 17:20:38)
#
9CXX
1. Передача текста из внешнего txt-файла (нужны большие объемы, а в консоли с ними тяжело и неудобно)
Это уже можно сделать внешними средствами, например, с помощью такого скрипта, который надо скопировать в какой-нибудь файл с расширением .cmd:
@echo off
for /F "tokens=*" %%A in (%1) do pocsag2sdr -w \\.\com1 -t 500 1 0 "%%A" & timeout 3
Далее запускаете его, указав в качестве аргумента текстовый файл с сообщениями, и этот скрипт для каждой строки запустит pocsag2sdr.
Ну а чтобы он не выплевывал весь, возможно большой файл без остановки, исправьте после слова timeout задержку 3 секунды на ту, которая нужна вам. Или уберите совсем символы "& timeout 3" - тогда задержки не будет.
2. Генератор batch'ей (например, чтобы программа фигачила Test 1, Test 2, Test X). Чтобы отследить надежность приема - здесь важно знать сколько послано и сколько принято, и чтобы внутри сообщения был его номер. Или опять же, из текстового файла, но построчно (содержимое я нагенерю сам). Сначала софт посылает первую строчку, потом вторую, потом третью и так далее до конца файла.
См. скрипт выше. Для тестовых целей можно создать файл, например, с десятью строчками типа Test 1, Test 2 и т.д., и вогнать скрипт в мертвый цикл примерно вот так:
@echo off
:start
for /F "tokens=*" %%A in (%1) do pocsag2sdr -w \\.\com1 -t 500 1 0 "%%A" & timeout 3
goto start
Для того, чтобы определять момент начала выпадания сообщений, этого должно хватить.
Кстати на всякий случай: если вы вещаете на 1200 bps, то свитч -r 1200 необязателен - эта скорость задана по умолчанию.
|
|
Дата: 17 Апр 2016 17:26:23 · Поправил: 9CXX (17 Апр 2016 17:29:18)
#
avk
Спасибо, но пока не выходит:
E:\SOFTWARE-RADIO\POCSAG2SDR>Test.cmd Msg.txt
F was unexpected at this time.
E:\SOFTWARE-RADIO\POCSAG2SDR>Test.cmd /f Msg.txt
F was unexpected at this time.
E:\SOFTWARE-RADIO\POCSAG2SDR>Test.cmd /FMsg.txt
F was unexpected at this time.
E:\SOFTWARE-RADIO\POCSAG2SDR>Test.cmd /F Msg.txt
F was unexpected at this time.
Содержимое Test.cmd:
@echo off
for F tokens= %%A in (%1) do pocsag2sdr -w .com1 -t 500 1 0 %%A & timeout 3
Про ключ 1200 понял. Пусть для ясности и удобства будет.
|
|
Дата: 17 Апр 2016 17:29:47
#
9CXX
Спасибо, но пока не выходит:
Что за ОС? Я проверял под Windows 7 SP1.
Скопируйте также сюда полностью свой скрипт.
Правильная командная строка просто Test.cmd Msg.txt, безо всяких /F.
|
|
Дата: 17 Апр 2016 17:30:42
#
avk
ОС одинаковые. Скрипт скопирован полностью, всего 2 строки.
|
|
Дата: 17 Апр 2016 17:32:15 · Поправил: avk (17 Апр 2016 17:34:36)
#
for F tokens= %%A in (%1) do pocsag2sdr -w .com1 -t 500 1 0 %%A & timeout 3
Здесь ошибки: перед F должен быть /, после tokens= должна быть * и все это должно быть взято в кавычки.
Также в аргументах pocsag2sdr аргумент %%A также надо взять в кавычки.
Скрипт скопирован полностью, всего 2 строки.
Тем не менее приведенный вами и приведенный мною скрипты - разные.
|
|
Дата: 17 Апр 2016 17:36:13 · Поправил: 9CXX (17 Апр 2016 17:41:52)
#
avk
Это форум, видимо, съел когда вы пастили. Я делал copy/paste от отсюда и ничего не менял.
Исправленный скрипт дает вот что:
E:\SOFTWARE-RADIO\POCSAG2SDR>Test.cmd Msg.txt
*** START *** SDR I/Q file generation mode
*** FINISH *** I/Q data have been successfully written to '.com1'
Waiting for 0 seconds, press a key to continue ...
*** START *** SDR I/Q file generation mode
*** FINISH *** I/Q data have been successfully written to '.com1'
Waiting for 0 seconds, press a key to continue ...
*** START *** SDR I/Q file generation mode
*** FINISH *** I/Q data have been successfully written to '.com1'
Waiting for 0 seconds, press a key to continue ...
В файле TXT 3 строчки.
То есть все как бы работает верно. Но при этом нет PTT.
|
|
Дата: 17 Апр 2016 17:48:12
#
9CXX
То есть все как бы работает верно. Но при этом нет PTT.
Потому что где-то по пути еще съелось \\ слева от . перед com1 и \ - справа от нее.
А аргумент .com1 воспринимается не как имя COM-порта, а как имя файла, поэтому pocsag2sdr переключается в режим генерации SDR-файлов.
|
|
Дата: 17 Апр 2016 17:52:48
#
|
|
Дата: 17 Апр 2016 18:22:19 · Поправил: 9CXX (17 Апр 2016 18:56:56)
#
avk
Спасибо за всестороннюю помощь! Все пошло как надо. И, кажется, что с третьим по счету ПК (стационар) и вашей программой декод стал понадежнее. Не знаю в чем дело, может в тайваньском чипе iTE Super I/O и бОльших выходных напряжениях RS232 (11 В против 7..9 В в ноутах), или в вашей программе, но факт остается фактом, на столе пока ничего не побилось ни разу в 1200.
Картинки для понимания что имею сейчас:
Увеличить
Девиацию я, конечно же, подстроил, ибо после ноута она стала шире чем нужно процентов на 25. Форма сигнала, как видно, не меандр, а какая-то лажа. Но про это я писал вчера в большом посте.
Да, и это все тесты на столе - высокие уровни сигнала. Уличные тесты впереди. |
|
Дата: 17 Апр 2016 19:42:41 · Поправил: 9CXX (17 Апр 2016 19:43:11)
#
avk
И еще вопрос - у вас в command line в каком виде нужно вводить sub-ы? NEC их показывает как ABCD. У вас прямо буквой (ABCD), цифрой в dec (1-4) или цифрой в hex (10-14)?
|
|
Дата: 17 Апр 2016 19:48:30
#
9CXX
И еще вопрос - у вас в command line в каком виде нужно вводить sub-ы? NEC их показывает как ABCD. У вас прямо буквой (ABCD), цифрой в dec (1-4) или цифрой в hex (10-14)?
Цифра от 0 до 3, так как внутри кодового слова они представлены двумя битами.
|
|
Дата: 17 Апр 2016 20:05:10
#
avk
Понял. И небольшая сложность. При использовании вашего софта и NEC21A (настройки System LS = RUSSIAN (CYRILLIC) и Receive LS = Same as System Lang) кириллица не идет ни в верхнем регистре, ни в нижнем (оба варианта приходят в неверной кодировке). Получается вот что: Тест ТЕСТ приходит как RёЩЪ REQR.
В Philips 2310 приходит как латиница, так и кириллица даже внутри одного сообщения (но нужно посылать в разном регистре).
|
|
Дата: 17 Апр 2016 20:05:11
#
Один кт315, 2 резистора и золотой ключик у Вас в радиостанции...
|
|
Дата: 17 Апр 2016 20:18:16
#
9CXX
Понял. И небольшая сложность. При использовании вашего софта и NEC21A (настройки System LS = RUSSIAN (CYRILLIC) и Receive LS = Same as System Lang) кириллица не идет ни в верхнем регистре, ни в нижнем (оба варианта приходят в неверной кодировке).
Добавьте в командную строку запуска pocsag2sdr следующий свитч с параметром: -c ascii+cyrillic
После этого сообщения будут перекодироваться из Windows-1251 в кодировку, принятую на Advisor Linguist/NEC 21A/еще много каких двуязычных пейджерах.
|
|
Дата: 17 Апр 2016 20:35:54
#
9CXX
Спасибо за всестороннюю помощь! Все пошло как надо. И, кажется, что с третьим по счету ПК (стационар) и вашей программой декод стал понадежнее. Не знаю в чем дело, может в тайваньском чипе iTE Super I/O и бОльших выходных напряжениях RS232 (11 В против 7..9 В в ноутах), или в вашей программе, но факт остается фактом, на столе пока ничего не побилось ни разу в 1200.
В плане качества формирования POCSAG мне бы хотелось обратить внимание на следующий факт: для отслеживания временнЫх интервалов pocsag2sdr использует QPC-таймеры Windows.
А точность их работы, в свою очередь, сильно завязана на версию Windows и железо.
Подробно это описано здесь: https://msdn.microsoft.com/en-us/library/dn553408(v=vs.85).aspx
Если на пальцах, то сухая выжимка следующая:
1. Наиболее надежно и эффективно они работают в Windows 7/Windows Server 2008 R2 и выше.
2. Для их точной работы требуется, чтобы в компьютере присутствовала такая вещь, как invariant TSC.
Определить его наличие можно с помощью утилиты coreinfo.exe из пакета Sysinternals: https://technet.microsoft.com/en-us/sysinternals/cc835722.aspx
Если в ее выдаче есть следующие строки:
RDTSCP * Supports RDTSCP instruction
TSC * Supports RDTSC instruction
TSC-INVARIANT * TSC runs at constant rate
Значит, ваш компьютер поддерживает надежное измерение интервалов времени на уровне микросекунд.
Если вместо '*' где-то стоит '-' - тогда стоит задуматься о выборе другого компьютера для вещания в POCSAG. |
|
Дата: 17 Апр 2016 20:37:14 · Поправил: 9CXX (17 Апр 2016 21:00:43)
#
avk
Спасибо, позже проверю.
Сейчас вопрос про адресацию, фильтрацию и папки. В тот раз вы уже мне рассказывали, но честно скажу, воткнул не до конца, а стандарт так и не почитал.
На примере NEC:
Я не могу понять как раскидывать по папкам нужные RIC. Модель 21A дает завести 6 RIC на стартовом окне. Например:
1 99
2 999
3 999A
4 999B
5 999C
6 999D
Первые два не имеют сабов т.к. их невозможно задать.
Захожу в Directory Parameter Set. Там вроде те же 6 адресов, но все, блин, наоборот. Теперь у 1 и 2 есть сабы (A-D), а у 3-6 сабов нет! А в главном окне ровно наоборот!
В правом столбце тут же по дефолту стоит Set Data, и там некие OUT OF RANGE и 5 бит через запятую. Если тронуть что-то, то OUT OF RANGE и 5 бит уже вернуть нельзя, а только Personal или Maildrop.
Далее, Directory Name Set. Я могу направлять 1-A, 1-B, 1-C, 1-D в нужную мне папку. Но, блин, почему нельзя сделать то же самое для 3-A...3-D...6-A...6-D? Ведь в начальном окне я задавал сабы как раз для адресов 3..6.
Где-то я их логику не улавливаю. Разжуйте, пожалуйста.
|
|
Дата: 17 Апр 2016 20:43:11 · Поправил: 9CXX (17 Апр 2016 20:43:37)
#
avk
Если в ее выдаче есть следующие строки:
Спасибо за инфо. Вот целиком этот блок:
DE * Supports I/O breakpoints including CR4.DE
DTES64 * Can write history of 64-bit branch addresses
DS * Implements memory-resident debug buffer
DS-CPL * Supports Debug Store feature with CPL
PCID * Supports PCIDs and settable CR4.PCIDE
INVPCID * Supports INVPCID instruction
PDCM * Supports Performance Capabilities MSR
RDTSCP * Supports RDTSCP instruction
TSC * Supports RDTSC instruction
TSC-DEADLINE * Local APIC supports one-shot deadline timer
TSC-INVARIANT * TSC runs at constant rate
xTPR * Supports disabling task priority messages
Это недорогая современная плата Gigabyte GA-P85-D3 Rev 2 (но при этом с serial) и i5-4460.
|
|
Дата: 17 Апр 2016 21:32:31
#
9CXX
Я не могу понять как раскидывать по папкам нужные RIC. NEC21A дает завести 6 RIC. Скажем, вот так:
1 99
2 999
3 999A
4 999B
5 999C
6 999D
Первые два не имеют сабов.
Вот в этом и состоит ваша первоначальная ошибка, из которой проистекают остальные.
Дело в том, что в POCSAG CAP-код не может существовать без субкода.
То, что первых двух CAP-кодов нет субкодов, означает только одно: то, что пейджер будет принимать сообщения для всех четырех субкодов этого CAP-кода.
Поэтому они все четыре и показываются в Directory Parameter Set для каждого из первых двух CAP-кодов.
А вот для CAP-кодов с 3 по 6 пейджер, наоборот, принимает сообщения только для какого-то одного заданного субкода. Соответственно, дублировать его еще раз в Directory Parameter Set смысла нет - он и так уже задан.
В правом столбце тут же по дефолту стоит Set Data, и там некие OUT OF RANGE и 5 бит через запятую. Если тронуть что-то, то OUT OF RANGE и 5 бит уже вернуть нельзя, а только Personal или Maildrop.
В этих пяти битах, помимо типа папки - Personal или Maildrop - также задаются ее параметры, типа как показывать прием сообщений в нее и т.д.
Просто в NEC'е схалявили, и все комбинации битов, соответствующие этим настройкам, не стали забивать в ROM-файл. Поэтому если их поменять на самом пейджере на что-то отличное от дефолтных, то тогда в софте для программирования и показывается этот OUT OF RANGE.
В целом ничего страшного - можно оставить как есть, на прошивку пейджера это никак не повлияет, можно поставить Personal или Maildrop - тогда настройки, сделанные на самом пейджере для этой папки, будут сброшены.
Далее, Directory Name Set. Я могу направлять 1-A, 1-B, 1-C, 1-D в нужную мне папку. Но, блин, почему нельзя сделать то же самое для 3-A...3-D...6-A...6-D?
Потому что для CAP-кодов с 3 по 6 пейджер принимает сообщения не для всех 4 субкодов, а только для одного заданного.
|
|
Дата: 17 Апр 2016 21:36:13
#
9CXX
TSC * Supports RDTSC instruction
TSC-DEADLINE * Local APIC supports one-shot deadline timer
TSC-INVARIANT * TSC runs at constant rate
Это недорогая современная плата Gigabyte GA-P85-D3 Rev 2 (но при этом с serial) и i5-4460.
Эта фича, invariant TSC, в первую очередь не материнской платы, а самого центрального процессора.
А он у вас достаточно современный, так что ничего удивительного, что она у вас наличествует.
|
|
Дата: 17 Апр 2016 22:21:14
#
avk
Вроде бы все ясно и запрогил все как мне надо. Последний вопрос - какой посылкой рисовать антеннку? Фичу саму в пейджере вижу.
|
|
Дата: 17 Апр 2016 22:28:54
#
9CXX
Последний вопрос - какой посылкой рисовать антеннку?
Просто любой посылкой стандарта POCSAG на той скорости и с той инверсией, с которыми пейджер принимает свои сообщения.
|
|
Дата: 17 Апр 2016 22:30:35
#
avk
Мне что-то помнится просто про некую idle-посылку, которая такое делала.
|
|
Дата: 17 Апр 2016 22:37:51
#
От пейджера зависит. В FOX-ах этот параметр к примеру вкл или выкл при программировании. Причём можно выбрать пропал сигнал (на какое то определённое время) и антеннка или появляется или пропадает. Соответственно при появлении сигнала наоборот. За сигнал принимается любая читабельная посылка на частоте пейджера.
|
|
Дата: 17 Апр 2016 22:40:57
#
9CXX
Мне что-то помнится просто про некую idle-посылку, которая такое делала.
Да можно, конечно, сделать в pocsag2sdr режим формирования посылки из преамбулы и фрейма только с одними idle codewords, как это было на фирменном железе типа Zetron M16 в случае, если в эфир не надо было выдавать полезную информацию.
Ну а так вполне подойдет просто регулярная посылка сообщения на какой-нибудь отфонарный CAP-код - эффект будет тот же самый.
|
Реклама Google |
|