mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-06-18 16:45:33 -04:00
157 lines
2.9 KiB
C
157 lines
2.9 KiB
C
/******************************************************//**
|
||
LED_Cam TO02
|
||
|
||
BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。
|
||
|
||
その間に OFF→BLINK などされると、OFFが無視されます。
|
||
|
||
$Id$
|
||
*********************************************************/
|
||
#ifndef _WIN32
|
||
|
||
#pragma sfr
|
||
|
||
#endif
|
||
|
||
#include "incs.h"
|
||
#include "led.h"
|
||
#include "vreg_twl.h"
|
||
|
||
|
||
// ========================================================
|
||
static u8 state_led_cam = 0;
|
||
static u16 task_interval;
|
||
|
||
bit cam_led_update;
|
||
|
||
|
||
|
||
// ========================================================
|
||
static void cam_led_twl();
|
||
|
||
|
||
|
||
|
||
/********************************************//**
|
||
インターバル実行タスクと、twlレジスタへの書き込みの2カ所から呼ばれます。
|
||
***********************************************/
|
||
void tsk_led_cam( )
|
||
{
|
||
DI_wt_chk(); // レジスタへの書き込みで強制起動がかかることがあるため
|
||
if( !cam_led_update )
|
||
{
|
||
if( task_interval != 0 )
|
||
{
|
||
task_interval --;
|
||
EI();
|
||
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 ...
|
||
}
|
||
|
||
|
||
/********************************************//**
|
||
TWLからカメラLEDを操作される
|
||
***********************************************/
|
||
static 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 = (u8)( 600 / SYS_INTERVAL_TICK ) + 250;
|
||
break;
|
||
|
||
case( TWL_CAMLED_ON ):
|
||
case( TWL_CAMLED_DEF_ON ):
|
||
default:
|
||
LED_CAM = 1;
|
||
state_led_cam = 1;
|
||
break;
|
||
}
|
||
}
|