Дипломная работа: Проектирование устройства передачи данных по радиоканалу
/*--------------------------------------------------------------
*/
#ifdef RUSSIAN // структура данных
под русский алфавит
struct CVT CVT_TABLE[] =
{
/*¦ +-----------------¦
5-Unit ¦ 7-Unit ¦ */
/*¦ No ¦LET ¦ FIG ¦RUS ¦ Code
¦ Code ¦ */
/*+----+-------+-------+---------+--------------------¦
*/
{0x41,0x2D,'a' },/*¦01¦A
41 ¦- 2D ¦А 80 ¦ZZAAA ¦BBBYYYB 71 ¦
*/
{0x42,0x3F,'b' },/*¦02¦B
42 ¦? 3F ¦Б 81 ¦ZAAZZ ¦YBYYBBB 27 ¦
*/
{0x43,0x3A,'c' },/*¦03¦C
43 ¦: 3A ¦Ц 96 ¦AZZZA ¦BYBBBYY 5C ¦
*/
{0x44,0x03,'d' },/*¦04¦D
44 ¦Wh?? ¦Д 84 ¦ZAAZA ¦BBYYBYB 65 ¦
*/
{0x45,0x33,'e' },/*¦05¦E
45 ¦3 33 ¦Е 85 ¦ZAAAA ¦YBBYBYB 35 ¦
*/
0x46,',/*¦06¦F
46 ¦Э*9D ¦Ф 94 ¦ZAZZA ¦BBYBBYY 6C ¦ */
{0x47,'{' ,'g' },/*¦07¦G
47 ¦Ш*98 ¦Г 83 ¦AZAZZ ¦BYBYBBY 56 ¦ */
{0x48,'}' ,'h' },/*¦08¦H
48 ¦Щ*99 ¦Х 95 ¦AAZAZ ¦BYYBYBB 4B ¦ */
{0x49,0x38,'i' },/*¦09¦I
49 ¦8 38 ¦И 88 ¦AZZAA ¦BYBBYYB 59 ¦
*/
{0x4A,'`' ,'j' },/*¦10¦J
4A ¦Ю*07 ¦Й 89 ¦ZZAZA ¦BBBYBYY 74 ¦ */
{0x4B,0x28,'k' },/*¦11¦K
4B ¦( 28 ¦К 8A ¦ZZZZA ¦YBBBBYY 3C ¦
*/
{0x4C,0x29,'l' },/*¦12¦L
4C ¦) 29 ¦Л 8B ¦AZAAZ ¦BYBYYBB 53 ¦
*/
{0x4D,0x2E,'m' },/*¦13¦M
4D ¦. 2E ¦М 8C ¦AAZZZ ¦BYYBBBY 4E ¦
*/
{0x4E,0x2C,'n' },/*¦14¦N
4E ¦, 2C ¦Н 8D ¦AAZZA ¦BYYBBYB 4D ¦
*/
{0x4F,0x39,'o' },/*¦15¦O
4F ¦9 39 ¦О 8E ¦AAAZZ ¦BYYYBBB 47 ¦
*/
{0x50,0x30,'p' },/*¦16¦P
50 ¦0 30 ¦П 8F ¦AZZAZ ¦BYBBYBY 5A ¦
*/
{0x51,0x31,'q' },/*¦17¦Q
51 ¦1 31 ¦Я 9F ¦ZZZAZ ¦YBBBYBY 3A ¦
*/
{0x52,0x34,'r' },/*¦18¦R
52 ¦4Ч34 ¦Р 90 ¦AZAZA ¦BYBYBYB 55 ¦ */
{0x53,0x27,'s' },/*¦19¦S
53 ¦' 27 ¦С 91 ¦ZAZAA ¦BBYBYYB 69 ¦
*/
{0x54,0x35,'t' },/*¦20¦T
54 ¦5 35 ¦Т 92 ¦AAAAZ ¦YYBYBBB 17 ¦
*/
{0x55,0x37,'u' },/*¦21¦U
55 ¦7 37 ¦У 93 ¦ZZZAA ¦YBBBYYB 39 ¦
*/
{0x56,0x3D,'v' },/*¦22¦V
56 ¦= 3D ¦Ж 86 ¦AZZZZ ¦YYBBBBY 1E ¦
*/
{0x57,0x32,'w' },/*¦23¦W
57 ¦2 32 ¦В 82 ¦ZZAAZ ¦BBBYYBY 72 ¦
*/
{0x58,0x2F,'x' },/*¦24¦X
58 ¦/ 2F ¦Ь 9C ¦ZAZZZ ¦YBYBBBY 2E ¦
*/
{0x59,0x36,'y' },/*¦25¦Y
59 ¦6 36 ¦Ы 9B ¦ZAZAZ ¦BBYBYBY 6A ¦
*/
{0x5A,0x2B,'z' },/*¦26¦Z
5A ¦+ 2B ¦З 87 ¦ZAAAZ ¦BBYYYBB 63 ¦
*/
{0x0D,0x0D,0x0D},/*¦27¦CR 0D
-- ----- ¦AAAZA ¦YYYBBBB 0F ¦ */
{0x0A,0x0A,0x0A},/*¦28¦LF 0A
-- ----- ¦AZAAA ¦YYBBYBB 1B ¦ */
{0x01,0x01,0x01},/*¦29¦LET
16 -- ----- ¦ZZZZZ ¦YBYBBYB 2D ¦ */
{0x02,0x02,0x02},/*¦30¦FIG
0F -- ----- ¦ZZAZZ ¦YBBYBBY 36 ¦ */
{0x20,0x20,0x20},/*¦31¦SP 20
-- ----- ¦AAZAA ¦YYBBBYB 1D ¦ */
{0x03,0x03,0x03},/*¦32¦RUS
00 -- ----- ¦AAAAA ¦YBYBYBB 2B ¦ */
2. Программа nbdp.c
Содержит функции для работы с протоколом
NBDP, а также объявление всех глобальных переменных
используемых в обмене данными по протоколу NBDP.
#include <nbdp.h>
#include <drivers.h>
#include <string.h>
#include <ctype.h>
#include <template.h>
/*-------------------------------------------------------------*/
UINT No; /* Channel No */
UCHAR COMF; /* COMMUNICATION FLAG */
/* b0 : 0=stanby 1=communication */
/* b1 : 1=ARQ Mode */
/* b2 : 1=CFEC Mode */
/* b3 : 1=SFEC Mode */
/* b4 : 1=GFEC Mode */
/* b5 : 0=send 1=recv */
/* b6 : 1 = SLAVE wait PHASING, 0 = SLAVE PHASED */
/* b7 : */
UCHAR STATE; /* COMMUNICATION STATE */
UCHAR LAST_STATE;
/* FEC ARQ */
/* 0 stand-by stand-by */
/* 1 set receive mode send before process */
/* 2 syncro signal rx receive before process */
/* 3 FEC msg rcv 7id-phasing-master */
/* 4 Synchronous signal send 7id-rephasing-master */
/* 5 ID send 4id-phasing-master */
/* 6 FEC msg send 4id-rephasing-master */
/* 7 stop signal send 7id-phasing-slave */
/* 8 7id-rephasing-slave */
/* 9 4id-phasing-slave */
/* 10 4id-rephasing-slave */
/* 11 iss */
/* 12 irs */
UCHAR arqf; /* ARQ flag */
/* b0 : 0 = slave, 1=master */
/* b1 : 1 = WRU */
/* b2 : 1 = OVER FLAG */
/* b3 : */
/* b4 : */
UCHAR SelfTest;
UCHAR FirstIdleBlock;
UCHAR SendFCCInfo;
UCHAR IDLEAcnt; /* IDLE ALFA counter for FEC */
UINT RxErr,RxOK; /* Received Err and OK symbol */
UCHAR SHIFT; /* LET=0,FIG=1,RUS=2 */
/*UCHAR PTT;*/ /* -BK intenal bit */
UCHAR WRU_SUPPORT=1;
UCHAR DX[5]; /* INPUT DX LINE FOR FEC */
UCHAR RX[5]; /* INPUT RX LINE FOR FEC */
UCHAR ID_IN[7]; /* INPUT SFEC ID SHIFT REG */
UCHAR SFSIS4[4]; /* SFEC self identification signal
for 4-digit ID */
UCHAR SFSIS5[4]; /* SFEC self identification signal
for 5-digit ID */
UCHAR SFSIS9[7]; /* SFEC self identification signal
for 9-digit ID */
UCHAR SCID[7]; /* SFEC called station ID */
UINT n[10]; /* ARQ(and other) supervisor counters */
UCHAR connector;
UCHAR CB[3][3]; /* CALLING BLOCK DURING SLAVE
PHASING */
/* AND FOR CALL DURING ARQ MASTER */
UCHAR CIB[3][3]; /* CALLER ID BLOCK FOR 7-digit
SLAVE SYNC */
UCHAR CCS[3]; /* CS DURING ARQ MASTER CALL */
/* AND DURING SLAVE PHASING */
UCHAR CKERR; /* CK errors during phasing */
/*UCHAR RCB[3][3];*/ /* REPHASING: CALLING BLOCK
DURING SLAVE REPHASING */
UCHAR RDATA[3]; /* RECEIVE DATA BLOCK */
UCHAR SLICE_BUF[2];
UCHAR LAST_CS;
UCHAR LAST_BLOCK[3];/* last sended block */
UCHAR LAST_BL_NO;
UCHAR LAST_ID[10]; /* last comm try ID */
UCHAR RQ; /* REPEAT REQUEST */
UCHAR RPTF; /* REPEAT FLAG */
UCHAR ID_TYPE; /* 4- or 7-DIGIT ID TYPE. 0-4,1-7 */
UCHAR WRU_CNT; /* MULTIPLE WRU REQUST COUNT */
UCHAR strAAB[21]; /* not converted AAB */
UCHAR AAB[AAB_LEN];/* converted AAB */
UCHAR SIS4[6]; /* self id signal for 4-digit ID */
UCHAR SIS5[6]; /* self id signal for 5-digit ID */
UCHAR SIS9[9]; /* self id signal for 9-digit ID */
UCHAR SCS9[3]; /* self id check sum for 9-digit ID */
char o_shift=4; /* output shift */
char RQ3SIG [3] = "\x33\x33\x33"; /*
rq-rq-rq */
char B_A_B [3] = "\x66\x78\x66"; /* b-a-b */
char EOC_SIG[3] = "\x78\x78\x78"; /* a-a-a
*/
/*UCHAR PRE_KEY; */ /* PRE KEY IN MS (0..100) */
/*UCHAR POST_KEY;*/ /* POST KEY IN MS (0..100) */
UCHAR CFEC_RX=1; /* CFEC RECEIVING ON/OFF, default
ON */
UCHAR FEC_RATE=50; /* FEC ERROR RATE, default 50% */
UCHAR IN_CHNL =2; /* INPUT CHANNEL L/R, default
RIGHT */
UCHAR OUT_CHNL=1; /* OUTPUT CHANNEL L/R, default
LEFT */
UCHAR LAST_RX_CS = 0;
UCHAR LAST_RX_BLOCK = 0;
UCHAR after_rephase = 0;
extern int SlaveAnswerTime; /* Called mode answer
delay */
/*-------------------------------------------------------------*/
void
StandBy(void) // В алгоритме вызывается при ошибке
{
MODEM_STATE=5; /* state = 5 - RESET */
COMF = STATE = SHIFT = RxErr = RxOK = /*RQ = RPTF =
*/ 0;
LAST_STATE = 0;
IDLEAcnt = 0;
connector = 0;
/*memset(DX,0,5);memset(RX,0,5);*/
FirstIdleBlock = 0;
SendFCCInfo = 0;
arqf = 0;
LAST_CS = 0;
o_shift = 4; /* output shift not defined */
WRU_SUPPORT=1; /* Set default as ON */
hiClear();
hoClear();
Clear();
doClear();
if(dip_sw & DIP_SW3)
{
if(SlaveAnswerTime != (21+2))
{
SlaveAnswerTime = 21+2; /* Called mode answer delay 20
ms */
goto inform_host;
}
}
else
{
if(SlaveAnswerTime != (21+5))
{
SlaveAnswerTime = 21+5; /* Called mode answer delay 50
ms */
inform_host:
SendCommandHostDBG(1,"CHANGE SLAVE ANSWER TIME
[%X0 msec]",SlaveAnswerTime-21);
}
}
send_stat();
/*FS[0] = 1;*/ /* restart FREE SIGNAL */
SendCommandHostDBG(1,"STAND BY");
}
/*-------------------------------------------------------------*/
void send_stat(void) /* Послать
статус
устройства
в
host-компьютер
*/
{
/*
SendCommandHost("STAT","%02X;%02X;%02X;%03X;%02X;%02X",
COMF,STATE,arqf,hiIFree,hi_count,connector);
*/
SendCommandHost("STAT","%02X;%02X;%02X;%03X;%02X;%X;%X",
COMF,STATE,arqf,hiIFree,hi_count,MODEM_STATE,connector);
}
/*-------------------------------------------------------------*/
/*-------------------------------------------------------------*/
/* Mode */
/* 0 - ARQ */
/* 1 - CFEC */
/* 2 - SFEC */
/*-------------------------------------------------------------*/
UCHAR convert(char ch) // Конвертер
в
NBDP
{
if(ch == ERR_SMBL) return ERR_SMBL;
{
int index = table2[(int) ch];
if(index)
{
struct CVT *cvt;
cvt = &CVT_TABLE[index-1];
switch(SHIFT)
{
case 0: return cvt->_LET;
case 1: return cvt->_FIG;
case 2: return cvt->_RUS;
}
}
}
return ERR_SMBL;
}
/*-------------------------------------------------------------*/
void NBDP_Init(void) // Инициализация
NBDP (вызывается
из
main.c)
{
SetID(1,"32610",SIS5,NULL,1);
SetID(2,"123456789",SIS9,SCS9,1);
strcpy(SIS9,"\x2e\x33\x65\x33\x27\x39\x2e\x71\x69");
strcpy(SCS9,"\x17\x4e\x69");
/*-------------------------------------------------------------*/
StandBy();
}
3. Программа serial.c
Содержит
функции для работы с последовательным портом.
#include <stdarg.h>
#include <string.h>
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 |