h8load.c

/* 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;
}

This page was generated at 2005/4/24 14:13:7