Пейджъри


 ПЕЙДЖЪРИ В БЪЛГАРИЯ
 (или що е то и има ли почва у нас)

ВНИМАНИЕ.
          Този материал е предоставен само и изключително с познавателна
          цел. Всяко неоторизирано приемане на съобщения от глобални
          съобщителни мрежи, които не са предназначени за вас, представлява
          нарушение на Законът за далекосъобщенията и носите съответната
          наказателна отговорност.
 
 

1. Предговор

Еххх, като че ли беше вчера. Абонатите на Мобилтел бяха малко на брой и на
практика бяха ограничени с бизнес абонати и жители на големите (и богати)
градове. За останалите хора това удоволствие беше недостъпно и единствената
алтернатива да останат мобилни (от пръв поглед :)) бе да си купят пейджъри
и да станат абонати на Мобипейдж. И аз имах (и още имам) пейджър от онези
времена: Motorola Advisor Linguist. Готина машинка: 4 реда буквено-цифрен
дисплей, възможност за приемане на съобщения на кирилица и достатъчен обем
на паметта. Не че много хора ми пращаха съобщения, а и в последствие същият
този пейджър стана причина за разни не много приятни събития. Така напълно
се оправдава сегашната му съдба, за която ще научите в края на статията в
секцията "Да си направим приемник".
 
 

2. POCSAG

Като стане дума за пейджъри, първата ми асоциация е POCSAG. Това съкращение
означава Post Office Code Standartization Advisory Group. И като става дума
за Post Office се разбира Британската Пощенска Служба, отговорна за този и
редица други телекомуникационни протоколи.

POCSAG е стандарт за предаване на цифрова и буквеноцифрова информация със
средствата на глобално радиоразпръскване. Като такъв той се състои от набор
спецификации как точно трябва да се излъчва информацията на физическо и на
логическо ниво.

Ще започна с физическото ниво. Предаването се осъществява с помощта на FSK
(Frequency Shift Keying) модулация на носещата радиочестота. Девиацията в
стандарта е +/- 4.5 kHz, като скоростта на предаване на данните е 512, 1200
или 2400 bps (бита в секунда). По-високата честота кодира логическа нула 0,
а по-ниската - логическа единица 1. Сигнал с неотместената базова носеща
честота няма смисъл в контекста на POCSAG (само отместените честоти важат).
Като цяло данните се предават по начин, подобен на серийната RS-232 линия
(известна и като COM интерфейс в IBM PC средите, но там логическите нула и
единица се представят съответно с напрежение -12V и +12V). В някои системи
се използва и модулация с 4 различни честотни отмествания, всяко от които
кодира 2 бита информация, но тях ще ги разгледам някой друг път когато се
установи има ли такива в България или няма.
На логическо ниво протоколът е асинхронен, сериен и пакетен. Пакетите се
състоят от последователност от 32 битови кодови думи, предхождани от т.нар.
preamble. Последният представлява повтаряща се поредица от обръщащи се
битове: 10101010101010101... Дължината й е минимум 576 бита и същинското й
предназначение е да "привлече винманието" на приемното устройство и да му
помогне да се синхронизира с предаването. Синхронизацията е задължителна в
случая поради асинхронната природа на предаването, аналогична на познатия
стартов бит при RS-232 комуникацията. Също така повтарящата се поредица от
битове позволява на приемното устройство да се адаптира към скоростта на
предаване, при което един и същи хардуер може да приема предавания с най-
различни скорости на информацията. Въпросната стартова последователност се
предава винаги преди започване на пакет от кодови думи, веднага след като
се появи носещата честота.

След като премине синхронизационната част започва същинското предаване. То
се състои, както вече споменах, от пакет кодови думи. Последните са дълги
32 бита и имат точно определена структура. Различават се два вида кодови
думи - адресни и съобщителни, като най-старшият бит на съобщението (бит 31)
определя типа на думата. Да не забравя да спомена, че думите се предават от
най-старшия към най-младшия бит.

Адресни думи - бит 31 = 0. Структурата им е както следва:
бит: 31  30   13 12     11 10      1     0
     -----------------------------------------
    | 0 | адрес | функция | BCH код | четност |
     -----------------------------------------
адрес - 18 бита (битове от 30 до 13): представляват старшите 18 бита от
        ефективният и уникален адрес на пейджъра (известен като CAP код).
        Останалите 3 бита се предават по малко извратен начин, който е
        тясно свързан с необходимостта от пестене на заряда на батерията
        и ще бъде разгледан по-нататък.
