RS232_unix.c
536 lines
| 9.6 KiB
| text/x-c
|
CLexer
/ src / RS232_unix.c
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | #include <stdio.h> | ||
#include <unistd.h> | ||||
#include <fcntl.h> | ||||
#include <string.h> | ||||
#include <errno.h> | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r33 | #include <malloc.h> | ||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r34 | #include <dirent.h> | ||
#include <limits.h> | ||||
#include <stdlib.h> | ||||
#include <sys/stat.h> | ||||
yannic
|
r7 | #include "rs232config.h" | ||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r34 | |||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | #ifdef HAVE_TERMIOS_H | ||
#include <termios.h> | ||||
#endif | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | #ifdef HAVE_TERMIO_H | ||
#include <termio.h> | ||||
#endif | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | #include "RS232.h" | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | #ifdef HAVE_WINDOWS_H | ||
#else | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | #ifdef HAVE_TERMIOS_H | ||
rs232speed_t rs232cfspeed(unsigned int BaudeRate); | ||||
rs232port_t rs232open(char* psPortName) | ||||
{ | ||||
r36 | rs232port_t fd; | |||
jeandet@pc-de-jeandet.lpp.polytechnique.fr
|
r37 | int flags; | ||
fd = (rs232port_t)open(psPortName, O_RDWR | O_NOCTTY );//| O_NDELAY); | ||||
//fcntl((int)fd, F_SETFL, FNDELAY); | ||||
r36 | //fd = open(psPortName, O_RDWR | O_NOCTTY); | |||
#ifdef debug | ||||
if(fd==-1)printf("can't open Port\n"); | ||||
jeandet@pc-de-jeandet.lpp.polytechnique.fr
|
r37 | #else | ||
if(fd!=-1) | ||||
{ | ||||
//flags = fcntl(fd, F_GETFL); | ||||
//flags |= O_NONBLOCK; | ||||
//flags|=FNDELAY; | ||||
//fcntl(fd, F_SETFL, flags); | ||||
//fcntl((int)fd, F_SETFL, FNDELAY); | ||||
} | ||||
r36 | #endif | |||
return fd; | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | } | ||
int rs232close(rs232port_t fd) | ||||
{ | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return -1; | ||||
} | ||||
else | ||||
{ | ||||
close(fd); | ||||
return 0; | ||||
} | ||||
} | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r33 | rs232portslist_t* rs232getportlist() | ||
{ | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r34 | struct dirent *dp; | ||
char* path="/dev/serial/by-id"; | ||||
DIR *dir = opendir(path); | ||||
rs232portslist_t* firstitem=NULL; | ||||
rs232portslist_t* previtem=NULL; | ||||
char linkname[1024]; | ||||
int i=0; | ||||
if(dir!=NULL) | ||||
{ | ||||
while ((dp=readdir(dir)) != NULL) | ||||
{ | ||||
char* name = (char*)malloc(1024); | ||||
for(i=0;i<1024;i++) | ||||
{ | ||||
name[i]='\0'; | ||||
linkname[i]='\0'; | ||||
} | ||||
struct stat statbuf; | ||||
strcpy(linkname,path); | ||||
strcat(linkname,"/"); | ||||
strcat(linkname,dp->d_name); | ||||
lstat(linkname, &statbuf); | ||||
if(S_ISLNK(statbuf.st_mode)) | ||||
{ | ||||
if(-1!=readlink(linkname,name,1024)) | ||||
{ | ||||
for(i=0;i<1024;i++) | ||||
{ | ||||
linkname[i]='\0'; | ||||
} | ||||
strcpy(linkname,path); | ||||
strcat(linkname,"/"); | ||||
strcat(linkname,name); | ||||
for(i=0;i<1024;i++) | ||||
{ | ||||
name[i]='\0'; | ||||
} | ||||
if(NULL!=realpath(linkname, name)) | ||||
{ | ||||
rs232portslist_t* item = (rs232portslist_t*)malloc(sizeof(rs232portslist_t)); | ||||
item->name = name; | ||||
item->next = NULL; | ||||
if(NULL!=previtem)previtem->next = item; | ||||
previtem = item; | ||||
if(NULL==firstitem)firstitem = item; | ||||
} | ||||
} | ||||
} | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r33 | |||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r34 | } | ||
} | ||||
return firstitem; | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r33 | } | ||
void rs232deleteportlist(rs232portslist_t* list) | ||||
{ | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r34 | if(list!=NULL) | ||
{ | ||||
if(list->next != NULL) | ||||
rs232deleteportlist(list->next); | ||||
free(list); | ||||
} | ||||
jeandet@pc-de-jeandet3.LAB-LPP.LOCAL
|
r33 | } | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | |||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | int rs232setup(rs232port_t fd, int ChSize, int BaudeRate, rs232parity Parity, rs232stop NbStop) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return -1; | ||||
} | ||||
else | ||||
{ | ||||
struct termios terminos; | ||||
tcgetattr(fd, &terminos); | ||||
r36 | terminos.c_iflag=0; | |||
terminos.c_oflag=0; | ||||
terminos.c_cflag=0; | ||||
terminos.c_lflag=0; | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | cfsetispeed(&terminos, rs232cfspeed(BaudeRate)); | ||
cfsetospeed(&terminos, rs232cfspeed(BaudeRate)); | ||||
terminos.c_cflag |= (CLOCAL | CREAD); | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | rs232cfparity((int)fd, &terminos, Parity); | ||
rs232cfnbstop((int)fd, &terminos, NbStop); | ||||
rs232cfcsize((int)fd, &terminos, ChSize); | ||||
r12 | terminos.c_cc[VMIN]=0; | |||
r13 | terminos.c_cc[VTIME]=1; | |||
r12 | tcflush(fd, TCIFLUSH); | |||
yannic
|
r11 | #ifdef debug | ||
if(tcsetattr(fd, TCSANOW, &terminos)!=0)printf("bad setup\n"); | ||||
#else | ||||
tcsetattr(fd, TCSANOW, &terminos); | ||||
#endif | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | return 0; | ||
} | ||||
} | ||||
int rs232setbaudrate(rs232port_t fd, int baudrate) | ||||
{ | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return fd; | ||||
} | ||||
else | ||||
{ | ||||
struct termios terminos; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcgetattr((int)fd, &terminos); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | cfsetispeed(&terminos, rs232cfspeed(baudrate)); | ||
cfsetospeed(&terminos, rs232cfspeed(baudrate)); | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcsetattr((int)fd, TCSANOW, &terminos); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | return 0; | ||
} | ||||
} | ||||
int rs232setparity(rs232port_t fd, rs232parity Parity) | ||||
{ | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return fd; | ||||
} | ||||
else | ||||
{ | ||||
struct termios terminos; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcgetattr((int)fd, &terminos); | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos.c_cflag &= ~PARENB; | ||
terminos.c_cflag &= ~PARODD; | ||||
yannic
|
r11 | switch(Parity) | ||
{ | ||||
case rs232parityNo: | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r25 | terminos.c_cflag &= ~PARENB; | ||
yannic
|
r11 | break; | ||
case rs232parityOdd: | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r25 | terminos.c_cflag |= PARENB; | ||
terminos.c_cflag |= PARODD; | ||||
yannic
|
r11 | break; | ||
case rs232parityEven: | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r25 | terminos.c_cflag |= PARENB; | ||
terminos.c_cflag &= ~PARODD; | ||||
yannic
|
r11 | break; | ||
default: | ||||
terminos.c_cflag &= ~PARENB; | ||||
break; | ||||
} | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcsetattr((int)fd, TCSANOW, &terminos); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | return 0; | ||
} | ||||
} | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r9 | int rs232setnbstop(rs232port_t fd, rs232stop NbStop) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return fd; | ||||
} | ||||
else | ||||
{ | ||||
struct termios terminos; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcgetattr((int)fd, &terminos); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | switch(NbStop) | ||
{ | ||||
jeandet@PC-DE-JEANDET.lab-lpp.local
|
r32 | case rs232OneStop: | ||
terminos.c_cflag &= ~CSTOPB; | ||||
break; | ||||
case rs232One5Stop: | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | terminos.c_cflag |= CSTOPB; | ||
jeandet@PC-DE-JEANDET.lab-lpp.local
|
r32 | break; | ||
case rs232TwoStop: | ||||
terminos.c_cflag |= CSTOPB; | ||||
break; | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | default: | ||
terminos.c_cflag &= ~CSTOPB; | ||||
jeandet@PC-DE-JEANDET.lab-lpp.local
|
r32 | break; | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | } | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcsetattr((int)fd, TCSANOW, &terminos); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | return 0; | ||
} | ||||
} | ||||
int rs232setcsize(rs232port_t fd, int ChSize) | ||||
{ | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return fd; | ||||
} | ||||
else | ||||
{ | ||||
struct termios terminos; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcgetattr((int)fd, &terminos); | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos.c_cflag &= ~CSIZE; | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | 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; | ||||
} | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | tcsetattr((int)fd, TCSANOW, &terminos); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | 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
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return fd; | ||||
} | ||||
else | ||||
{ | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos->c_cflag &= ~PARENB; | ||
terminos->c_cflag &= ~PARODD; | ||||
yannic
|
r11 | switch(Parity) | ||
{ | ||||
case rs232parityNo: | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos->c_cflag &= ~PARENB; | ||
terminos->c_cflag &= ~PARODD; | ||||
yannic
|
r11 | break; | ||
case rs232parityOdd: | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos->c_cflag |= PARENB; | ||
terminos->c_cflag |= PARODD; | ||||
yannic
|
r11 | break; | ||
case rs232parityEven: | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos->c_cflag |= PARENB; | ||
terminos->c_cflag &= ~PARODD; | ||||
yannic
|
r11 | break; | ||
default: | ||||
terminos->c_cflag &= ~PARENB; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos->c_cflag &= ~PARODD; | ||
yannic
|
r11 | break; | ||
} | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | return 0; | ||
} | ||||
} | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | int rs232cfnbstop(int fd, struct termios *terminos, rs232stop NbStop) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
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
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return fd; | ||||
} | ||||
else | ||||
{ | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | terminos->c_cflag &= ~CSIZE; | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | 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
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return -1; | ||||
} | ||||
else | ||||
{ | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | return write((int)fd, psWrite, WriteBufferSize); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | } | ||
} | ||||
int rs232read(rs232port_t fd,char *psReadHex, int ReadBufferSize) | ||||
{ | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | if ((int)fd == -1) | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | { | ||
return -1; | ||||
} | ||||
else | ||||
{ | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | return read((int)fd, psReadHex, ReadBufferSize); | ||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | } | ||
} | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | |||
int rs232setRTS(rs232port_t fd) | ||||
{ | ||||
int status; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | ioctl((int)fd, TIOCMGET, &status); | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | status &= ~TIOCM_RTS; | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | if (ioctl((int)fd, TIOCMSET, &status)) | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | { | ||
return -1; | ||||
} | ||||
return 0; | ||||
} | ||||
int rs232clearRTS(rs232port_t fd) | ||||
{ | ||||
int status; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | ioctl((int)fd, TIOCMGET, &status); | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | status |= TIOCM_RTS; | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | if (ioctl((int)fd, TIOCMSET, &status)) | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | { | ||
return -1; | ||||
} | ||||
return 0; | ||||
} | ||||
int rs232setDTR(rs232port_t fd) | ||||
{ | ||||
int status; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | ioctl((int)fd, TIOCMGET, &status); | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | status &= ~TIOCM_DTR; | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | if (ioctl((int)fd, TIOCMSET, &status)) | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | { | ||
return -1; | ||||
} | ||||
return 0; | ||||
} | ||||
int rs232clearDTR(rs232port_t fd) | ||||
{ | ||||
int status; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | ioctl((int)fd, TIOCMGET, &status); | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | status |= TIOCM_DTR; | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | if (ioctl((int)fd, TIOCMSET, &status)) | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | { | ||
return -1; | ||||
} | ||||
return 0; | ||||
} | ||||
int rs232saferead(rs232port_t fd,char* data,int count ) | ||||
{ | ||||
int read=0; | ||||
int i=0; | ||||
r36 | for(i=0;i<1000;i++) | |||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | { | ||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | read = rs232read((int)fd,data,count); | ||
r36 | //printf("read %d bytes\n",read); | |||
if(read==-1)read=0; | ||||
count-=read; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | data+=read; | ||
if(count==0) | ||||
return 0; | ||||
r36 | usleep(10); | |||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | } | ||
return -1; | ||||
} | ||||
int rs232safewrite(rs232port_t fd,char* data,int count) | ||||
{ | ||||
int written=0; | ||||
int i=0; | ||||
for(i=0;i<1000;i++) | ||||
{ | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r31 | written = rs232write((int)fd,data+written,count); | ||
r36 | //printf("%d bytes written\n",written); | |||
if(written==-1)written=0; | ||||
jeandet@pc-de-jeandet3.lab-lpp.local
|
r26 | count-=written; | ||
data+=written; | ||||
if(count==0) | ||||
return 0; | ||||
} | ||||
return -1; | ||||
} | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r8 | #endif | ||
#endif //#ifdef HAVE_TERMIOS_H | ||||
jeandet@PC-DE-JEANDET.lpp.polytechnique.fr
|
r5 | |||