macOS Serial Program

Tiny Serial은 매우 심플한 터미널 프로그램이다. Tiny Serial은 미니컴이 불편해서 우분투(리눅스)에서 단순히 터미널 확인 용도로 심플한 터미널 프로그램을 찾다 발견하여 2012년부터 계속 사용했던 프로그램이며, 미니컴 같이 여러 기능을 포함한 것이 아니라 시리얼 Rx/Tx 확인 용도 만들어진 소스이다.

 

이직한 회사의 개발환경이 macOS로 구성되어 있어, Tiny Serial이 동작하지 않아 구글링하여 급하게 수정하여 사용하였으나, macOS가 업데이트 되면서 Rx는 문제가 없으나 Tx가 동작하지 않아 이것을 수정하여 블로그에 정리해둔다.

 

기존에 코드 이해없이 구글링하여 급하게 수정한 것이라, 이번에 발생한 문제를 수정하기 위해 termios를 살펴보고 기존 코드의 불필요한 내용은 삭제하고 tty에 필요한 내용을 적용하여 문제를 해결하였다. macOS에서 tty를 설정하는 방법이 리눅스 환경과 다소 차이가 있으며 아래 사항만 적용하면 macOS에서 Rx/Tx가 문제없는 것을 확인하였다.

  ...

 #ifdef __APPLE__
  if (cfsetispeed(&newtio, speed) < 0) {
    perror("cfsetispeed");
    exit(1);
  }
  if (cfsetospeed(&newtio, speed) < 0) {
    perror("cfsetospeed");
    exit(1);
  }
  newtio.c_cflag     = CS8 | CLOCAL | CREAD;
 #else
  newtio.c_cflag     = speed | CS8 | CLOCAL | CREAD;
 #endif
  newtio.c_iflag     = IGNPAR;
  newtio.c_oflag     = 0;
  newtio.c_lflag     = 0;
  newtio.c_cc[VMIN]  = 1;
  newtio.c_cc[VTIME] = 0;
  tcflush(comfd, TCIFLUSH);
  tcsetattr(comfd, TCSANOW, &newtio);

  ...

리눅스에서는 c_flag에 baudrate 값을 설정하면 간단히 끝나지만, macOS는 c_flag에 baudrate를 설정하지 않고 cfsetispeed() / cfsetospeed() 함수를 이용하여 baudrate를 설정하여야 Tx를 하는데 문제가 없다. 

 

전체 코드는 아래 GitHub를 참고하도록 한다. 진짜 이것 안되면 SecureCRT나 Serial IOIO를 구입해야 하나 심각히 고민하고 있었다. 가격이 만만치 않아서 부담은 되어 screen 명령어을 사용하려고 하였으나, macOS가 업데이트 되면서 Tiny Serial과 동일한 증상이 나와서 정말 어쩔수 없이 사야하나 싶었는데, 다행이 수정되어 10만원이 굳었다. ㅎ

 

GitHub - highgon2/TinySerial: Tiny Serial on Ubuntu

Tiny Serial on Ubuntu. Contribute to highgon2/TinySerial development by creating an account on GitHub.

github.com