L'unité POCSAG est une unité Turbo PASCAL 7.0 qui décode les messages POCSAG.
Voici la partie Interface de cette unité.
...
Interface
Const FSC = $7CD215D8; { POCSAG Frame Synchronization Codeword }
______ICW = $7A89C197; { POCSAG Idle CodeWord }
______PCW = $55555555; { POCSAG Preamble CodeWord }
______CRC = $0769;_____{ POCSAG CRC Polynomial x^10+x^9+x^8+x^6+x^5+x^3+1 }
____{ 8250 registers }
______MCR = 4;______{ Modem Control Register }
______DTR = $01;____{ 00000001 - See MCR - SUB 25: 20 - SUB 9: 4 }
______RTS = $02;____{ 00000010 - See MCR - SUB 25: 04 - SUB 9: 7 }
______MSR = 6;______{ Modem Status Register }
______CTS = $10;____{ 00010000 - See MSR - SUB 25: 05 - SUB 9: 8 }
______DSR = $20;____{ 00100000 - See MSR - SUB 25: 06 - SUB 9: 6 }
Type TFunctions = (Auto, Beep, Num, Alpha);
_____TDTypes= (CodeWords, Messages);
_____TPolarity= (Positive,Negative);
_____TPOCConf = Record
_________________COMPort : Byte; { 1, 2, 3 or 4 }
_________________COMLine : Byte; { CTS or DSR }
_________________BitRate : Word; { 512, 1200 or 2400 }
_________________DType : TDTypes;
_________________CRCCorr : Boolean; { Enable CRC Correction }
_________________FNCT : Array [0..3] Of TFunctions;
_________________Status : Boolean;
_________________StX,
_________________StY,
_________________StTC,
_________________StTB : Byte;
_________________StS : String [18];
_________________ShowTime: Boolean;
_________________TimX,
_________________TimY,
_________________TimTC,
_________________TimTB : Byte;
________________End;
_____TPOCOutput = Record
___________________DType: TDTypes;
___________________DNbr : Word; { Number of Datas }
___________________RIC : LongInt;
___________________Fnct : Byte;
___________________Mess : String [255];
__________________End;
_____TPOCSend = Record
_________________COMPort : Byte; { 1, 2, 3 or 4 }
_________________COMLine : Byte; { DTR or RTS }
_________________Polarity: TPolarity;
_________________Code : TFunctions;
_________________Rate : Word; { 512, 1200 or 2400 }
_________________RIC : LongInt;
_________________Fnct : Byte; { 0, 1, 2 or 3 }
_________________Mess : String [255];
________________End;
Var POCConf: TPOCConf;
____POCOutput: TPOCOutput;
____POCSend: TPOCSend;
____POCInit: Boolean;
Function Start: Byte;
Procedure Send;
Procedure NextMessage;
Procedure FirstMessage;
Procedure Stop;
...
Déclarez simplement Uses POCSAG
dans votre programme.
L'unité POCSAG contient un code de démarrage qui affiche une fenêtre de copyright. Si vous utilisez cette unité, vous devez commencer votre programme par l'instruction Delay (2000)
.
Si l'initialisation de l'unité réussi, le booléen POCInit est vrai.
Donc, un bon début de programme est
Begin
Delay (2000);
If Not POCInit Then Begin
_____________________POCSAG.Stop;
_____________________ClrScr;
_____________________Halt;
____________________End;
...
Ensuite, vous devez configurer l'unité POCSAG.
Le code de configuration par défaut est
With POCConf Do Begin
_________________COMPort:=2;
_________________COMLine:=DSR;
_________________BitRate:=1200;
_________________DType :=Messages;
_________________CRCCorr:=True;
_________________FNCT[0]:=Num;
_________________FNCT[1]:=Auto;
_________________FNCT[2]:=Auto;
_________________FNCT[3]:=Alpha;
_________________Status :=False;
_________________StX :=0;
_________________StY :=0;
_________________StTC :=0;
_________________StTB :=0;
_________________StS :='';
_________________ShowTime:= False;
_________________TimX :=0;
_________________TimY :=0;
_________________TimTC :=0;
_________________TimTB :=0;
________________End;
With POCSend Do Begin
_________________COMPort:=2;
_________________COMLine:=DTR;
_________________Polarity:=Positive;
_________________Code :=Alpha;
_________________Rate :=1200;
_________________RIC :=12345;
_________________Fnct :=3;
_________________Mess :='POCSAG UNIT ©1997 BERNARD GALASSO';
________________End;
COMPort
définit le port RS232 à utiliser pour recevoir les messages POCSAG. Toute valeur entre 1 et 4 est correcte. L'unité trouve toute seule l'adresse réelle du port, ainsi c'est d'un emploi facile.
COMLine
définit la ligne à utiliser sur le port COMPort. Ce peut être $10 ou $20. Dans l'unité, CTS et DSR sont des constantes prédéfinies, donc utilisez-les pour définir sur quelle ligne votre interface HAMCOM sort le signal.
BitRate
définit la vitesse de transmission des données. Vous pouvez définir 512, 1200 et 2400 bps. L'unité ne prendra en compte que les données à cette vitesse. Si vous définissez Bitrate à 0, l'unité trouvera automatiquement la vitesse de transmission des données.
NOTE: L'unité fonctionne pour chacune des trois vitesses, mais seulement une des trois dans le même flux de données. Cela signifie que si vous recevez un flux contenant des messages à des vitesses différentes, l'unité ne décodera que les messages envoyés à la vitesse du premier d'entre-eux.
Ex: Voyons ce qui se passe avec ce flux
Début du flux
1er message à 1200 bps
1er message à 512 bps
1er message à 2400 bps
2ème message à 1200 bps
2ème message à 2400 bps
2ème message à 512 bps
3ème message à 1200 bps
Fin du flux
Si bitrate vaut 512, seuls les messages à 512 bps seront décodés.
Si bitrate vaut 1200, seuls les messages à 1200 bps seront décodés.
Si bitrate vaut 2400, seuls les messages à 2400 bps seront décodés.
Si bitrate vaut 0, seuls les messages à 1200 bps seront décodés car le flux commence par un message à 1200 bps.
DType
définit ce que l'unité doit ressortir. Voyez POCOutput.
CRCCorr
est un booléen. S'il est vrai, l'unité corrige les mots POCSAG avant de les interpréter.
FNCT[x]
définit la manière dont les fonctions POCSAG doivent être interprétées.
S'il vaut NUM, le message associé sera décodé en tant que message Numérique, même s'il s'agit d'un message alphanumérique.
S'il vaut Beep, le message associé est ignoré.
S'il vaut Alpha, le message associé sera décodé en tant que message Alphanumérique, même s'il s'agit d'un message numérique.
S'il vaut Auto, le message est d'abord décodé en tant que message numérique, et s'il y a trop d'erreurs (caractères hors de l'intervalle 0..9), alors le message est décodé en Alphanumérique. Décodé ainsi, la pluspart des message seront décodés normalement, mais quelques messages alphanumérique, particulièrement les plus courts, peuvent l'être anormalement.
Status
est un booléen qui définit si l'unité doit inscrire à l'écran un caractère de Status pendant le réception. S'il est vrai, StX
et StY
definissent la position en X et Y du caractère, StTC
la TextColor et StTB
la TextBackground.
StS
est une chaîne qui définit quoi inscrire.
Le premier caractère correspond à la réception d'un préambule.
Le second caractère correspond à la réception d'un flux.
Le troisième caractère indique le temps d'interprétation.
Les caractères 4 à 18 sont utilisés pour faire une petite animation ASCII.
Exemple:StS='rRI\\||//'
ShowTime
est un booléen qui définit si l'unité doit inscrire l'heure à l'écran.S'il est vrai, TimX
, TiMY
, TimTC
et TimTB
définissent la position en X et Y, la TextColor et la Textbackground de l'horloge.
COMPort
définit le port RS232 à utiliser pour envoyer le flux POCSAG. Toute valeur entre 1 et 4 est correcte. L'unité trouve toute seule l'adresse réelle du port, ainsi c'est d'un emploi facile.
COMLine
définit la ligne à utiliser sur le port COMPort. Ce peut être $01 ou $02. Dans l'unité, DTR et RTS sont des constantes prédéfinies, donc utilisez-les pour définir sur quelle ligne de votre interface HAMCOM le signal doit entrer.
Polarity
définit la manière dont est codé un bit. Vous devez trouver la configuration adaptée à votre interface HAMCOM.
Code
définit de quelle façon l'unité doit coder le message. S'il vaut Beep, le message est ignoré, et seul le RIC est envoyé. S'il vaut Num, le message est codé en tant que message numérique, tout caractère hors les caractères numériques valides selon POCSAG sont transmis comme des espaces. S'il vaut Alpha, le message est codé en alphanumérique.
Rate
définit la vitesse du flux de données, en BPS. Vous pouvez sélectionner entre 512, 1200 ou 2400 bps.
RIC
définit le RIC auquel est destiné le message. Tout RIC correct selon POCSAG est possible.
FNCT
définit la fonction à envoyer. Vous pouvez choisir entre 0, 1, 2 ou 3.or 3.
Mess
définit le message à envoyer. Vous pouvez définir le message que vous voulez.
Notez que les caractères donc le code ASCII excède 127 sont envoyés comme "?".