2015.07.12 13:27


Cocose2d-x 를 Android (eclipse) 개발 환경에서 Class 추가 필요 없이 자동으로 Classes 폴더를 읽어서 넣는 방법입니다.


자신의 프로젝트 > proj.android > jni > Android.mk


아래 부분과 같이 변경한다.


FILE_LIST := $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp)

LOCAL_SRC_FILES := hellocpp/main.cpp $(FILE_LIST:$(LOCAL_PATH)/%=%) 

신고


Posted by injunech
2015.06.19 12:00


Visual Studio 단축키



편집 관련 단축키


편집 관련 단축키들은 익혀두면 다른 문서를 작성 할때도 많이 도움이 될 것이다.

문서 편집 관련 단축키들은 사용하면 사용할 수록 코딩 속도가 빨라진다.

 

 

Ctrl + F : 찾기

중요도 : ★★★☆☆

활용 : 특정 클래스, 함수, 변수 등을 검색한다.

 

 

Ctrl + Shift + F : 파일에서 찾기

중요도 : ★☆☆☆☆

활용 : 특정 클래스, 함수, 변수 등을 검색한다. 현제 프로젝트가 아닌 파일에서도 찾을 수 있다.

 

  

Ctrl + Space : NameSpace

중요도 : ★★★★★

활용 : 현재 접근 가능한 클래스명, 함수명, DEFINE문 등의 목록을 보여준다.

         코드를 치는 도중 Ctrl + Space를 누르면 이전에 선언된 것과 

         가까운 목록을 보여주며 선택을 함으로써 쉽게 완성이 가능하다.

         목록이 하나뿐이라면 그것으로 자동 완성 해준다.

 

 

Ctrl + Shift + Space : Parameter

중요도 : ★★★★★

활용 : 커서가 클래스명의 뒤에 있을 때 접근가능한 변수, 함수 목록을 보여준다.

         코드를 치는 도중 Ctrl + Shift + Space를 누르면 이전에 선언된 것과

         가까운 목록을 보여주며 선택을 함으로써 쉽게 완성이 가능하다.

         목록이 하나뿐이라면 그것으로 자동 완성 해준다.

  

 

Home : 커서가 위치한 줄의 코드 시작 위치로

중요도 : ★★★★★

활용 : 커서의 위치와 관계없이 해당 줄의 코드 시작위치로 커서를 옮긴다.

         블록을 잡기 위해서, 커서의 빠른 이동 등에 많이 사용된다.

 

 

End : 커서가 위치한 줄의 코드 끝 위치로

중요도 : ★★★★★

활용 : 커서의 위치와 관계없이 해당 줄의 코드 마지막위치로 커서를 옮긴다.

  

Shift + Home : 커서가 위치한 줄 모두 블록

Shift + End : 커서가 위치한 줄 모두 블록

중요도 : ★★★★★

활용 : 커서 위치가 가장 앞에 있다면 Shift + End를 이용해 그 줄을 블록하고 

         커서 위치가 가장 뒤에 있다면 Shift + Home를 이용해 그 줄을 블록한다.

 

  

Shift + ← or → or ↑ or ↓ : 블록 잡기

중요도 : ★★★★☆

활용 : 여러 줄을 블록할 때 많이 사용한다.

 

 

드래그 + Alt : 현재 커서 위치부터 움직인 커서 위치까지 블록

중요도 : ★★★★☆

활용 : 마우스 드래그 중 Alt를 누르면 드래그하는 영역을 사각형으로 봤을 때 그 영역을 블록하게 된다.

         특정 부분을 선택하고 싶거나, 탭을 먹이고 싶을 때 많이 사용된다.

 

 

Ctrl + ←, → : 구분단위로 커서 이동

중요도 : ★☆☆☆☆

활용 : 현재 줄에서 커서를 좌우로 이동할 때 변수, 공백, 탭, 등의 구분단위로 이동하게된다.

         보다 빠른 커서위치를 조정하고, 블록할 때 사용된다.

 

 

Ctrl + Shift + ← or → : 구분단위로 블록

중요도 : ★☆☆☆☆

활용 : 현재 줄에서 블록을 할 때 변수, 공백, 탭 등의 구분단위로 블록영역을 설정한다.

         보다 빠르게 블록 영역을 설정할 때 편리하다.

 

 

Ctrl + M, L : 전체 + 버튼으로 만들기

중요도 : ★★★☆☆

활용 : 현재 소스 전체를 {}영역 별로 +버튼으로 만들어준다.

         +버튼은 소스가 삭제되는 것은아니라 감춰두는 것으로 볼 수 있다.

         소스가 길어 함수 정의나 클래스 정의 부분을 빨리 찾고 싶을 때 많이 사용된다.

 

 

Ctrl + M, M : 커서 위치가 속한 곳을 + 버튼으로 만들기

중요도 : ★★☆☆☆

활용 : 커서의 위치를 {}단위로 판단하여 커서가 속한 곳을 +버튼으로 만든다.

  

Ctrl + M, L : 선택된 곳을 +버튼으로 만들기

중요도 : ★★☆☆☆

활용 : 블록을 선택된 영역을 +버튼으로 만든다.

 

Shift + Delete : 커서가 위치한 줄 삭제

중요도 : ★★★★☆

활용 : 커서가 위치한 줄을 삭제한다.

         빠르게 현재 줄을 삭제할 때 많이 활용된다. 

 

Ctrl + L : 커서가 위치한 줄 삭제, 선택된 줄단위로 삭제

중요도 : ★★★★☆

활용 : 위 단축키와 비슷하지만 영역을 선택했을 때 여러줄을 줄단위로 삭제 한다.

  

Ctrl + K, C : 선택 영역 주석 달기

중요도 : ★★★★☆

활용 : 선택 영역의 주석을 한 단계씩 추가한다.

  

Ctrl + K, U : 선택 영역 주석 없애기

