Bitstuffing Receiver
#include<stdio.h>
#include<fcntl.h>
struct frame
{
char info;
char count;
}r;
void displayBits(char c);
int getBit(char c,int pos);
char setBit(char c,int pos);
char unSetBit(char c,int pos);
main()
{
int fd,fd1,i=0,index=1,k;
char ch;
if((fd1=open("output.txt",O_WRONLY))<0)
perror("File open failed");
if((fd=open("testfile",O_RDONLY))<0)
perror("File open failed");
while(1)
{
if((k=read(fd,&ch,1))<=0)
break;
for(i=1;i<=8;i++)
{
if(getBit(ch,i)==1)
{
r.info=setBit(r.info,index++);
r.count++;
}
else
{
r.info=unSetBit(r.info,index++);
r.count=0;
}
if(r.count==5)
{
i=(i%8)+1;
r.count=0;
}
if(index>8)
{
printf("%c",r.info);
if((k=write(fd1,&r.info,1))<=0)
break;
index=1;
}
}
}
}
void displayBits(char c)
{
int no=128,i;
for(i=0;i<8;i++)
{
if((no&c)>0)
printf("1");
else
printf("0");
no=no>>1;
}
}
int getBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
if((no&c)>0)
return 1;
else
return 0;
}
char setBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
return (no|c);
}
char unSetBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
no=~no;
return (no&c);
}
Bitstuffing Sender
#include<stdio.h>
#include<fcntl.h>
struct frame
{
char info;
char count;
}s;
void displayBits(char c);
int getBit(char c,int pos);
char setBit(char c,int pos);
char unSetBit(char c,int pos);
main()
{
int fd,fd1,i=0,index=1,k;
char ch;
if((fd1=open("input.txt",O_RDONLY))<0)
perror("File open failed");
if((fd=open("testfile",O_WRONLY))<0)
perror("File open failed");
s.count=0;
while(1)
{
if((k=read(fd1,&ch,1))<=0)
break;
if(ch==10) //Ascii value of Enter
break;
printf("\n");
printf("Input: %c - ",ch);
displayBits(ch);
for(i=1;i<=8;i++)
{
if(getBit(ch,i)==1)
{
s.info=setBit(s.info,index++);
s.count++;
}
else
{
s.info=unSetBit(s.info,index++);
s.count=0;
}
if(s.count==5)
{
s.info=unSetBit(s.info,index++);
s.count=0;
}
if(index>8)
{
printf("\tSend: ");
displayBits(s.info);
if((k=write(fd,&s.info,1))<=0)
perror("Msg write failed");
index=1;
}
}
}
if(index!=1)
{
for(i=index;i<=8;i++)
{
s.info=unSetBit(s.info,i);
}
printf("\tSend2: ");
displayBits(s.info);
if((k=write(fd,&s.info,1))<=0)
perror("Msg write failed");
}
}
void displayBits(char c)
{
int no=128,i;
for(i=0;i<8;i++)
{
if((no&c)>0)
printf("1");
else
printf("0");
no=no>>1;
}
}
int getBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
if((no&c)>0)
return 1;
else
return 0;
}
char setBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
return (no|c);
}
char unSetBit(char c,int pos)
{
int no=128;
no=no>>(pos-1);
no=~no;
return (no&c);
}