2013년 7월 31일 수요일

JNI int,String array parameter, return value

int array를 parameter로 넘겨기 예제(java->jni)

---------------------------------------------------------------------------------------
java file

public class Test {
    static {
        System.loadLibrary("test");
    }

    public static void func1(int arr[]) {
        native_func1(core);
    }

 private native static void native_func1(int arr[]);


---------------------------------------------------------------------------------------
cpp file

static void native_func1(JNIEnv* env, jobject obj, jintArray arr) {
    int size = env->GetArrayLength(arr);

    jint *value = env->GetIntArrayElements(arr, NULL);

    for (int i = 0; i < size; i++) {
        value[i] = i;
    }
 
    env->ReleaseIntArrayElements(arr, value, 0);
    return;
}

static const JNINativeMethod g_methods[] = { 
    { "native_func1", "([I)V", (void*)native_func1 }, 
}; 
  
---------------------------------------------------------------------------------------
//배열 생성 
int[] arr = new int[4];
//배열 전달
Test.func1(arr);


String array를 return value로 받기(jni->java)

---------------------------------------------------------------------------------------
java file
static jobjectArray native_func2(JNIEnv* env, jobject obj) {
    char *temp[4] = { "apple, "banana", tomato", "melon"};

    jobjectArray ret = (jobjectArray)env->NewObjectArray(4, env->FindClass("java/lang/String"),
            env->NewStringUTF(""));

    for (int i = 0; i < 4; i++) {
        env->SetObjectArrayElement(ret, i, env->NewStringUTF(temp[i]));
    }
    return ret;
}

static const JNINativeMethod g_methods[] = {
    { "native_func2", "()[Ljava/lang/String;", (jobjectArray*)native_func2 },
};


---------------------------------------------------------------------------------------
java file

public class Test {
    static {
        System.loadLibrary("test");
    }

    public static String[] func2() {
        return native_func2();
    }

    private native static String[] native_func2();



---------------------------------------------------------------------------------------
String[] str = new String[4];
str = Test.func2();

2013년 7월 29일 월요일

Ubuntu unity에서 한/영 전환키가 unity 실행키가 안되도록 하기

http://ubuntu.or.kr/viewtopic.php?p=101411

xmodmap -e 'remove mod1 = Hangul'

minicom setting for ODROID USB-UART Module Kit



install minicom

$sudo minicom -s

            +-----[configuration]------+
            | Filenames and paths      |
            | File transfer protocols  |
            | Serial port setup        |
            | Modem and dialing        |
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

Serail port setup

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

    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                       |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

=================================================================
                                                                             
            +-----[configuration]------+                                     
            | Filenames and paths      |                                     
            | File transfer protocols  |                                     
            | Serial port setup        |                                     
            | Modem and dialing        |                                     
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

Save setup as dfl


dev$ ls -l ttyUSB*
crw-rw---- 1 root dialout 188, 0  7월 29 12:30 ttyUSB0

minicom: Cannot open /dev/ttyUSB0: Permission denied

Just add your user to the dialout group so you have appropriate permissions on the device.

$sudo usermod -a -G dialout $USER

2013년 7월 24일 수요일

How to hide Naviation Bar.

Hide Navigation Bar.

edit build.prop
qemu.hw.mainkeys=1


or

setprop qemu.hw.mainkyes 1
killall system_server


If sdk version is API Level 11(Android 4.2.2), add setSystemUiVisibility function in your Activity.

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);


2013년 7월 18일 목요일

"couldn't install on usb storage or sd card"




Modify or delete the contents of yours SD card.


couldn't install on usb storage or sd card


Device mapper debugging message

[  193.421463] device-mapper: table: 254:0: crypt: Error allocating crypto tfm
[  193.421471] device-mapper: ioctl: error adding target to table

set Twofish cipher algorithm feature.
make menuconfig
< >   TEA, XTEA and XETA cipher algorithms
<*>   Twofish cipher algorithm
*** Compression ***



