[MyHosting.com]   [KO4BB Home Page]   [Manuals Home Page]   [KO4BB Wiki]
 

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

random:a_simple_serial_program_to_check_the_xbee [2013/02/16 19:00]
random:a_simple_serial_program_to_check_the_xbee [2013/02/16 19:00] (current)
Line 1: Line 1:
 +===== A simple serial program for the XBee =====
 +
 +This program checks for the presence of an XBee module in the TS-7553 socket.
 +
 +Note that the XBee is connected to a serial port in the FPGA. The serial port needs to be activated by xuartctl before it can be used.
 +
 +<​code>​
 +#include <​sys/​types.h>​
 +#include <​sys/​stat.h>​
 +#include <​sys/​select.h>​
 +#include <​fcntl.h>​
 +#include <​termios.h>​
 +#include <​stdio.h>​
 +#include <​strings.h>​
 +#include <​unistd.h>​
 +#include <​sys/​types.h>​
 +#include <​sys/​time.h>​
 +
 +int main( int argc, char **argv ){
 +  int fd, res, n;
 +  struct termios oldtio, newtio;
 +  char buf[255] = {0}, *c;
 +  char comport[255];​
 +  const char cmd[] = "​xuartctl --server --port 3 --speed 9600 2>&​1";​
 +  FILE *fp;
 +  fd_set input;
 +  struct timeval timeout;  ​
 +
 +  // setup com port using xuartctl
 +  fp = popen( cmd, "​r"​ );
 +  while( fgets( buf, sizeof buf, fp )){
 +    //printf( "​Received:​ %s-\n",​ buf );
 +    c = strchr( buf, '​='​ );
 +    strcpy( comport, c+1 );
 +    *(comport+strlen(comport)-1) = 0;  // remoew new line
 +    printf( "Using port %s\n", comport );
 +  }
 +  pclose( fp );
 +
 +  // open port
 +  fd = open( comport, O_RDWR | O_NOCTTY );
 +  if( fd < 0 ){
 +    // nope, bail
 +    perror( comport );
 +    return( -1 );
 +  }  ​
 +
 +  // ----- Configure port -----
 +  // save current port settings
 +  tcgetattr( fd, &oldtio );
 +  // define timeout
 +  timeout.tv_sec = 3;
 +  timeout.tv_usec = 0;
 +  // define new terminal structure
 +  bzero( &​newtio,​ sizeof( newtio ));
 +  newtio.c_cflag = CRTSCTS | CS8 | CLOCAL | CREAD;
 +  newtio.c_iflag = IGNPAR;
 +  cfsetispeed( &​newtio,​ B9600 );
 +  cfsetospeed( &​newtio,​ B9600 );
 +  newtio.c_oflag = 0;
 +  ​
 +  newtio.c_lflag = 0;       // set input mode (non-canonical,​ no echo,...)
 +  newtio.c_cc[VTIME] = 0;   // inter-character timer unused
 +  newtio.c_cc[VMIN] = 2;    // blocking read until 2 chars received
 +  ​
 +  tcflush( fd, TCIFLUSH );
 +  tcsetattr( fd, TCSANOW, &newtio );
 +  ​
 +  // Sending +++ within 1 second sets the XBee into command mode
 +  printf( " Sending +++\n" );
 +  write( fd, "​+++",​ 3 );
 +
 +  // initialize "​input"​ to contain fd:
 +  FD_ZERO( &input );
 +  FD_SET( fd, &input );  ​
 +  n = select( fd+1, &input, NULL, NULL, &​timeout );
 +  ​
 +  if( n < 0 )
 +    printf( "​select() failed\n"​ );
 +  else if( n == 0 )
 +    printf( "​TIMEOUT,​ no XBee\n"​ );
 +  else{
 +    res = read( fd, buf, 250 );
 +    buf[res] = 0;
 +    //printf( "​Received:​ %s\n", buf );
 +    if( 0 == strncmp( buf, "​OK",​ 2 )){
 +      printf( "XBee Detected\n"​ );
 +    }else{
 +      printf( "​Something else responded!\n"​ );
 +    }
 +  }
 +  tcsetattr( fd, TCSANOW, &oldtio );
 +  return( 0 );
 +}
 +</​code>​
 +
 +To make the program, name this file "​hello.c:​ and simply type "make hello" at the command line.
 +
 +
  
 
random/a_simple_serial_program_to_check_the_xbee.txt ยท Last modified: 2013/02/16 19:00 (external edit)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki
Except as noted, this entire site Copyright © 2002-2017. KO4BB All rights reserved.