mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-18 16:45:33 -04:00

VolをTWLからも書けるように スライダとの後着優先になる Codecの「書いたVolと違う値にセットされる(MAX?)」バグワークアラウンドのため、ポーリングするように再度変更 TWLからも書けるのと併せ、そのつもりで作っていたかったので修正箇所が多い スライダのレジスタの値を読み出されるのでスライダのアソビを考えてスケーリングするよう変更 テーブル引きのテーブルをいじるのでは対応出来ない ADCのフィルタの誤り。閾値付近でふらふらしてしまっていた。フィルタの意味なし 電池残量0時のデフォルトパターンを設定。 ほぼすっからかんな電池をセットされたときなどでSoCから何も書かれてない状態の時、消灯で不便なため 電源LED autoでホタルにしない用にした。 ホタル消そうか… ファームが壊れ、バックアップからも復帰できないときに赤LEDを ぴぴっ、ぴぴっ と点滅させるように変更 ファームバックアップ後、新ファーム書き込み中のある期間で電源を落とすとバックアップが消える? todo:デバッグコードが残っている MGICにバッテリーパラメータを書くタイミングを変更(パラメータ転送~に時間が掛かるため) 1)電池交換を検出したとき 2)電源を入れようとしたときに万が一電池がすり替わってたとき 電圧で電池残量をキャップする 分解能20mVではあまりよろしい結果が得られなかったのでMGICより下位バイトも取得するように変更 比較部をリファクタリング wait_msを違うモジュールに ROM上のbootブロックに置きたかったため Vol更新コマンド ビットの自動クリアを忘れていた バッテリ残量パラメータ更新 ビットシフトが必要になったので対応 残念なコードに 電源LED赤とカメラLEDがひっくり返っていた VOLテーブルを-10dbに更新 git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@200 013db118-44a6-b54f-8bf7-843cb86687b1
146 lines
4.1 KiB
C
146 lines
4.1 KiB
C
#pragma SFR
|
|
#pragma NOP
|
|
#pragma HALT
|
|
#pragma STOP
|
|
|
|
#include "incs.h"
|
|
|
|
#include "i2c_twl.h"
|
|
#include "i2c_ctr.h"
|
|
#include "led.h"
|
|
#include "pm.h"
|
|
#include "rtc.h"
|
|
#include "sw.h"
|
|
|
|
|
|
//=========================================================
|
|
/*
|
|
vreg_ctrから読みたいのでヘッダへ
|
|
#define INTERVAL_TSK_SW 8
|
|
#define CLICK_THRESHOLD 2
|
|
|
|
#define HOLD_THREASHOLD (u8)( 2000 / INTERVAL_TSK_SW )
|
|
#define FORCEOFF_THREASHOLD (u8)( 4000 / INTERVAL_TSK_SW )
|
|
*/
|
|
|
|
//=========================================================
|
|
u8 SW_pow_count;
|
|
bit SW_pow_mask;
|
|
|
|
u8 SW_home_count, SW_wifi_count;
|
|
|
|
bit SW_HOME_n;
|
|
|
|
//=========================================================
|
|
// 押した時間を数える。押しっぱなしでも0に戻らない
|
|
// maskが非0の時は、一度離すまで無視する
|
|
#define count_sw_n( sw, counter, mask ) \
|
|
{ \
|
|
if( sw ){ \
|
|
mask = 0; \
|
|
counter = 0; \
|
|
}else{ \
|
|
if( mask != 0 ){ \
|
|
counter = 0; \
|
|
}else{ \
|
|
counter += 1; \
|
|
if( counter == 0 ) counter = 255; \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
|
|
#define chk_clicked( button, count, irq_bit_name ) \
|
|
if( !button ) \
|
|
{ \
|
|
if( count <= CLICK_THRESHOLD ) \
|
|
{ \
|
|
count += 1; \
|
|
} \
|
|
if( count == CLICK_THRESHOLD ) \
|
|
{ \
|
|
set_irq( VREG_C_IRQ0, irq_bit_name ); \
|
|
} \
|
|
} \
|
|
else \
|
|
{ \
|
|
count = 0; \
|
|
}
|
|
|
|
|
|
|
|
/* ========================================================
|
|
スイッチの監視
|
|
チャタリングをはねたり、長押しや、押したトリガなどの検出など
|
|
======================================================== */
|
|
void tsk_sw( )
|
|
{
|
|
static u8 task_interval = 0;
|
|
|
|
switch ( system_status.pwr_state )
|
|
{
|
|
case ( ON_TRIG ):
|
|
SW_pow_count = 0;
|
|
break;
|
|
}
|
|
|
|
if( task_interval-- != 0 )
|
|
{
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
|
|
}
|
|
|
|
switch ( system_status.pwr_state )
|
|
{
|
|
case ( ON ):
|
|
case ( SLEEP ):
|
|
case ( BT_CHARGE ):
|
|
case ( OFF ):
|
|
// 電源スイッチの監視 //
|
|
if( SW_pow_count == CLICK_THRESHOLD )
|
|
{
|
|
#ifdef _SW_HOME_ENABLE_
|
|
set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK );
|
|
#else
|
|
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_CLICK );
|
|
#endif
|
|
}
|
|
else if( SW_pow_count == HOLD_THREASHOLD )
|
|
{
|
|
#ifdef _SW_HOME_ENABLE_
|
|
set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_HOLD );
|
|
#else
|
|
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_HOLD );
|
|
#endif
|
|
system_status.cnt_force_off = 1;
|
|
}
|
|
|
|
count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask ); // ボタン押し時間のカウント
|
|
|
|
#ifdef _SW_HOME_ENABLE_
|
|
// HOME スイッチ //
|
|
switch( system_status.model )
|
|
{
|
|
# ifdef _MODEL_CTR_
|
|
case( MODEL_JIKKI ):
|
|
SW_HOME_n = SW_HOME_n_JIKKI;
|
|
break;
|
|
# endif
|
|
case( MODEL_TS_BOARD ):
|
|
case( MODEL_SHIROBAKO ):
|
|
SW_HOME_n = SW_HOME_n_TSBOARD;
|
|
break;
|
|
default:
|
|
SW_HOME_n = 1; // 放されてる状態
|
|
}
|
|
chk_clicked( SW_HOME_n, SW_home_count, REG_BIT_SW_HOME_CLICK );
|
|
#endif
|
|
|
|
// wifi sw //
|
|
chk_clicked( SW_WIFI_n, SW_wifi_count, REG_BIT_SW_WIFI_CLICK );
|
|
}
|
|
}
|