Hello, I need a help with the UART, more precisly with the c code. When the 
following c script goes to *write () *function, it sends the data over to 
the uart and I can see the output on the oscilloscope, but the problem is 
that it sends it in ASCII, which is not what I want it to do. on the Linux 
shell I usually used *"echo -en \\xAA > /dev/ttyO4" * and it did the job. 
But I want it to the job using the C code.  Hopefully somebody can help me. 

#include <iostream>


#include <cstdio>


#include <unistd.h>


#include <stdlib.h>


#include <string>


#include <termios.h>


#include <fcntl.h>


#include <sys/signal.h>




#define BAUDRATE B9600


#define DEVICE "/dev/ttyO4"


#define _POSIX_SOURCE 1




#define FALSE 0


#define TRUE 1


volatile int STOP=FALSE;


int wait_flag=FALSE;




using namespace std;




void signal_handler_IO (int status){




    cout << "received SIGIO signal "<< endl;


    wait_flag = FALSE;


}




int main()


{


    int fd, c, res;


    struct termios oldtio, newtio;


    struct sigaction saio;


    char buffer [255];




    system ("echo BB-UART4 > /sys/devices/bone_capemgr.8/slots");




    fd = open (DEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK);


    if (fd <0) {perror(DEVICE); exit (-1);}




    /*install the siganl handler before making the device ansynhronous */


    saio.sa_handler = signal_handler_IO;


    saio.sa_mask.__val[0] = 0;


    saio.sa_mask.__val[1] = 0;


    saio.sa_mask.__val[2] = 0;


    saio.sa_mask.__val[3] = 0;


    saio.sa_flags = 0;


    saio.sa_restorer = NULL;


    sigaction(SIGIO, &saio, NULL);




    /* Allow the process to receive SIGIO */


    fcntl(fd, F_SETOWN, getpid());


    /* Make the file descriptor ansynchronous */


    fcntl(fd, F_SETFL, FASYNC);




    tcgetattr(fd,&oldtio);




    newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;


    newtio.c_iflag = IGNPAR | ICRNL;


    newtio.c_oflag = 0;


    newtio.c_lflag = ICANON;


    newtio.c_cc[VMIN]=1;


    newtio.c_cc[VTIME]=0;


    /* Clean the modem line and activate the settings for the port */


    tcflush(fd,TCIFLUSH);


    tcsetattr(fd,TCSANOW,&newtio);




     //------------ WRITE




>  c = write (fd, "AA", 4);
>             if ( c < 0)
>                 fputs ("write() of 4bits failed!\n", stderr);




    //--------------READ




   


    while(STOP==FALSE) {




        usleep(1000000);


        putchar ('*'); fflush(stdout);




        if(wait_flag==FALSE) {


          buffer[res]=NULL;


          res = read (fd,buffer,sizeof(buffer));




            printf(":%s :%d\n", buffer, res);


            if (res==1) STOP=TRUE;




            wait_flag = TRUE;


          }




    }






    //restore old port settings


tcsetattr(fd,TCSANOW, &oldtio);




    close (fd);


    return 0;


}



-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to