중요도 : ★★★★☆

활용 : 선택 영역을 주석을 한 단계씩 감소시킨다.

 

Alt + F8 : 선택 영역 코드 탭 정리하기

중요도 : ★★★★☆

활용 : 선택한 영역의 코드들의 탭이 뒤죽박죽일 때 사용하면 편리하다.

 

 


 

디버깅 관련 단축키

 

F7 : 빌드

중요도 : ★★★☆☆

활용 : 이번 빌드 상태와 비교하여 수정된 소스에 대해 다시 빌드한다.

 

 Ctrl + Alt + F7 : 전체 다시 빌드

중요도 : ★★★☆☆

활용 : 현재 솔루션 전체를 다시 빌드한다. 링크가 꼬엿을 때 외엔 잘 사용하지 않는다.

 

 

F5 : 빌드 + 실행

중요도 : ★★★★★

활용 : F7을 누른후 실행한 결과와 같다.

 


Ctrl + F5 빌드 없이 실행

중요도 : ★☆☆☆☆

활용 : 최근에 빌드된 상태의 실행 파일을 실행시킨다.

         소스 수정없이 다시 실행 시키고 싶을 때 빌드 시간 없이 실행 하므로 빠르다

  

 

F9 : 브레이크 포인트 설정

중요도 : ★★★★★

활용 : 현재 커서가 위치한 줄에 중단점을 설정한다.

         중단점이 걸리면 디버그시 해당 코드를 실행하기전에 중지되어 사용자에게 코드 위치를 보여준다.

 


F10 : 줄단위 실행

중요도 : ★★★★★

활용 : 디버깅 모드에서 현재 디버깅하고있는 소스의 줄단위로 진행 시킨다.

 

 

F11 : 코드 단위 실행

중요도 : ★★★★★

활용 : 디버깅 모드에서 현재 진행중인 커서위치의 코드를 실행한다.

         커서위치의 코드내에 함수가 있다면 그 함수의 내부로 들어가게 된다.

  

 

F12 : 정의로 이동

중요도 : ★★★★★

활용 : 변수, 함수, 클래스 등의 선언부로 이동한다.

         눈에 보이는 변수, 함수 등의 정체를 확인하는데 많이 사용된다.

  

 

Ctrl + '-'키 : 이전 커서 위치로

중요도 : ★★★★★

활용 : 이전 커서위치로 이동하게 된다.

         보통 F12로 변수를 탐색한후, 다시 돌아오는데 많이 사용한다. 

 

Ctrl + Shift + '-'키 : 다음 커서 위치로

중요도 : ★☆☆☆☆

활용 : 위의 단축키와 반대 되는 개념이다.

 

Ctrl + F2 : 커서가 위치한 줄에 책갈피 설정

중요도 : ★★★☆☆

활용 : 현재 문서에서 커서가 위치한 줄에 책갈피를 설정한다.

         책갈피는 관심있는 코드를 메모해놓고 쉽게 접근하기 위해 사용한다.

 

 

F2 : 다음 설정된 책갈피로 커서 이동

중요도 : ★★★☆☆

활용 : 현재 문서에서 설정된 책갈피가 있을 때 순차적으로 책갈피를 탐색한다.

 

 

Ctrl + Shift + F2 : 설정된 책갈피 모두 삭제

중요도 : ★★★☆☆

활용 : 현재 문서에 설정되어 있는 책갈피를 모두 삭제한다.


 

Ctrl + F10 : 커서 위치까지 실행

중요도 : ★★☆☆☆

활용 : 현재 커서가 위치한 곳까지 실행하게 된다.

         편집상태라면 빌드 + 커서 위치까지 실행된다.

         한손으로 누르기 힘든 단축키라 우클릭 메뉴를 이용해도 좋다. 

 

 

 

기타

 

마우스 우클릭 - Find All Refrence : 모든참조 찾기

중요도 : ★★★★☆

활용 : 현재 커서가 위치한곳의 변수나 함수등이 사용된 곳을 프로잭트에서 모두 찾아 표시한다.

         LifeCycle 을 알아보는데도 좋다.


 

Alt + P + P : 프로젝트 속성

중요도 : ★☆☆☆☆

활용 : 프로젝트의 속성을 본다. 프로젝트 속성을 보는일은 많이 없으므로 큰 활용도는 없다.

 


마지막으로 지금까지 단축키 목록을 나열하겠다.

 

Ctrl + F : 찾기

Ctrl + Shift + F : 파일에서 찾기

Ctrl + Space : NameSpace

Ctrl + Shift + Space : Parameter

Home : 커서가 위치한 줄의 코드 시작 위치로

End : 커서가 위치한 줄의 코드 끝 위치로

Shift + Home : 커서가 위치한 줄 모두 블록

Shift + End : 커서가 위치한 줄 모두 블록

Shift + ← or → or ↑ or ↓ : 블록 잡기

드래그 + Alt : 현재 커서 위치부터 움직인 커서 위치까지 블록

Ctrl + ←, → : 구분단위로 커서 이동

Ctrl + Shift + ← or → : 구분단위로 블록

Ctrl + M, L : 전체 + 버튼으로 만들기

Ctrl + M, M : 커서 위치가 속한 곳을 + 버튼으로 만들기

Ctrl + M, L : 선택된 곳을 +버튼으로 만들기

Shift + Delete : 커서가 위치한 줄 삭제

Ctrl + L : 커서가 위치한 줄 삭제, 선택된 줄단위로 삭제

Ctrl + K, C : 선택 영역 주석 달기

Ctrl + K, U : 선택 영역 주석 없애기

 

F7 : 빌드

Ctrl + Alt + F7 : 전체 다시 빌드

F5 : 빌드 + 실행

Ctrl + F5 : 빌드 없이 실행

F9 : 브레이크 포인트 설정

F10 : 줄단위 실행

