/* 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 BLOCKSIZE 38400/10 #define BAUD B38400 int main(int argc, char **argv) { int fd,fin; struct termios att; char buf[2]; int c; 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); } c = 0; while(read(fin,buf,1)){ fputc(buf[0],stdout); if(write(fd,buf,1) != 1){ fprintf(stderr,"Error on write\n"); exit(1); } if(++c >= BLOCKSIZE){ sleep(1); c = 0; } } close(fin); buf[0] = 0x0d; buf[1] = 0x0a; write(fd,buf,2); write(fd,"go",2); write(fd,buf,2); close(fd); return 0; }