티스토리 툴바


프로그래밍에 친숙한 네트워크 전문가는 프로토콜 문서를 보는 것보다 그 프로토콜이 구현된 API를 들여다 보는 것을 통해 보다 빠르고 정확하게 프로토콜에 대해 이해하기도 한다. - Softgear Ko


본 문서는 http://developer.android.com/sdk/android-4.0.html 의 WiFi Direct 를 번역하였습니다.


Wi-Fi Direct

안 드로이드는 이제 사용자간 연결(P2P)을 위한 Wi-Fi Direct 를 지원한다. 이 P2P 연결은, 핫스팟이나 인터넷 연결 없이, 안드로이드 장치 또는 다른 디바이스 간의 직접 연결 및 통신을 말한다. 안드로이드 프레임워크는 Wi-Fi P2P API를 제공하여, 당신이 Wi-Fi Direct를 지원하는 다른 디바이스를 찾고 연결할 수 있도록 하고, Bluetooth 연결보다 더 긴 거리에서 더 빠른 통신을 가능하게 한다.


새로운 패키지 android.net.wifi.p2p 

(http://developer.android.com/reference/android/net/wifi/p2p/package-summary.html

는 Wi-Fi를 통한 P2P 연결을 수행하는데 필요한 모든 API를 포함한다. 당신이 사용하게 될 주 클래스는 WifiP2pManager 이다. 이는 당신이 getSystemService(WIFI_P2P_SERVICE) 를 호출하여 사용할 수 있다. WifiP2pManager 는 다음 기능을 가진 API들을 포함한다.


* initialize() 를 호출하여 P2P 연결을 위한 당신의 어플리케이션을 초기화

* discoverPeers() 를 호출하여 이웃 디바이스를 찾아내기(discover)

* connect()를 호출하여 P2P 연결을 시작

* 기타 기능


몇몇 다른 필수적인 인터페이스 및 클래스는 다음과 같다.

* WifiP2pManager.ActionListener 인터페이스는 당신이 상대방을 찾거나(discover) 연결하는 동작이 성공하거나 실패한 경우 호출되는 콜백(callback)을 받을 수 있게 한다.

* WifiP2pManager.PeerListListener 인터페이스는 당신이 발견된 상대방에 관한 정보를 받을 수 있게 한다. 이 콜백은 WifiP2pDeviceList 를 제공하는데, 여기서 통신 범위내에 있는 각 디바이스 별 WifiP2pDevice 객체를 뽑아내어, 디바이스 이름, 주소, 디바이스 타입, WPS 설정 등과 같은 정보를 얻을 수 있다.

* WifiP2pManager.GroupInfoListener 인터페이스는 당신이 P2P 그룹에 관한 정보를 받을 수 있게 한다. 이 콜백은 WifiP2pGroup 객체를 제공하는데, 이는 소유자(owner), 네트워크 이름, 암호구문(passphrase) 등과 같은 그룹 정보를 제공한다.

* WifiP2pManager.ConnectionInfoListener 인터페이스는 당신이 현재 연결에 관한 정보를 받도록 한다. 이 콜백은 WifiP2pInfo 객체를 제공하는데, 이는 그룹이 구성되었는지 여부, 누가 그룹 소유자인지를 포함한다.


Wi-Fi P2P API들을 사용하기 위해서는, 당신의 어플은 다음 사용자 권한들을 요청해야 한다.

* ACCESS_WIFI_STATE

* CHANGE_WIFI_STATE

* INTERNET (비록 당신의 어플이 기술적으로 인터넷에 연결하지 않을지라도, Wi-Fi Direct 통신을 위한 표준 java socket들은 Internet permission을 요구한다)


안드로이드 시스템은 다음과 같은 Wi-Fi P2P 이벤트에 대해 몇가지 action을 broadcast한다.

* WIFI_P2P_CONNECTION_CHANGED_ACTION: P2P연결 상태가 변경 되었음을 나타낸다.. 이는 WifiP2pInfo 객체를 가진 EXTRA_WIFI_P2P_INFO 와 NetworkInfo 객체를 가진 EXTRA_NETWORK_INFO 를 전달한다.

* WIFI_P2P_STATE_CHANGED_ACTION: P2P 상태가 enabled와 disabled 사이에서 변경 되었음을 나타낸다. 이는 WIFI_P2P_STATE_DISABLED 또는 WIFI_P2P_STATE_ENABLED 를 가진 EXTRA_WIFI_STATE 를 전달한다.

* WIFI_P2P_PEERS_CHANGED_ACTION: 상대방 디바이스 리스트가 변경되었음을 나타낸다.

* WIFI_P2P_THIS_DEVICE_CHANGED_ACTION: 이 디바이스에 대한 세부사항(details)가 변경되었음을 나타낸다.


더 자세한 정보를 위해서는 WifiP2pManager 문서 

http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html ) 

