08 March, 2014

Bitstuffing

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);
}