F11 : 코드 단위 실행

F12 : 정의로 이동

Ctrl + '-'키 : 이전 커서 위치로

Ctrl + Shift + '-'키 : 다음 커서 위치로

Ctrl + F2 : 커서가 위치한 줄에 책갈피 설정

F2 : 다음 설정된 책갈피로 커서 이동

Ctrl + Shift + F2 : 설정된 책갈피 모두 삭제

Ctrl + F10 : 커서 위치까지 실행

Alt + F8 : 선택 영역 코드 탭 정리하기

 

마우스 우클릭 - Find All Refrence : 모든참조 찾기

Alt + P + P : 프로젝트 속성



출처 : http://cafe.naver.com/hgclient/77


신고


Posted by injunech
2015.06.11 21:35


윈도우를 사용하시던 분들은 탭이동을 할때 간단하게 Ctrl+Tab 으로 이동을 하게 된다.

탭 다음 이동 : Ctrl+Tab

탭 이전 이동 : Ctrl+Shift+Tab

하지만 이클립스에서는 이런 키를 눌렀을 때 그냥 상단의 도구모음 아이콘의 포커스만 변경된다.


이클립스에서는 위 키에 대한 대응이 다음과 같다.

탭 다음 이동 : Ctrl+Page Up ( Ctrl + F6 )

탭 이전 이동 : Ctrl+Page Down ( Ctrl + Shift + F6 )

이대로 쓰지 않고 원래 윈도우에 맞도록 변경시킬려면


1. [메뉴] Window -> Preferences -> General -> Keys

2. "type filter text" 입력란에 "Next Editor" 입력 후 "Copy Command" 버튼 클릭

3. 복사한 command 를 선택 후 Binding 부분에 사용할 키를 입력(CTRL+TAB)

신고


Posted by injunech
2015.06.08 23:57


리소스 접근시 여러가지 방법이 있겠지만

Bitmap testImg = BitmapFactory.decodeResource(res, R.drawable.testRes0);

이런식으로 파일 ID로 리소스를 읽어와 사용하고 있었습니다.
그런데 리소스가 많을 경우 

testImg = new Bitmap[10];
for(int i = 0; i < 10; i++)
        testImg[i] = BitmapFactory.decodeResource(res, R.drawable.testRes0+i);

이런식으로 ID로 연산을 하여 읽어오다보면 ID가 꼬이는 경우 문제가 발생할 여지가 많더군요.
파일명이 순차적으로 되어 있다고 하더라도 이런식의 접근은 안좋은 방법인것으로 알고 있습니다.

이럴경우

int tmpID;
testImg = new Bitmap[10];
for(int i = 0; i < 10; i++)
{
       tmpID = res.getIdentifier( "testRes"+i, "drawable" , "com.androidpub.android.test");
       testImg[i] = BitmapFactory.decodeResource(res, tmpID);
}

이런식으로 리소스 파일명으로 ID를 알아와 접근하는 방식을 사용할 수 있습니다.

"패키지명 : 타입 / 리소스명", null, null
getIdentifier("com.androidpub.android.test:drawable/testRes", null, null);

또는

"리소스명", "타입", "패키지명"
getIdentifier("testRes", "drawable", "com.androidpub.android.test");

---------------------------------------------------------------------------


문자열로 해당 Resource (혹은 레이아웃에 포함된 View) 의 ID 값을 가져온다;

-----------------------------------------------------------------
getResources().getIdentifier(파일명디렉토리명패키지명);
또는,
getResources().getIdentifier(패키지명:디렉토리/파일명nullnull);
으로도 가능하다.
-----------------------------------------------------------------

String resName = "@drawable/imgEnd";
String packName = this.getPackageName(); // 패키지명
int resID = getResources().getIdentifier(resName, "drawable", packName);

String viewName = "imgViewEnd";
String packName = this.getPackageName(); // 패키지명
int resID = getResources().getIdentifier(resName, "id", packName);


주로 리소스/ 뷰의 이름을 조합형식으로 만들어 가져와야 할 경우에
이 같은 코드를 사용하여 처리할 수 있다.


예를 들어,

for (int i=0; i < 3; i++) {
    String resName = "@drawable/img_" + i;
    // 결론적으로 이미지 리소스 이름은 img_1, img_2, img_3 이 되겠다;
    int resID = getResources().getIdentifier(resName, "drawable", packName);

    ImageView iv = (ImageView)findViewById(R.id.imgView);
    iv.setImageResource(resID); // 이미지뷰의 이미지를 설정한다;
}

이렇게 사용이 가능하다.

신고


Posted by injunech
2015.06.04 17:38


Quick Sort(퀵정렬)

 

알고리즘

 

연속적인 분할에 의한 정렬처음 하나의 축을 정해서 이 축의 값보다 작은 값은 왼쪽에

큰 값은 오른쪽으로 위치시킨다왼쪽과 오른쪽의 수 들은 다시 각각의 축으로 나누어져

축값이 1이 될 때까지 정렬한다

 

특징

 

안정성 없음

 

O(NlogN) : 최선의 경우 log2N (축값이 정확히 가운데를 가질 경우)

O(N^2) : 최악의 경우

 

가장 많이 사용되는 정렬법으로 1960 C.A.R. Hoare에 의해 고안되었다.

 

Code(코드)

 

재귀함수를 사용한다.

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define SIZE 20
#define SWAP(x,y,t) ( (t)=(x), (x)=(y), (y)=(t) )
 
void QuickSort(int left, int right);
 
int array[SIZE];
 
int main(void){
int i;
srand((unsigned int)time(NULL));
 
for ( i = 0; i < SIZE; i++ )
array[i] = rand() % (SIZE*10) + 1;
 
printf("array for sorting : \n");
 
for ( i = 0; i < SIZE; i++ )
printf("%4d", array[i]);
 
 
printf("\nProcessing : \n");
 
QuickSort(-1, SIZE-1);
 
printf("Soredted array : \n");
 
for ( i = 0; i < SIZE; i++ )
printf("%4d", array[i]);
 
printf("\n");
 
return 0;
}
 
