mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
trunk r312~r316をマージ
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@319 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
10ccb23710
commit
4b14d84999
@ -15,7 +15,7 @@
|
||||
|
||||
|
||||
#define MCU_VER_MAJOR 0x01
|
||||
#define MCU_VER_MINOR 0x1B
|
||||
#define MCU_VER_MINOR 0x1C
|
||||
|
||||
|
||||
#define _firm_format_v3_
|
||||
|
||||
Binary file not shown.
@ -97,8 +97,6 @@ unsigned char MIN;
|
||||
unsigned char SEC;
|
||||
|
||||
|
||||
|
||||
|
||||
# endif
|
||||
|
||||
#endif
|
||||
|
||||
@ -70,6 +70,10 @@ u8 frame_sleep;
|
||||
st_LED_dim_status LED_dim_status_sleep;
|
||||
|
||||
|
||||
// 充電中か否か
|
||||
extern bit BT_IN_CHG_delayed_n;
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
#define led_fade_to( now, goal ) now = fade_to( now, goal )
|
||||
@ -382,7 +386,8 @@ static u8 led_pow_batt_low()
|
||||
// おしまい
|
||||
}
|
||||
|
||||
if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_n )
|
||||
if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_delayed_n )
|
||||
// 電池残量が5%(~10%) または、それ未満でも充電中
|
||||
{
|
||||
// 赤点灯
|
||||
led_fade_to( LED_duty_pow_blu, 0 );
|
||||
|
||||
@ -201,7 +201,7 @@ void pedometer()
|
||||
|
||||
static void hosu_increment_if_necessary()
|
||||
{
|
||||
u8 year_compd; // hour境界補正済み現在年。comp(ensation)
|
||||
u8 year_compd; // hour境界補正済み現在年。comp(ensation -ed)
|
||||
|
||||
// 現在時刻取得
|
||||
DI();
|
||||
@ -225,7 +225,7 @@ static void hosu_increment_if_necessary()
|
||||
// 書き込みポインタの更新
|
||||
if( ! ( vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 && // 歩数計on後、最初の一歩までは前回からの経過時間を計算しない
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 &&
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 )) //. 全ビットorでゼロ判定するのはデジタル回路屋の方言みたい
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 )) //. 全ビットORでゼロ判定するのはデジタル回路屋の方言みたい
|
||||
{
|
||||
// 歩数計が止まっていた時間を考慮して必要なら進める
|
||||
// 補正計算 元旦零時台で昨日扱いになった場合、大晦日の23時台に上書き
|
||||
@ -249,28 +249,34 @@ static void hosu_increment_if_necessary()
|
||||
last_hour_fny = now_longhour;
|
||||
|
||||
// 毎時ログ インクリメント
|
||||
if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA ) // その時間帯最初のカウントの時
|
||||
if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_MAX )
|
||||
{
|
||||
// 何もしないでおしまい
|
||||
//. 小計の合計と累計があわなくなるのを避けるためだろうけど、どうなの?
|
||||
return;
|
||||
}
|
||||
else if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA ) // その時間帯最初のカウントの時
|
||||
{ // これしないと1歩足りない
|
||||
pool.vreg_c_ext.pedo_log[ p_record ] = 1;
|
||||
}
|
||||
else if( pool.vreg_c_ext.pedo_log[ p_record ] != HOSU_MAX )
|
||||
else
|
||||
{
|
||||
// 通常パス
|
||||
pool.vreg_c_ext.pedo_log[ p_record ] += 1;
|
||||
}
|
||||
|
||||
// 累積の更新 //
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 ) //. いろいろ失敗した...
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 ) // カンストチェック
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 )
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 ){
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 255; //. カンスト orz
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 255; //. いろいろ失敗だったね...
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_M ] = 255;
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_H ] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -494,8 +500,10 @@ static unsigned long my_sqrt(unsigned long x)
|
||||
======================================================== */
|
||||
static u16 calc_hours_spend( u8 year )
|
||||
{
|
||||
u8 cal_log_latest_year = bcdtob( cal_log_latest.year_bcd );
|
||||
|
||||
// 同じ年の内
|
||||
if( cal_log_latest.year_bcd == year )
|
||||
if( cal_log_latest_year == year )
|
||||
{
|
||||
if( now_longhour > last_hour_fny )
|
||||
{
|
||||
@ -506,12 +514,12 @@ static u16 calc_hours_spend( u8 year )
|
||||
return( 0 ); // 同じ時間帯(と、巻き戻り。 どうなっても知らない)
|
||||
}
|
||||
}
|
||||
else if( cal_log_latest.year_bcd == ( year -1 ) )
|
||||
else if( cal_log_latest_year == ( year -1 ) )
|
||||
{
|
||||
// 年をまたいでいるとき
|
||||
return( ( ( 365 + ( is_firstyear(year) ? 1: 0 )) * 24 ) - last_hour_fny + now_longhour );
|
||||
}
|
||||
else if( cal_log_latest.year_bcd < year )
|
||||
else if( cal_log_latest_year < year )
|
||||
{
|
||||
// 数年放置
|
||||
return( PEDOMETER_LOG_SIZE +1 );
|
||||
|
||||
@ -24,14 +24,14 @@ u8 raw_adc_temperature;
|
||||
BT_VENDER battery_manufacturer = BT_VENDER_NOT_CHECKED;
|
||||
st_bt_comp bt_comp; // バッテリパラメータ構造体
|
||||
u8 reg_shadow; // NTR PMIC レジスタミラー
|
||||
bit bt_chg_ready; // バッテリパラメータ送信済。充電開始許可
|
||||
bit bt_authorized; // バッテリパラメータ送信済。充電開始許可
|
||||
u8 chg_led_override; // アダプタ差したとき、充電するしないに関わらずしばらく点灯させる
|
||||
|
||||
u16 bt_volt16;
|
||||
|
||||
bit ntr_pm_bt_low_old;
|
||||
bit BT_CHG_STAT_Change;
|
||||
|
||||
bit BT_IN_CHG_delayed_n;
|
||||
|
||||
u8 pmic_version;
|
||||
u8 mgic_version[2];
|
||||
@ -128,7 +128,7 @@ void tsk_batt( )
|
||||
}
|
||||
|
||||
// WM0ではCHG_ENABLEピンは /WL_RST に配線されており、充電制御しない
|
||||
if( !temp_zone_charge_disable && bt_chg_ready && !PM_EXTDC_n )
|
||||
if( !temp_zone_charge_disable && bt_authorized && !PM_EXTDC_n )
|
||||
{
|
||||
BT_CHG_ENABLE(); // 温度範囲OKで充電再開
|
||||
}
|
||||
@ -139,27 +139,40 @@ void tsk_batt( )
|
||||
|
||||
// 充電 //
|
||||
// →割り込み。
|
||||
// CCICの不具合回避のため、/CHGのネゲートをちょっと丁寧に遅延させる
|
||||
{
|
||||
static u8 anti_chatter;
|
||||
|
||||
if( BT_IN_CHG_n ) // 充電*してない* (論理がわかりづらいな!)
|
||||
{
|
||||
anti_chatter = 0;
|
||||
LED_CHARGE = 0;
|
||||
}
|
||||
else
|
||||
if( !BT_IN_CHG_n )
|
||||
{
|
||||
// さらにチャタリング除去
|
||||
if( anti_chatter < 2 ) // 電池無しでアダプタさして、電極をさわさわ
|
||||
{ // すると充電LEDががさがさするので
|
||||
anti_chatter++;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_CHARGE = 1;
|
||||
BT_IN_CHG_delayed_n = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// "丁寧に遅延" todo:もっといい方法?
|
||||
if( !BT_CHG_Ena_n && vreg_ctr[ VREG_C_BT_REMAIN ] < 60 )
|
||||
{
|
||||
BT_IN_CHG_delayed_n = 0; // 充電中と扱う。充電が終わっているはずがない
|
||||
}
|
||||
else
|
||||
{
|
||||
BT_IN_CHG_delayed_n = 1;
|
||||
anti_chatter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
LED_CHARGE = ( ! BT_IN_CHG_delayed_n )? 1: 0; // LEDに反映
|
||||
}
|
||||
|
||||
// アダプタつないだ瞬間、満充電でも数秒わざと点灯させる。給電してることをわからせるため。
|
||||
if( chg_led_override != 0 ){ // ↑から見ればわかるが、瞬間(数クロック)消える事がある。気がつく人いるかな…?
|
||||
chg_led_override -= 1;
|
||||
LED_CHARGE = 1;
|
||||
@ -256,7 +269,7 @@ void BT_chk()
|
||||
BT_model_detect();
|
||||
if( system_status.model != MODEL_JIKKI )
|
||||
{
|
||||
bt_chg_ready = false;
|
||||
bt_authorized = false;
|
||||
return;
|
||||
// おしまい
|
||||
}
|
||||
@ -274,7 +287,7 @@ void BT_chk()
|
||||
}
|
||||
BT_mgic_init(); // 機種判定も行います
|
||||
}
|
||||
bt_chg_ready = true;
|
||||
bt_authorized = true;
|
||||
renge_task_immed_add( tski_BT_temp_update ); // 電池温度監視スタート
|
||||
}
|
||||
|
||||
@ -598,14 +611,14 @@ void BT_get_left(){
|
||||
{
|
||||
// 実機 //
|
||||
u8 temp_v[2];
|
||||
u8 temp_force_fule_left;
|
||||
u8 temp_force_fuel_left;
|
||||
|
||||
// 残量リード
|
||||
if( iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC, 2, temp_fuel ) != ERR_SUCCESS )
|
||||
{
|
||||
// 残量ICがNACK …バッテリはずれた
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR;
|
||||
bt_chg_ready = false;
|
||||
bt_authorized = false;
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = 0;
|
||||
system_status.force_off = true;
|
||||
}
|
||||
@ -638,27 +651,27 @@ void BT_get_left(){
|
||||
|
||||
if( bt_volt16 > V_TH_30 )
|
||||
{
|
||||
temp_force_fule_left = 100;
|
||||
temp_force_fuel_left = 100;
|
||||
hysteresis = 0;
|
||||
}
|
||||
else if( bt_volt16 - hysteresis > V_TH_LO )
|
||||
{
|
||||
temp_force_fule_left = 30;
|
||||
temp_force_fuel_left = 30;
|
||||
hysteresis = 0;
|
||||
}
|
||||
else if( bt_volt16 > V_TH_EMPTY )
|
||||
{
|
||||
temp_force_fule_left = BATT_TH_LO; // ここから赤
|
||||
temp_force_fuel_left = BATT_TH_LO; // ここから赤
|
||||
hysteresis = 500;
|
||||
}
|
||||
else if( bt_volt16 > V_TH_ZERO )
|
||||
{
|
||||
temp_force_fule_left = BATT_TH_EMPTY;
|
||||
temp_force_fuel_left = BATT_TH_EMPTY;
|
||||
hysteresis = 500;
|
||||
}
|
||||
else if( bt_volt16 > V_TH_FORCE_OFF )
|
||||
{
|
||||
temp_force_fule_left = 0;
|
||||
temp_force_fuel_left = 0;
|
||||
hysteresis = 500;
|
||||
}
|
||||
else
|
||||
@ -672,20 +685,20 @@ void BT_get_left(){
|
||||
// 充電許可(=アダプタも刺さってる)のに充電してない
|
||||
// かつ、(少なくとも)素の電池残量が60%以上(CCICバグ回避)
|
||||
// = 充電完了。電池がへたってくるとMGICが100%を返さない
|
||||
if( !BT_CHG_Ena_n && BT_IN_CHG_n && vreg_ctr[ VREG_C_BT_REMAIN ] > 60 ){
|
||||
if( !BT_CHG_Ena_n && BT_IN_CHG_delayed_n ){
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = 100;
|
||||
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = 0;
|
||||
}
|
||||
else
|
||||
{ // 少ない方にキャップ
|
||||
if( temp_force_fule_left > temp_fuel[0] )
|
||||
if( temp_force_fuel_left > temp_fuel[0] )
|
||||
{
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = temp_fuel[0];
|
||||
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = temp_fuel[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = temp_force_fule_left;
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = temp_force_fuel_left;
|
||||
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,7 +161,7 @@ task_status_immed tski_PM_LCD_off();
|
||||
task_status_immed tski_PM_BL_set();
|
||||
|
||||
|
||||
#define PM_Chg_Stop() { BT_TEMP_P = 0; BT_CHG_DISABLE(); while( !BT_IN_CHG_n ){;}; LED_CHARGE = 0; bt_chg_ready = false; }
|
||||
#define PM_Chg_Stop() { BT_TEMP_P = 0; BT_CHG_DISABLE(); LED_CHARGE = 0; bt_authorized = false; }
|
||||
|
||||
|
||||
// これを呼ぶ前に、現在温度を教えておく必要があります。
|
||||
|
||||
@ -251,7 +251,7 @@ extern u8 raw_adc_temperature;
|
||||
|
||||
extern u8 iic_burst_state;
|
||||
extern bit temp_zone_charge_disable;
|
||||
extern bit bt_chg_ready;
|
||||
extern bit bt_authorized;
|
||||
|
||||
|
||||
/* ========================================================
|
||||
@ -265,7 +265,7 @@ extern bit bt_chg_ready;
|
||||
5) <EFBFBD>V
|
||||
6) ( rcomp & 0xFF )
|
||||
7) raw_adc_temperature
|
||||
8) ( !temp_zone_charge_disable | ( bt_chg_ready << 1 ) )
|
||||
8) ( !temp_zone_charge_disable | ( bt_authorized << 1 ) )
|
||||
9)
|
||||
======================================================== */
|
||||
u8 extinfo_read()
|
||||
@ -286,7 +286,7 @@ u8 extinfo_read()
|
||||
infos[4] = mgic_version[1];
|
||||
infos[5] = (u8)( _dbg_rcomp & 0xFF );
|
||||
infos[6] = raw_adc_temperature;
|
||||
infos[7] = ( !temp_zone_charge_disable | ( bt_chg_ready << 1 ) );
|
||||
infos[7] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) );
|
||||
infos[8] = system_status.info_fullcolor;
|
||||
|
||||
iic_burst_state++;
|
||||
|
||||
@ -29,7 +29,7 @@ static void send_getup_to_soc();
|
||||
//=========================================================
|
||||
extern bit info_led_off;
|
||||
extern bit going_to_sleep;
|
||||
extern bit bt_chg_ready;
|
||||
extern bit bt_authorized;
|
||||
|
||||
static u8 timeout_sleep;
|
||||
extern u8 chg_led_override;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user