2015년 8월 15일 토요일

RK3188 관련



개발환경 설정하기
http://linux-rockchip.info/mw/index.php?title=Building_Kernel_for_Linux_Distribution

Android에서 Serial 통신하기



  1. 준비물



Teraterm
Virtual Serial Port : Com2Com, VSPE
Seiral API  : android_serial_api

기타 : android studio, ndk

2. 에뮬레이터 사용하기



Emulator @AVDNAME -qemu -serial COM1


Tip:  Windows8 인 경우에는 "드라이버 서명 적용 사용 안 함"을 반드시 해줘야한다.
>  Solution : http://codesystem.co.kr/ttboard/data/FILES/Windows%208%20OR%208_1%20VirtualSerial.pdf
> Very Important!!

3. 시리얼 드라이버 확인


/proc/tty/drivers
> 에뮬레이터에서, 포트 정보가 없는 경우에는, VirtualBox를 사용한다.
> /dev/ttyS1 을 보통 사용하는데, 권한이 666으로 되어 있어야 한다.  root권한이 있는 경우에는 강제로 chmod 666 /dev/ttyS1 을 해서, 접근한다.


4. 시리얼 포트 설정

SerialPort.c 에서 포트 설정을 할 수 있다.
포트 설정은 반드시 해주는 것이 좋을 것으로 보임.

termios cfg; // 설정하기
 

참고 URL : http://pubs.opengroup.org/onlinepubs/7908799/xsh/termios.h.html

> 다음과 같이 3개의 구조체를 설정할 수 있다.
cc_t
Used for terminal special characters.  ( 특수 문자, 제어문자 )
speed_t
Used for terminal baud rates.  ( 보드레이트, 속도  )
tcflag_t
Used for terminal modes.  ( 터미널 모드 )

> 사용한 설정
cfg.c_cflag |=CS8|CREAD|CLOCAL;
cfg.c_lflag &= ~ICANON;
cfg.c_cflag &= ~CRTSCTS; // disable CTS/RTScfg.c_cflag &= ~CSTOPB; // Stop bit 1 bitcfg.c_cflag &= ~PARENB; //No parity
 
> CANONICAL 모드로 사용하는 경우에 제어문자를 초기화할 필요가 있다.
cfg.c_cc[VEOF]     = 0;     /* Ctrl-d */
cfg.c_cc[VEOL] = 0; ///* '\0' */
/      
cfg.c_cc[VINTR] = 0; /* Ctrl-c */// 
cfg.c_cc[VQUIT] = 0; /* Ctrl-\ */// 
cfg.c_cc[VERASE] = 0; /* del */// 
cfg.c_cc[VKILL] = 0; /* @ */ 
cfg.c_cc[VSWTC] = 0; /* '\0' */// 
cfg.c_cc[VSTART] = 0; /* Ctrl-q */// 
cfg.c_cc[VSTOP] = 0; /* Ctrl-s */// 
cfg.c_cc[VSUSP] = 0; /* Ctrl-z */ 
cfg.c_cc[VREPRINT] = 0; /* Ctrl-r */// 
cfg.c_cc[VDISCARD] = 0; /* Ctrl-u */// 
cfg.c_cc[VWERASE] = 0; /* Ctrl-w */ 
cfg.c_cc[VLNEXT] = 0; /* Ctrl-v */
cfg.c_cc[VEOL2] = 0; /* '\0' */
 
 


Subscript Usage
 
Canonical Mode
Non-canonical Mode
Description
VEOF
 
EOF character
VEOL
 
EOL character
VERASE
 
ERASE character
VINTR
VINTR
INTR character
VKILL
 
KILL character
 
VMIN
MIN value
VQUIT
VQUIT
QUIT character
VSTART
VSTART
START character
VSTOP
VSTOP
STOP character
VSUSP
VSUSP
SUSP character

VTIME
TIME value
 
Canonical 모드를 사용하면, 0x0a와 같은 문자가 줄바꿈 처리되기 때문에 별도의 처리가 필요할 것으로 예상된다.
 
> 입력 버퍼의 사이즈를 설정하는 경우, 해당 사이즈만큼 버퍼가 찰때까지 기다린다.
cfg.c_cc[VMIN]     = 45;
 
 
> 속도 설정
 speed_t speed = B115200;
cfsetispeed(&cfg, speed);
cfsetospeed(&cfg, speed);