void QuickSort(int left, int right){
int m, p, t;
int i, j;
 
for ( i = 0; i < SIZE; i++ )
printf("%4d", array[i]);
 
printf("\n");
 
if ( left < right ){
p = array[right];
for(i=left-1, j=right; ; ){
while ( array[++i] < p );
while ( array[--j] > p );
 
if ( i > j )
break;
 
SWAP(array[i], array[j], t);
}
 
array[right] = array[i];
array[i] = p;
 
QuickSort(left, j);
QuickSort(i+1, right);
}
}


신고


Posted by injunech
2015.06.02 21:17




Visual Studio Community 2013


아래 경로에서 비주얼스튜디오 2013 무료로 다운하여 사용 가능합니다.


https://www.visualstudio.com/en-us/products/visual-studio-community-vs


신고


Posted by injunech
2015.05.31 21:44


언어 (국가)

폴더 이름

(언어)

폴더 이름

(언어 + 국가)

체코어 (체코)

values-cs

values-cs-rCZ

독일어 (독일)

values-de

values-de-rDE

독일어 (오스트리아)

values-de-rAT

독일어 (스위스)

values-de-rCH

독일어 (리히텐슈타인)

valued-de-rLI

영어 (미국)

values-en

values-en-rUS

영어 (영국)

values-en-rGB

영어 (캐나다)

values-en-rCA

영어 (호주)

values-en-rAU

영어 (뉴질랜드)

values-en-rNZ

영어 (싱가포르)

values-en-rSG

스페인어 (스페인)

values-es

values-es-rES

프랑스어 (프랑스)

values-fr

values-fr-rFR

프랑스어 (벨기에)

values-fr-rBE

프랑스어 (캐나다)

values-fr-rCA

프랑스어 (스위스)

values-fr-rCH

이태리어 (이탈리아)

values-it

values-fr-rIT

이태리어 (스위스)

values-fr-rCH

일본어 (일본)

values-ja

values-ja-rJP

한국어 (대한민국)

values-ko

values-ko-rKR

네덜란드어 (네덜란드)

values-nl

values-nl-rNL

네덜란드어 (벨기에)

values-nl-nBE

폴란드어 (폴란드)

values-pl

values-pl-rPL

러시아어 (러시아)

values-ru

values-ru-rRU

중국어 (중국)

values-zh

values-zh-rCN

중국어 (대만)

values-zh-rTW



신고


Posted by injunech
2015.05.18 00:21


Java Code Examples for javax.bluetooth.DiscoveryAgent

The following code examples are extracted from open source projects. You can click  to vote up the examples you like. Your votes will be used in an intelligent system to get more and better code examples.

Code Example 1:

  9 
vote

From project lego-mindstorms-praktikum, under directory /src/basis/.

Source BTRaceStartClient.java

public void searchForDevices(){
  LocalDevice localDevice;
  DiscoveryAgent discoveryAgent;
  try {
    localDevice=LocalDevice.getLocalDevice();
    discoveryAgent=localDevice.getDiscoveryAgent();
    discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this);
  }
 catch (  BluetoothStateException ex) {
  }
}
 

Code Example 2:

  7 
vote

From project j2mepolish, under directory /enough-polish-j2me/source/src/de/enough/polish/bluetooth/.

Source DiscoveryHelper.java

/** 
 * Finds all nearby devices in the specified search mode
 * @param searchMode the search mode, either DiscoveryAgent.GIAC or DiscoveryAgent.LIAC. If in doubt use GIAC.
 * @param deviceClassMajor the major version of device classes that should be returned, -1 if all devices should be retrieved
 * @param deviceClassMinor the minor version of device classes that should be returned, -1 if all devices should be retrieved
 * @return an array of all found devices, can be empty but not null
 * @throws BluetoothStateException when there was an error during search
 */
private BluetoothDevice[] findDevicesImpl(int searchMode,int deviceClassMajor,int deviceClassMinor) throws BluetoothStateException {
  this.searchedClassMajor=deviceClassMajor;
  this.searchedClassMinor=deviceClassMinor;
  LocalDevice device=LocalDevice.getLocalDevice();
  if (device == null) {
    return new BluetoothDevice[0];
  }
  DiscoveryAgent discAgent=device.getDiscoveryAgent();
  device.setDiscoverable(searchMode);
synchronized (INSTANCE) {
    discAgent.startInquiry(searchMode,INSTANCE);
    try {
      INSTANCE.wait();
    }
 catch (    InterruptedException e) {
    }
  }
  BluetoothDevice[] devices=new BluetoothDevice[INSTANCE.discoveredDevices.size()];
  Arrays.cast(INSTANCE.discoveredDevices.getInternalArray(),devices);
  INSTANCE.discoveredDevices.clear();
  return devices;
}
 

Code Example 3:

  7 
vote

From project j2mepolish, under directory /enough-polish-j2me/source/src/de/enough/polish/bluetooth/.

Source DiscoveryHelper.java

/** 
 * Searches all nearby devices for a service with the specified UUID
 * @param ids the unique bluetooth identifiers of the service
 * @param attributes the attributes that should be queried, use null for not searching for any attributes
 * @param devices the devices that should be searched for the service
 * @return the first found service or null if none is found
 * @throws BluetoothStateException when the service search fails unexpectetly
 */
