Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Non-Canonical Input Processing*/
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <termios.h>
- #include <stdio.h>
- #include <string.h>
- #include <signal.h>
- #define BAUDRATE B38400
- #define MODEMDEVICE "/dev/ttyS"
- #define _POSIX_SOURCE 1 /* POSIX compliant source */
- #define FALSE 0
- #define TRUE 1
- #define F 0x7e
- #define A 0x03
- #define S 0x03
- #define U 0x07
- #define I0 0x00
- #define I1 0x40
- #define RECEIVER 0
- #define TRANSMITTER 1
- volatile int STOP=FALSE;
- int llopen(int porta, int flag){
- unsigned char setup[5];
- setup[0]=F;
- setup[1]=A;
- setup[2]=S;
- setup[3]=setup[1]^setup[2];
- setup[4]=F;
- char buffer[1];
- char gate[10]=MODEMDEVICE;
- sprintf(buffer, "%d",porta);
- strcat(gate, buffer);
- printf("%s \n",gate );
- int fd,c, res;
- struct termios oldtio,newtio;
- int i=0, sum = 0, speed = 0;
- fd = open(gate, O_RDWR | O_NOCTTY | O_NONBLOCK);
- if (fd <0) { exit(-1); }
- if ( tcgetattr(fd,&oldtio) == -1) { /* save current port settings */
- perror("tcgetattr");
- exit(-1);
- }
- bzero(&newtio, sizeof(newtio));
- newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0;
- /* set input mode (non-canonical, no echo,...) */
- newtio.c_lflag = 0;
- newtio.c_cc[VTIME] = 3; /* inter-character timer unused */
- newtio.c_cc[VMIN] = 1; /* blocking read until 5 chars received */
- tcflush(fd, TCIOFLUSH);
- if ( tcsetattr(fd,TCSANOW,&newtio) == -1) {
- perror("tcsetattr");
- exit(-1);
- }
- printf("New termios structure set(Receiving Message)\n");
- unsigned char msg;
- char UA[5];
- int aux=0;
- int counter=0;
- int sendAgain=1;
- int state;
- int done=0;
- int msgsent=0;
- int res2;
- for(counter ; counter < 3; counter++){
- printf("%s%d\n" ,"Sending data. Try# " , counter+1);
- sleep(3);
- res = write(fd,setup,5);
- state=0;
- while (state < 5 )
- {
- res2 = read(fd,&msg,1);
- if(res2 == -1){
- break;
- }
- else msgsent=1;
- switch (state)
- {
- case 0:
- if (msg == F){
- UA[state]=msg;
- state++;
- }
- break;
- case 1:
- if (msg == A){
- UA[state]=msg;
- state++;
- }
- else if(msg != A && msg !=F) state--;
- break;
- case 2:
- if (msg == U){
- UA[state]=msg;
- state++;
- }
- else if(msg == F) state--;
- else state=0;
- break;
- case 3:
- if (msg == (A^U)){
- UA[state]=msg;
- state++;
- }
- else state=0;
- break;
- case 4:
- if (msg == F){
- UA[state]=msg;
- state++;
- done=1;
- }
- else state=0;
- break;
- }
- }
- if(done) break;
- }
- if(msgsent == 0 ) {
- printf("Could not send any message. UA not received\n");
- return -1;
- } else {
- printf("UA received sucessfuly\n");
- }
- if ( tcsetattr(fd,TCSANOW,&oldtio) == -1) {
- perror("tcsetattr");
- exit(-1);
- }
- close(fd);
- return fd;
- }
- llwrite(int fd,char* buffer, int length){
- //PRIMEIRA TRAMA
- char msg[6+length];
- msg[0]=F;
- msg[1]=A;
- msg[2]=I0;
- msg[3]=msg[1]^msg[2];
- //stuffing da msg <-
- int i=4;
- for(;i<length+4; i++){
- msg[i]=buffer[i-4];
- }
- int j=1;
- char temp = buffer[0];
- for(; j<length; j++){
- temp=temp^buffer[j];
- }
- msg[length+5]=temp;
- msg[length+6]=F;
- }
- void main(int argc, char** argv){
- system("clear");
- printf("llopenTransmitter Running\n");
- llopen(0,TRANSMITTER);
- }
Advertisement
Add Comment
Please, Sign In to add comment