/* h8load : Download Motolora S format file to serial-line
for h8mon by CSE Tomakomai NCT
This program was designed and coded by SHIBUYA K.
2005/02/26
*/
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#ifndef SERIALDEVICE
#define SERIALDEVICE "/dev/ttyS0"
#endif
#define BAUD B38400
int main(int argc, char **argv)
{
int fd,fin;
struct termios att;
char buf[2];
if((fd = open(SERIALDEVICE,O_WRONLY)) == 0){
fprintf(stderr,"Can't open %s\n",SERIALDEVICE);
exit(1);
}
tcgetattr(fd,&att);
cfsetispeed(&att, BAUD);
cfsetospeed(&att, BAUD);
att.c_lflag &= ~( ECHO | ICANON | IEXTEN | ISIG );
att.c_iflag &= ~( BRKINT | ICRNL | INPCK | ISTRIP | IXON );
att.c_cflag &= ~( PARENB | CSTOPB );
att.c_cflag |= CS8;
att.c_oflag &= ~( OPOST );
att.c_cc[VTIME] = 0;
att.c_cc[VMIN] = 1;
att.c_cflag |= HUPCL | CLOCAL ;
if(tcsetattr(fd, TCSANOW, &att) == -1){
fprintf(stderr,"Error tcsetattr\n");
exit(1);
}
buf[0] = 0x0d;
buf[1] = 0x0a;
write(fd,buf,2);
write(fd,buf,2);
write(fd,"ld",2);
write(fd,buf,2);
if((fin = open(argv[1],O_RDONLY)) == 0){
fprintf(stderr,"Can't open %s\n",argv[1]);
exit(1);
}
while(read(fin,buf,1)){
fputc(buf[0],stdout);
if(write(fd,buf,1) != 1){
fprintf(stderr,"Error on write\n");
exit(1);
}
}
close(fin);
buf[0] = 0x0d;
buf[1] = 0x0a;
write(fd,buf,2);
write(fd,"go",2);
write(fd,buf,2);
close(fd);
return 0;
}