private ServiceRecord findServicesImpl(UUID[] ids,int[] attributes,Object[] devices) throws BluetoothStateException {
  LocalDevice localDevice=LocalDevice.getLocalDevice();
  if (localDevice == null) {
    return null;
  }
  DiscoveryAgent discAgent=localDevice.getDiscoveryAgent();
  for (int i=0; i < devices.length; i++) {
    Object obj=devices[i];
    RemoteDevice remoteDevice=(obj instanceof RemoteDevice ? (RemoteDevice)obj : ((BluetoothDevice)obj).getDevice());
    this.transctionId=discAgent.searchServices(attributes,ids,remoteDevice,this);
synchronized (this) {
      try {
        wait();
      }
 catch (      InterruptedException e) {
      }
    }
    if (this.discoveredServices.size() > 0) {
      break;
    }
  }
  if (this.discoveredServices.size() > 0) {
    ServiceRecord serviceRecord=(ServiceRecord)this.discoveredServices.get(0);
    this.discoveredServices.clear();
    return serviceRecord;
  }
  return null;
}
 

Code Example 4:

  7 
vote

From project j2mepolish, under directory /enough-polish-sample-nutiteq/nutiteq_maps_lib_src_1_1_0/src/com/nutiteq/bluetooth/.

Source BluetoothAPIDevice.java

private void findDevices(){
  try {
    btDevicesFound.removeAllElements();
    isBTSearchComplete=false;
    final LocalDevice local=LocalDevice.getLocalDevice();
    final DiscoveryAgent discoveryAgent=local.getDiscoveryAgent();
    discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this);
    while (!isBTSearchComplete) {
synchronized (this) {
        this.wait(BLUETOOTH_TIMEOUT);
      }
      if (!isBTSearchComplete) {
        discoveryAgent.cancelInquiry(this);
      }
    }
  }
 catch (  final Exception e) {
    Log.error("BT: find " + e.getMessage());
    Log.printStackTrace(e);
  }
}
 

Code Example 5:

  7 
vote

From project maps-lib-nutiteq, under directory /src/com/nutiteq/bluetooth/.

Source BluetoothAPIDevice.java

private void findDevices(){
  try {
    btDevicesFound.removeAllElements();
    isBTSearchComplete=false;
    final LocalDevice local=LocalDevice.getLocalDevice();
    final DiscoveryAgent discoveryAgent=local.getDiscoveryAgent();
    discoveryAgent.startInquiry(DiscoveryAgent.GIAC,this);
    while (!isBTSearchComplete) {
synchronized (this) {
        this.wait(BLUETOOTH_TIMEOUT);
      }
      if (!isBTSearchComplete) {
        discoveryAgent.cancelInquiry(this);
      }
    }
  }
 catch (  final Exception e) {
    Log.error("BT: find " + e.getMessage());
    Log.printStackTrace(e);
  }
}
 

Code Example 6:

  5 
vote

From project colloqmote, under directory /Computer/ColloQmoteAccelerometerPC/src/.

Source Bluetooth.java

private DiscoveryAgent getAgent(){
  try {
    return LocalDevice.getLocalDevice().getDiscoveryAgent();
  }
 catch (  BluetoothStateException e) {
    log(e);
    log("ERROR detected and all operations stopped.");
    throw new Error("No discovery agent available.");
  }
}
 

Code Example 7:

  5 
vote

From project colloqmote, under directory /Computer/ColloQmoteKeypadPC/src/.

Source Bluetooth.java

private DiscoveryAgent getAgent(){
  try {
    return LocalDevice.getLocalDevice().getDiscoveryAgent();
  }
 catch (  BluetoothStateException e) {
    log(e);
    log("ERROR detected and all operations stopped.");
    throw new Error("No discovery agent available.");
  }
}
 

Code Example 8:

  5 
vote

From project colloqmote, under directory /Mobile/ColloqmoteAccelerometer/build/preprocessed/.

Source Bluetooth.java

protected void startApp() throws MIDletStateChangeException {
  display=Display.getDisplay(this);
  display.setCurrent(infoArea);
  infoArea.deleteAll();
  try {
    LocalDevice device=LocalDevice.getLocalDevice();
    device.setDiscoverable(DiscoveryAgent.GIAC);
    String url="btspp://localhost:" + UUID + ";name=DeviceServerCOMM";
    log("Create server by uri: " + url);
    StreamConnectionNotifier notifier=(StreamConnectionNotifier)Connector.open(url);
    serverLoop(notifier);
  }
 catch (  Throwable e) {
    log(e);
  }
}
 

Code Example 9:

  5 
vote

From project colloqmote, under directory /Mobile/ColloqmoteAccelerometer/src/.

Source Bluetooth.java

protected void startApp() throws MIDletStateChangeException {
  display=Display.getDisplay(this);
  display.setCurrent(infoArea);
  infoArea.deleteAll();
  try {
    LocalDevice device=LocalDevice.getLocalDevice();
    device.setDiscoverable(DiscoveryAgent.GIAC);
    String url="btspp://localhost:" + UUID + ";name=DeviceServerCOMM";
    log("Create server by uri: " + url);
    StreamConnectionNotifier notifier=(StreamConnectionNotifier)Connector.open(url);
    serverLoop(notifier);
  }
 catch (  Throwable e) {
    log(e);
  }
}
 

Code Example 10:

  5 
vote

From project colloqmote, under directory /Mobile/ColloQmoteKeypad/build/preprocessed/.

Source Bluetooth.java

void initSensor(){
  infoArea.deleteAll();
  display.setCurrent(infoArea);
  try {
    LocalDevice device=LocalDevice.getLocalDevice();
    device.setDiscoverable(DiscoveryAgent.GIAC);
    String url="btspp://localhost:" + UUID + ";name=DeviceServerCOMM";
    log("Create server by uri: " + url);
    StreamConnectionNotifier notifier=(StreamConnectionNotifier)Connector.open(url);
    serverLoop(notifier);
  }
 catch (  Throwable e) {
    log(e);
  }
}
 

Code Example 11:

  5 
vote

From project colloqmote, under directory /Mobile/ColloQmoteKeypad/src/.

Source Bluetooth.java

