You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
static void __print_usage(void)
{
printf("\n");
printf("Usage: rc_uart_loopback {bus}\n");
printf("This sends a short message out the specified bus and then\n");
printf("reads it back in. This requires connecting RX to TX to make a loopback.\n");
printf("For Robotics Cape or BeagleBone Blue specify bus 0,1,2 or 5\n");
printf("\n");
return;
}
int main(int argc, char argv[])
{
char test_str = "Hello World";
int bytes = 10; //strlen(test_str); // get number of bytes in test string
uint8_t buf[BUF_SIZE];
int ret; // return value
int bus; // which bus to use
// Parse arguments
if(argc!=2){ //argc==2 actually means one argument given
__print_usage();
return -1;
}
else bus = atoi(argv[1]);
if(!(bus==0||bus==1||bus==2||bus==5)){
__print_usage();
return -1;
}
printf("\ntesting UART bus %d\n\n", bus);
// disable canonical (0), 1 stop bit (1), disable parity (0)
if(rc_uart_init(bus, BAUDRATE, TIMEOUT_S, 0,1,0)){
printf("Failed to rc_uart_init%d\n", bus);
return -1;
}
// Flush and Write
printf("Sending %d bytes: %s \n", bytes, test_str);
rc_uart_flush(bus);
rc_uart_write(bus, (uint8_t*)test_str, bytes);
//repeated reads fom a character stream sent from Arduino at 115200
while(1){
// Read
//printf("reading bytes:\n");
memset(buf,0,sizeof(buf));
ret = rc_uart_read_bytes(bus, buf, bytes);
if(ret<0) fprintf(stderr,"Error reading bus\n");
else if(ret==0) printf("timeout reached, %d bytes read\n", ret);
else printf("Received %d bytes: %s ", ret, buf);
rc_uart_flush(bus);
fflush(stdout);
}
// now write again
printf("\n");
printf("Sending %d bytes: %s \n", bytes, test_str);
rc_uart_write(bus, (uint8_t*)test_str, bytes);
// read back as line
printf("reading line:\n");
memset(buf,0,sizeof(buf));
ret = rc_uart_read_line(bus, buf, sizeof(buf));
if(ret<0) fprintf(stderr,"Error reading bus\n");
else if(ret==0) printf("timeout reached, %d bytes read\n", ret);
else printf("Received %d bytes: %s \n", ret, buf);
// close
rc_uart_close(bus);
return 0;
}
The text was updated successfully, but these errors were encountered:
UART 0 & UART 2 Behave Differently
Beaglebone Blue - with a recent recommended Debian release
Below is Strawson's example UART loopback program. With minor changes to read continuously.
I have attached an Arduino 115200 baud char output stream to both the UART0 & UART2 in parallel.
If UART2 is selected the stream will read as expected - maybe forever.
If UART0 is selected the stream will read for perhaps 30 seconds. The PUTTY cursor will flash and
the program stalls until interrupted with a ctl C.
I suspect there is some conflict within LINUX?? If anyone has an idea about this,
it will be greatly appreciated.
/**
*/
#include <stdio.h>
#include <stdlib.h> // for atoi
#include <string.h>
#include <rc/uart.h>
#define BUF_SIZE 32
#define TIMEOUT_S 0.5
#define BAUDRATE 115200
static void __print_usage(void)
{
printf("\n");
printf("Usage: rc_uart_loopback {bus}\n");
printf("This sends a short message out the specified bus and then\n");
printf("reads it back in. This requires connecting RX to TX to make a loopback.\n");
printf("For Robotics Cape or BeagleBone Blue specify bus 0,1,2 or 5\n");
printf("\n");
return;
}
int main(int argc, char argv[])
{
char test_str = "Hello World";
int bytes = 10; //strlen(test_str); // get number of bytes in test string
uint8_t buf[BUF_SIZE];
int ret; // return value
int bus; // which bus to use
}
The text was updated successfully, but these errors were encountered: