기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요? ODROID 배터리 게이지 작업을 하고 있는데요..

처음 부팅시에 한번만 잘 읽어내고 그 뒤로는 업데이트가 안되네요..

 

아래 최종환님 글의 댓글을 보면 work_queue로 해결하신것 같은데..

http://www.aesop.or.kr/?mid=board_android_platform&document_srl=54231

 

실제 어떻게 구현하셨는지 알려주시길 부탁드립니다..

 

감사합니다.


최종환

2009.09.27 05:17:44
*.195.226.225

방금 쪽지로 보냈습니다. 저도 정리를 잘 해 놓지 않아서요.-> 바뀔때 마다 읽어 가지 않아서 뭐 했던것 기억이 나는데 그 부분을 정리 해 놓지 않아서 가물 가물 합니다..^^;;

최종 소스는.. 못찾아서..초기에 짰던거 보냈습니다.

다시 한번 찾아보겠습니다~

 

 

이제현

2009.09.28 02:46:07
*.32.117.10

배터리 잔량이나 상태가 변할때마다 /sys/class/power_supply/battery/아래 내용들도 잘 변하고 있다는것은

콘솔에서 확인 되었습니다. 부팅시에 안드로이드가 읽어간 값도 같다는 것도 확인했고요...

그런데.. 계속 주기적으로.. 아님 변화가 있을때마다 안드로이드가 읽어가야 할텐데... 그부분을 잘 모르겠네요...

 보내주신 드라이버도 봤는데.. ODROID랑 큰차이는 없네요.

 

최종환

2009.09.28 04:02:01
*.195.240.93

네 저도 같은 경험을 한적이 있습니다.

그래서 그 부분을 수정해서 동작 했던 기억이 납니다.

그 부분을 어디다 적어뒀는데..-.-;;

 

예전 문서에 다음과 같은 부분이 있었습니다.

BatteryService.java registers itself as a UEvent observer for the path /sys/class/power_supply. If anything is changed in this path, it gets current state through JNI and then broadcasts ACTION_BATTERY_CHANGED intent.

 

com_android_server_BatteryService.cpp is the JNI native implementation for BatteryService.java. It gets current battery state through reading from the following files

 

실제 코드에도 다음과 같은 부분이 있구요

    public BatteryService(Context context) {
        mContext = context;
        mBatteryStats = BatteryStatsService.getService();

        mUEventObserver.startObserving("SUBSYSTEM=power_supply");

        // set initial status
        update();
    }

 

제가 보드가 없어서 확인은 못해보지만  battery driver부분의 power_supply_changed()

이 함수 였던거 같은데요..

 

static void power_supply_changed_work(struct work_struct *work)
{
        struct power_supply *psy = container_of(work, struct power_supply,
                                                changed_work);

        dev_dbg(psy->dev, "%sn", __func__);

        class_for_each_device(power_supply_class, NULL, psy,
                              __power_supply_changed_work);

        power_supply_update_leds(psy);

        kobject_uevent(&psy->dev->kobj, KOBJ_CHANGE);
}

void power_supply_changed(struct power_supply *psy)
{
        dev_dbg(psy->dev, "%sn", __func__);

        schedule_work(&psy->changed_work);
}

 

uevent에 반응하여 java쪽에서 읽어 가는것으로 알고 있습니다.~

 

 

최종환

2009.09.28 04:12:09
*.195.240.93

frameworks/base/services/java/com/android/server$ vi BatteryService.java