void initSensor(){
  infoArea.deleteAll();
  display.setCurrent(infoArea);
  try {
    LocalDevice device=LocalDevice.getLocalDevice();
    device.setDiscoverable(DiscoveryAgent.GIAC);
    String url="btspp://localhost:" + UUID + ";name=DeviceServerCOMM";
    log("Create server by uri: " + url);
    StreamConnectionNotifier notifier=(StreamConnectionNotifier)Connector.open(url);
    serverLoop(notifier);
  }
 catch (  Throwable e) {
    log(e);
  }
}
 

Code Example 12:

  5 
vote

From project Eclipse, under directory/com.mobilesorcery.sdk.ui.targetphone/src/com/mobilesorcery/sdk/ui/targetphone/internal/bt/.

Source BluetoothDialog.java

public void discoverDevices(){
  clearDevices();
  updateUI();
  LocalDevice dongle=null;
  try {
    dongle=LocalDevice.getLocalDevice();
    agent=dongle.getDiscoveryAgent();
    agent.startInquiry(DiscoveryAgent.GIAC,this);
  }
 catch (  BluetoothStateException e) {
    setRefreshInProgress(false);
    Policy.getStatusHandler().show(new Status(IStatus.ERROR,TargetPhonePlugin.PLUGIN_ID,e.getMessage()),"Could not scan for devices");
  }
}
 

Code Example 13:

  5 
vote

From project emergency-service-drools-app, under directory /emergency-service-sensor/src/main/java/com/wordpress/salaboy/sensor/wii/.

Source MyMoteFinder.java

public void startDiscovery(){
  try {
    discoveryAgent.startInquiry(DiscoveryAgent.LIAC,listener);
  }
 catch (  BluetoothStateException ex) {
    throw new RuntimeException(ex);
  }
}
 

Code Example 14:

  5 
vote

From project Gome, under directory /sources/com/indigonauts/gome/multiplayer/bt/.

Source Discoverer.java

public Vector findOtherGome(){
  RemoteDevice[] devList=null;
  try {
    agent.startInquiry(DiscoveryAgent.GIAC,this);
synchronized (this) {
      try {
        this.wait();
      }
 catch (      Exception e) {
      }
    }
  }
 catch (  BluetoothStateException e) {
    System.out.println("Unable to find devices to search");
  }
  if (deviceList.size() > 0) {
    devList=new RemoteDevice[deviceList.size()];
    deviceList.copyInto(devList);
    System.out.println("calling ss");
    searchServices(devList);
    return serviceList;
  }
  log.info("No Devices found.");
  log.info("No Services found.");
  return serviceList;
}
 

Code Example 15:

  5 
vote

From project j2mepolish, under directory /enough-polish-build/source/src/de/enough/polish/rmi/bluetooth/.

Source L2CapServer.java

/** 
 * Generates the URL that fits for the given UUID
 * @param uuid the UUID
 * @return the local connection URL for establishing an L2CAP based service
 * @throws BluetoothStateException when the URL could not be generated
 */
public static String generateLocalUrl(String uuid) throws BluetoothStateException {
  LocalDevice device=LocalDevice.getLocalDevice();
  device.setDiscoverable(DiscoveryAgent.GIAC);
  String url="btl2cap://localhost:" + uuid;
  String max=LocalDevice.getProperty("bluetooth.l2cap.receiveMTU.max");
  if (max != null) {
    if (max.equals("0")) {
      max="762";
    }
    url+=";ReceiveMTU=" + max + ";TransmitMTU="+ max;
  }
  return url;
}
 

Code Example 16:

  5 
vote

From project Remote-Bluetooth-Android, under directory/RemoteBluetoothServer/src/com/luugiathuy/apps/remotebluetooth/.

Source WaitThread.java

/** 
 * Waiting for connection from devices 
 */
private void waitForConnection(){
  LocalDevice local=null;
  StreamConnectionNotifier notifier;
  StreamConnection connection=null;
  try {
    local=LocalDevice.getLocalDevice();
    local.setDiscoverable(DiscoveryAgent.GIAC);
    UUID uuid=new UUID("04c6093b00001000800000805f9b34fb",false);
    System.out.println(uuid.toString());
    String url="btspp://localhost:" + uuid.toString() + ";name=RemoteBluetooth";
    notifier=(StreamConnectionNotifier)Connector.open(url);
  }
 catch (  BluetoothStateException e) {
    System.out.println("Bluetooth is not turned on.");
    e.printStackTrace();
    return;
  }
catch (  IOException e) {
    e.printStackTrace();
    return;
  }
  while (true) {
    try {
      System.out.println("waiting for connection...");
      connection=notifier.acceptAndOpen();
      Thread processThread=new Thread(new ProcessConnectionThread(connection));
      processThread.start();
    }
 catch (    Exception e) {
      e.printStackTrace();
      return;
    }
  }
}
 

Code Example 17:

  5 
vote

From project Sphero-Desktop-API, under directory /bluecove/com/intel/bluetooth/.

Source BluetoothStackBlueSoleil.java

/** 
 * There are no functions to find BlueSoleil discoverable status.
 */
public int getLocalDeviceDiscoverable(){
  if (isBluetoothReady(2)) {
    return DiscoveryAgent.GIAC;
  }
 else {
    return DiscoveryAgent.NOT_DISCOVERABLE;
  }
}
 

Code Example 18:

  5 
vote

From project Sphero-Desktop-API, under directory /bluecove/com/intel/bluetooth/.

Source BluetoothStackMicrosoft.java