функция - 2 бита (битове от 12 до 11): представляват типа на съобщението
        (или адреса на източника). Конкретното им значение е зависимо от
        телекомуникационният оператор. Виж секцията "МОБИПЕЙДЖ".

Съобщителни думи - бит 31 = 1. Имат следната структура:
бит: 31  30             11 10      1     0
     -----------------------------------------
    | 1 | пакет от данни  | BCH код | четност |
     -----------------------------------------
пакет от данни - 20 бита (битове от 30 до 11): представляват пакетирана
        последователност от кодирани символи. За цифровите предавания се
        използва BCD (Binary Coded Decimal), като кодовете от 0xA до 0xF
        имат специално значение:
        0x0..0x9 - цифрите от 0 до 9
        0xA - запазен
        0xB - U (от Urgent)
        0xC - интервал
        0xD - тире
        0xE - дясна скоба
        0xF - лява скоба
        Самите цифри са пакетирани по 5 в една кодова дума, като първа
        (в най-старшите битове) е най-старшата цифра, като в случай на
        недостиг на цифри за запълване на последната кодова дума, тя се
        допълва с интервали (0xC).
        Буквено-цифрените предавания са в 7 битов ASCII код. Тъй като в
        една кодова дума не се побират точен брой 7 битови символи, то се
        прибягва до разделяне на непълно побиращият се на две части, като
        първата от тях допълва кодовата дума до 20 бита, а втората част е
        в началото на следващата кодова дума. И за да е по-пълна шашмата
        самите 7 бита са с обратна наредба (започват с най-младшият). ASCII
        съобщенията завършват обикновено с ETX, EOT или ETB контроли (част
        от ASCII стандарта с кодове под 32). Последната дума от съобщениято
        евентуално се допълва с нули.

Общи за двата вида думи полета:
BCH код - 10 бита (битове от 10 до 1): представляват битове за откриване и
        коригиране на грешки в предаването. Самият ECC (Error Correcting
        Code) код е с дистанция между кодовите думи 6 бита, което означава
        че всяка валидна 32 битова кодова дума се различава от другите по
        минимум 6 бита. Това позволява откриването и коригирането на един
        или два грешни бита. Кодът е тип (31,21) с генериращ полином:
        x^10 + x^9 + x^8 + x^6 + x^5 + x^3 + 1.
        Изполването на коригиращ код се оправдава от изискването за сигурно
        предаване на данните при едностранна комуникация (пейджърът е само
        и единствено приемащо устройство, без да има каквато и да е обратна
        връзка с излъчващото звено).
        Повечето пейджъри след несполучлив опит за корекция на повредена
        кодова дума заграждат грешните символи, попадащи в рамките на нея
        дума. Моят стар Motorola Advisor ги загражда в подобие на квадратни
        скоби, пресечени с двойна линия.
четност - 1 бит (бит 0): бит за четност на броят битове в състояние 1, като
        заедно с него общият брой става нечетен.

Измежду всички кодови думи има няколко специални:
0x7CD215D8 или 01111100110100100001010111011000 - кадрова синхронизация:
        служи за указване на началото на нов кадър вътре в пакета. Кадърът
        се състои от 17 кодови думи, като първата от тях е думата за кадрова
        синхронизация, следвана от 8 групи двойки кодови думи. Последните
        три бита от адреса на пейджъра задават една от тези 8 групи. Ако в
        момента не получава съобщение, пейджърът предсказва момента на поява
        на тази група и включва радиоприемника малко преди появата й. Ако в
        този момент той не открие там адресна дума със собственият си адрес,
        то радиоприемникът се изключва до времето на следващата група, която
        се намира на същата позиция в следващият кадър. Така се спестява от
        заряда на батерията. Структурата на кадъра ще онагледя по-нататък.
0x7A89C197 или 01111010100010011100000110010111 - празен ход (idle):
        използва се навсякъде, където трябва да има валидна кодова дума, но
        поради една или друга причина такава не е налична. С нея се попълва
        липсващите кодови думи в рамките на една група или се допълва до 8
        групи даден кадър. Служи и като терминатор на предаваното съобщение.
0x7CF21436 или 01111100111100100001010000110110 - алтернатива на думата за
        кадрова синхронизация. Използва се от някои оператори при различна
        от стандартната схема за адресация. Има и други видове алтернативни
        думи за кадрова синхронизация, които доставчиците могат да използват
        за предаване на кодирани данни или за разширяване на адресираното
        пространство, като предаванията им си остават в рамките на POCSAG
        стандарта. В тази статия няма да ги разглеждам.

Структура на пакета:
 ----------------------------------------------------------------