를 참고하라. 그리고 또한, Wi-Fi Direct 데모 샘플 어플리케이션 

http://developer.android.com/resources/samples/WiFiDirectDemo/index.html ) 

을 보라.


- 문서끝.


출 처: 쏘프트 스토리에서 퍼옴.
         http://blog.naver.com/PostView.nhn?blogId=softgear&logNo=100150666274

저작자 표시
Posted by 정창수

Target Board  이솝 커뮤니티의 S5PC100 보드를 사용하므로이솝 프로젝트 사이트 내용을 참고합니다.

http://www.aesop.or.kr/?mid=issuetracker&vid=AESOPC100

 

1.       Install GCC Tool chain

-          Download : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100

GCC : arm-s5pc1xx-linux-gnueabi-4.3.2.tar.gz

GCC 4.3.2  사용하며, GCC 관련 자료는 http://gcc.gnu.org 확인 하시기 바랍니다.

 

-          압축해제

이솝 보드용 Tool chain 호스트 시스템의 /opt 디렉터리에 설치를 합니다.

/opt 폴더를 복사하고다음의 명령으로 압축을 해제하시면 됩니다.

 

sudo tar xzf arm-s5pc1xx-linux-gnueabi-4.3.2.tar.gz

 

 

1.png

 

-          환경설정

Tool chain  Path  설정해주는 것이며다음과 같이 합니다.

 

sudo gedit /etc/profile

 

아래와 같이 창이 열리면선택된 부분과 같이 아래 Path  추가해 줍니다.

PATH=$PATH:$HOME/bin:/opt/s5pc1xx/cross/armv7a/bin

 

2.png

 

source /etc/profile

 

PATH 설정 확인

echo $PATH

 

3.png

 

arm-s5pc1xx-linux-gnueabi-gcc –v

 

4.png

 

2.       Install & Build U-Boot

-          Download : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100

U-Boot 1.3.4 : u-boot-1.3.4-aesop.100428.tar.gz

 

-          압축해제

본인이 사용할 적절한 위치에 압축을 풀어 주시면 됩니다.

tar 명령어로 하셔도 되고그냥 파일 브라우저에서 압축해제 툴로 바로 실행하셔도 풀어도 됩니다.

 

5.png

 

-          U-Boot Build

다음과 같이 명령어를 수행합니다.

make clobber               <- 기존에 만들어 것들을 제거

make ntc100_config    <- 이솝보드용 config 설정

make                       

 

6.png

 

빌드 완료가 되면 아래 화면에서 처럼 u-boot.bin  사용하면 됩니다.

 

7.png

 

3.       Install & Build Android Linux Kernel

-          Download : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100

Linux Kernel 2.6.29 : android-2.6.29-aesop-RTM10.tar.gz

해당 Kernel Android  X-Windows 모두 지원을 합니다.

 

-          Kernel Build

tar xzf android-2.6.29-aesop-RTM10.tar.gz

cd android-2.6.29-aesop-RTM10

make ntc100_xwindows_defconfig   <- X-Winodws  커널 빌드 

make ntc100_android_defconfig      <- Android  커널 빌드 

make zImage

 

아래와 같이 빌드가 완료되었으며, arch/arm/boot/zImage  생성이 되었습니다.

8.png

                 

4.       Build Android

-          Download  “Android 개발환경 구축” 게시물을 참조하시기 바라며,

추가로 이솝 보드용 소스는 아래와 같습니다.

Android Eclair : http://www.aesop.or.kr/?mid=issuetracker&act=dispIssuetrackerDownload&vid=AESOPC100

 

-          Build