파일의


    private synchronized final void update() {
        native_update();

        boolean logOutlier = false;
        long dischargeDuration = 0;

        mBatteryLevelCritical = mBatteryLevel <= CRITICAL_BATTERY_LEVEL;
        if (mAcOnline) {
            mPlugType = BatteryManager.BATTERY_PLUGGED_AC;
        } else if (mUsbOnline) {
            mPlugType = BatteryManager.BATTERY_PLUGGED_USB;
        } else {
            mPlugType = BATTERY_PLUGGED_NONE;
        }
        if (mBatteryStatus != mLastBatteryStatus ||
                mBatteryHealth != mLastBatteryHealth ||
                mBatteryPresent != mLastBatteryPresent ||
                mBatteryLevel != mLastBatteryLevel ||
                mPlugType != mLastPlugType ||
                mBatteryVoltage != mLastBatteryVoltage ||
                mBatteryTemperature != mLastBatteryTemperature) {

함수에 LOG 찍어 보시는것은 어떨까요?

            mLastBatteryStatus = mBatteryStatus;
            mLastBatteryHealth = mBatteryHealth;
            mLastBatteryPresent = mBatteryPresent;
            mLastBatteryLevel = mBatteryLevel;
            mLastPlugType = mPlugType;
            mLastBatteryVoltage = mBatteryVoltage;
            mLastBatteryTemperature = mBatteryTemperature;
            mLastBatteryLevelCritical = mBatteryLevelCritical;

            sendIntent();

의 sendIntent()가 호출이 되어야 밧데리 정보의  ui쪽이 변경되는것으로 알고 있습니다.

 

 

이제현

2009.10.07 04:31:53
*.120.74.180

덕분에 잘 해결되었습니다. observer쪽 문제는 아니고 드라이버단 문제였네요.

 

정말 감사합니다. ^.^

최종환

2009.10.07 04:51:10
*.32.117.22

 아..다행입니다..덕분에 저도 좀더 자세하게 보게 되었습니다~

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
5328 아이지 시스템 JTAG A1000 NAND Flash Loader (.axf) 파일 구... [5] 김진만 2009-03-18 1495
5327 안드로이드 dhcp 관련 질문드립니다. [5] 송형돈 2009-10-16 1495
5326 Exynos 5250 LCD 회전 [3] 윤동열 2013-02-08 1495
5325 무선랜 ?? <==완료 [3] 윤현승 2006-07-28 1494
» 안드로이드 배터리 게이지 자동 업데이트 문의 [6] 이제현 2009-09-27 1494
5323 starting kernel 후 멈춥니다.. [15] kjh10101 2010-02-23 1494
5322 u-boot 관련 몇가지 질문이 있습니다. [3] Supsupi 2013-03-31 1494
5321 Android Booting시 screen mode(landscape/portlate) 변경 방법이 ... [2] yama 2011-10-08 1493
5320 동적라이브러리 링크 오류 [3] seokin 2012-01-03 1493
5319 제가 만든 모듈을 보드에 있는 커널에 삽입하려고 하니..아래와 같은... [1] 혜민아빠 2012-04-07 1493
5318 혹시 Android4.3에 들어온 Camera3 쪽 보고 계신분 없나요? EverydayMayday 2013-09-16 1492
5317 Arndale board 5250 용 커널 빌드시 에러 [5] realizeadream 2014-04-23 1492
5316 [완료]u-boot에서 tftp로 부트로더 올릴때 tftp에러 [3] 이재명 2007-06-21 1491
5315 삼성의 AP series 대리점에 대한 문의드립니다. [1] 어떤이의꿈 2012-11-26 1491
5314 [질문] jffs2 mount 에러 [2] 민세홍 2006-05-30 1490
5313 [완료] SMC91C111 driver 증상 한 번 봐주세요. [4] 강경완 2007-04-18 1490
5312 안드로이드 빌드, choosecombo 질문입니다. [1] 나노세컨드 2012-03-24 1490
5311 안드로이드 풀 빌드 시 구글 계정 사용할 수 있나요? [1] 코믹해커 2013-01-31 1490
5310 MAX8997 LDO15 관련 문의드립니다. [2] 혜정아빠 2013-06-12 1490
5309 qt 종료후 segmentation fault, Illegal instruction 오류. Supsupi 2012-04-26 1489

사용자 로그인