페이지

2013년 5월 13일 월요일

[BLE] TI CC2540 Mini DK 사용하기 - JavaSimplePeripheral 프로그램


1. 들어가기

    USB 동글과 KeyFob이 서로 연결되어 있는 상태에서 PC 프로그램인 JavaSimplePeripheral을 사용하여 다음 두 가지를 테스트해 보았다.
 
        1) KeyFob의 단추 누름 상태를 Notification 방식으로 전송하도록 JavaSimplePeripheral이 KeyFob의 설정을 변경한다.
        2) JavaSimplePeripheral은 KeyFob의 단추 누름 상태를 전송받아서 화면에 표시한다.

2. 이미지 다운로드

    USB 동글에는 HostTestRelease 이미지, 그리고 KeyFob에는 SimpleBLEPeripheral 이미지를 SmartRF Flash Programmer 프로그램을 이용하여 각각 다운로드한다. HostTestRelease는 외부 장치로부터 HCI 명령을 전달받아서 실행하고, 이벤트나 응답을 외부 장치로 전달하는 역할을 수행한다. SimpleBLEPeripheral은 Simple Keys Service를 구현하고 있다.

    2.1 USB 동글용 프로젝트 및 이미지 위치
 
        프로젝트:
         
            BLE-CC254x-1.3\Projects\ble\HostTestApp\CC2540\HostTestRelease.eww
         
        이미지:
     
            BLE-CC254x-1.3\Accessories\HexFiles\CC2540_USBdongle_HostTestRelease_All.hex

    2.2 KeyFob용 프로젝트 및 이미지 위치
 
        프로젝트:
         
            BLE-CC254x-1.3\Projects\ble\SimpleBLEPeripheral\CC2540DB\SimpleBLEPeripheral.eww

        이미지:
     
            BLE-CC254x-1.3\Accessories\HexFiles\CC2540_keyfob_SimpleBLEPeripheral.hex
     
3. BTool로 테스트하기

    BTool을 사용하여 USB 동글과 KeyFob을 서로 연결하고 Simple Keys Service에 대한 attribute 테이블을 파악한 다음 Client Characteristic Configuration descriptor의 값을 Notification으로 설정한다.

    3.1 장치 발견 및 연결

        1) USB 동글을 PC에 연결한다. 장치 관리자에서 USB 동글의 포트 번호를 확인한다.
        2) BTool을 실행한다. 직렬포트 설정 대화 상자에서 USB 동글의 포트 번호를 지정한다. 다른 항목은 기본으로 설정된 값을 사용한다.
        3) KeyFob의 오른쪽 버튼(B3)을 눌러 Discoverable 모드로 진입한다.
        4) BTool의 Discover/Connect 탭에서 장치 발견 및 연결을 실행한다.
            - 'Discovery' 섹션의 'Scan' 버튼을 누른다. 잠시 후 "Devices Found"의 값이 1로 바뀌는 것을 확인한다.
            - 'Link Control' 섹션의 Slave BDA에서 발견된 장치의 주소를 선택하고 'Establish' 버튼을 누른다. 왼쪽 패널에 "Connection info" 항목이 추가되는 것을 확인한다.

    3.2 Simple Keys Service
 
        Simple Keys Service에 대한 UUID는 0xFFE0이고, BTool의 Adv.Commands 탭에서 GATT_DiscAllCharDesc 명령을 실행하면 아래와 같은 attribute 테이블을 얻을 수 있다.
     
            Handle  Type    Value               Permissions     Notes
            0x0034  0x2800  E0:FF               Read            Start of Simple Keys Service
            0x0035  0x2803  10:36:00:E1:FF      Read            Key Press State characteristic declaration
            0x0036  0xFFE1  00                  (none)          Key Press State characteristic value
            0x0037  0x2902  00:00               Read/Write      Key Press State characteristic configuration
            0x0038  0x2901  "Key Press State"   Read            Key Press State characteristic user description
     
    3.3 Notification 설정하기
 
        BTool의 Read/Write 탭을 열고 Characteristic Write 영역에서 핸들과 값을 아래와 같이 지정한 후 Write 버튼을 누른다.

            핸들: 0x0037
            값: 01:00
 
    3.4 테스트
 
        KeyFob의 왼쪽, 오른쪽 단추를 눌러 가면서 BTool의 로그창에 표시되는 값을 확인한다.
     
            0: 단추 누르지 않음
            1: 왼쪽 단추 누름
            2: 오른쪽 단추 누름
            3: 왼쪽, 오른쪽 단추 동시에 누름
 