Android source  있는 위치에서 아래와 같이 aesopc100_build.sh  실행하면 됩니다.

 

eastsky@ubuntu:~/dawid/android/android_eclair_aesopc100$ ./aesopc100_build.sh

 

9.png

 

빌드가 완료되면 아래와 같이 system.img 파일이 생성이 됩니다.

 

10.png

 

.. /android_eclair_aesopc100/out/target/product/smdkc100 아래 img 파일이 생성이 됩니다.

 

11.png

 

5.       Make NFS – Android  Root Fils System

-          NFS  디렉토리 생성  FS 파일을 복사 (본인에 맞게 적절한 곳을 지정하여 만들면 됩니다).

일단 /out/target/product/smdkc100  Output 파일들이 있는 곳으로 이동을 합니다.

 

cd /home/eastsky/dawid/android/android_eclair_aesopc100/out/target/product/smdkc100

 

12.png

 

 root 에서 편하게 사용하기 위해 root 계정으로 전환하고 아래와 같은 경로로 생성합니다.

 

mkdir /root/work/rootfs/test

 

그리고 아래와 같이 파일들을 복사합니다.

cp -a root/*  /root/work/rootfs/test

cp -a data   /root/work/rootfs/test/data/

cp -a system  /root/work/rootfs/test/system/

 

NFS 용으로 사용할 디렉토리 /root/work/rootfs/test  이동 합니다.

그리고 권한을 아래와 같이 변경하여 줍니다.

 

chown -R root.root *

chmod -R 777 data system

 

13.png

 

6.       Android New Vender & Product  (출처 이솝의 고도리님 http://www.aesop.or.kr/?document_srl=265476#7)

이솝 보드용 Android 소스를 그대로 사용하면 굳히 따로 아래와 같이 Vendor  따로  만들고 하셔도 됩니다.

 

l  일단 android 다운로드 받은 디렉토리로 움직인 후에 aesop이란 vendor 하나 만듭니다.

기존에 있는 sample 이용해서 하나 만들도록 하겠습니다.

 

cd vendor

cp -a sample aesop

cd aesop

 

Android.mk

products  빼고 전부 삭제

 

================================================

rm -rf apps/ frameworks/ sdk_addon/ skins/

================================================

 

l   products 새롭게 정의

 

1>

                  cd products

                  vi AndroidProducts.mk

 

                  ===========================================

                  PRODUCT_MAKEFILES := \

                    $(LOCAL_DIR)/sample_addon.mk

                   

                  ==> 이렇게  것을 새로운 보드 이름으로 대체

 

                  PRODUCT_MAKEFILES := \

                    $(LOCAL_DIR)/ntc100.mk

                  ===========================================

 

                  그리고 기존의 복잡한 sample관련 mk 파일을 지웁니다.

                  rm sample_addon.mk

 

2>

ntc100.mk 다음과 같이 edit

                  vi ntc100.mk

 

                  =============================================

                  $(call inherit-product, build/target/product/generic.mk)

 

                  PRODUCT_MANUFACTURER := aesop

                  PRODUCT_NAME := ntc100

                  PRODUCT_DEVICE := ntc100

                  PRODUCT_BOARD := ntc100

                  =============================================

 

l   새롭게 추가된 board 대한 directory 구성

기존의 generic board 것을 이용한다. generic board 디렉토리를 ntc100 디렉토리로 복사

                  cd ..

                  cp -a ../../build/target/board/generic/ ./ntc100     <- Vender  새로 만든 것입니다.

                 

 부분은 적용하지 않아도 된다. board 따라 틀림(kernel 따라)

                   부분은 product kernel 내에서의 keypad driver 따라 keylayout 지정하는 부분인데,

 부분은 건너뛰어도 됩니다.

 

                  그냥 이게 없으면 qwerty.kl  로딩되거든요.

                 ================================================================

                  vi AndroidBoard.mk

                  tuttle2 nt-keypad 수정(여기서 nt-keypad key device driver 이름이다)

 

                  mv tuttle2.kcm nt-keypad.kcm

                  mv tuttle2.kl nt-keypad.kl

                 =================================================================

 

                  vi BoardConfig.mk 해서 USE_CAMERA_STUB:=true  추가한다.

                  이유는

                 =================================================================

                  //주의사항

                  frameworks/base/camera/libcameraservice/Android.mk 보면

 

                  #

                  # Set USE_CAMERA_STUB for non-emulator and non-simulator builds, if you want

                  # the camera service to use the fake camera.  For emulator or simulator builds,

                  # we always use the fake camera.

 

                  ifeq ($(USE_CAMERA_STUB),)

                   USE_CAMERA_STUB:=false

                   ifneq ($(filter sooner generic sim,$(TARGET_DEVICE)),)

                    USE_CAMERA_STUB:=true

                   endif #libcamerastub

                  endif

 

                   경우

                  USE_CAMERA_STUB:=true  BoardConfig.mk  넣어줘야 한다.

                 =================================================================

 

l   build script 만들기

android top으로 가서 vi ntc100.sh 해서

=======================================================================

#!/bin/sh

 

CPU_JOB_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')

 

START_TIME=`date +%s`

echo make -j$CPU_JOB_NUM PRODUCT-ntc100-eng

echo

make -j$CPU_JOB_NUM PRODUCT-ntc100-eng

if [ $? != 0 ] ; then

                                    exit $?

fi

 

END_TIME=`date +%s`

 

echo "Total compile time is $((($END_TIME-$START_TIME)/60)) minutes $((($END_TIME-$START_TIME)%60)) seconds"

========================================================================

 

저장하고 나온 후에

(

                   명령은 samsung C100 code 보면 build script 있는데 그것을 베낀 것입니다.

                  실제로는 host cpu갯수를 읽은 후에

 

                  make PRODUCT-ntc100-eng

 

                  -j 옵션을 이용해서 실행하는 것입니다.

)

                 생성된 script 실행 permission 줍니다.

 

chmod 755 ntc100.sh

저작자 표시

'안드로이드 > 기타' 카테고리의 다른 글

Android 빌드하기  (0) 2012/03/03
Device Administration  (0) 2012/01/28
MIME-Type 의 종류  (0) 2012/01/26
paint에서의 breaktext 함수의 기능.  (0) 2011/12/16
Animation 에서의 interpolator  (0) 2011/10/13
Activity 이동시 Animation 효과 주기  (0) 2011/10/13
Posted by 정창수
인터넷을 찾아보면서 어떻게 해야되는지 이해하지 못했다.
하지만 여러번의 삽질 끝에 찾았다.
방법은 다음과 같다.

frameworks/base/core/res/res/vlaues/attrs.xml에 원하는 속성을 추가.
여기선 Theme에 추가를 기준으로 했다.

<declare-styleable name="Theme">
...
<!-- Present the text in ALL CAPS. This may use a small-caps form when available. -->
<attr name="textAllCaps" />

<!-- csjung test. -->
<attr name="csjung" format="string" />
</declare-styleable>
위의 조건은 Public 형식.
만약 Private 처리하고싶다면 생성한 attr위에 hide를 선언.
<!-- @hide csjung test. -->
<attr name="csjung" format="string" />
</declare-styleable>

그리고 다음의 파일을 Open.
frameworks/base/core/res/res/vlaues/Public.xml
테마가 선언된 인덱스에서 가장 마지막 연동 인덱스에 추가.
 <public type="attr" name="publicKey" id="0x010103a6" />
 <public type="attr" name="csjung" id="0x010103a7" />

 <public type="style" name="TextAppearance.SuggestionHighlight" id="0x01030118" />
위에서 확인시 publicKey가 Theme 가 선언된 Index에서의 가장 마지막에 선언된 Index.

그리고 확인을 해봐야 하나 Theme는 Default Theme 를 선언해줘야 하는 것 같음.
이는 확인을 해봐야 함.
아직 확인은 하지 못했지만, 저는 frameworks/base/core/res/res/vlaues/Themes.xml에
다음과 같이 Default값을 선언.
<style name="Theme">
    <item name="csjung">@android:string/candidates_style</item>
    <item name="colorForeground">@android:color/bright_foreground_dark</item>

그리고 나서 Build 창에서 'make update-api' 란 명령어를 실행.

결과
framesorks/base/api/current.txt에 추가한 api가 등록된 것을 확인.

저작자 표시
Posted by 정창수