##// END OF EJS Templates
fixed some read bugs (under windows)
fixed some read bugs (under windows)

File last commit:

r8:8870c88651a1 alexis
r8:8870c88651a1 alexis
Show More
RS232_unix.c
299 lines | 4.8 KiB | text/x-c | CLexer
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 #include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
yannic
Included Config file for setup.
r7 #include "rs232config.h"
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 #ifdef HAVE_TERMIOS_H
#include <termios.h>
#endif
#include "RS232.h"
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 #ifdef HAVE_WINDOWS_H
#else
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 #ifdef HAVE_TERMIOS_H
rs232speed_t rs232cfspeed(unsigned int BaudeRate);
rs232port_t rs232open(char* psPortName)
{
rs232port_t fd;
fd = open(psPortName, O_RDWR | O_NOCTTY | O_NDELAY);
return fd;
}
int rs232close(rs232port_t fd)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return -1;
}
else
{
close(fd);
return 0;
}
}
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 int rs232setup(rs232port_t fd, int ChSize, int BaudeRate, rs232parity Parity, rs232stop NbStop)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return -1;
}
else
{
struct termios terminos;
tcgetattr(fd, &terminos);
cfsetispeed(&terminos, rs232cfspeed(BaudeRate));
cfsetospeed(&terminos, rs232cfspeed(BaudeRate));
terminos.c_cflag |= (CLOCAL | CREAD);
rs232cfparity(fd, &terminos, Parity);
rs232cfnbstop(fd, &terminos, NbStop);
rs232cfcsize(fd, &terminos, ChSize);
tcsetattr(fd, TCSANOW, &terminos);
return 0;
}
}
int rs232setbaudrate(rs232port_t fd, int baudrate)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
struct termios terminos;
tcgetattr(fd, &terminos);
cfsetispeed(&terminos, rs232cfspeed(baudrate));
cfsetospeed(&terminos, rs232cfspeed(baudrate));
tcsetattr(fd, TCSANOW, &terminos);
return 0;
}
}
int rs232setparity(rs232port_t fd, rs232parity Parity)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
struct termios terminos;
tcgetattr(fd, &terminos);
terminos.c_cflag = Parity;
tcsetattr(fd, TCSANOW, &terminos);
return 0;
}
}
int rs232setnbstop(rs232port_t fd, int NbStop)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
struct termios terminos;
tcgetattr(fd, &terminos);
switch(NbStop)
{
case 2:
terminos.c_cflag |= CSTOPB;
break;
default:
terminos.c_cflag &= ~CSTOPB;
break;
}
tcsetattr(fd, TCSANOW, &terminos);
return 0;
}
}
int rs232setcsize(rs232port_t fd, int ChSize)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
struct termios terminos;
tcgetattr(fd, &terminos);
switch(ChSize)
{
case 5:
terminos.c_cflag |= CS5;
break;
case 6:
terminos.c_cflag |= CS6;
break;
case 7:
terminos.c_cflag |= CS7;
break;
default:
terminos.c_cflag |= CS8;
break;
}
tcsetattr(fd, TCSANOW, &terminos);
return 0;
}
}
rs232speed_t rs232cfspeed(unsigned int BaudeRate)
{
if(BaudeRate<25)
return B0;
if(BaudeRate<67)
return B50;
if(BaudeRate<93)
return B75;
if(BaudeRate<123)
return B110;
if(BaudeRate<142)
return B134;
if(BaudeRate<175)
return B150;
if(BaudeRate<250)
return B200;
if(BaudeRate<450)
return B300;
if(BaudeRate<900)
return B600;
if(BaudeRate<1500)
return B1200;
if(BaudeRate<2100)
return B1800;
if(BaudeRate<3600)
return B2400;
if(BaudeRate<7200)
return B4800;
if(BaudeRate<1400)
return B9600;
if(BaudeRate<28800)
return B19200;
if(BaudeRate<48000)
return B38400;
if(BaudeRate<86400)
return B57600;
if(BaudeRate<172800)
return B115200;
else
return B230400;
}
int rs232cfparity(int fd, struct termios *terminos, rs232parity Parity)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
terminos->c_cflag = Parity;
return 0;
}
}
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 int rs232cfnbstop(int fd, struct termios *terminos, rs232stop NbStop)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
switch(NbStop)
{
case 2:
terminos->c_cflag |= CSTOPB;
break;
default:
terminos->c_cflag &= ~CSTOPB;
break;
}
return 0;
}
}
int rs232cfcsize(int fd, struct termios *terminos, int ChSize)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return fd;
}
else
{
switch(ChSize)
{
case 5:
terminos->c_cflag |= CS5;
break;
case 6:
terminos->c_cflag |= CS6;
break;
case 7:
terminos->c_cflag |= CS7;
break;
default:
terminos->c_cflag |= CS8;
break;
}
return 0;
}
}
int rs232write(rs232port_t fd,char *psWrite, int WriteBufferSize)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return -1;
}
else
{
return write(fd, psWrite, WriteBufferSize);
}
}
int rs232read(rs232port_t fd,char *psReadHex, int ReadBufferSize)
{
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 if ((int)fd == -1)
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5 {
return -1;
}
else
{
return read(fd, psReadHex, ReadBufferSize);
}
}
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
fixed some read bugs (under windows)
r8 #endif
#endif //#ifdef HAVE_TERMIOS_H
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
Win/Unix portability completed, need to be tested.
r5