mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
SPFL対応。
アモルファスの件 機種識別 ROM確保に1色お知らせ廃止。 led.cを分割(その1) git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@333 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
0d13eb6bc2
commit
6396872ddd
BIN
trunk/bsr.lmf
BIN
trunk/bsr.lmf
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -32,19 +32,27 @@ enum model_
|
|||||||
MODEL_RESERVED3,
|
MODEL_RESERVED3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum family_
|
||||||
|
{
|
||||||
|
FAMILY_CTR,
|
||||||
|
FAMILY_SPFL,
|
||||||
|
FAMILY_SHRIMP
|
||||||
|
};
|
||||||
|
|
||||||
// タスクシステムの状態情報など
|
// タスクシステムの状態情報など
|
||||||
typedef struct _system_status_
|
typedef struct _system_status_
|
||||||
{
|
{
|
||||||
enum pwr_state_ pwr_state;
|
enum pwr_state_ pwr_state;
|
||||||
enum poweron_reason_ poweron_reason;
|
enum poweron_reason_ poweron_reason;
|
||||||
unsigned char reboot:1;
|
unsigned char reboot:1;
|
||||||
unsigned char info_fullcolor:1;
|
// unsigned char info_fullcolor:1;
|
||||||
unsigned char force_off:1;
|
unsigned char force_off:1;
|
||||||
unsigned char captureBox:1; // キャプチャ箱 SDKには実機と返す
|
unsigned char captureBox:1; // キャプチャ箱 SDKには実機と返す
|
||||||
unsigned char taikendai:1;
|
unsigned char taikendai:1;
|
||||||
unsigned char taikendai_nbd:1;
|
unsigned char taikendai_nbd:1;
|
||||||
unsigned char is_dev:1;
|
unsigned char is_dev:1;
|
||||||
enum model_ model;
|
enum model_ model;
|
||||||
|
enum family_ family;
|
||||||
}system_status_;
|
}system_status_;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
465
trunk/led.c
465
trunk/led.c
@ -1,6 +1,5 @@
|
|||||||
/* ========================================================
|
/* ========================================================
|
||||||
LED.c
|
LED.c
|
||||||
|
|
||||||
======================================================== */
|
======================================================== */
|
||||||
#pragma sfr
|
#pragma sfr
|
||||||
|
|
||||||
@ -25,59 +24,23 @@
|
|||||||
#define BIT_MD0 0
|
#define BIT_MD0 0
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
|
||||||
// スリープ中明滅のテーブル。マジか。
|
|
||||||
const u8 LED_PTN_SLEEP[] = {
|
|
||||||
25, 38, 52, 68, 83, 98, 110, 119,
|
|
||||||
125, 128, 128, 125, 119, 110, 98, 83,
|
|
||||||
68, 52, 38, 25, 16, 10, 8, 8,
|
|
||||||
8, 8, 8, 8, 8, 8, 10, 16
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#define LED_SLEEP_FRAME_LEN 71
|
|
||||||
#define LED_SLEEP_DIM_LEN 71
|
|
||||||
#define LED_SLEEP_FRAME_NUM 32
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
static void led_pow_normal( );
|
bit ledInitialized;
|
||||||
static void led_pow_sleep( );
|
|
||||||
static void led_pow_bt_empty();
|
|
||||||
static u8 led_pow_batt_low();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
|
||||||
// 赤LEDの電池残量LEDの点滅パターン
|
|
||||||
st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 };
|
|
||||||
|
|
||||||
bit initialized;
|
|
||||||
|
|
||||||
|
|
||||||
// お知らせLEDのパターンデータ
|
// お知らせLEDのパターンデータ
|
||||||
uni_info_LED info_LED;
|
uni_info_LED info_LED;
|
||||||
|
|
||||||
// フルカラーとの自動判別のため、一時領域としてもっておく
|
|
||||||
bit LED_pow_red_Mirror;
|
|
||||||
|
|
||||||
bit info_led_off;
|
bit info_led_off;
|
||||||
bit info_led_override;
|
bit info_led_override;
|
||||||
bit cam_led_update;
|
|
||||||
|
|
||||||
|
|
||||||
// 電源LEDのスリープパターンのステータス類
|
|
||||||
u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
|
||||||
u8 frame_sleep;
|
|
||||||
st_LED_dim_status LED_dim_status_sleep;
|
|
||||||
|
|
||||||
|
|
||||||
// 充電中か否か
|
// 充電中か否か
|
||||||
extern bit BT_IN_CHG_delayed_n;
|
extern bit BT_IN_CHG_delayed_n;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
#define led_fade_to( now, goal ) now = fade_to( now, goal )
|
#define led_fade_to( now, goal ) now = fade_to( now, goal )
|
||||||
|
|
||||||
@ -146,9 +109,6 @@ void LED_init( )
|
|||||||
6 電源 L
|
6 電源 L
|
||||||
7 電源 H
|
7 電源 H
|
||||||
*/
|
*/
|
||||||
INFO_LED_IS_FULLCOLOR_PU = 1; // お知らせLEDを識別 先に上げておく
|
|
||||||
INFO_LED_IS_FULLCOLOR_PM = 1;
|
|
||||||
|
|
||||||
TAU0EN = 1;
|
TAU0EN = 1;
|
||||||
TPS0 = BIT_PRS012 | BIT_PRS002; // マスタークロックはCK01,8M/2 /2^4 = 250kHz
|
TPS0 = BIT_PRS012 | BIT_PRS002; // マスタークロックはCK01,8M/2 /2^4 = 250kHz
|
||||||
|
|
||||||
@ -170,32 +130,13 @@ void LED_init( )
|
|||||||
|
|
||||||
TDR00 = LED_BRIGHT_MAX - 1; // 周期 10bit
|
TDR00 = LED_BRIGHT_MAX - 1; // 周期 10bit
|
||||||
|
|
||||||
// お知らせLEDを識別 //
|
// system_status.info_fullcolor = 1;
|
||||||
// INFO_LED_IS_FULLCOLOR_PU = 1; // もうちょっと前に上げておかないと…
|
|
||||||
system_status.info_fullcolor = 1;
|
|
||||||
if( system_status.model == MODEL_TS_BOARD )
|
|
||||||
{
|
|
||||||
#ifndef _DBG_FORCE_FULLCOLOR_
|
|
||||||
system_status.info_fullcolor = 0;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if( INFO_LED_IS_FULLCOLOR_n )
|
|
||||||
{
|
|
||||||
system_status.info_fullcolor = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
INFO_LED_IS_FULLCOLOR_n = 0;
|
|
||||||
INFO_LED_IS_FULLCOLOR_PM = 0;
|
|
||||||
|
|
||||||
LED_duty_notify_red = 0;
|
LED_duty_notify_red = 0;
|
||||||
LED_duty_notify_blu = 0;
|
LED_duty_notify_blu = 0;
|
||||||
LED_duty_notify_grn = 0;
|
LED_duty_notify_grn = 0;
|
||||||
LED_pow_red = 0;
|
LED_pow_red = 0;
|
||||||
LED_CAM = 0;
|
LED_CAM = 0;
|
||||||
LED_old_pow_red = 0;
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
|
|
||||||
if( system_status.reboot )
|
if( system_status.reboot )
|
||||||
{
|
{
|
||||||
@ -203,7 +144,7 @@ void LED_init( )
|
|||||||
LED_duty_pow_blu = LED_BRIGHT_MAX;
|
LED_duty_pow_blu = LED_BRIGHT_MAX;
|
||||||
}
|
}
|
||||||
info_led_off = false;
|
info_led_off = false;
|
||||||
initialized = true;
|
ledInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -215,266 +156,12 @@ void LED_stop( )
|
|||||||
TAU0EN = 0;
|
TAU0EN = 0;
|
||||||
LED_pow_red = 0;
|
LED_pow_red = 0;
|
||||||
LED_CAM = 0;
|
LED_CAM = 0;
|
||||||
LED_old_pow_red = 0;
|
ledInitialized = false;
|
||||||
initialized = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
|
||||||
// 電源LED
|
|
||||||
LED_POW_B,R 6,7
|
|
||||||
|
|
||||||
TDR00 周期(0x03FF。TPS0で250kHzでカウントアップ。10bitなら250Hz位になる)
|
|
||||||
TDR0x Duty 0で消灯、TDR00(より大 =0x03FF以上)で点灯です。
|
|
||||||
|
|
||||||
enum pwr_state_{
|
|
||||||
OFF_TRIG = 0,
|
|
||||||
ON_CHECK,
|
|
||||||
ON_TRIG,
|
|
||||||
ON,
|
|
||||||
SLEEP
|
|
||||||
};
|
|
||||||
|
|
||||||
enum LED_ILUM_MODE{
|
|
||||||
LED_POW_ILM_AUTO,
|
|
||||||
LED_POW_ILM_ON,
|
|
||||||
LED_POW_ILM_SLEEP,
|
|
||||||
LED_POW_ILM_CEOFF
|
|
||||||
};
|
|
||||||
======================================================== */
|
|
||||||
void tsk_led_pow( )
|
|
||||||
{
|
|
||||||
if( ! initialized )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
// おしまい
|
|
||||||
}
|
|
||||||
|
|
||||||
info_led_override = false;
|
|
||||||
|
|
||||||
switch ( vreg_ctr[VREG_C_LED_POW] )
|
|
||||||
{
|
|
||||||
case ( LED_POW_ILM_AUTO ):
|
|
||||||
default:
|
|
||||||
led_pow_normal( );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( LED_POW_ILM_SLEEP ):
|
|
||||||
led_pow_sleep( );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( LED_POW_ILM_ON ):
|
|
||||||
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( LED_POW_ILM_OFF ):
|
|
||||||
led_fade_to( LED_duty_pow_blu, 0 );
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( LED_POW_ILM_ONLY_RED ):
|
|
||||||
LED_duty_pow_blu = 0;
|
|
||||||
LED_pow_red_Mirror = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( LED_POW_ILM_ONLY_BLUE ):
|
|
||||||
LED_duty_pow_blu = LED_BRIGHT_MAX;
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( LED_POW_ILM_FORCE_BT_EMPTY ):
|
|
||||||
led_pow_bt_empty();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK )
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
info_led_override = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 実際にLEDの更新
|
|
||||||
if( system_status.info_fullcolor )
|
|
||||||
{
|
|
||||||
LED_pow_red = LED_pow_red_Mirror;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_old_pow_red = LED_pow_red_Mirror;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( info_led_override )
|
|
||||||
{
|
|
||||||
if( system_status.info_fullcolor )
|
|
||||||
{
|
|
||||||
LED_duty_notify_blu = 0;
|
|
||||||
LED_duty_notify_grn = 0;
|
|
||||||
LED_duty_notify_red = LED_pow_red_Mirror ? 255: 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_duty_old_NOTIFY = LED_pow_red_Mirror ? 255: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
|
||||||
電池残量で、 青→赤→赤点滅
|
|
||||||
======================================================== */
|
|
||||||
static void led_pow_normal( )
|
|
||||||
{
|
|
||||||
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
|
||||||
frame_sleep = 0;
|
|
||||||
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
|
|
||||||
|
|
||||||
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
// おしまい
|
|
||||||
}
|
|
||||||
|
|
||||||
// 青点灯
|
|
||||||
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
|
||||||
ホタルパターン
|
|
||||||
電池残量で赤→赤点滅にする
|
|
||||||
======================================================== */
|
|
||||||
static void led_pow_sleep( )
|
|
||||||
{
|
|
||||||
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
|
|
||||||
{
|
|
||||||
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
|
||||||
frame_sleep = 0;
|
|
||||||
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
|
|
||||||
return;
|
|
||||||
// おしまい
|
|
||||||
}
|
|
||||||
|
|
||||||
LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128;
|
|
||||||
|
|
||||||
// グラデーションのデルタを計算
|
|
||||||
LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN;
|
|
||||||
led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep );
|
|
||||||
|
|
||||||
// 次のフレームに進める?
|
|
||||||
time_to_next_frame_sleep -= 1;
|
|
||||||
if( time_to_next_frame_sleep == 0 )
|
|
||||||
{
|
|
||||||
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
|
||||||
|
|
||||||
frame_sleep += 1;
|
|
||||||
if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 )
|
|
||||||
{
|
|
||||||
frame_sleep = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
|
||||||
電池が少ないときの共通
|
|
||||||
返値: 0 電池が少なくなかった
|
|
||||||
1 少なかったので共通パターンにした
|
|
||||||
======================================================== */
|
|
||||||
//#define LED_RED_SLEEP_DIM 3
|
|
||||||
static u8 led_pow_batt_low()
|
|
||||||
{
|
|
||||||
// static u8 led_red_dim_count;
|
|
||||||
|
|
||||||
if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO )
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
return 0;
|
|
||||||
// おしまい
|
|
||||||
}
|
|
||||||
|
|
||||||
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 );
|
|
||||||
|
|
||||||
/*
|
|
||||||
減光を試してみたが、このようなお手軽実装ではちらついてしまってだめだ
|
|
||||||
if( vreg_ctr[VREG_C_LED_POW] == LED_POW_ILM_SLEEP )
|
|
||||||
{
|
|
||||||
if( led_red_dim_count == 0 )
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 1;
|
|
||||||
led_red_dim_count = LED_RED_SLEEP_DIM;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
led_red_dim_count -= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*/
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else // 電池が5%未満 かつ アダプタなし
|
|
||||||
{
|
|
||||||
led_pow_bt_empty();
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ========================================================
|
|
||||||
電池がないパターン
|
|
||||||
指定パターンを流す
|
|
||||||
お知らせを上書きしたりする
|
|
||||||
======================================================== */
|
|
||||||
static void led_pow_bt_empty()
|
|
||||||
{
|
|
||||||
static u8 delay;
|
|
||||||
static u8 red_blink_poi;
|
|
||||||
|
|
||||||
info_led_override = true;
|
|
||||||
|
|
||||||
// 赤点滅
|
|
||||||
led_fade_to( LED_duty_pow_blu, 0 );
|
|
||||||
|
|
||||||
// 赤の点滅パターンも指定できる
|
|
||||||
delay += 1;
|
|
||||||
if( delay < 64 ) // フレームの保持時間稼ぎ
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
delay = 0;
|
|
||||||
|
|
||||||
if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) )
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_pow_red_Mirror = 0;
|
|
||||||
}
|
|
||||||
red_blink_poi += 1;
|
|
||||||
if( red_blink_poi >= 32 )
|
|
||||||
{
|
|
||||||
red_blink_poi = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -642,145 +329,7 @@ void tsk_led_notify( )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( system_status.info_fullcolor )
|
led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B );
|
||||||
{
|
led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R );
|
||||||
led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B );
|
led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G );
|
||||||
led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R );
|
|
||||||
led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
led_fade_to2( LED_duty_old_NOTIFY, &LED_dim_status_info_B );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************//**
|
|
||||||
LED_Cam TO02
|
|
||||||
\n BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。
|
|
||||||
\n その間に OFF→BLINK などされると、OFFが無視されます。
|
|
||||||
*********************************************************/
|
|
||||||
void tsk_led_cam( )
|
|
||||||
{
|
|
||||||
static u8 state_led_cam = 0;
|
|
||||||
static u16 task_interval;
|
|
||||||
u8 LED_CAM_mirror;
|
|
||||||
|
|
||||||
DI(); // レジスタへの書き込みで強制起動がかかることがあるため
|
|
||||||
if( !cam_led_update )
|
|
||||||
{
|
|
||||||
if( task_interval != 0 )
|
|
||||||
{
|
|
||||||
task_interval -= 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
|
|
||||||
EI();
|
|
||||||
|
|
||||||
if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 0;
|
|
||||||
state_led_cam = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// ブリンクのように待たせたいとき以外は毎週起動する
|
|
||||||
// (レジスタの変更にすぐに反応する)
|
|
||||||
switch ( vreg_ctr[VREG_C_LED_CAM] )
|
|
||||||
{
|
|
||||||
case ( CAM_LED_OFF ):
|
|
||||||
default:
|
|
||||||
LED_CAM_mirror = 0;
|
|
||||||
state_led_cam = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( CAM_LED_ON ):
|
|
||||||
LED_CAM_mirror = 1;
|
|
||||||
state_led_cam = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( CAM_LED_BLINK ):
|
|
||||||
if( state_led_cam == 0 )
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 1;
|
|
||||||
state_led_cam = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 0;
|
|
||||||
state_led_cam = 0;
|
|
||||||
}
|
|
||||||
task_interval = 250;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( CAM_LED_ON_PLUSE ):
|
|
||||||
if( state_led_cam == 0 )
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 1;
|
|
||||||
state_led_cam = 1;
|
|
||||||
task_interval = 250;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ( CAM_LED_OFF_PLUSE ):
|
|
||||||
if( state_led_cam == 0 )
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 0;
|
|
||||||
state_led_cam = 1;
|
|
||||||
task_interval = 250;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case( CAM_LED_BY_TWL ):
|
|
||||||
// TWL互換 //
|
|
||||||
switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){ //. switchのネストとか…
|
|
||||||
case( TWL_CAMLED_OFF ):
|
|
||||||
LED_CAM_mirror = 0;
|
|
||||||
state_led_cam = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case( TWL_CAMLED_BLINK ):
|
|
||||||
if( state_led_cam == 0 )
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 1;
|
|
||||||
state_led_cam = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_CAM_mirror = 0;
|
|
||||||
state_led_cam = 0;
|
|
||||||
}
|
|
||||||
task_interval = 600 / SYS_INTERVAL_TICK + 250;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case( TWL_CAMLED_ON ):
|
|
||||||
case( TWL_CAMLED_DEF_ON ):
|
|
||||||
default:
|
|
||||||
LED_CAM_mirror = 1;
|
|
||||||
state_led_cam = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // if( system_status.pwr_state == sleep ) ... else ...
|
|
||||||
|
|
||||||
// 輝度更新 //
|
|
||||||
if( system_status.info_fullcolor )
|
|
||||||
{
|
|
||||||
LED_CAM = LED_CAM_mirror;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LED_old_CAM = LED_CAM_mirror;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
19
trunk/led.h
19
trunk/led.h
@ -21,19 +21,6 @@
|
|||||||
#define LED_CAM P7.5
|
#define LED_CAM P7.5
|
||||||
|
|
||||||
|
|
||||||
// 旧仕様 /////////////////////////////
|
|
||||||
// LED_DUTY
|
|
||||||
//#define LED_duty_old_pow_blu TDR06 同じ
|
|
||||||
//#define LED_duty_old_WiFi TDR03 同じ
|
|
||||||
#define LED_duty_old_NOTIFY TDR05
|
|
||||||
//#define LED_duty_old_CAM TDR02
|
|
||||||
//#define LED_duty_old_3d TDR01 同じ
|
|
||||||
// wifi2はPWMできません。
|
|
||||||
#define LED_old_pow_red P1.5
|
|
||||||
#define LED_old_CAM P1.0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define NOTIFY_LED_TERM 32
|
#define NOTIFY_LED_TERM 32
|
||||||
|
|
||||||
|
|
||||||
@ -150,4 +137,10 @@ void LED_stop( );
|
|||||||
extern void tsk_led_cam();
|
extern void tsk_led_cam();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ====================================
|
||||||
|
extern bit ledInitialized;
|
||||||
|
extern bit info_led_override;
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
141
trunk/led_cam.c
Normal file
141
trunk/led_cam.c
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
/******************************************************//**
|
||||||
|
LED_Cam TO02
|
||||||
|
\n BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。
|
||||||
|
\n その間に OFF→BLINK などされると、OFFが無視されます。
|
||||||
|
*********************************************************/
|
||||||
|
#pragma sfr
|
||||||
|
|
||||||
|
#include "incs.h"
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
static u8 state_led_cam = 0;
|
||||||
|
static u16 task_interval;
|
||||||
|
|
||||||
|
bit cam_led_update;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
static void cam_led_twl();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
void tsk_led_cam( )
|
||||||
|
{
|
||||||
|
DI(); // レジスタへの書き込みで強制起動がかかることがあるため
|
||||||
|
if( !cam_led_update )
|
||||||
|
{
|
||||||
|
if( task_interval != 0 )
|
||||||
|
{
|
||||||
|
task_interval -= 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
|
||||||
|
EI();
|
||||||
|
|
||||||
|
if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯
|
||||||
|
{
|
||||||
|
LED_CAM = 0;
|
||||||
|
state_led_cam = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ブリンクのように待たせたいとき以外は毎週起動する
|
||||||
|
// (レジスタの変更にすぐに反応する)
|
||||||
|
switch ( vreg_ctr[VREG_C_LED_CAM] )
|
||||||
|
{
|
||||||
|
case ( CAM_LED_OFF ):
|
||||||
|
default:
|
||||||
|
LED_CAM = 0;
|
||||||
|
state_led_cam = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( CAM_LED_ON ):
|
||||||
|
LED_CAM = 1;
|
||||||
|
state_led_cam = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( CAM_LED_BLINK ):
|
||||||
|
if( state_led_cam == 0 )
|
||||||
|
{
|
||||||
|
LED_CAM = 1;
|
||||||
|
state_led_cam = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LED_CAM = 0;
|
||||||
|
state_led_cam = 0;
|
||||||
|
}
|
||||||
|
task_interval = 250;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( CAM_LED_ON_PLUSE ):
|
||||||
|
if( state_led_cam == 0 )
|
||||||
|
{
|
||||||
|
LED_CAM = 1;
|
||||||
|
state_led_cam = 1;
|
||||||
|
task_interval = 250;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( CAM_LED_OFF_PLUSE ):
|
||||||
|
if( state_led_cam == 0 )
|
||||||
|
{
|
||||||
|
LED_CAM = 0;
|
||||||
|
state_led_cam = 1;
|
||||||
|
task_interval = 250;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case( CAM_LED_BY_TWL ):
|
||||||
|
cam_led_twl();
|
||||||
|
}
|
||||||
|
} // if( system_status.pwr_state == sleep ) ... else ...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cam_led_twl()
|
||||||
|
{
|
||||||
|
// TWL互換 //
|
||||||
|
switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){
|
||||||
|
case( TWL_CAMLED_OFF ):
|
||||||
|
LED_CAM = 0;
|
||||||
|
state_led_cam = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case( TWL_CAMLED_BLINK ):
|
||||||
|
if( state_led_cam == 0 )
|
||||||
|
{
|
||||||
|
LED_CAM = 1;
|
||||||
|
state_led_cam = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LED_CAM = 0;
|
||||||
|
state_led_cam = 0;
|
||||||
|
}
|
||||||
|
task_interval = 600 / SYS_INTERVAL_TICK + 250;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case( TWL_CAMLED_ON ):
|
||||||
|
case( TWL_CAMLED_DEF_ON ):
|
||||||
|
default:
|
||||||
|
LED_CAM = 1;
|
||||||
|
state_led_cam = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
265
trunk/led_pow.c
Normal file
265
trunk/led_pow.c
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
/* ========================================================
|
||||||
|
// 電源LED
|
||||||
|
LED_POW_B,R 6,7
|
||||||
|
|
||||||
|
TDR00 周期(0x03FF。TPS0で250kHzでカウントアップ。10bitなら250Hz位になる)
|
||||||
|
TDR0x Duty 0で消灯、TDR00(より大 =0x03FF以上)で点灯です。
|
||||||
|
|
||||||
|
enum pwr_state_{
|
||||||
|
OFF_TRIG = 0,
|
||||||
|
ON_CHECK,
|
||||||
|
ON_TRIG,
|
||||||
|
ON,
|
||||||
|
SLEEP
|
||||||
|
};
|
||||||
|
|
||||||
|
enum LED_ILUM_MODE{
|
||||||
|
LED_POW_ILM_AUTO,
|
||||||
|
LED_POW_ILM_ON,
|
||||||
|
LED_POW_ILM_SLEEP,
|
||||||
|
LED_POW_ILM_CEOFF
|
||||||
|
};
|
||||||
|
======================================================== */
|
||||||
|
#pragma sfr
|
||||||
|
|
||||||
|
#include "incs.h"
|
||||||
|
#include "led.h"
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// スリープ中明滅のテーブル。マジか。
|
||||||
|
const u8 LED_PTN_SLEEP[] = {
|
||||||
|
25, 38, 52, 68, 83, 98, 110, 119,
|
||||||
|
125, 128, 128, 125, 119, 110, 98, 83,
|
||||||
|
68, 52, 38, 25, 16, 10, 8, 8,
|
||||||
|
8, 8, 8, 8, 8, 8, 10, 16
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 赤LEDの電池残量LEDの点滅パターン
|
||||||
|
st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 };
|
||||||
|
#define LED_SLEEP_FRAME_LEN 71
|
||||||
|
#define LED_SLEEP_DIM_LEN 71
|
||||||
|
#define LED_SLEEP_FRAME_NUM 32
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
static void led_pow_normal( );
|
||||||
|
static void led_pow_sleep( );
|
||||||
|
static void led_pow_bt_empty();
|
||||||
|
static u8 led_pow_batt_low();
|
||||||
|
|
||||||
|
#define led_fade_to( now, goal ) now = fade_to( now, goal )
|
||||||
|
extern u8 fade_to( u8 now, u8 goal );
|
||||||
|
|
||||||
|
#define led_fade_to2( led, status ) led = fade_to2( status )
|
||||||
|
extern u8 fade_to2( st_LED_dim_status* status );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// 電源LEDのスリープパターンのステータス類
|
||||||
|
u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
||||||
|
u8 frame_sleep;
|
||||||
|
st_LED_dim_status LED_dim_status_sleep;
|
||||||
|
|
||||||
|
extern bit ledInitialized;
|
||||||
|
extern bit BT_IN_CHG_delayed_n;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
void tsk_led_pow( )
|
||||||
|
{
|
||||||
|
if( ! ledInitialized )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
// おしまい
|
||||||
|
}
|
||||||
|
|
||||||
|
info_led_override = false;
|
||||||
|
|
||||||
|
switch ( vreg_ctr[VREG_C_LED_POW] )
|
||||||
|
{
|
||||||
|
case ( LED_POW_ILM_AUTO ):
|
||||||
|
default:
|
||||||
|
led_pow_normal( );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( LED_POW_ILM_SLEEP ):
|
||||||
|
led_pow_sleep( );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( LED_POW_ILM_ON ):
|
||||||
|
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
|
||||||
|
LED_pow_red = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( LED_POW_ILM_OFF ):
|
||||||
|
led_fade_to( LED_duty_pow_blu, 0 );
|
||||||
|
LED_pow_red = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( LED_POW_ILM_ONLY_RED ):
|
||||||
|
LED_duty_pow_blu = 0;
|
||||||
|
LED_pow_red = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( LED_POW_ILM_ONLY_BLUE ):
|
||||||
|
LED_duty_pow_blu = LED_BRIGHT_MAX;
|
||||||
|
LED_pow_red = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ( LED_POW_ILM_FORCE_BT_EMPTY ):
|
||||||
|
led_pow_bt_empty();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK )
|
||||||
|
{
|
||||||
|
LED_pow_red = 0;
|
||||||
|
info_led_override = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( info_led_override )
|
||||||
|
{
|
||||||
|
LED_duty_notify_blu = 0;
|
||||||
|
LED_duty_notify_grn = 0;
|
||||||
|
LED_duty_notify_red = LED_pow_red ? 255: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
電池残量で、 青→赤→赤点滅
|
||||||
|
======================================================== */
|
||||||
|
static void led_pow_normal( )
|
||||||
|
{
|
||||||
|
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
||||||
|
frame_sleep = 0;
|
||||||
|
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
|
||||||
|
|
||||||
|
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
// おしまい
|
||||||
|
}
|
||||||
|
|
||||||
|
// 青点灯
|
||||||
|
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
ホタルパターン
|
||||||
|
電池残量で赤→赤点滅にする
|
||||||
|
======================================================== */
|
||||||
|
static void led_pow_sleep( )
|
||||||
|
{
|
||||||
|
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
|
||||||
|
{
|
||||||
|
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
||||||
|
frame_sleep = 0;
|
||||||
|
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
|
||||||
|
return;
|
||||||
|
// おしまい
|
||||||
|
}
|
||||||
|
|
||||||
|
LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128;
|
||||||
|
|
||||||
|
// グラデーションのデルタを計算
|
||||||
|
LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN;
|
||||||
|
led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep );
|
||||||
|
|
||||||
|
// 次のフレームに進める?
|
||||||
|
time_to_next_frame_sleep -= 1;
|
||||||
|
if( time_to_next_frame_sleep == 0 )
|
||||||
|
{
|
||||||
|
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
|
||||||
|
|
||||||
|
frame_sleep += 1;
|
||||||
|
if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 )
|
||||||
|
{
|
||||||
|
frame_sleep = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
電池が少ないときの共通
|
||||||
|
返値: 0 電池が少なくなかった
|
||||||
|
1 少なかったので共通パターンにした
|
||||||
|
======================================================== */
|
||||||
|
static u8 led_pow_batt_low()
|
||||||
|
{
|
||||||
|
if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO )
|
||||||
|
{
|
||||||
|
LED_pow_red = 0;
|
||||||
|
return 0;
|
||||||
|
// おしまい
|
||||||
|
}
|
||||||
|
|
||||||
|
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 );
|
||||||
|
{
|
||||||
|
LED_pow_red = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else // 電池が5%未満 かつ アダプタなし
|
||||||
|
{
|
||||||
|
led_pow_bt_empty();
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
電池がないパターン
|
||||||
|
指定パターンを流す
|
||||||
|
お知らせを上書きしたりする
|
||||||
|
======================================================== */
|
||||||
|
static void led_pow_bt_empty()
|
||||||
|
{
|
||||||
|
static u8 delay;
|
||||||
|
static u8 red_blink_poi;
|
||||||
|
|
||||||
|
info_led_override = true;
|
||||||
|
|
||||||
|
// 赤点滅
|
||||||
|
led_fade_to( LED_duty_pow_blu, 0 );
|
||||||
|
|
||||||
|
// 赤の点滅パターンも指定できる
|
||||||
|
delay += 1;
|
||||||
|
if( delay < 64 ) // フレームの保持時間稼ぎ
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delay = 0;
|
||||||
|
|
||||||
|
if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) )
|
||||||
|
{
|
||||||
|
LED_pow_red = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LED_pow_red = 0;
|
||||||
|
}
|
||||||
|
red_blink_poi += 1;
|
||||||
|
if( red_blink_poi >= 32 )
|
||||||
|
{
|
||||||
|
red_blink_poi = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
140
trunk/loader.c
140
trunk/loader.c
@ -61,6 +61,9 @@ void FSL_Open( void );
|
|||||||
void FSL_Close( void );
|
void FSL_Close( void );
|
||||||
void hdwinit( void );
|
void hdwinit( void );
|
||||||
static void hdwinit2( );
|
static void hdwinit2( );
|
||||||
|
static void chk_platform_type();
|
||||||
|
static void chk_firm_broke();
|
||||||
|
|
||||||
|
|
||||||
extern void main_loop( );
|
extern void main_loop( );
|
||||||
|
|
||||||
@ -110,70 +113,11 @@ void main( )
|
|||||||
hdwinit2( );
|
hdwinit2( );
|
||||||
|
|
||||||
// ファームの整合性チェック //
|
// ファームの整合性チェック //
|
||||||
{
|
chk_firm_broke();
|
||||||
u8 i;
|
|
||||||
u8 comp = 0;
|
|
||||||
|
|
||||||
// ローダーと本体は同じバージョンか?
|
|
||||||
/// 次へのアップデートの途中で終わってないか?
|
|
||||||
for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 らし
|
|
||||||
{
|
|
||||||
comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
|
|
||||||
comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま
|
|
||||||
{
|
|
||||||
comp += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( comp != 0 )
|
|
||||||
{
|
|
||||||
// ファームリストアを試みる
|
|
||||||
firm_restore( );
|
|
||||||
// 帰ってこない。リセットをかける。
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 試遊台判定
|
// 試遊台判定
|
||||||
// デバッガつないでると上手に判定できないことがあります。
|
chk_platform_type();
|
||||||
// P40,41
|
|
||||||
// HH 実機
|
|
||||||
// HL NBD試遊台
|
|
||||||
// LH スタンドアロン試遊台
|
|
||||||
// LL ISデバッガ
|
|
||||||
if( !DIPSW_0 && !DIPSW_1 )
|
|
||||||
{
|
|
||||||
system_status.is_dev = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifndef _FORCE_TAIKENDAI_
|
|
||||||
if( !DIPSW_0 )
|
|
||||||
#else
|
|
||||||
if(1)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
system_status.taikendai = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
system_status.taikendai = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef _FORCE_TAIKENDAI_NBD_
|
|
||||||
if( !DIPSW_1 )
|
|
||||||
#else
|
|
||||||
if(1)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
system_status.taikendai_nbd = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
system_status.taikendai_nbd = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 通常運転
|
// 通常運転
|
||||||
main_loop( );
|
main_loop( );
|
||||||
}
|
}
|
||||||
@ -181,6 +125,80 @@ void main( )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void chk_firm_broke()
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
u8 comp = 0;
|
||||||
|
|
||||||
|
// ローダーと本体は同じバージョンか?
|
||||||
|
/// 次へのアップデートの途中で終わってないか?
|
||||||
|
for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 らし
|
||||||
|
{
|
||||||
|
comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
|
||||||
|
comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま
|
||||||
|
{
|
||||||
|
comp += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( comp != 0 )
|
||||||
|
{
|
||||||
|
// ファームリストアを試みる
|
||||||
|
firm_restore( );
|
||||||
|
// 帰ってこない。リセットをかける。
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================
|
||||||
|
デバッガつないでると上手に判定できないことがあります。
|
||||||
|
●CTRファミリ
|
||||||
|
DEV_DET(P12.[2:1])
|
||||||
|
|
||||||
|
●CTR&その開発機材
|
||||||
|
P40,41 !注意! デバッグ有効でP40がLだとMCUが起動しません!
|
||||||
|
HH 実機
|
||||||
|
HL NBD試遊台
|
||||||
|
LH スタンドアロン試遊台
|
||||||
|
LL ISデバッガ
|
||||||
|
======================================================== */
|
||||||
|
void chk_platform_type()
|
||||||
|
{
|
||||||
|
// ●CTRファミリ //
|
||||||
|
system_status.family = (enum _family)( DEV_DET >> 1 ); /// あぁ...
|
||||||
|
|
||||||
|
// ●CTR&その開発機材 //
|
||||||
|
// 一応初期化
|
||||||
|
system_status.is_dev = 0;
|
||||||
|
system_status.taikendai = 0;
|
||||||
|
system_status.taikendai_nbd = 0;
|
||||||
|
|
||||||
|
switch( DIPSW )
|
||||||
|
{
|
||||||
|
case DIPSW_TAIKENDAI:
|
||||||
|
system_status.taikendai = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DIPSW_TAIKENDAI_NBD:
|
||||||
|
system_status.taikendai_nbd = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DIPSW_ISDEV:
|
||||||
|
system_status.is_dev = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#ifdef _FORCE_TAIKENDAI_
|
||||||
|
system_status.taikendai = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _FORCE_TAIKENDAI_NBD_
|
||||||
|
system_status.taikendai_nbd = 1;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ========================================================
|
// ========================================================
|
||||||
|
|||||||
21
trunk/pm.c
21
trunk/pm.c
@ -796,6 +796,11 @@ err PM_LCD_on( )
|
|||||||
|
|
||||||
PM_VDDLCD_on( );
|
PM_VDDLCD_on( );
|
||||||
|
|
||||||
|
if( system_status.family == FAMILY_SPFL )
|
||||||
|
{
|
||||||
|
SPFL_LCD_AMOL_HV_CONT = 1;
|
||||||
|
}
|
||||||
|
|
||||||
wait_ms( DELAY_PM_TSS_50B_AND_TCOM );
|
wait_ms( DELAY_PM_TSS_50B_AND_TCOM );
|
||||||
|
|
||||||
PM_TCOM_on( );
|
PM_TCOM_on( );
|
||||||
@ -822,7 +827,7 @@ err PM_LCD_on( )
|
|||||||
// BSR //
|
// BSR //
|
||||||
void PM_LCD_off()
|
void PM_LCD_off()
|
||||||
{
|
{
|
||||||
// BLついてたら消す
|
// BLついてたら消す。// チェックするのは割り込みの関係
|
||||||
if( ( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL ) & 0x03 ) != 0 )
|
if( ( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL ) & 0x03 ) != 0 )
|
||||||
{
|
{
|
||||||
u8 tot;
|
u8 tot;
|
||||||
@ -841,9 +846,19 @@ void PM_LCD_off()
|
|||||||
vreg_ctr[VREG_C_COMMAND2] &= ~( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
vreg_ctr[VREG_C_COMMAND2] &= ~( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 液晶電源切る //
|
||||||
|
SPFL_LCD_AMOL_HV_CONT = 0; // 他のファミリでも弊害ないし
|
||||||
|
|
||||||
|
// 50msとか待つし、確認しましょうかね…
|
||||||
if( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD ) != 0 )
|
if( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD ) != 0 )
|
||||||
{
|
{
|
||||||
PM_TCOM_off();
|
if( system_status.family == FAMILY_SPFL )
|
||||||
|
{
|
||||||
|
wait_ms( 10 ); // アモルファス15Vを切ったときのウェイト。数字は暫定
|
||||||
|
}
|
||||||
|
|
||||||
|
PM_TCOM_off();
|
||||||
wait_ms( 1 );
|
wait_ms( 1 );
|
||||||
PM_TCOM_VCS_off( );
|
PM_TCOM_VCS_off( );
|
||||||
wait_ms( DELAY_PM_LCD_OFF );
|
wait_ms( DELAY_PM_LCD_OFF );
|
||||||
@ -852,7 +867,7 @@ void PM_LCD_off()
|
|||||||
vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW;
|
vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF );
|
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF ); // 無条件に発生。マスク無ければ。
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -288,7 +288,7 @@ u8 extinfo_read()
|
|||||||
infos[5] = (u8)( _dbg_rcomp & 0xFF );
|
infos[5] = (u8)( _dbg_rcomp & 0xFF );
|
||||||
infos[6] = raw_adc_temperature;
|
infos[6] = raw_adc_temperature;
|
||||||
infos[7] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) );
|
infos[7] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) );
|
||||||
infos[8] = system_status.info_fullcolor;
|
infos[8] = 1; // system_status.info_fullcolor;
|
||||||
|
|
||||||
iic_burst_state++;
|
iic_burst_state++;
|
||||||
return( infos[ iic_burst_state -1 ] );
|
return( infos[ iic_burst_state -1 ] );
|
||||||
|
|||||||
@ -75,6 +75,13 @@
|
|||||||
|
|
||||||
#define SLP_REQ P12.0
|
#define SLP_REQ P12.0
|
||||||
|
|
||||||
|
// CTR,SPFL,まだ見ぬ派生機識別
|
||||||
|
#define DEV_DET ( P12 & 0x00000110 )
|
||||||
|
#define DEV_CTR ( 0b00 << 1 )
|
||||||
|
#define DEV_SPFL ( 0b01 << 1 )
|
||||||
|
#define DEV_SHRIMP ( 0b10 << 1 )
|
||||||
|
#define DEV_RSV2 ( 0b11 << 1 )
|
||||||
|
|
||||||
// FCRAM
|
// FCRAM
|
||||||
#ifdef _MODEL_TEG2_
|
#ifdef _MODEL_TEG2_
|
||||||
#define FCRAM_RST P14.0
|
#define FCRAM_RST P14.0
|
||||||
@ -114,11 +121,15 @@
|
|||||||
#define BT_TEMP_P P1.7
|
#define BT_TEMP_P P1.7
|
||||||
|
|
||||||
|
|
||||||
|
// SPFLのアモルファスLCDで必要な±15Vの電源。
|
||||||
|
#define SPFL_LCD_AMOL_HV_CONT P20.2
|
||||||
|
|
||||||
|
|
||||||
// 充電せよ(out)
|
// 充電せよ(out)
|
||||||
// 負論理です。注意。
|
// 負論理です。注意。
|
||||||
#define BT_CHG_ENABLE() ( P4.3 = 0 )
|
#define BT_CHG_ENABLE() ( P4.3 = 0 )
|
||||||
#define BT_CHG_DISABLE() ( P4.3 = 1 )
|
#define BT_CHG_DISABLE() ( P4.3 = 1 )
|
||||||
#define BT_CHG_Ena_n P4.3
|
#define BT_CHG_Ena_n ( P4.3 )
|
||||||
|
|
||||||
// 充電中(in)
|
// 充電中(in)
|
||||||
#define BT_IN_CHG_n P5.1
|
#define BT_IN_CHG_n P5.1
|
||||||
@ -194,8 +205,13 @@
|
|||||||
//#define 32k_I1 P12.3 // XT1
|
//#define 32k_I1 P12.3 // XT1
|
||||||
//#define 32k_I2 P12.4 // XT2
|
//#define 32k_I2 P12.4 // XT2
|
||||||
|
|
||||||
#define DIPSW_0 P4.0 // mini cube ソフトウェアディップスイッチ TOOL0、L禁止!
|
// 実機、開発機、試遊台判別。
|
||||||
#define DIPSW_1 P4.1 // mini cube ソフトウェアディップスイッチ TOOL1
|
#define DIPSW ( P4 & 0b00000011 ) // mini cube & ソフトウェアディップスイッチ TOOL0,1。 P4.0は L 注意!
|
||||||
|
#define DIPSW_CTR 0b11 // 未使用
|
||||||
|
#define DIPSW_ISDEV 0b00 // KuCはBattGaugeで判別
|
||||||
|
#define DIPSW_TAIKENDAI 0b10
|
||||||
|
#define DIPSW_TAIKENDAI_NBD 0b01
|
||||||
|
|
||||||
|
|
||||||
#ifndef _MODEL_WM0_
|
#ifndef _MODEL_WM0_
|
||||||
#define SHELL_OPEN P7.1 // INTP5 ふた開閉 (閉じるとL)
|
#define SHELL_OPEN P7.1 // INTP5 ふた開閉 (閉じるとL)
|
||||||
@ -235,11 +251,6 @@
|
|||||||
#define KR_SW_WIFI ( 1 << 4 )
|
#define KR_SW_WIFI ( 1 << 4 )
|
||||||
|
|
||||||
|
|
||||||
#define INFO_LED_IS_FULLCOLOR_n P20.2
|
|
||||||
#define INFO_LED_IS_FULLCOLOR_PM PM20.2
|
|
||||||
#define INFO_LED_IS_FULLCOLOR_PU PU20.2
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#define INT_MSK0_IIC_M_DMA 0b0001000000000000
|
#define INT_MSK0_IIC_M_DMA 0b0001000000000000
|
||||||
|
|||||||
@ -220,30 +220,6 @@ LT=8
|
|||||||
Z=0
|
Z=0
|
||||||
CommandFile=0
|
CommandFile=0
|
||||||
RA_OPT=
|
RA_OPT=
|
||||||
[SrcFile]
|
|
||||||
Source1=loader.c
|
|
||||||
Source2=pm.c
|
|
||||||
Source3=i2c_ctr.c
|
|
||||||
Source4=main.c
|
|
||||||
Source5=magic.c
|
|
||||||
Source6=WDT.c
|
|
||||||
Source7=i2c_mcu.c
|
|
||||||
Source8=i2c_twl.c
|
|
||||||
Source9=led.c
|
|
||||||
Source10=rtc.c
|
|
||||||
Source11=vreg_ctr.c
|
|
||||||
Source12=vreg_twl.c
|
|
||||||
Source13=adc.c
|
|
||||||
Source14=renge\renge.c
|
|
||||||
Source15=accero.c
|
|
||||||
Source16=self_flash.c
|
|
||||||
Source17=sw.c
|
|
||||||
Source18=task_debug.c
|
|
||||||
Source19=task_misc.c
|
|
||||||
Source20=task_sys.c
|
|
||||||
Source21=pedo_alg_thre_det2.c
|
|
||||||
Source22=ini_VECT.c
|
|
||||||
Source23=task_status.c
|
|
||||||
[BuildBefore-AfterCmd]
|
[BuildBefore-AfterCmd]
|
||||||
Before1=c:\cygwin\bin\touch magic.c
|
Before1=c:\cygwin\bin\touch magic.c
|
||||||
After1=ruby nec_s_2_bsrbin2.rb bsr.hex
|
After1=ruby nec_s_2_bsrbin2.rb bsr.hex
|
||||||
@ -720,42 +696,6 @@ Tool1=CC78K0R|W2.13
|
|||||||
Tool2=RA78K0R|W1.33
|
Tool2=RA78K0R|W1.33
|
||||||
Tool3=SK78K0R|V3.10
|
Tool3=SK78K0R|V3.10
|
||||||
Tool4=ID78K0R-QB|V3.61
|
Tool4=ID78K0R-QB|V3.61
|
||||||
[IncFile]
|
|
||||||
Include1=incs_loader.h
|
|
||||||
Include2=jhl_defs.h
|
|
||||||
Include3=config.h
|
|
||||||
Include4=user_define.h
|
|
||||||
Include5=bsr_system.h
|
|
||||||
Include6=renge\renge.h
|
|
||||||
Include7=renge\renge_defs.h
|
|
||||||
Include8=renge\renge_task_immediate.h
|
|
||||||
Include9=vreg_ctr.h
|
|
||||||
Include10=vreg_twl.h
|
|
||||||
Include11=loader.h
|
|
||||||
Include12=i2c_mcu.h
|
|
||||||
Include13=WDT.h
|
|
||||||
Include14=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
|
|
||||||
Include15=fsl_user.h
|
|
||||||
Include16=i2c_ctr.h
|
|
||||||
Include17=pm.h
|
|
||||||
Include18=rtc.h
|
|
||||||
Include19=reboot.h
|
|
||||||
Include20=magic.h
|
|
||||||
Include21=incs.h
|
|
||||||
Include22=i2c_twl.h
|
|
||||||
Include23=accero.h
|
|
||||||
Include24=pedometer.h
|
|
||||||
Include25=sw.h
|
|
||||||
Include26=adc.h
|
|
||||||
Include27=led.h
|
|
||||||
Include28=batt_params.h
|
|
||||||
Include29=pool.h
|
|
||||||
Include30=i2c_twl_defs.h
|
|
||||||
Include31=voltable.h
|
|
||||||
Include32=renge\renge_task_intval.h
|
|
||||||
Include33=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h
|
|
||||||
Include34=self_flash.h
|
|
||||||
Include35=pedo_lpf_coeff.h
|
|
||||||
[Options.LK78K0R 0]
|
[Options.LK78K0R 0]
|
||||||
Version=100
|
Version=100
|
||||||
O0=bsr_k0r.lmf
|
O0=bsr_k0r.lmf
|
||||||
@ -1049,3 +989,65 @@ DefaultMode2=1
|
|||||||
DefaultMode3=1
|
DefaultMode3=1
|
||||||
DefaultMode4=1
|
DefaultMode4=1
|
||||||
DefaultMode5=1
|
DefaultMode5=1
|
||||||
|
[SrcFile]
|
||||||
|
Source1=loader.c
|
||||||
|
Source2=pm.c
|
||||||
|
Source3=i2c_ctr.c
|
||||||
|
Source4=main.c
|
||||||
|
Source5=magic.c
|
||||||
|
Source6=WDT.c
|
||||||
|
Source7=i2c_mcu.c
|
||||||
|
Source8=i2c_twl.c
|
||||||
|
Source9=led.c
|
||||||
|
Source10=rtc.c
|
||||||
|
Source11=vreg_ctr.c
|
||||||
|
Source12=vreg_twl.c
|
||||||
|
Source13=adc.c
|
||||||
|
Source14=renge\renge.c
|
||||||
|
Source15=accero.c
|
||||||
|
Source16=self_flash.c
|
||||||
|
Source17=sw.c
|
||||||
|
Source18=task_debug.c
|
||||||
|
Source19=task_misc.c
|
||||||
|
Source20=task_sys.c
|
||||||
|
Source21=pedo_alg_thre_det2.c
|
||||||
|
Source22=ini_VECT.c
|
||||||
|
Source23=task_status.c
|
||||||
|
Source24=led_cam.c
|
||||||
|
Source25=led_pow.c
|
||||||
|
[IncFile]
|
||||||
|
Include1=incs_loader.h
|
||||||
|
Include2=jhl_defs.h
|
||||||
|
Include3=config.h
|
||||||
|
Include4=user_define.h
|
||||||
|
Include5=bsr_system.h
|
||||||
|
Include6=renge\renge.h
|
||||||
|
Include7=renge\renge_defs.h
|
||||||
|
Include8=renge\renge_task_immediate.h
|
||||||
|
Include9=vreg_ctr.h
|
||||||
|
Include10=vreg_twl.h
|
||||||
|
Include11=loader.h
|
||||||
|
Include12=i2c_mcu.h
|
||||||
|
Include13=WDT.h
|
||||||
|
Include14=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
|
||||||
|
Include15=fsl_user.h
|
||||||
|
Include16=i2c_ctr.h
|
||||||
|
Include17=pm.h
|
||||||
|
Include18=rtc.h
|
||||||
|
Include19=reboot.h
|
||||||
|
Include20=magic.h
|
||||||
|
Include21=incs.h
|
||||||
|
Include22=i2c_twl.h
|
||||||
|
Include23=accero.h
|
||||||
|
Include24=pedometer.h
|
||||||
|
Include25=sw.h
|
||||||
|
Include26=adc.h
|
||||||
|
Include27=led.h
|
||||||
|
Include28=batt_params.h
|
||||||
|
Include29=pool.h
|
||||||
|
Include30=i2c_twl_defs.h
|
||||||
|
Include31=voltable.h
|
||||||
|
Include32=renge\renge_task_intval.h
|
||||||
|
Include33=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h
|
||||||
|
Include34=self_flash.h
|
||||||
|
Include35=pedo_lpf_coeff.h
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user