본문 바로가기

BLE/안드로이드 앱

(9)
[Noise Detector] 어플리케이션 (2) : 소스 코드 GitHub 다른 컴퓨터에서 빌드해도 작동하는 것 확인했습니다.WaveData 저작권 문구와 동일합니다. Copyright (c) 2017, JoonDongAll rights reserved.Copyright holder's blog : http://joondong.tistory.com Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:소스와 바이너리 형태로 재배포와 사용은 다음 조건들을 만족한 경우에만 허용됩니다.Redistributions of source code must retain the abo..
[Noise Detector] 어플리케이션 (1) : 시스템 흐름 노르딕에서는 BLE(Bluetooth Low Energy) 어플리케이션 개발을 위해 nRF Toolbox 어플리케이션의 BleProfile 모듈을 제공합니다. BleProfile 모듈은 BleProfileActivity, BleProfileServiceReadyActivity, BleProfileExpandableListActivity, BleMulticonnectProfileServiceReadyActyvity 4가지 버전의 액티비티를 제공하며, 개발자는 이 중에서 한가지를 선택하여 사용할 수 있습니다. BleProfileManager는 연결 상태를 관리하고, 데이터를 송수신(Notification/Indication)하는 역할을 담당하며, BleProfileManager의 객체는 액티비티에 생성될 수..
[Noise Detector] 그래픽 모듈 (7) : 예제 소스 코드 GitHub 저작권 문구는 노르딕의 nRF-Toolbox 앱의 저작권 문구를 거의 그대로 적용했습니다. Copyright (c) 2017, JoonDong All rights reserved. Copyright holder's blog : http://joondong.tistory.com Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 소스와 바이너리 형태로 재배포와 사용은 다음 조건들을 만족한 경우에만 허용됩니다.Redistributions of source code must retain the a..
[Noise Detector] 그래픽 모듈 (6) : Warning Warning은 WaveBars.WarningListener 인터페이스를 구현하며, 이 인터페이스는 단 하나의 startWarning() 메소드만 갖습니다. 그리고 WaveBars에서 수신된 데이터의 최대값이 mCLValue보다 크면 Warning의 startWarning() 메소드를 호출하게 됩니다. startWarning() 메소드는 일정 시간마다 메인 스래드의 메세지 큐에 Runnable 객체만 전송하는 타이머 역할을 하는 스래드입니다. 이 Runnble 객체는 boolean타입의 mReqLight 필드만 true/false로 변환시켜가며 invalidate() 메소드를 호출하는 것이 전부인데, invalidate()로 인하여 호출되는 onDraw()에서 mReqLight 필드가 true이면 화면을..
[Noise Detector] 그래픽 모듈 (5) : WaveBars ArrayBundle은 WaveBars가 데이터를 처리하는 단위입니다. WaveBars에 입력된 ArrayBundle은 내부 버퍼인 mBundleList에 담기게 되며 내부 스래드인 mAnimateBars에 의해 하나씩 처리됩니다. 실시간 처리를 위해 WaveDataView의 getView()의 autoAdjustPeriod를 true로 설정하여 버퍼에 4개 이상 쌓이게 되면 처리 주기를 감소시키도록 설정할 수있습니다. 해당 과정은 WaveBars.animateBars()에서 확인할 수 있습니다. mAnimateBars 스래드는 불필요한 스래드의 존재를 막기위해 mBundleLIst가 비워질 때까지 존재하며 이후 제거되고 새로운 ArrayBundle이 입력됐을 때 다시 생성됩니다. 그리고 ArrayBun..
[Noise Detector] 그래픽 모듈 (4) : CriticalLine 안드로이드는 화면이 터치되면 MotionEvent 객체를 onTouchEvent() 메소드에 넣어 호출합니다. MotionEvent 객체를 통해 사용자가 터치가 이동한 거리를 추출할 수 있습니다. 하지만 이렇게 추출된 거리는 픽셀 단위이기 때문에, 이후 수신될 데이터와 비교하기 위해서는 값 단위로 변환될 필요가 있고, 또한 수신될 데이터는 화면에 그리려지기 위해 픽셀 단위로 변환될 필요가 있습니다. 이것을 mPixelToValue와 mValueToPixel이 담당합니다. 그릴때마다 계산하면 리소스에 부담이될 수도 있기때문에 최초 onDraw() 호출에서 구한 값을 상수처럼 이용합니다. onTouch() 메소드 안에 있는 setCLValue() 메소드는 추출한 이동 거리를 픽셀 단위에서 값 단위로 변경하여..
[Noise Detector] 그래픽 모듈 (3) : EdgeLine 세로축의 맨 밑에는 항상 0이 표시되며 WaveDataView의 getView() 메소드에 입력된 verMaxValue로부터 생성된 문자열(mMarkingValue1~4)이 세로축의 맨 위, 3/4, 1/2, 1/4 긴 마킹 위치에 입력되고, 그 사이에는 작은 마킹이 들어갑니다. 정리하면 항상 총 9개의 마킹이 있고 4개의 마킹에 문자열이 들어가며, 이것은 수정할 수 없습니다. 이 문자열들은 소수점을 나타낼 수 있고 자리수까지 조절할 수 있습니다. mUnit은 마킹 문자열의 단위를 나타냅니다. 항상 괄호 안에 입력되며, 문자 2개를 초과하는 부분은 무시되어 나타납니다.
[Noise Detector] 그래픽 모듈 (2) : 공통 4개의 구성요소들은 다음 길이로 공간을 분배하며, 경고 라인이 움직이고, 막대가 그려지는 공간은 (mUsedHeight×mUsedWidth)입니다. 이 공간은 WaveDataView의 getView() 메소드에 입력된 extraRateHeight_hor, extraRateWidth_hor, extraRateHeight_ver, extraRateWidth_ver 파라미터에 의해 결정됩니다. 여기서 문제점은 안으로이드 좌표계와 우리가 주로 사용하는 직교 좌표계는 x축 방향은 같지만, y축 방향이 반대라는 것입니다. 안드로이드 좌표계를 직교 좌표계로 변환하기 위해서는 mHeight - requried height가 되어야 합니다. 여기서 "mHeight -"를 상수화시키고, requried height에 변수..