| 1010101010... (preamble) | кадър | кадър | кадър | ... | кадър |
 ----------------------------------------------------------------

Структура на кадъра:
дума:  1          2   3     4   5          16   17
 --------------------------------------------------
| кадр. синхр. | група 0 | група 1 | ... | група 7 |
 --------------------------------------------------

Групата се състои от две кодови думи, всяка от които е или информационна,
        или адресна, или празен ход. Съобщението за даден пейджър започва
        винаги от групата на позиция, равна на най-младшите три бита от
        адреса му. Ако в един и същи пакет има повече от едно съобщение,
        то празнините между тях се запълват с празни (idle) думи. Подобна
        ситуация се получава, когато дадено съобщение завърши в някоя група
        и се случи тя да е по-малка от групата, в която е приемникът на
        следващото съобщение (oбикновено едно пакетно предаване носи по
        повече от едно съобщение).
 

3. Система МОБИПЕЙДЖ (http://www.mobikom.com/show.asp?dir=mobipage)

Така, ето че достигнах и до нещата от живота, при това в нашата малка и не
чак до там спретната родина. При този бум на GSM-ите при нас все още има и
работи на пълна сила система от доставчици на пейджърни услуги. От тях най-
известната, разбира се, е Мобипейдж, подразделение на Мобиком. Освен нея в
някои части на страната функционират и още два доставчика: Линк Пейджинг и
Варна Пейдж. Съществува и пейджърна система на БТК наречена "Инфоефир", но
тя не използва POCSAG за предаване на данните, а RDS (Radio Data System) и
се пренася на честотата на радио "Хоризонт", като по този начин има най-
голямо покритие в страната от всички пейджърни доставчици и тук няма да се
разглежда. Всички системи опрерират на различни носещи честоти, за да не
става обърквация. Мобипейдж използват честота 150.1750 MHz (пише го дори на
гърба на продаваните от тях пейджъри). Линк Пейджинг използват друг по-висок
очестотен обхват, а за Варна Пейджинг и представа си нямам.

Та по-подробно за Мобипейдж:
Използва се 1200 бита/сек FSK модулиран сигнал на 150.1750 MHz. Съобщенията
са буквено-цифрови и само цифрови, като буквено-цифровите се кодират по 2
различни начина в зависимост от вида на пейджъра за който са предназначени:

 Кодова таблица "латиница": (главни и малки букви)

           -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
        2- инт !  "  #  $  %  &  '  (  )  *  +  ,  -  .  / 
        3-  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?
        4-  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O
        5-  P  Q  R  S  T  U  V  W  X  Y  Z  [  \  ]  ^  _
        6-  @  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o
        7-  p  q  r  s  t  u  v  w  x  y  z  {  |  }  ~ инт

        Кодова таблица "кирилица/латиница": (само главни букви)

           -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
        2- инт !  "  #  $  %  &  '  (  )  *  +  ,  -  .  /
        3-  0  1  2  3  4  5  6  7  8  9  :  ;  <  =  >  ?
        4-  @  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O
        5-  P  Q  R  S  T  U  V  W  X  Y  Z  [  Л  ]  Н  h
        6-  '  Б  Г  Г  Д  Е  Ж  З  И  Й  Л  П  У  Ф  Ц  Ч
        7-  Ш  Щ  Ъ  Ы  Ь  Э  Ю  Я  Ъ  С  I  К  У  П  ~ инт

        ("инт" означава "интервал")

 Кодовете от 0x00 до 0x1F отговарят на стандартните ASCII контроли.
        Прави впечатление, че част от буквите в кирилицата се дублират, а
        друга част бива заместена от латински букви със същия графичен вид.
        (Всъщност при по-внимателният анализ на смесената кодова таблица се
        вижда, че от кирилските букви присъстват само тези, на които липсва
        графичен аналог в латиницата. Самите съобщения на български език се
        преставят със смесица от латински и кирилски букви, което лесно се
        вижда ако подобно съобщение се третира като обикновено ASCII без да
        се прекодира по смесената "кирилица/латиница" кодова таблица)

Вида на кодирането се указва чрез полето за номер на функцията в адресната
кодова дума. Предполагам, че изборът на дадена функция се прави на база на
модела на пейджъра, към който се изпраща съобщението. Всеки пейджър бива
регистриран в базата на Мобипейдж, за да получи CAP код (адрес) и съответния
му номер, така че системите на Мобипейдж знаят точно вида на пейджъра и на
поддържаната от него кодова таблица. Врзъката между номера на пейджъра и CAP
кода му за момента ми е неизвестна, и нищо чудно да няма такава (единствено
да има таблица на съответствието номер -> CAP код).
Изглежда че преобладаващата част от предаванията с кодова таблица "латиница"
са с функция 1, докато предаванията с кодова таближа "латиница/кирилица" са
с функция 2. За цифровите предавания се използват функции 0 и 3. Понякога се
наблюдават отклонения от тези емпирични правила, които са особено очевидни
при груповите предавания (реклами, новини и др.) 

Услугата Мобипейдж е глобална в рамките на страната. Съобщенията се излъчват
в цялата страна, независимо от местонаходжението на пейджъра (системата няма
как да знае къде се намира той, тъй като връзката е едностранна). С помощта
на любителски скенер или модифициран пейджър става възможно приемането на
ВСИЧКИ съобщения. Основната трудност се заключава в установяване на връзката
между CAP кода и номера. Последната може да се реши за специфичен пейджър
като се изпрати съобщение до този пейджър от:
http://www.mobikom.com/messenger/pager.asp
с определена ключова комбинация символи и се проследи за това съобщение в
общия поток и така се изолира CAP кода. Друг начин за изпращане на пейдж е
посредством e-mail до адрес [email protected], където xxxxxx е номерът на
пейджъра, без кода 0179.
 

4. Да си направим приемник

Приемник за пейджърните сигнали може да се направи по много начини. Като
пример може да се посочи използването на радиолюбителски скенер, който се
доработва така, че да се изкара изход директно от честотният дискриминатор.
Аз обаче не съм нито радиолюбител, нито пък разбирам толкова от електроника
и най-важното - нямам скенер :( Обаче имам моят (е не точно мой...) стар
Advisor. Този пейджър, подобно на други конструкции на пичовете от Motorola
има напълно самостоятелен УКВ модул, представляващ приемник на 150.175 MHz,
с честотен дискриминатор, управляем филтър/следяща схема, преобразувател на
нивото на сигнала в CMOS нива и регулатор на напрежение. Платката е снабдена
с 8 изводен женски конектор с малка стъпка (което е малко неудобно, но...).
Ето схема на изходният конектор:
 ---------
|         |   ---
|         |  |   |
|          --    |
| o 1            |  1 - Vcc, 3-5V (захранване на цифровата част)
| o 2            |  2 - Gnd (обща маса)
| o 3            |  3 - Vbb, 1.3-1.5V (захранване на аналоговата част)
| o 4            |  4 - DOUT (цифров изход)
| o 5            |  5 - А0 \
| o 6            |  6 - А1 |- контролни входове
| o 7            |  7 - А2 /
| o 8            |  8 - AOUT (аналогов изход)
|                |
|   платка на    |
|   приемника    |
|                |
 ----------------

Входовете А0-А2 са цифрови информационни входове, чието състояние определя
работата на филтърната/следяща система на приемника:

A0 A1 A2  функция
--------------------------------------------
 1  1  1  приемникът е изключен
 0  1  1  първоначално установяване (Reset)
 1  0  1  задържане (Hold)
 1  1  0  следене, филтър на 300 Hz
 0  1  0  следене, филтър на 600 Hz

Захранва се с две униполярни захранващи напрежения, 1.5V за аналоговата част
на приемника и 3-5V за цифровата част. За получаване на изходният сигнал е
необходимо нивото на цифровият изход да се повдигне (pull up) през резистор,
свързан към захранването на цифровата част. Най-просто захранването се прави
с две батерии от 1.5V. Ето примерна схема:
           B1                        B2
 3V  -------------------  1.5V ------------------
+---| +  батерия 1.5V - |--*--| + батерия 1.5V - |---+ Gnd
|    -------------------   |   ------------------    |
|          R               |                         |
*---------| 1 K |-----+    |                         |   + - няма връзка
|                     |    |                         |   * - връзка
|             +-------+----+     +-------------------*
|             |       |          |                   |
*-------------+-------+----------+----------+        |
|             |       |          |          |        |
|             |       |          |          |        |
|      +------+-------+----------*          *---o    o
|      |      |       |          |          |     K /
|      |      |       *--> DOUT  |          |      /
|      |      |       |          |          |     |
|      |      |       |          |          |     |
o      o      o       o          o          o     o
1      2      3       4          5          6     7
          конектор на радиопреимната платка

(Като пестиливи българи се задоволяваме с минималното захранващо напрежение
за цифровата част и минаваме само с две батерии от 1.5V, средни по големина,
размер C, само за 1.40 лв двете)

Ключът K служи за първоначално установяване на филтъра на приемника, което
по всичко изглежда не е особено наложително, но все пак го има. В работното
си положение ключът K осигурява логическа нула на A2. Изходът DOUT осигурява
полезният сигнал. Следва да се има предвид, че сигналът е инвертиран поради
факта, че по-високата честота кодира логическа нула. Това трябва да бъде
отчетено в софтуера.

Използването на приемник от Motorla Advisor има едно много полезно свойство:
той е универсален. Има различни модели приемници, работещи на различните
честоти, използвани от доставчиците. Така за приемане на сигналите на Линк
Пейджинг е достатъчно да се използва приемна платка от техен пейджър модел
Motorola Advisor (или Advisor Linguist). Универсалността на приемника може
да се потвърди и от факта, че той се използва и в други модели пейджъри.

Сигналът може да бъде вкаран в компютъра по много различни начини. Изборът
на интерфейс зависи от наличния декодерен софтуер. При най-простата схема се
използва входът "линия" на звуковата карта, при което сигналът директно се
семплира посредством функциите за запис на звукови форми на картата. Метода
се използва предимно от Windows и Unix базираният софтуер. Може също така да
бъде използвана универсална DAQ (Data Acquisition) платка (примерно такава
на National Instruments), което позволява задаването на почти произволни
честоти на семплиране. В случай на използване на звукова карта честотите са
ограничен брой измежду стандартните 8 kHz, 11.050 kHz, 22.100 kHz и 44.200
kHz. Последното не е болка за умирачка, все пак.

Много важно е, независимо какво устройство използвате за аналогово-цифрово
преобразуване (звукова карта, DAQ или друг хардуер), то да може даподдържа
DMA трансфер, тъй като при високата честота на семплиране става трудно да се
обработват прекъсванията от хардуера. За пример: при честота на семплиране 10
kHz и изключен DMA на система Celeron II на 675 MHz се отделят около 20% от
процесорното време под Windows 98 SE за обработка на прекъсвания и декодиране
на POCSAG битов поток. При включване на DMA натоварването спада до 3%.

Друг метод е използването на операционен усилвател, захранван с биполярно
захранване +/- 12V, без отрицателна обратна връзка, функциониращ в режим на
компаратор на напрежение. Така логическите нива на изхода DOUT директно се
превръщат в RS-232 съвместими нива и се подават на CTS входа на някой от COM
портовете. Методът се прилага главно в DOS базираните програми, когато може
да се прихванат директно хардуерните прекъсвания на COM порта и таймера. Има
и Windows 9x базиран софтуер, който използва динамични VxD драйвери за да си
осигури директен достъп до хардуера. DOS базираните програми обикновено имат
много по-ниски хардуерни изисквания от Windows базираните, което позволява
примерно да използвате стар компютър клас 386, който да се задели специално
за целта.

Примерен софтуер за декодиране на POCSAG съобщения:

за Unix: multimon - прекрасен софтуер, може да чете директно от /dev/dsp в
         системите, който го поддържат, и да декодира в реално време много
         различни сигнали. Също така може да чете сигналите от предварително
         записани WAV или raw файлове. Възможно е и обратното действие - да
         генерира WAV файл по зададено входно съобщение и сигнализация. За
         съжаление не е обновяван от 1998 година насам :(
        URL: http://www.baycom.org/~tom/ham/linux/multimon.html

за Windows: POC32 - обещаващ софтуер за Windows 9x/ME/NT/2k/XP (със звукова
         карта) и Windows 9x/ME (през COM порта). Не съм имал възможност да
         го видя в действие, но изглежда много внушително, с възможност за
         филтриране на съобщенията по CAP код, по съдържание и т.н.
        URL: http://home.nikocity.de/go/poc32/

за DOS: PD 2.05 - много го хвалят. Използва COM интерфейс и може да извежда
         съобщенията на друг COM порт. Върви с допълнителна програма за база
         данни, работеща под Windows 3.1 на ДРУГ компютър, свързан с RS-232
         (сериен) кабел с компютъра, на който работи PD. Някога може и да е
         било върха, но в дните на супер бързите компютри и 32 битовите ОС е
         малко демоде. Освен това изисква наличието на два компютъра, ако е
         необходмо наблюдаването и класифицирането на съобщенията в реално
         време.
        URL: http://www.bearnet.demon.co.uk/pocsag/pd205.zip
 

5. Заключение

Е, това е! Изписах се. Не е зле като за няколко часа напрегнато писане. Не
може да не съм забравил да напиша нещо и сигурно съм забравил. Но все пак
се надявам някой да е открил нещо полезно в тези 22 KB неформатиран текст.