電源ボタンの挙動変更。

160msで押した割り込み、3secで長押し割り込み&強制offカウントダウン開始。デフォルト12sec後に(手を離してても)電源off


git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@285 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
n2232 2010-12-07 06:50:30 +00:00
parent c0e58f917a
commit 1ce25978fc
5 changed files with 91 additions and 66 deletions

View File

@ -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;
}
}

View File

@ -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 ); // ボタン押し時間のカウント

View File

@ -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

View File

@ -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;
}
}
}
}
/* ========================================================

View File

@ -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
}