ImJa 솔루션
ImJa보드에 자바로만 시리얼 프로그램을 작성하는 방법
Java 언어만으로 시스템을 개발할 수 있는 ImJa 보드 출시 소식을 전했습니다만, 이번 글에서는 과연 ImJa보드를 이용하여 어떻게 Java만으로 프로그램을 작성하는지 보겠습니다. 예제는 시리얼 통신으로 수신된 데이터를 재전송하는 에코 프로그램입니다. 프로그램 작성의 편리를 위해 이클립스 사용을 권합니다.
고급 프로그래머를 위해 먼저 간단히 먼저 설명해 드립니다.
- Eclipse IDE for java EE Developers를 내려받아 설치합니다.
- 새로운 Java Project를 생성합니다.
- lib 폴더를 생성한 후 http://www.jcraft.com/jsch에서 제공하는 jsch 파일을 lib 디렉토리로 다운로드 받습니다.
- jsch 파일을 환경설정>>ant>>Runtime의 Add JARs로 등록합니다.
- 에프에이리눅스에서 제공하는 라이브러리 파일 ImJa.jar(http://forum.falinux.com/zbxe/index.php?mid=ImJa&document_srl=848846) 파일을 lib 디렉토리로 다운로드 받은 후 ImJa.jar 파일을 Build Path에 추가합니다.
- Java 프로그램을 작성합니다.
- build.xml 파일과 build.properties 파일을 생성한 후 Ant에 등록하여 컴파일 및 프로그램을 실행합니다.
ImJa보드를 위한 이클립스 프로젝트 파일 생성 상세 설명
ImJa 보드에서 실행하는 자바 프로그램을 작성하는 방법을 상세하게 설명하겠습니다. 아래의 순서를 따라 하시면 쉽게 ImJa 프로젝트 파일을 만드실 수 있습니다.
▲ https://www.eclipse.org/downloads 에서 "Eclipse IDE for java EE Developers"를 내려 받아 적당한 곳에 풀어 놓습니다.
▲ 압축 풀기 후에 eclipse를 실행합니다. 적당한 이름으로 워크스페이스를 생성합니다. 본 설명에서는 SerialEcho를 사용합니다.
▲ 이클립스가 실행된 모습입니다.
▲ Main Menu >> File >> New >> Project를 선택한 후 Java Project를 선택합니다.
▲ Project name에 serialEcho를 입력합니다.
▲ serialEcho 프로젝트가 생성되었습니다.
▲ Main Menu>>File>>New>>Folder 메뉴를 선택합니다.
▲ "lib"를 입력합니다.
▲ http://www.jcraft.com/jsch/를 방문한 후 하단 Download에서 jsch.jar파일을 lib 폴더에 내려 받습니다.
▲ jsch.jar 파일을 환경 설정에 등록하기 위해 Main Menu>> Windows>> Preferences>> Ant>> Runtime에서 Classpath를 선택하고 [Add JARs...] 버튼을 클릭합니다.
▲ jsch.jar 파일을 선택하고 [OK]버튼을 클릭합니다.
▲ jsch.jar 파일이 등록되었습니다.
▲ 에프에이리눅스 포럼(http://forum.falinux.com)에서 제공하는 imja.jar 파일을 lib 폴더로 내려 받습니다. imja.jar 파일은 ImJa 솔루션 게시판에서 imja.jar 로 검색하시면 최신 버전을 구할 수 있습니다.
▲ lib 폴더에 추가된 imja.jar파일을 오른쪽 마우스 버튼 메뉴를 이용화여 Build Path에 추가합니다.
ant 파일 생성
컴파일과 타겟보드로 실행 파일 전송을 자동으로 실행하도록 ant 파일을 생성하면 디버깅에 많은 도움을 받습니다. ant 파일은 아래와 같이 만들 수 있습니다.
▲ 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭 후 New>> File 메뉴를 실행합니다.
▲ 파일 이름으로 build.xml를 입력합니다.
파일의 내용은 아래와 같습니다.
<?xml version="1.0" encoding="UTF-8"?> <!-- 프로젝트 이름을 입력한다. --> <project name= "ImJa_example" basedir= "."> <!-- 빌드 프로퍼티 파일 --> <property file= "build.properties" /> <!-- Java Compile--> <target name= "compile" description= "Compile!!!" depends= ""> <echo message="------------------------------" /> <echo message="Java Compile!!!! " /> <echo message="------------------------------" /> <javac target= "${java.target}" nowarn="true" deprecation="true" debug="true" listfiles="false" failonerror="true" optimize="false" includeantruntime="false" srcdir="${basedir}/src" destdir="${basedir}/bin" encoding="${java.compile.encoding}"> </javac> </target> <!-- make jar--> <target name= "make_jar_nfs" depends= "compile"> <echo message="------------------------------" /> <echo message=" Make Jar : ${jar.name}.jar" /> <echo message="------------------------------" /> <mkdir dir= "./jar" /> <jar destfile="${nfs.dir}/${jar.name}.jar" basedir="${basedir}/bin"> </jar> </target> <!-- target device upload--> <target name= "target_device_upload" depends= "make_jar_nfs"> <echo message="------------------------------" /> <echo message=" Target device Upload" /> <echo message="------------------------------" /> <scp file="${nfs.dir}/${jar.name}.jar" todir="${target.id}@${target.ip}:${target.dir}" password="${target.pw}" trust="true"/> </target> </project>
같은 방법으로 build.properties 파일을 생성한 후 아래 내용을 입력합니다.
# NFS folder nfs.dir=/nfs #java encoding java.compile.encoding=UTF-8 #java compile version java.target=1.7 #java jar name jar.name=appSerailEcho #upload target info target.ip=192.168.2.75 target.id=root target.pw=falinux target.dir=/home
컴파일 후 생성할 실행 파일은 appSerialEcho이며, 타겟 보드의 IP는 192.168.2.75, 아이디 root와 암호 falinux로 로그인한 후 /home에 만들어진 실행 파일을 저장합니다.
▲ Main menu>> Window >> Show View >> Ant 메뉴를 실행합니다.
▲ Ant 탭에서 Add Buildfiles 버튼을 클릭합니다.
▲ build.xml 파일을 선택하여 Ant 파일을 생성합니다.
▲ 생성한 Ant 파일을 이용하여 컴파일 또는 컴파일과 타겟 보드로 실행 파일을 전송합니다.
소스 파일 생성
▲ src 폴더에서 New>>Class 메뉴를 실행합니다.
▲ Name 항목에 SerialEchoExample를 입력합니다.
▲ 소스 파일이 생성되었습니다.
파일 안에 아래 내용을 입력합니다.
package serialEcho; import com.falinux.imja.Poll; import com.falinux.imja.Serial; import java.nio.ByteBuffer; public class SerialEchoExample extends Serial { private Poll poll; private final ByteBuffer readBuffer = ByteBuffer.allocateDirect(1024); private final ByteBuffer writeBuffer = ByteBuffer.allocateDirect(1024); public SerialEchoExample(String port, int baudRate, int bits) { super(port, baudRate, bits); poll = new Poll(); // 전체 통신 함수 초기화 this.open(); // 시리얼 포트 open poll.rebuild(); // 통신 객체 목록 갱신 } @Override public int onDisconnect(long arg0) { return 0; } @Override public int onError(long arg0) { return 0; } @Override public int onHup(long arg0) { return 0; } @Override public int onRead(long arg0) { System.out.print("onRead................."); int readBytes = this.read(readBuffer); // 수신된 데이터 읽기 byte[] buf = new byte[readBytes]; // byte배열 선언 readBuffer.flip(); // 읽은 데이터 설정 readBuffer.get(buf); // byte배열에 데이터 설정 readBuffer.compact(); // bytebuff 포지션 재설정 writeBuffer.put(buf); // 수신된 데이터를 write buffer에 설정 writeBuffer.flip(); // write buffer 데이터 설정 this.write(writeBuffer); // 데이터 전송 writeBuffer.compact(); // bytebuff 포지션 재설정 System.out.println(new String(buf, 0, readBytes)); return readBytes; } @Override public int onTimeOut(long arg0) { return 0; } @Override public int onWrite(long arg0) { return 0; } public void run() { while (true) { poll.pollDoLoop(100); } } public static void main(String[] args) { new SerialEchoExample("/dev/ttymxc1", 115200, 8).run(); } }
6. 프로그램 컴파일 및 실행
▲ Ant 탭에서 target_device_upload를 실행하면 컴파일 후 생성된 실행 파일이 타켓 보드로 전송됩니다.
▲ 타켓 보드인 ImJa 보드에 터미널을 이용하여 연결한 후 아래와 같이 자바 프로그램을 실행합니다.
# java -cp appSerialEcho.jar serialEcho.SerialEchoExample
ImJa 보드에 시리얼 케이블을 연결한 후 데이터를 전송하면 수신된 데이타가 화면에 출력됩니다.
- 001 ImJa.png (20.8KB)(142)
- 002 ImJa.png (54.1KB)(107)
- 003 ImJa.png (83.8KB)(93)
- 004 ImJa.png (92.4KB)(90)
- 005 ImJa.png (80.6KB)(97)
- 006 ImJa.png (112.6KB)(99)
- 007 ImJa.png (127.3KB)(96)
- 010 ImJa 프로젝트 생성.png (75.2KB)(89)
- 011 ImJa 프로젝트 생성.png (170.1KB)(86)
- 012 ImJa 프로젝트 생성.png (23.2KB)(108)
- 013 ImJa 프로젝트 생성.png (38.6KB)(110)
- 014 ImJa 프로젝트 생성.png (66.8KB)(106)
- 015 ImJa 프로젝트 생성.png (101.6KB)(106)
- 016 ImJa 프로젝트 생성.png (108.9KB)(97)
- 017 ImJa 프로젝트 생성.png (105.6KB)(98)
- 018 ImJa 프로젝트 생성.png (95.9KB)(97)
- 019 ImJa 프로젝트 생성.png (52.1KB)(101)
- 020 ImJa 프로젝트 생성.png (67.6KB)(107)
- 021 ImJa 프로젝트 생성.png (104.4KB)(96)
- 022 ImJa 프로젝트 생성.png (71.1KB)(107)
- 023 ImJa 프로젝트 생성.png (127.1KB)(94)
- 024 ImJa 프로젝트 생성.png (85.4KB)(92)
- 025 ImJa 프로젝트 생성.png (106.1KB)(93)
- 026 ImJa 프로젝트 생성.png (118.3KB)(90)
- 027 ImJa 프로젝트 생성.png (152.0KB)(91)
- 028 ImJa 프로젝트 생성.png (116.2KB)(100)
- 029 ImJa 프로젝트 생성.png (98.5KB)(102)
- 030 ImJa 프로젝트 생성.png (124.5KB)(96)
- 031 ImJa 프로젝트 생성.png (146.9KB)(96)
- 032 ImJa 프로젝트 생성.png (128.7KB)(93)
- 033 ImJa 프로젝트 생성.png (126.0KB)(95)
- 034 ImJa 프로젝트 생성.png (133.8KB)(94)
- 035 ImJa 프로젝트 생성.png (103.3KB)(95)
- 036 ImJa 프로젝트 생성.png (155.5KB)(85)
- 037 ImJa 프로젝트 생성.png (157.1KB)(92)
- 038 ImJa 프로젝트 생성.png (136.6KB)(98)
- 039 ImJa 프로젝트 생성.png (144.5KB)(92)
- 040 ImJa 프로젝트 생성.png (71.1KB)(90)
- jcraft.png (165.7KB)(88)