public boolean setLocalDeviceDiscoverable(int mode) throws BluetoothStateException {
switch (mode) {
case DiscoveryAgent.NOT_DISCOVERABLE:
    cancelLimitedDiscoverableTimer();
  DebugLog.debug("setDiscoverable(false)");
setDiscoverable(false);
return (DiscoveryAgent.NOT_DISCOVERABLE == getLocalDeviceDiscoverable());
case DiscoveryAgent.GIAC:
cancelLimitedDiscoverableTimer();
DebugLog.debug("setDiscoverable(true)");
setDiscoverable(true);
return (DiscoveryAgent.GIAC == getLocalDeviceDiscoverable());
case DiscoveryAgent.LIAC:
cancelLimitedDiscoverableTimer();
DebugLog.debug("setDiscoverable(LIAC)");
setDiscoverable(true);
if (!(DiscoveryAgent.GIAC == getLocalDeviceDiscoverable())) {
return false;
}
limitedDiscoverableTimer=Utils.schedule(60 * 1000,new Runnable(){
public void run(){
try {
setDiscoverable(false);
}
 catch (BluetoothStateException e) {
DebugLog.debug("error setDiscoverable",e);
}
 finally {
limitedDiscoverableTimer=null;
}
}
}
);
return true;
}
return false;
}
 

Code Example 19:

  5 
vote

From project Sphero-Desktop-API, under directory /bluecove/com/intel/bluetooth/.

Source BluetoothStackMicrosoft.java

public int getLocalDeviceDiscoverable(){
  int mode=getBluetoothRadioMode();
  if (mode == BTH_MODE_DISCOVERABLE) {
    if (limitedDiscoverableTimer != null) {
      DebugLog.debug("Discoverable = LIAC");
      return DiscoveryAgent.LIAC;
    }
 else {
      DebugLog.debug("Discoverable = GIAC");
      return DiscoveryAgent.GIAC;
    }
  }
 else {
    DebugLog.debug("Discoverable = NOT_DISCOVERABLE");
    return DiscoveryAgent.NOT_DISCOVERABLE;
  }
}
 

Code Example 20:

  5 
vote

From project Sphero-Desktop-API, under directory /bluecove/com/intel/bluetooth/.

Source BluetoothStackOSX.java

public int getLocalDeviceDiscoverable(){
  if (getLocalDeviceDiscoverableImpl()) {
    return DiscoveryAgent.GIAC;
  }
 else {
    return DiscoveryAgent.NOT_DISCOVERABLE;
  }
}
 


신고

'Programming > JAVA' 카테고리의 다른 글

[JAVA] ArrayList - Java API  (0) 2017.02.27
Java 문자열 숫자 자료형 변환  (0) 2016.11.14
[Java] Bluetooth Examples for javax.bluetooth.DiscoveryAgent  (0) 2015.05.18
JNA (Java Native Access)  (0) 2015.03.14
[JAVA] 자바 실행파일 만들기  (0) 2015.03.01
JGoodies JAVA Swing API  (0) 2015.02.07


Posted by injunech
2015.05.13 20:01


Table of Content
  1. Intro
  2. 쉬운 API
  3. 어려운  API
  4. 어려운 API 와 쉬운 API?
  5. CPU 소모성 API
  6. CPU 소모가 없는 API
  7. msleep()
  8. msleep_interruptible()
  9. ssleep()
  10. schedule_timeout_interrupt()
  11. schedule_timeout_uninterrupt() 
  12. schedule_timeout() 
  13. ndelay(), udelay(), mdelay()  


1. Intro
 커널에서 시간 지연 함수는 여러가지가 있습니다. 
 굳이 분류를 하자면 쉬운 API, 어려운 API, CPU 소모성 API, CPU 소모가 없는 API 정도로 나눌 수 있습니다. 

2. 쉬운 API
 쉬운 API는 크게 보면 아래와 같습니다. 
  #include <linux/delay.h>
  #include <linux/timer.h>

  msleep()
  ssleep()

 이 API들은 함수명대로 micro  second, milli second, 1 second 을 뜻합니다. 
 그냥 사용하시면 됩니다. 

3. 어려운 API
 어려운 API 는 크게 보면 아래와 같습니다. 

 
  #include <linux/delay.h>
   #include <linux/timer.h>
   
   msleep_interruptible()
   schedule_timeout_interruptible();
   schedule_timerout_uninterruptible();
   schedule_timeout();

 이것도 그냥 사용하면 됩니다.

4. 어려운 API 와 쉬운 API ?
  어려운 API 와 쉬운 API 의 차이점은 무엇일까요? 

  가장 기본이 되는 지연 함수는 schedule_timeout() 입니다. 
  관계를 살펴보면

      ssleep()
    -----------------------------------------
      msleep()

    -----------------------------------------
      schedule_timeout_interruptible(), schedule_timeout_uninterruptible
 
    -----------------------------------------
      schedule_timeout()

 입니다. 위에 그림만으로는 잘 설명이 안될 수도 있는데, 커널 소스를 살펴보면 관계를 확실히 확인 할 수 있습니다. 

  ssleep() 는 msleep() 를 호출합니다. 
  msleep() 는 schedule_timeout_uninterrupt() 를 호출합니다. 
  schedule_timeout_uninterrupt() 는 schedule_timeout() 을 호출합니다. 

 결국 최종으로 호출되는 것은 schedule_timeout() 인데 시간 지연이라는게 인터럽트를 허용할 수도, 아닐수도 있고 또한 사용상의 편의상 ssleep() 나 msleep() 같은 front-end 를 만들어 쓴다고 생각하면 됩니다. 

8. CPU 소모성 API
 지정한 지연시간까지 loop 를 돌면서 cpu 시간을 소모하는 형태의 API 입니다. 
 
 ndelay();
 udelay();
 mdelay();

 위와 같이 delay 라는 이름이 붙은 API 들이 CPU 소모성 API 이며 아래와 같이 구현할 경우에도 CPU 소모성 API 입니다. 
 
 while(time_before(jiffies, j1))
 {
   cpu_relax();
 }

9. CPU 소모가 없는 API
 CPU 점유가 없이 시간 지연을 구현하려면 현재 자기자신한테 할당된 프로세스 시간을 반납하고 대기하는 방식을 사용하면 됩니다. 

 schedule_timeout_interruptible()
 schedule_timeout_uninterruptible()

 등이 그런 계통입니다. 

