int data,xmdx,p_xmdx,gx,n,a,b,c,d,t,m,x, parity, poc_out;
void bch_crc();
void reset();
void parity_gen();
void pocsag();
void main ()
{
m=2;
data=1 ; // 100
printf ("Data is %d \n", data);
xmdx=data<<2; //10000
p_xmdx=xmdx ;
n=16;
b=0;
gx=7; // 111
gx<<=m;//11100
printf ("gx is %d \n", gx);
bch_crc();
printf("Remainder is %d \n",xmdx);
printf ("BCH code word without parity is %d \n", p_xmdx+xmdx);
parity_gen();
pocsag();
}
//*********************************************************************
void bch_crc()
{
loop:
a=xmdx&n;
if(a>0)
{
printf(" The MSB is %d bit \n",b);
gx>>=b;
printf ("gx is %d \n", gx);
}
else
{
n>>=1;
b++;
goto loop;
}
xmdx^=gx;
reset();
}
//***********************************************************************
void reset()
{
if(xmdx>3) // because 4 is the smallest number
{
n=16;
b=0;
gx=7; // 111
gx<<=m;//11100
n=16;
bch_crc();
}
}
//*****************************************************************************
void parity_gen()
{
c=p_xmdx+xmdx;
n=16;
parity=0;
for(t=0;t<=4;t++)
{
x=c&n;
if(x>0)
{
parity++;
n>>=1;
}
else
{
n>>=1;
}
}
printf("parity check value is %d \n", parity%2);
if(parity%2<=0 )
{
printf (" even parity is %d \n",0 );
}
else
{
printf (" even parity is %d \n",1 );
parity=0;
}
}
//**********************************************************************************
void pocsag()
{
c<<=1;
poc_out=c|parity;
printf("POCSAG encodedd data is %d \n", poc_out);
}