4. JavaSimplePeripheral으로 테스트하기

    4.1 다운로드 위치
 
        http://processors.wiki.ti.com/index.php/Category:JavaSimplePeripheral
     
    4.2 eclipse 프로젝트로 import
 
        1) Select an import source:
            General - Existing Projects into Workspace
         
        2) Select root directory: <Location of the extracted JavaSimplePeripheral>
            Copy projects into workspace: Checked
 
    4.3 빌드 문제 수정
 
        프로젝트의 Build Path 설정을 보면 Libraries로 아래 네 가지 항목이 포함되어 있을 것이다. 이 중에서  RXTXcomm.jar만 남기고 나머지 세 개는 제거한다.
     
            RXTXcomm.jar
            rxtxParalle.dll
            rxtxSerial.dll
            SoftNetConsultUtils.2.01.slim.jar
 
    4.4 라이브러리 복사
 
        프로젝트 lib 디렉토리에 있는 세 개의 파일을 아래의 위치로 복사한다.
     
            %JAVA_HOME%\bin\rxtxParallel.dll
            %JAVA_HOME%\bin\rxtxSerial.dll
            %JAVA_HOME%\lib\ext\RXTXcomm.jar
     
    4.5 실행시 링크 에러 수정
 
        프로젝트에 포함되어 있는 RXTX 라이브러리는 32비트 버전인데, 64비트 JDK를 사용하고 있다면 링크 에러가 발생할 것이다.
     
            java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.7.0_06\bin\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
     
        아래의 위치에서 64비트용 RXTX 라이브러리를 다운로드하여 설치한다.
     
            http://www.cloudhopper.com/opensource/rxtx/
         
    4.6 소스 코드 수정
 
        JavaSimplePeripheral을 실행하여 COM 포트를 지정하고 Connect 단추를 누르면 다음 세 가지 작업을 순차적으로 수행할 것이다.
     
            KeyFob 찾기
            KeyFob에 연결하기
            Key Press State에 대하여 Notification 설정하기
         
        만약 아래와 같은 메시지가 출력된다면 COM 포트를 제대로 지정했는지 확인해 보고, 이상이 없다면 KeyFob의 오른쪽 버튼(B3)을 눌러 Discoverable 모드로 진입하게 한 다음 다시 Connect 버튼을 눌러 본다.
     
            Error connecting to the device.
            Remove and insert again the USB dongle from the USB slot, restart the
             application and try again.
     
        KeyFob을 찾을 수 있었다면 다음과 같은 메시지를 출력할 것이다.
     
            Device found
            Enabling Key Notifications start:
            Enabling Key Notifications end:
 
        그럼에도 불구하고 Key Notify ON / Key Notify OFF 두 개의 단추가 활성화 되지 않는다면 아래 두 군데서 Key Press State characteristic configuration에 접근하기 위한 핸들값을 BTool을 통하여 파악한 값으로 바꾸어 준다.
     
            출력 버퍼의 9번째 바이트: 0x0020 ==> 0x0037
 
            < ConnectionManager.java >
     
                public void simpleKeysEnabler() {
                    System.out.println("Enable Keys \n");
                    //int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00 };
                    int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x01, 0x00 };
                    new SerialWriter(this.sp,outputBuffer).write();
                }

                public void simpleKeysDisabler() {
                    System.out.println("Disable Keys\n");
                    //int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00 };
                    int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00 };
                    new SerialWriter(this.sp,outputBuffer).write();
                }
         
    4.7 테스트
 
        KeyFob의 왼쪽, 오른쪽 단추를 눌러 가면서 eclipse의 Console 창에 표시되는 값을 확인한다.
     
            0: 단추 누르지 않음
            1: 왼쪽 단추 누름
            2: 오른쪽 단추 누름
            3: 왼쪽, 오른쪽 단추 동시에 누름
 
부록. 참고 자료

    1. 문서

        가. Bluetooth Low Energy CC2540/41 Mini Development Kit User's Guide (http://www.ti.com/litv/pdf/swru270c)
            5.3 Using SmartRF Flash Programmer Software
        나. CC2540/41 Bluetooth Low Energy Software Developer's Guide (http://www.ti.com/lit/pdf/swru271)
            4.3 SimpleBLEPeripheral Sample Project
            4.5 HostTestRelease Network Processor Project
        다. TI BLE Vendor Specific HCI Reference Guide
            BLE-CC254X-1.3\Documents\TI_BLE_Vendor_Specific_HCI_Guide.pdf

    2. 소프트웨어

        가. Bluetooth low energy software stack and tools 1.3 (www.ti.com/blestack)
            - 예제 애플리케이션과 BTool을 포함하고 있다.
        나. SmartRF Flash Programmer 1.12.6 (www.ti.com/tool/flash-programmer)

댓글 없음:

댓글 쓰기

Llama 3.2로 문장 생성 및 챗팅 완성 실습

Llama 3.2로 문장 생성 및 챗팅 완성 실습 Running Meta Llama on Linux 문서의 내용을 참고하여 Llama 3.2 1B 모델로 다음 두 가지 기능을 실습합니다. 문장 완성 챗팅 ...