Professional Documents
Culture Documents
-한백전자-
2
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED– 디바이스 드라이버 핀 할당
3
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED– 디바이스 드라이버
• LED 드라이버를 작성하기 위해 다음과 같이 프로젝트를 생성
구분 내용
Project name m2_led
Toolchains Other tool chain
Driver File Name m2_led
4
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 디바이스 드라이버 소스 코드: m2_led.c
5
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 디바이스 드라이버 소스 코드: m2_led.c
032: return 0;
033: }
034:
035: static int m2_led_release(struct inode * inode, struct file * file){
036: int i;
037: for (i=0; i<7; i++)
038: gpio_free(EXYNOS4_GPK3(i));
039:
040: return 0;
6
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 디바이스 드라이버 소스 코드: m2_led.c
041: }
042:
043: static ssize_t m2_led_read(struct file * file, char * buf, size_t length, loff_t *
ofs){
044: printk("m2_led_read, \n");
045:
046: return 0;
047: }
048:
049: static ssize_t m2_led_write(struct file * file, const char * buf, size_t length,
loff_t * ofs){
050: int ret;
051: unsigned char cbuf[8];
052: ret = copy_from_user(cbuf,buf,length);
053:
054: gpio_direction_output(EXYNOS4_GPK3(0), (unsigned int) cbuf[0]);
055: gpio_direction_output(EXYNOS4_GPK3(1), (unsigned int) cbuf[1]);
056: gpio_direction_output(EXYNOS4_GPK3(2), (unsigned int) cbuf[2]);
057: gpio_direction_output(EXYNOS4_GPK3(3), (unsigned int) cbuf[3]);
058: gpio_direction_output(EXYNOS4_GPK3(4), (unsigned int) cbuf[4]);
059: gpio_direction_output(EXYNOS4_GPK3(5), (unsigned int) cbuf[5]);
060: gpio_direction_output(EXYNOS4_GPK3(6), (unsigned int) cbuf[6]);
7
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 디바이스 드라이버 소스 코드: m2_led.c
8
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 디바이스 드라이버 소스 코드: m2_led.c
9
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 디바이스 드라이버 소스 코드: m2_led.c
101:
102: module_init(m2_led_init);
103: module_exit(m2_led_exit);
104:
105: MODULE_AUTHOR(DRIVER_AUTHOR);
106: MODULE_DESCRIPTION(DRIVER_DESC);
107: MODULE_LICENSE("Dual BSD/GPL");
10
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED– 테스트 코드 구성
• LED 테스트 코드를 작성하기 위하여 다음과 같이 프로젝트를 생성
구분 내용
Project name m2_led_test
Toolchains Android GCC
C File Name m2_led_test
11
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 테스트 코드 소스 코드: m2_led_test.c
12
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 테스트 코드 소스 코드: m2_led_test.c
030: for(i=0;i<7;i++)
031: {
032: t<<=1;
033: if((temp>>i) & 1)
034: buf[i] = 1;
035: }
036: }
037: else {
038: printf( "Device Open ERROR!\n");
039: return -1;
040: }
041:
042: write(dev,buf,7);
043: close(dev);
044:
045: return 0;
046: }
13
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED– 테스트 코드 실행
• 프로젝트를 빌드하면, 실행파일은 “/data/local/tmp” 폴더 내에
복사가 완료
> cd /data/local/tmp
> ./m2_led_test
14
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED– 테스트 코드 실행 결과
• 다음과 같이 프로그램을 실행하면서 인자에 값을 입력하면 HBE-
SM7-S4412 M2 모듈의 LED가 점등되는 것이 확인 가능
• 0x00~0x7F까지 입력 가능
15
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JNI 프로그래밍 실습
16
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JNI란?
• JNI 용도
– Code Reusability
– Performance(speed)
– H/W dependent Code
17
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JNI란?
18
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제
• [목표]
– 리눅스 환경에서 JNI를 사용하는 방법 및 절차를 이해한다.
– JNI C 함수 이름이 어떻게 만들어지는지 이해한다.
– JNI C 함수에서 자동으로 생성되는 인자 2개의 의미를 이해한다.
– C 공유라이브러리 만드는 명령어를 이해한다.
19
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제 ; 리눅스 명령어 모음
# cd /
# mkdir working
# cd working
# mkdir jni
# cd jni
# mkdir Greeting
# cd Greeting
# gedit Wrapper.java
# gedit Main.java
# javac Wrapper.java
# javac Main.java
# javah Wrapper
# ls // Wrapper.h 생성
# gedit greeting.c
# gcc –o libgreeting.so greeting.o –shared –I [jni.h 위치] –I [jni_md.h]
# ls // libgreeting.so 확인
# export LD_LIBRARY_PATH=.
# java Main
20
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제 ; Wrapper.java
21
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제 ; Main.java
22
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제 ; greeting.c
23
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제 ; 코드 설명
• Wrapper.java
– static 블록 + native 메소드 선언
– System.loadLibrary() 메소드를 사용하여 라이브러리를 로드함
• 라이브러리 이름 greeting ß libgreeting.so ; 앞의 lib와 마지막 .so를 뺀 가운데 이름!
– native 메소드
• [접근지정자] native [반환형] [메소드이름]([인자…]);
• ex) public native void print();
• Main.java
– native 메소드 호출
– Java에서는 객체를 통해서 메소드 호출 가능!
• Wrapper 클래스 타입입의 객체를 만들고 wrapper 객체를 통해서 print() 메소드 호출
24
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
Greeting 예제 ; 코드 설명
• greeting.c
– javah를 통해서 생성된 함수 이름 check!
• Java 키워드 + 패키지 + Wrapper클래스 + native 함수
– Java_[패키지]_[Wrapper클래스]_[native함수이름](JNIEnv *, jobject , …);
– ex) Java_Wrapper_print(); // 패키지 사용 X
– JNI 함수는 인자가 무조건 두개 추가!
• JNIEnv * ; JNI 에서 사용되는 함수 table을 가리키는 함수
– (*env)->XXX_function(env, …) 형식으로 함수 호출해서 사용함
• jobject ; native 함수를 호출한 객체 (java 언어의 this와 같음)
25
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniType 예제
• [목표]
– Java의 함수인자전달 방식과 C언어의 인자 전달 방식을 이해한다.
– Java 기본 타입 8가지가 C언어에서 어떤 타입으로 바뀌는지 이해한다.
– 객체 지향언어의 함수 중복(function-overloading)을 C언어에서는 어떻게 처리
하는지 이해한다.
• 인자전달 방식
– Java ; pass-by-value
– C ; call-by-value (; 자바와 개념적으로 똑같다!)
– cf) call-by-reference?
26
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniType 예제 ; Wrapper.java
27
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniType 예제 ; Main.java
28
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniType 예제 ; jni_type.c
29
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniType 예제 ; jni_type.c
021: }
022:
023: JNIEXPORT void JNICALL Java_Wrapper_print__FD(JNIEnv *env, jobject obj,
024: jfloat f, jdouble d)
025: {
026: printf("float --> float : %f\n", f);
027: printf("double --> double : %f\n", d);
028: }
029:
030:
031:
30
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniType 예제
• <jni.h>, <jni_md.h> 내용 분석
Java 기본형 JNI type 실제 타입
boolean jboolean unsigned char
• 오버로딩 된 메소드의 구별
타입 시그니처 자바 타입
Z boolean
B byte
C char
S short
I int
J long
F float
D double
Lfully-qualified-class; Fully-qualified-class
[type Type[]
(arg-types) ret-type Method type
32
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniStr 예제
• [목표]
– Java 문자열과 C 문자열의 차이점을 이해한다.
– Java 문자열과 C 문자열을 변환하는 함수를 사용할 수 있다.
33
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniStr 예제
34
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniStr 예제 ; Wrapper.java
35
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniStr 예제 ; Main.java
36
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniStr 예제 ; jni_str.c
37
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniStr 예제 ; jni_str.c
38
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제
• [목표]
– Java 기본형 타입의 배열을 C언어에서 접근해서 사용할 수 있다.
– 배열을 인자로 받는 메소드가 함수 중복을 사용하는 경우를 처리할 수 있다.
39
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제 ; Wrapper.java
40
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제 ; Main.java
41
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제 ; jni_arr.c
42
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제 ; jni_arr.c
017: JNIEXPORT jdouble JNICALL Java_Wrapper_sum___3D(JNIEnv *env, jobject obj, jdoubleArray arr)
018: {
019: int i;
020: double sum = 0.0;
021:
022: int size = (*env)->GetArrayLength(env, arr);
023: double *pArr = (*env)->GetDoubleArrayElements(env, arr, 0);
024: for (i = 0; i < size; ++i)
025: sum += pArr[i];
026: (*env)->ReleaseDoubleArrayElements(env, arr, pArr, 0);
027:
028: return sum;
029: }
030:
43
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제 ; 코드 설명
• 배열을 인자로 전달
– int[] à jintArray
– double[] à jdoubleArray
• 배열의 크기 알아내기
– jint arrSize = (*env)->GetArrayLength(env, arr);
• 배열로 변환하기
– jint *pArr = (*env)->GetIntArrayElements(env, arr, 0);
– // C언어의 배열과 같이 for문으로 순차 접근 가능
44
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr 예제 ; 코드 설명
45
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr2 예제
• [목표]
– 클래스 타입의 배열을 C언어에서 다루는 방법을 이해한다.
46
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr2 예제 ; Wrapper.java
47
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr2 예제 ; Main.java
48
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr2 예제 ; jni_arr2.c
49
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniArr2 예제 ; 코드 설명
• String [] ; jobjectArray
50
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제
• [목표]
– 클래스 멤버변수/멤버함수 접근 방법을 이해한다.
51
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; Date.java
52
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; Wrapper.java
53
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; Main.java
54
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; jni_mem.c
55
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; jni_mem.c
019: /*
020: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj, jobject d)
021: {
022: jclass classType = (*env)->GetObjectClass(env, d);
023:
024: jfieldID yearId = (*env)->GetFieldID(env, classType, "year", "I");
025: jfieldID monthId = (*env)->GetFieldID(env, classType, "month", "I");
026: jfieldID dayId = (*env)->GetFieldID(env, classType, "day", "I");
027:
028: int year = (*env)->GetIntField(env, d, yearId);
029: int month = (*env)->GetIntField(env, d, monthId);
030: int day = (*env)->GetIntField(env, d, dayId);
031:
032: printf("(%d/%d/%d)\n", year, month, day);
033: }
034: */
035:
56
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; 코드 설명
• 멤버 접근하기
– 접근지정자 무시! Private 멤버도 접근가능!
• GetObjectClass()
– Jobject 타입의 인자를 받아, jclass 타입의 값을 반환
• GetFieldID()
– jclass 타입의 인자와, 변수명, 인자구성을 인자로 받아 jfieldID값을 반환
– ex) jfieldID yearId = (*env)->GetFieldID(env, classType, "year", "I");
• GetXXXField()
– XXX 위치에는 멤버변수의 타입을 적는다.
– ex) int year = (*env)->GetIntField(env, d, yearId);
57
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem 예제 ; 코드 설명
• GetObjectClass()
– Jobject 타입의 인자를 받아, jclass 타입의 값을 반환
• GetMethodID()
– jclass 타입의 인자와, 변수명, 시그너쳐를 인자로 받아 jmethodID값을 반환
– 시그너쳐 ; javap tool을 사용하면 편리하게 알 수 있음
– ex) jmethodID toStringId = (*env)->GetMethodID(env, classType,
– "toString", "()Ljava/lang/String;");
• CallXXXField()
– XXX 위치에는 메소드의 반환타입을 적는다.
– ex) jstring str = (*env)->CallObjectMethod(env, d, toStringId);
58
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem2 예제
• [목표]
– Has-a 관계의 클래스 멤버변수/멤버함수 접근 방법을 이해한다.
59
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem2 예제 ; Member.java
60
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem2 예제 ; Wrapper.java
61
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem2 예제 ; Main.java
62
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
JniMem2 예제 ; jni_mem.c
64
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제
• LED 프로그램을 작성하기 위해 다음과 같이 프로젝트를 생성
65
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제
• 추가적으로 패키지와 클래스, 폴더, 파일을 생성
66
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : uartjni 패키지
• 모든 프로젝트들은 동일하게 추가적으로 타깃과 디바이스 사이의 데
이터를 주고 받을 수 있는 Uart통신을 위한 패키지와 클래스, 파일을
생성하야함
67
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : uartjni 패키지 + UartJNI.java
• 그림과 같은 창이 생성 되면, Package에 “com.hbe.uartjni”를 입력
하고, Name에 “UartJNI”를 입력
68
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED : UartJNI.java
001: package com.hbe.uartjni;
002:
003: import android.util.Log;
004:
005: public class UartJNI implements UartJNIListener {
006:
007: private boolean mConnectFlag;
008: private UartJNIListener mMainActivity;
009:
010: static {
011: System.loadLibrary("UartJNI");
012: }
013:
014: private native static int open(String path);
015: private native void close();
016: private native void setLED(char led);
017:
018: public UartJNI(){
019: mConnectFlag = false;
020: portOpen();
69
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED : UartJNI.java
021: }
022:
023: public void portOpen(){
024: if(mConnectFlag) return;
025:
026: int ret = open("/dev/m2_led");
027: if(ret==1){
028: mConnectFlag = true;
029: } else {
030: Log.d("sm7m2", "device connect failed");
031: }
032: }
033:
034: public void portClose(){
035: if(mConnectFlag==false) return;
036: mConnectFlag = false;
037: close();
038: }
039:
040: protected void finalize() throws Throwable{
70
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED : UartJNI.java
041: portClose();
042: super.finalize();
043: }
044:
045: @Override
046: public void onReceive(int val) {
047: if(mMainActivity!=null){
048: mMainActivity.onReceive(val);
049: }
050: }
051:
052: public void setListener(UartJNIListener a){
053: mMainActivity = a;
054: }
055:
056: public void setLED(int c1, int c2, int c3, int c4, int c5, int c6, int c7){
057: char ch = (char)((c1&1)<<6 | (c2&1)<<5 | (c3&1)<<4 |
(c4&1)<<3 | (c5&1)<<2 | (c6&1)<<1 | c7&1);
058: setLED(ch);
059: }
71
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED : UartJNI.java
72
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 UartJNIListener.java
73
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : Uart 통신
• “External Tools > JNI Interface”를 선택 후 Library name은
“UartJNI”를 입력
74
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : Uart통신
• Class path는 “com.hbe.uartjni.UartJNI”를 입력
75
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 UartJNI.c
76
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 UartJNI.c
021: }
022:
023: JNIEXPORT void JNICALL Java_com_hbe_uartjni_UartJNI_close(JNIEnv *env, jobject o){
024: close(fd);
025: }
026:
027: JNIEXPORT void JNICALL Java_com_hbe_uartjni_UartJNI_setBuzzer(JNIEnv *env, jobject o,
jchar c){
77
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 Android.mk
001: # Copyright (C) 2009 The Android Open Source Project
002: #
003: # Licensed under the Apache License, Version 2.0 (the "License");
004: # you may not use this file except in compliance with the License.
005: # You may obtain a copy of the License at
006: #
007: # http://www.apache.org/licenses/LICENSE-2.0
008: #
009: # Unless required by applicable law or agreed to in writing, software
010: # distributed under the License is distributed on an "AS IS" BASIS,
011: # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: # See the License for the specific language governing permissions and
013: # limitations under the License.
014: #
015: LOCAL_PATH:= $(call my-dir)
016:
017: include $(CLEAR_VARS)
018:
019: LOCAL_MODULE := UartJNI
020: LOCAL_CFLAGS := -Werror
021: LOCAL_SRC_FILES := UartJNI.c
022:
023: include $(BUILD_SHARED_LIBRARY)
78
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : Uart 공유라이브러리 생성
• JNI 라이브러리 컴파일
• 우측 상단의 “C/C++ Perspective”를 선택
79
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제
• Uart통신 및 LED 예제 클래스 완성
80
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : 이미지 추가
• 이미지 파일 복사
• 앱을 구성하는 파일을 생성했다면, 앱에 포함되는 이미지를 복사
/res/drawable-hdpi
/res/drawable-ldpi
/res/drawable-mdpi
81
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제
• Setting Password에 불이 들어왔다면, 숫자 일곱 자리를 입력하여 암호
를 설정
83
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
021: private Handler mHandler = new Handler(){
022: @Override
023: public void handleMessage(Message msg){
024: super.handleMessage(msg);
025: if(mInputLock) return;
026: if(msg.what==' '){
027: initPW();
028: } else {
029: if(mPWOk) inputPW(msg.what);
030: else setPW(msg.what);
031: }
032: }
033: };
034:
035: @Override
036: protected void onCreate(Bundle savedInstanceState) {
037: super.onCreate(savedInstanceState);
038: setContentView(R.layout.main);
039:
040: mCustomView = (M2LEDView)findViewById(R.id.custom_view);
84
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
85
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
061: @Override
062: protected void onResume() {
063: mJniDriver.portOpen();
064: super.onResume();
065: }
066:
067: private void inputPW(int p){
068: mArrInputPW[mPWPt++]=p;
069: mJniDriver.setLED(mPWPt);
070: if(mPWPt>=7){
071: for(int i=0;i<7;i++){
072: if(mArrInputPW[i]!=mArrSetPW[i]){
073: setFailureThread();
074: mPWPt = 0;
075: return;
076: }
077: }
078: setPassThread();
079: mPWPt = 0;
080: }
86
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
081: }
082:
083: private void setPW(int p){
084: mArrSetPW[mPWPt++] = p;
085: mJniDriver.setLED(mPWPt);
086: if(mPWPt>=7){
087: mPWOk = true;
088: mPWPt = 0;
089: mCustomView.setInputMode();
090: }
091: }
87
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
88
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
121: e.printStackTrace();
122: }
123: mInputLock = false;
124: }
125: }
126:
127: private class FailureLED extends Thread{
128: @Override
129: public void run() {
130: super.run();
131: mInputLock = true;
132: try {
133: for(int i=0;i<=3;i++){
134: Thread.sleep(200);
135: mJniDriver.setLED(7);
136: Thread.sleep(200);
137: mJniDriver.setLED(0);
138: }
139: } catch (InterruptedException e) {
140: e.printStackTrace();
89
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDActivity.java
141: }
142: mInputLock = false;
143: }
144: }
145:
146:
147:
148:
149: }
90
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
91
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
92
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
93
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
94
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
081: if(event.getAction()==MotionEvent.ACTION_DOWN){
082: int btnWidth = 150;
083: int btnHeight = 145;
084: if(isTouch(x, y, 120, 330, 120+btnWidth, 330+btnHeight)){
085: sendMessage('1');
086: } else if(isTouch(x, y, 325, 330, 325+btnWidth, 330+btnHeight)){
087: sendMessage('2');
088: } else if(isTouch(x, y, 525, 330, 525+btnWidth, 330+btnHeight)){
089: sendMessage('3');
090: } else if(isTouch(x, y, 120, 535, 120+btnWidth, 535+btnHeight)){
091: sendMessage('4');
092: } else if(isTouch(x, y, 325, 535, 325+btnWidth, 535+btnHeight)){
093: sendMessage('5');
094: } else if(isTouch(x, y, 525, 535, 525+btnWidth, 535+btnHeight)){
095: sendMessage('6');
096: } else if(isTouch(x, y, 120, 730, 120+btnWidth, 730+btnHeight)){
097: sendMessage('7');
098: } else if(isTouch(x, y, 325, 730, 325+btnWidth, 730+btnHeight)){
099: sendMessage('8');
100: } else if(isTouch(x, y, 525, 730, 525+btnWidth, 730+btnHeight)){
95
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
101: sendMessage('9');
102: } else if(isTouch(x, y, 120, 925, 120+btnWidth, 925+btnHeight)){
103: sendMessage('*');
104: } else if(isTouch(x, y, 325, 925, 325+btnWidth, 925+btnHeight)){
105: sendMessage('0');
106: } else if(isTouch(x, y, 525, 925, 525+btnWidth, 925+btnHeight)){
107: sendMessage('#');
108: } else if(isTouch(x, y, 85, 1095, 700, 1200)){
109: sendMessage(' ');
110: }
112: invalidate();
113: return true;
114: }
115: return super.onTouchEvent(event);
116: }
117:
118: private void initScreenSize(){
119: Display display = ((WindowManager)mCon.getSystemService
(Context.WINDOW_SERVICE)).getDefaultDisplay();
120:
96
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
121: /* before HoneyComb
122: mScreenWidth = display.getWidth();
123: mScreenHeight = display.getHeight();
124: */
125:
126: // after HoneyComb
127: Point point = new Point();
128: display.getSize(point);
129:
130: mScreenWidth = point.x;
131: mScreenHeight = point.y;
132: mZoomWidth = (double)mScreenWidth/(double)800;
133: mZoomHeight = (double)mScreenHeight/(double)1280;
134: }
135:
136: private Bitmap createImage(int r){
137: Resources res = getResources();
138: Bitmap imgPrevConv = BitmapFactory.decodeResource(res, r);
139: int w = (int)(imgPrevConv.getWidth()*mZoomWidth);
140: int h = (int)(imgPrevConv.getHeight()*mZoomHeight);
141: return Bitmap.createScaledBitmap(imgPrevConv, w, h, true);
142: }
97
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
98
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
161: private void initImagePosition(){
162: int halfScreen = mScreenWidth/2;
163:
164: mTxtSet_x = halfScreen - mImgTxtSet.getWidth() - (int)(20*mZoomWidth);
165: mTxtSet_y = (int)(200*mZoomHeight);
166:
167: mLED_x[0] = mTxtSet_x - mImgLEDOn.getWidth() - (int)(5*mZoomWidth);
168: mLED_y[0] = (int)(208*mZoomHeight);
169:
170: mLED_x[1] = halfScreen + (int)(20*mZoomWidth);
171: mLED_y[1] = mLED_y[0];
99
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
소스코드 M2LEDView.java
181: mChkLED[0]=true;
182: mChkLED[1]=false;
183: }
184: public void setInputMode(){
185: mChkLED[1]=true;
186: mChkLED[0]=false;
187: }
188: }
100
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.
LED 예제 : 실행화면
101
본 문서의 저작권은 ㈜한백전자에 있으며, 허락 없이 무단 복제 및 전제를 불허합니다.