LRC stands for longitudinal redundancy check In telecommunication, a longitudinal redundancy check (LRC) or horizontal redundancy check is a form of redundancy check that is applied independently to each of a parallel group of bit streams. The data must be divided into transmission blocks, to which the additional check data is added.
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
int getBinary(int num,int pos)
{
int code=1;
code=code<<(pos-1);
if(num & code)
return 1;
else
return 0;
}
findLRC(char str[][50],int no_of_str,char parity[50])
{
int count = 0 , j = 0 , i = 0 ;
int k = 0 ;
printf("\n\n");
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < no_of_str ; j++)
{
//printf("%c",str[j][i]);
if(str[j][i]=='1')
{
count++ ;
}
}
if(count % 2 == 0)
{
parity[k] = '0' ;
}
else
{
parity[k] = '1' ;
}
k++ ;
count = 0 ;
}
parity[k] = '\0';
}
void generateError(char ans[])
{
int exitflag=1,pos;
do
{
printf("Enter Position : ");
scanf("%d",&pos);
if(pos>=0 && pos<strlen(ans))
{
if(ans[pos]=='1')
ans[pos]='0';
else
ans[pos]='1';
}
else
{
printf(" \t>>>Position is out of range<<<\n");
}
printf("Want to Generate More Error (1 / 0) : ");
scanf("%d",&exitflag);
}while(exitflag==1);
}
int main()
{
int no_of_data ;
int i = 0 ;
int arr[10];
char str[10][50];
char parity[50];
char data[80];
printf("\n How many data : ");
scanf("%d",&no_of_data);
for(i=0;i<no_of_data;i++)
{
printf("\n Enter number : ");
scanf("%d",&arr[i]);
printf("\n No is %d " , arr[i]);
}
int j ;int k = 0 ;
for(i=0;i<no_of_data;i++)
{
for(j=8;j>0;j--)
{
str[i][k++]=getBinary(arr[i],j)+48;
}
str[i][k]='\0';
k = 0 ;
}
for(i=0;i<no_of_data;i++)
{
printf("\n Binary is %s",str[i]);
}
findLRC(str,no_of_data,parity);
printf("\n Parity is %s ", parity);
for(i=0;i<no_of_data;i++)
{
strcat(data,str[i]);
}
int flag = 0 ;
printf("\n Want to Generate Error (1 / 0) : ");
scanf("%d",&flag);
if(flag==1)
{
generateError(data);
printf("\n======================================================");
printf("\nData to Be Send With Parity and with Error : %s",data);
printf("\n======================================================\n");
}
strcat(data,parity);
int pid ;
system(">pipe");
pid = open("pipe",O_WRONLY);
printf("\n Final data is %s " , data);
write(pid,&no_of_data,sizeof(no_of_data));
write(pid,&data,sizeof(data));
return 0 ;
}
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
int getBinary(int num,int pos)
{
int code=1;
code=code<<(pos-1);
if(num & code)
return 1;
else
return 0;
}
findLRC(char str[][50],int no_of_str,char parity[50])
{
int count = 0 , j = 0 , i = 0 ;
int k = 0 ;
printf("\n\n");
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < no_of_str ; j++)
{
//printf("%c",str[j][i]);
if(str[j][i]=='1')
{
count++ ;
}
}
if(count % 2 == 0)
{
parity[k] = '0' ;
}
else
{
parity[k] = '1' ;
}
k++ ;
count = 0 ;
}
parity[k] = '\0';
}
void main()
{
int no,j=0,len,i=0,k,pid;
char data[80];//={"000000010000001011"}//1 = 00000001, 2 = 00000010, parity = 11
int no_of_data=2;
char totalData;
char parity[50];
pid=open("pipe",O_RDONLY);
//Commenting this as it is not working in windows
read(pid,&no_of_data,sizeof(no_of_data));
read(pid,&data,sizeof(data));
printf("\nno of data : %d",no_of_data);
printf("\ndata : %s",data);
k = 0 ;
char str[15][50];
k=0;
for(i=0;i<no_of_data;i++)
{
for(j=0;j<8;j++)
{
str[i][j] = data[k++];
str[i][j+1] = '\0';
}
}
for(i=0;i<no_of_data;i++)
{
printf("\n Str is %s",str[i]);
}
findLRC(str,no_of_data,parity);
char redaparity[50];
j=0;
for(i=no_of_data*8;i<strlen(data);i++){
redaparity[j++]=data[i];
}
redaparity[j]='\0';
printf("\nReceived parity %s", redaparity);
printf("\nCalculated parity %s", parity);
int isSame=strcmp(redaparity, parity);
if(isSame==0){
printf("\nDATA IS CORRECT");
}
else{
printf("\nDATA IS INCORRECT");
}
}
[ SENDER SIDE ]
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
int getBinary(int num,int pos)
{
int code=1;
code=code<<(pos-1);
if(num & code)
return 1;
else
return 0;
}
findLRC(char str[][50],int no_of_str,char parity[50])
{
int count = 0 , j = 0 , i = 0 ;
int k = 0 ;
printf("\n\n");
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < no_of_str ; j++)
{
//printf("%c",str[j][i]);
if(str[j][i]=='1')
{
count++ ;
}
}
if(count % 2 == 0)
{
parity[k] = '0' ;
}
else
{
parity[k] = '1' ;
}
k++ ;
count = 0 ;
}
parity[k] = '\0';
}
void generateError(char ans[])
{
int exitflag=1,pos;
do
{
printf("Enter Position : ");
scanf("%d",&pos);
if(pos>=0 && pos<strlen(ans))
{
if(ans[pos]=='1')
ans[pos]='0';
else
ans[pos]='1';
}
else
{
printf(" \t>>>Position is out of range<<<\n");
}
printf("Want to Generate More Error (1 / 0) : ");
scanf("%d",&exitflag);
}while(exitflag==1);
}
int main()
{
int no_of_data ;
int i = 0 ;
int arr[10];
char str[10][50];
char parity[50];
char data[80];
printf("\n How many data : ");
scanf("%d",&no_of_data);
for(i=0;i<no_of_data;i++)
{
printf("\n Enter number : ");
scanf("%d",&arr[i]);
printf("\n No is %d " , arr[i]);
}
int j ;int k = 0 ;
for(i=0;i<no_of_data;i++)
{
for(j=8;j>0;j--)
{
str[i][k++]=getBinary(arr[i],j)+48;
}
str[i][k]='\0';
k = 0 ;
}
for(i=0;i<no_of_data;i++)
{
printf("\n Binary is %s",str[i]);
}
findLRC(str,no_of_data,parity);
printf("\n Parity is %s ", parity);
for(i=0;i<no_of_data;i++)
{
strcat(data,str[i]);
}
int flag = 0 ;
printf("\n Want to Generate Error (1 / 0) : ");
scanf("%d",&flag);
if(flag==1)
{
generateError(data);
printf("\n======================================================");
printf("\nData to Be Send With Parity and with Error : %s",data);
printf("\n======================================================\n");
}
strcat(data,parity);
int pid ;
system(">pipe");
pid = open("pipe",O_WRONLY);
printf("\n Final data is %s " , data);
write(pid,&no_of_data,sizeof(no_of_data));
write(pid,&data,sizeof(data));
return 0 ;
}
[ RECEIVER SIDE ]
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
int getBinary(int num,int pos)
{
int code=1;
code=code<<(pos-1);
if(num & code)
return 1;
else
return 0;
}
findLRC(char str[][50],int no_of_str,char parity[50])
{
int count = 0 , j = 0 , i = 0 ;
int k = 0 ;
printf("\n\n");
for(i = 0 ; i < 8 ; i++)
{
for(j = 0 ; j < no_of_str ; j++)
{
//printf("%c",str[j][i]);
if(str[j][i]=='1')
{
count++ ;
}
}
if(count % 2 == 0)
{
parity[k] = '0' ;
}
else
{
parity[k] = '1' ;
}
k++ ;
count = 0 ;
}
parity[k] = '\0';
}
void main()
{
int no,j=0,len,i=0,k,pid;
char data[80];//={"000000010000001011"}//1 = 00000001, 2 = 00000010, parity = 11
int no_of_data=2;
char totalData;
char parity[50];
pid=open("pipe",O_RDONLY);
//Commenting this as it is not working in windows
read(pid,&no_of_data,sizeof(no_of_data));
read(pid,&data,sizeof(data));
printf("\nno of data : %d",no_of_data);
printf("\ndata : %s",data);
k = 0 ;
char str[15][50];
k=0;
for(i=0;i<no_of_data;i++)
{
for(j=0;j<8;j++)
{
str[i][j] = data[k++];
str[i][j+1] = '\0';
}
}
for(i=0;i<no_of_data;i++)
{
printf("\n Str is %s",str[i]);
}
findLRC(str,no_of_data,parity);
char redaparity[50];
j=0;
for(i=no_of_data*8;i<strlen(data);i++){
redaparity[j++]=data[i];
}
redaparity[j]='\0';
printf("\nReceived parity %s", redaparity);
printf("\nCalculated parity %s", parity);
int isSame=strcmp(redaparity, parity);
if(isSame==0){
printf("\nDATA IS CORRECT");
}
else{
printf("\nDATA IS INCORRECT");
}
}