bobby » 18 мар 2014, 10:29
В смысле в основной? Для меня основная - и есть S0, я к ней по USB подключен. Пытаюсь писать в S1 из моей софтины, данные попадают в S0. Класс для работы с UART следующий:
#pragma once
#include <sys/stat.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
class bxmUART
{
public:
bxmUART()
{
fd = 0;
}
~bxmUART()
{
}
int setInterfaceAttribs (int speed, int parity)
{
struct termios tty;
memset (&tty, 0, sizeof tty);
if (tcgetattr (fd, &tty) != 0)
{
printf("error %d from tcgetattr", errno);
return -1;
}
cfsetospeed (&tty, speed);
cfsetispeed (&tty, speed);
tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;
tty.c_iflag &= ~IGNBRK;
tty.c_lflag = 0;
tty.c_oflag = 0;
tty.c_cc[VMIN] = 1;
tty.c_cc[VTIME] = 0;
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
tty.c_cflag |= (CLOCAL | CREAD);
tty.c_cflag &= ~(PARENB | PARODD);
tty.c_cflag |= parity;
tty.c_cflag &= ~CSTOPB;
tty.c_cflag &= ~CRTSCTS;
if (tcsetattr (fd, TCSANOW, &tty) != 0)
{
printf("error %d from tcsetattr", errno);
return -1;
}
return 0;
}
void setBlocking (int should_block)
{
struct termios tty;
memset (&tty, 0, sizeof tty);
if (tcgetattr (fd, &tty) != 0)
{
printf("error %d from tggetattr", errno);
return;
}
tty.c_cc[VMIN] = should_block ? 1 : 0;
tty.c_cc[VTIME] = 0;
if (tcsetattr (fd, TCSANOW, &tty) != 0)
{
printf("error %d setting term attributes", errno);
}
}
void openPort(char* portname)
{
int fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
{
printf("error %d opening %s: %s", errno, portname, strerror (errno));
return;
}
setInterfaceAttribs(B9600, 0);
setBlocking(0);
}
void writeData(char* data, int size)
{
write(fd, data, size);
}
private:
int fd;
};
Использую его так:
int main()
{
bxmUART uartS0;
bxmUART uartS1;
uartS0.openPort("/dev/ttyS0");
uartS1.openPort("/dev/ttyS1");
uartS0.writeData("hello!\n", 7);
getchar();
uartS1.writeData("hello!\n", 7);
getchar();
return 0;
}