  ┌───────────────────────────────────────────────────────────────────────────────────────── Twofish cipher algorithm ──────────────────────────────────────────────────────────────────────────────────────────┐
  │ CONFIG_CRYPTO_TWOFISH:                                                                                                                                                                                      │
  │                                                                                                                                                                                                             │
  │ Twofish cipher algorithm.                                                                                                                                                                                   │
  │                                                                                                                                                                                                             │
  │ Twofish was submitted as an AES (Advanced Encryption Standard)                                                                                                                                              │
  │ candidate cipher by researchers at CounterPane Systems.  It is a                                                                                                                                            │
  │ 16 round block cipher supporting key sizes of 128, 192, and 256                                                                                                                                             │
  │ bits.                                                                                                                                                                                                       │
  │                                                                                                                                                                                                             │
  │ See also:                                                                                                                                                                                                   │
  │ <http://www.schneier.com/twofish.html>                                                                                                                                                                      │
  │                                                                                                                                                                                                             │
  │ Symbol: CRYPTO_TWOFISH [=y]                                                                                                                                                                                 │
  │ Type  : tristate                                                                                                                                                                                            │
  │ Prompt: Twofish cipher algorithm                                                                                                                                                                            │
  │   Defined at crypto/Kconfig:841                                                                                                                                                                             │
  │   Depends on: CRYPTO [=y]                                                                                                                                                                                   │
  │   Location:                                                                                                                                                                                                 │
  │     -> Cryptographic API (CRYPTO [=y])                                                                                                                                                                      │
  │   Selects: CRYPTO_ALGAPI [=y] && CRYPTO_TWOFISH_COMMON [=y]


2013년 7월 12일 금요일

Portrait HDMI for ODROID(Exynos4412)

for Exynos4412(mali)

edit build.prop and add this.

ro.sf.hwrotation=90


http://codewalkerster.blogspot.kr/2013/06/hdmi-screen-rotation-issue-for-odroid.html

edit device/samsung/exynos4/libhdmi/libhdmiservice/SecTVOutService.cpp


#include <cutils/properties.h>

void SecTVOutService::setHdmiRotate(uint32_t rotVal, uint32_t hwcLayer)
{
    //codewalker
    return;


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




    void SecTVOutService::setHdmiStatus(uint32_t status)
    {   

        LOGD("%s HDMI cable status = %d", __func__, status);
        {   
            Mutex::Autolock _l(mLock);

            bool hdmiCableInserted = (bool)status;

            if (mHdmiCableInserted == hdmiCableInserted)
                return;

            if (hdmiCableInserted == true) {
                if (mSecHdmi.connect() == false) {
                    LOGE("%s::mSecHdmi.connect() fail", __func__);
                    hdmiCableInserted = false;
                }   
        #if 1  //yqf, 2012-6-18, keep it, first plug in cable with device landscape mode    
            else{ 
                   //added yqf, STAR00030984 & update roate value to hdmi after connect->disconnect->connect
                //codewalker
                int angle = 0;
                char value[PROPERTY_VALUE_MAX]; 
                property_get("ro.sf.hwrotation", value, NULL); 
                if (value != NULL)
                    angle = atoi(value);

                     mSecHdmi.setUIRotation(globalRotate, angle);
            if(mSecHdmi.mRotateInfoChange)
                mSecHdmi.mRotateInfoChange=false;
                    } 








2013년 7월 10일 수요일

ramdisk rootfs를 system.img에 포함 시키기

http://codewalkerster.blogspot.kr/2013/05/boot-from-system-partition-instead.html

위에 설명에 수동으로 ramdisk의 rootfs를 system에 복사하는 방법이 였습니다.

이번에는 ramdisk의 rootfs를 포함 하여 system.img를 만들어 보겠습니다.

system/core/init/Android.mk를 보면 TARGET_ROOT_OUT 변수가 out/target/product/xxx/root를 의미합니다. 그리고 out/target/product/xxx/root/init에 복사 됩니다.

그래서 전체 Android.mk에서 TARGET_ROOT_OUT를 찾아 TARGET_OUT으로 변경하면 out/target/product/xxx/system으로 복사됩니다. 하지만 코드를 여러 군데 수정 해야 합니다.
그래서 build후 copy하는 방식으로 처리 하였습니다.

build_android.sh를 수정합니다.

SYSTEMIMAGE_PARTITION_SIZE=$(grep "BOARD_SYSTEMIMAGE_PARTITION_SIZE " device/hardkernel/$SEC_PRODUCT/BoardConfig.mk | awk '{field=$NF};END{print field}')

function copy_root_2_system()
{
#root의 내용을 permission 그대로 system 폴더에 복사한다.
    cp -arp $OUT_DIR/root/* $OUT_DIR/system/

#init과 sbin/adbd를 755로 넣어도 644로 바뀌기 때문에 symbolic link 해결
#init과 adbd를 bin으로 복사합니다.
    mv $OUT_DIR/system/init $OUT_DIR/system/bin/
    mv $OUT_DIR/system/sbin/adbd $OUT_DIR/system/bin/
    cd $OUT_DIR/system
    ln -s bin/init init
    cd $OUT_DIR/system/sbin
    ln -s ../bin/adbd adbd

#make_ext4fs로 system 폴더를 system.img로 만든다.
#SYSTEMIMAGE_PARTITION_SIZE 는 BoardConfig.mk의 BOARD_SYSTEMIMAGE_PARTITION_SIZE의 값을 읽어서 설정한다.
    $OUT_HOSTBIN_DIR/make_ext4fs -s -l $SYSTEMIMAGE_PARTITION_SIZE -a system $OUT_DIR/system.img $OUT_DIR/system

    sync
}

    odroidx2)
        build_android
        copy_root_2_system
        make_uboot_img

kernel의 defconfing를 수정합니다. (ODROID-U2)

CONFIG_CMDLINE="root=/dev/mmcblk0p2 rw rootfstype=ext4 init=/init console=ttySAC1,115200n8 androidboot.console=ttySAC1 mem=2047M"