7. msleep()
  header : 
asm/delay.h
  void msleep(unsigned int msecs);
  unsigned long msleep_interruptible(unsigned int msecs);

 => 밀리세컨드 동안 지연해 줍니다. 지연시간동안에는 인터럽트를 받을 수 없습니다. 

example

 #include <asm/delay.h>

static void example_msleep(void)
{
  msleep(1000);


 
8. msleep_interruptible()
  header : 
asm/delay.h
  unsigned long msleep_interruptible(unsigned int msecs);

 => 밀리세컨드 동안 지연해 줍니다. 지연시간동안에는 인터럽트를 받을 수 있습니다. 

example)

 #include <asm/delay.h>

static void example_msleep(void)
{
  msleep_interruptible(1000);


 
9. ssleep()
  
  header : asm/delay.h
    void ssleep(unsigned int seconds);

 => 초단위로 지연해 줍니다. 지연시간동안에는 인터럽트를 받을 수 없습니다. 

example)

 #include <linux/sched.h>

static void example_ssleep(void)
{
  ssleep(2);



10. schedule_timeout_interruptible()

  
  header : linux/sched.h
    void schedule_timeout_interruptible(unsigned long timeout);

 => timeout 시간만큼 지연해 줍니다.  

example)

 #include <linux/sched.h>

static void example_ssleep(void)
{
  schedule_timeout_interruptible(1 * HZ); /* 1 초간 지연 */


11. schedule_timeout_uninterruptible()

  
  header : linux/sched.h
    void schedule_timeout_uninterruptible(unsigned long timeout);

 => timeout 시간만큼 지연해 줍니다. 지연시간도중에는 인터럽트를 받을 수 없습니다. 
  
  
example)

 #include <linux/sched.h>

static void example_ssleep(void)
{
  schedule_timeout_uninterruptible(1 * HZ); /* 1 초간 지연 */


 
12. schedule_timeout()

  
  header : linux/sched.h
    void schedule_timeout(unsigned long timeout);

 => timeout 시간만큼 지연해 줍니다. 가장 기본이 되는 함수입니다. 그렇기 때문에 직접 호출하여 사용하지는 않습니다. 

example)

 #include <linux/sched.h>

static void __sched schedule_timeout_interruptible(void long timeout)
{
  __set_current_state(TASK_INTERRUPTIBLE);
 
 return schedule_timeout(timeout); 



13. ndelay, udelay, mdelay
   header : linux/delay.h
   #define ndelay(n);
   #define udelay(n); 
   #define mdelay(n);

  busy wait 방식이어서 cpu 로드가 많은 편입니다. 하지만 간단하게 쓸 수 있는 장점이 있습니다. 

example)


#include <linux/delay.h>

void delay_test(void long timeout)
{
  ndelay(1000);
  udelay(1000);
  mdelay(1000); 
 


신고


Posted by injunech
2015.04.12 16:19


[Android] onTouchEvent 에서의 MotionEvent 터치 구분



@Override

public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

int touch_id = ((action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> 8 );

int actionEvent = action & MotionEvent.ACTION_MASK; // MotionEvent.ACTION_MASK = 0xff

pointerCount = event.getPointerCount();


switch (actionEvent) {

case MotionEvent.ACTION_DOWN: {

...

}


위와 같이 action 값을 받게 되면 해당 action 값에는 Touch 동작 관련 HEX 값이 들어가게 된다

Integer.toHexString(action) 를 통해 int 값을 HEX 로 출력하면 16진수로 다음과같은 값으로 터치를 구분할 수 있다

0x___

세번째 두번째 첫번째


첫번째 값은 터치의 Up, Down, Move 를 판별 가능하며, 첫번째 터치인경우와 두번째 터치 이후의 터치의 경우 Up 과 Down 구분 값이 다음과 같이 달라진다.

     Primary Finger DOWN = 0        Primary Finger UP     = 1

non-Primary Finger DOWN 5   non-Primary Finger UP     = 6

All Finger MOVE             = 2


두번째 값은 0 이 입력되고 0 이외의 값은 본적이 없다. (나중에 추가로 조사를 해봐야 할듯)


세번째 값은 touch ID 값으로 첫번째 터치인경우 0의 값 두번째 터치인 경우 1의값 세번째 터치인 경우 2의 값이 들어가며 멀티 터치를 지원하는 최대 값까지 입력된다. 한개의 터치가 Release 되는 경우에는 아직 터치상태인 나머지 터치의 action 의 세번째 Hex 값은 첫번째 터치 값인 0부터 다시 차례대로 터치한 상태로 매겨지게 된다. 자세한 사항은 아래 참고의 예를 확인

- 참고 : 첫번째 터치시에 값은 0 두번째 터치시에 값은 1, 세번째 터치시에 값은 2 이다.

이상태에서 터치를 Release 하는 경우에는 해당 터치 ID 의 값이 입력된다.

예를 들면 3번째까지 터치한 상태에서 두번째 터치한 손가락을 Release 하는 경우에는 action의 세번째 Hex 값은 1이된다.

또한 이상태에서 현재 터치한 Count 값은 총 2개이다. 그리고 나머지 첫번째 터치한 action의 세번째 Hex 값은 그대로 0이고 세번째 터치한 action 의 세번째 Hex 값은 기존의 2에서 1로 변경되게 된다.





나같은 경우에는 위 코드와 같이 action 값을 세번째 Hex 값, 첫번째 두번째 Hex 값으로 아래와 같이 저장하여 이용한다.

int action = event.getAction();

int touch_id = ((action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> 8 );

int actionEvent = action & MotionEvent.ACTION_MASK; // MotionEvent.ACTION_MASK = 0xff






신고


Posted by injunech

티스토리 툴바