diff --git a/trunk/pm.c b/trunk/pm.c index 2249504..2002ae8 100644 --- a/trunk/pm.c +++ b/trunk/pm.c @@ -602,7 +602,7 @@ void BT_get_left(){ vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR; bt_chg_ready = false; vreg_ctr[ VREG_C_BT_REMAIN ] = 0; - system_status.force_off = 1; // 強制電源断フラグ(カウンタ) + system_status.force_off = true; } else { @@ -658,7 +658,7 @@ void BT_get_left(){ } else { - system_status.force_off = 1; // 強制電源断フラグ(カウンタ) + system_status.force_off = true; hysteresis = 500; } } diff --git a/trunk/sw.c b/trunk/sw.c index c2b33f5..219e60c 100644 --- a/trunk/sw.c +++ b/trunk/sw.c @@ -31,6 +31,8 @@ u8 SW_home_count, SW_wifi_count, SW_home_count_rel; bit SW_HOME_n; +u16 off_timeout_timer; + //========================================================= // 押した時間を数える。押しっぱなしでも0に戻らない // maskが非0の時は、一度離すまで無視する @@ -80,6 +82,7 @@ void tsk_sw( ) if( system_status.pwr_state == ON_TRIG ) { SW_pow_count = 0; // カウントクリア + off_timeout_timer = 0; } if( --task_interval != 0 ) @@ -91,6 +94,7 @@ void tsk_sw( ) task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK ); } + // 8ms 毎にきます switch ( system_status.pwr_state ) { case ( ON ): @@ -98,18 +102,29 @@ void tsk_sw( ) case ( OFF ): case ( ON_CHECK ): // 電源スイッチの監視 // - if( SW_pow_count == (u8)( 320/ INTERVAL_TSK_SW ) ) + if( SW_pow_count == ( TIME_PWSW_CLICK ) ) { set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK ); } else if( SW_pow_count == ( HOLD_THREASHOLD ) ) { set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_HOLD ); + off_timeout_timer = HOLD_THREASHOLD + vreg_ctr[ VREG_C_OFF_DELAY ] * 16; } - else if( SW_pow_count > ( HOLD_THREASHOLD + vreg_ctr[ VREG_C_OFF_DELAY ] *16 )) // およそ 100/SYSTEM_TICK +/* + else if( SW_pow_count > ( HOLD_THREASHOLD + vreg_ctr[ VREG_C_OFF_DELAY ] )) // およそ 100/SYSTEM_TICK { system_status.force_off = 1; } +*/ + if( off_timeout_timer != 0 ) + { + off_timeout_timer -= 1; + if( off_timeout_timer == 1 ) + { + system_status.force_off = true; + } + } count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask ); // ボタン押し時間のカウント diff --git a/trunk/sw.h b/trunk/sw.h index a63938d..01f47bf 100644 --- a/trunk/sw.h +++ b/trunk/sw.h @@ -9,7 +9,8 @@ extern bit SW_pow_mask; #define INTERVAL_TSK_SW 8 #define CLICK_THRESHOLD 2 -#define HOLD_THREASHOLD (u8)( 2000 /INTERVAL_TSK_SW ) -#define FORCEOFF_THREASHOLD 32 +#define HOLD_THREASHOLD (u16)( 3000 /INTERVAL_TSK_SW ) +#define TIME_PWSW_CLICK (u8)( 160 /INTERVAL_TSK_SW ) +#define FORCEOFF_THREASHOLD (u8)( 12000 /INTERVAL_TSK_SW /16 ) #endif diff --git a/trunk/task_misc.c b/trunk/task_misc.c index 20ad350..98cf4e3 100644 --- a/trunk/task_misc.c +++ b/trunk/task_misc.c @@ -52,6 +52,9 @@ bit twl_ver_read; bit going_to_sleep; +void update_LED_tune(); +void check_twl_vol_irq(); + /* ======================================================== ステータスレジスタなど @@ -92,69 +95,76 @@ void tsk_misc( ) set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ ); } - /* ======================================================== - TWLがVolを書くのと、スライダの操作がバッティングすると - 不整合が起こる事があり、それを防ぐ - TWLでは8通常時、押しボタンは8段階だった。それに合わせて割り込みを入れたい - ======================================================== */ - { - static u8 mabiki; - - if( mabiki != 0 ) - { - mabiki--; - } - else - { - mabiki = 6; - - if( is_TWL ) - { - if( vol_level_twl != vol_level_twl_readed ) - { - set_irq( VREG_C_IRQ2, REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY ); - } - } - } - } - } - - // TUNE_LED /////////////////////////////////// - { - if( system_status.pwr_state != ON ) - { - LED_duty_3d = 0; - } - else - { - if( vreg_ctr[VREG_C_LED_TUNE] == LED_TUNE_ILM_OFF ) - { - if( LED_duty_3d != 0 ) - { - LED_duty_3d -= 1; - } - } - else - { - if( LED_duty_3d != vreg_ctr[VREG_C_LED_BRIGHT] ) - { - if( LED_duty_3d < vreg_ctr[VREG_C_LED_BRIGHT] ) - { - LED_duty_3d += 1; - } - else - { - LED_duty_3d -= 1; - } - } - } - } - } + check_twl_vol_irq(); // TWL の音量変化割り込みチェック + } + update_LED_tune(); // 3D ランプ更新 } +/* ======================================================== + TWLがVolを書くのと、スライダの操作がバッティングすると + 不整合が起こる事があり、それを防ぐ + TWLでは8通常時、押しボタンは8段階だった。それに合わせて割り込みを入れたい + ======================================================== */ +void check_twl_vol_irq() +{ + static u8 mabiki; + + if( mabiki != 0 ) + { + mabiki--; + } + else + { + mabiki = 6; + + if( is_TWL ) + { + if( vol_level_twl != vol_level_twl_readed ) + { + set_irq( VREG_C_IRQ2, REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY ); + } + } + } +} + + + +// TUNE_LED /////////////////////////////////// +void update_LED_tune() +{ + if( system_status.pwr_state != ON ) + { + LED_duty_3d = 0; + return; + // おしまい // + } + + if( vreg_ctr[VREG_C_LED_TUNE] == LED_TUNE_ILM_OFF ) + { + if( LED_duty_3d != 0 ) + { + LED_duty_3d -= 1; + } + } + else + { + if( LED_duty_3d != vreg_ctr[VREG_C_LED_BRIGHT] ) + { + if( LED_duty_3d < vreg_ctr[VREG_C_LED_BRIGHT] ) + { + LED_duty_3d += 1; + } + else + { + LED_duty_3d -= 1; + } + } + } +} + /* ======================================================== diff --git a/trunk/task_sys.c b/trunk/task_sys.c index 69169b1..3a2f4e9 100644 --- a/trunk/task_sys.c +++ b/trunk/task_sys.c @@ -294,7 +294,7 @@ void tsk_sys( ) { return; } - system_status.force_off = 0; + system_status.force_off = false; vreg_ctr[ VREG_C_ACC_CONFIG ] = 0x00; tski_acc_hosu_set(); @@ -533,7 +533,6 @@ void send_getup_to_soc() #ifdef _MODEL_CTR_ SLP_ACK = 1; nop8(); -// nop8(); SLP_ACK = 0; #endif }