📄 drv_key.c
字号:
/******************************************************************************/
/* [NAME] :drv_KEY.c */
/* [OUTLINE]: */
/* [HISTORY]: */
/* [NOTE] :TAB=4 */
/******************************************************************************/
//#include <machine.h> /* Z80梡 */
#include "BU18703.h" /* CPU儗僕僗僞掕媊 */
#include "prototype.h"
#include "extern.h"
/*----------------------------------------------------------------------------*/
//UINT08 gu08_ff_buffer;
//UINT08 gu08_fr_buffer;
//UINT08 gu08_kind_Alm1;
//UINT08 gu08_kind_Alm2;
/* B0003 --->
//YTC0000 OKAMOTO's (gentleman) Assigin
//AD keyscan偺偟偒偄抣丒杮懱懁
const UINT08 ADKEY_SLESH[] =
{
0xC0, // 0 偙偺抣埲忋傪OFF
0xA0, // 1 偙偺抣埲忋傪1
0x80, // 2 偙偺抣埲忋傪2
0x60, // 3 偙偺抣埲忋傪3
0x3B, // 4 偙偺抣埲忋傪4
0x14, // 5 偙偺抣埲忋傪5
// 6 偙偺抣埲忋傪6偲偡傞丅
};
//AD keyscan偺偟偒偄抣丒WIREDremonocon梡丅Vdd-Vf偱嶼弌丅
const UINT08 ADKEY_SLESH_WIRE[] =
{
0xCA, // 0
0xB3, // 1
0x9A, // 2
0x80, // 3
0x63, // 4
0x43, // 5
// 6
};
*/
const UINT08 ADKEY_SLESH[] =
{
0xC0, // 0 偙偺抣埲忋傪OFF
0xA0, // 1 偙偺抣埲忋傪1
0x80, // 2 偙偺抣埲忋傪2
0x60, // 3 偙偺抣埲忋傪3
0x3B, // 4 偙偺抣埲忋傪4
0x14, // 5 偙偺抣埲忋傪5
// 6 偙偺抣埲忋傪6偲偡傞丅
};
// B0003 <---
/*----------------------------------------------------------------------------*/
/* [NAME] :DrvKEY_ScanKey */
/* [FUNCTION] : */
/* [RETURN] :void */
/* [PARAMETER]:void */
/* [HISTORY] : */
/* [NOTE] : */
/*----------------------------------------------------------------------------*/
void DrvKEY_ScanKey( void )
{
// 20041206 final PCB assigin
// Vdd GND
//----
// 0 1 2 3 4 5 6
//CCT off reserve reserve reserve SW521 (sw520) SW501
// CHA_ON (TU_ON) PLAY
//----
//AD2 0 7 8 9 10 11 12
//BOOST off - - SW517 SW516 SW515 SW514
// BBEQSR BB_EQ DBB (TEST)
//----
//AD3 0 13 14 15 16 17 18
//FUNC off SW513 SW512 SW511 SW510 SW509 SW508
// ESP EQ_SR SR DIR- PROG MODE
//----
//AD4 0 19 20 21 22 23 24
//MAIN off SW507 SW506 SW505 SW504 SW503 SW502
// PRG/MOD EQ DIR+ FR FF STOP
//----
//AD5 0 25 26 27 28 29 30
//REMOTE off SW505 SW904 SW903 SW902 SW901 -
// DIR+rem FRrem FFrem STOPrem PLAYrem
//----
//AD6 0 31 32 33 34 35 36
//VR off SW519 SW518
// VR- VR+
// 椺奜張棟
// FF off_edge ?37 (500mS埲撪偵僆僼)
// FR off_edge ?38
// FF on_hold ?39 (300ms枅偵key_buff偵愊傓)
// FR on_hold ?40
// VR++ on_hold ?41
// VR-- on_hold ?42 //System.h傪尒偰丅
//B0003 --->
// VDD GND
//--- 0 1 2 3 4 5 6
//AD0 off SW509 3/4VDD reverse SW509 1/2VDD reverse reverse SW509 GND
//FUNC POWER OFF TUNER CD
//--- 0 7 8 9 10 11 12
//AD2 off SW526 SW525 SW524 SW523 SW522 SW521
//FUNC ANTI TUNER/BAND PLAY/PAUSE AUX TAPE POWER
//--- 0 13 14 15 16 17 18
//AD3 off SW516 SW515 SW514 SW513 SW512 SW511
//FUNC DBB DIR-/PREST- DIR+/PRESET+ VR- VR+ EQ
//--- 0 19 20 21 22 23 24
//AD4 off SW506 SW505 SW504 SW503 SW502 SW501
//FUNC FR/DN FF/UP PROG/CLKSET MODE/MONO STOP/ERASE TEST
// FF off edge 25
// FR off edge 26
// FF on hold 27
// FF on hold 28
//B0003 <---
// 慡僉乕僆僼偐傜偺扨堦僉乕擖椡偱僆儞擣幆丅key_buff偵愊傓丅
// VR++,--偺墴偟懕偗偼300mS枅偵摨堦僉乕僐乕僪傪key_buff偵愊傓丅
// FF,FR僆儞擣幆偐傜500mS埲撪偵棧偝傟偨傜丄off_edge傪key_buff偵愊傓丅
// FF,FR500mS埲忋墴偟懕偗偨傜丄on_hold傪key_buff偵愊傓丅埲崀300mS枅偵on_hold傪key_buff偵愊傓丅
//
// A/D曄姺婍偼帺摦弰夞偝偣偰偄傞偺偱丄慡僠儍儞僱儖堦婥偵僠僃僢僋壜擻丅
//
// FF/FR in_hold 偐傜偺夝彍偱 "KEY_SEARCH_RELEASE"傪愊傓傒偨偄丅側傞傎偳丅
// 20041026 俁侽昩AutoPowerControl梡婡擻捛壛
// 20041214 徣ROM
static UINT08 keyscan_scc;
/* B0003 --->
static UINT08 now_key[6];
static UINT08 old_key[6];
*/
// static UINT08 now_key[4]; //AD
// static UINT08 old_key[4]; //AD
//B0003 <---
static UINT08 now_key[5];
static UINT08 old_key[5];
static UINT08 key_fixed;
static UINT08 chat_count;
static UINT08 chat_f;
// UINT08 ctmp;
// old_key0 = now_key0; //慜夞偺僉乕忬懺傪曐懚
// old_key1 = now_key1; //
// old_key2 = now_key2; //
// old_key3 = now_key3; //
// old_key4 = now_key4; //
// old_key5 = now_key5; //
//慜夞偺僉乕忬懺傪曐懚 //
//B0003 for(gu08_i=0; gu08_i<6; gu08_i++)
// for(gu08_i=0; gu08_i<4; gu08_i++) //B0003 //AD
for(gu08_i=0; gu08_i<5; gu08_i++) //B0003 //AP
{
old_key[gu08_i]=now_key[gu08_i];
}
//20041207 HOLD峫椂斉丅
//嘆 Wrem偼HOLD偐偗側偄丅
// now_key4 = DrvKEY_GetkeyNumber( CPU_ADC_ADR5 );
// now_key4 = DrvKEY_GetkeyNumberWrem( CPU_ADC_ADR5 );
//B0002 now_key[4] = DrvKEY_GetkeyNumberWrem( CPU_ADC_ADR5 );
//YTC000 徣ROM
// if(now_key[4]==6)
// { //倂rem偺GND儗儀儖偼Nokey埖偄丅BIOS儗儀儖偱檰偹傞丅
// now_key[4]=0;
// }
// if(now_key4==6)
// { //倂rem偺GND儗儀儖偼Nokey埖偄丅BIOS儗儀儖偱檰偹傞丅
// now_key4=0;
// }
/* B0003 --->
#if LCD_DM // SDC 20050214
if(gu08_sts_HOLDSW==0) //HOLDon
{ //HOLD //noKEY傪愊傓
//嘇HOLD on帪偺張棟丅Wrem埲奜傪Nokey偵丅
// now_key0=now_key1=now_key2=now_key3=now_key4=now_key5=0; //偙偺曽偑彫偝偄丅Areg=0偑堦夞偩偗偱嵪傓丅
// now_key0=now_key1=now_key2=now_key3=now_key5=0; //偙偺曽偑彫偝偄丅Areg=0偑堦夞偩偗偱嵪傓丅
now_key[0]=now_key[1]=now_key[2]=now_key[3]=now_key[5]=0; //偙偺曽偑彫偝偄丅Areg=0偑堦夞偩偗偱嵪傓丅
}
else
#endif
{ //HOLD off
//嘊尰嵼偺僉乕忬懺傪庢摼
//A/D傕偺丅
now_key[1] = DrvKEY_GetkeyNumber( CPU_ADC_ADR2 );
now_key[2] = DrvKEY_GetkeyNumber( CPU_ADC_ADR3 );
now_key[3] = DrvKEY_GetkeyNumber( CPU_ADC_ADR4 );
now_key[5] = DrvKEY_GetkeyNumber( CPU_ADC_ADR6 );
//PLAY/STOP2/(TU_ON)僠僃僢僋
now_key[0]=0;
// if( ( CPU_SIOF_PIODR & piTU_ON ) == 0 ) {now_key[0]= 4;} //僠儏乕僫乕晅偒嶌傞恖乣丅傛傠偟偔偅丅
if( ( CPU_SIOF_PIODR & piCHA_ON ) == 0 ){now_key[0] = 5;}
if( ( CPU_SIOF_PIODR & piPLAY ) == 0 ){ now_key[0] = 6;}
}
*/
now_key[0] = gu08_RCR_Key;
now_key[1] = DrvKEY_GetkeyNumber( CPU_ADC_ADR2 );
now_key[2] = DrvKEY_GetkeyNumber( CPU_ADC_ADR3 );
now_key[3] = DrvKEY_GetkeyNumber( CPU_ADC_ADR4 );
now_key[4] = DrvKEY_GetkeyNumber( CPU_ADC_ADR5 ); //Ap
// B0003 <---
switch ( keyscan_scc )
{
case 0: //婲摦捈屻
if( CPU_ADC_CR & B00100000 )
{ //帺摦弰夞偑堦弰偟偨側傜偽僉乕僗僉儍儞奐巒
chat_count = 1;
keyscan_scc = 1;
}
break;
case 1: //慡僉乕僆僼懸偪
// if((now_key0 == 0) && (now_key1 == 0) && (now_key2 == 0) && (now_key3 == 0)){ //慡僉乕僆僼
// if( ( now_key0 == 0 ) && ( now_key1 == 0 ) && ( now_key2 == 0 ) && ( now_key3 == 0 ) && ( now_key4 == 0 )&& ( now_key5 == 0 ) )
//B0003 if( ( now_key[0] == 0 ) && ( now_key[1] == 0 ) && ( now_key[2] == 0 ) && ( now_key[3] == 0 ) && ( now_key[4] == 0 )&& ( now_key[5] == 0 ) )
// if( ( now_key[0] == 0 ) && ( now_key[1] == 0 ) && ( now_key[2] == 0 ) && ( now_key[3] == 0 ) ) //B0002 //AD
if( ( now_key[0] == 0 ) && ( now_key[1] == 0 ) && ( now_key[2] == 0 ) && ( now_key[3] == 0 ) &&(now_key[4]==0)) //B0002 //Ap
{ //慡僉乕僆僼
if( --chat_count == 0 )
{ //ALL off 妋掕
keyscan_scc = 2;
chat_f = B00000000;
//FF,FR摿庩張棟丅 0.5SEC埲撪偵棧偝傟偨傜丄SKIP偡傞偟偔傒
switch ( key_fixed )
{
case KEY_FF:
if( gu08_timer_KeyRepeat != 0 )
{ //0.5sec埲撪丒丒丒SKIP敪峴
DrvKEY_SaveKey( KEY_FF_SKIP);
}
break;
case KEY_FR:
if( gu08_timer_KeyRepeat != 0 )
{ //0.5sec埲撪丒丒丒SKIP敪峴
DrvKEY_SaveKey( KEY_FR_SKIP);
}
break;
case KEY_FF_SEARCH:
case KEY_FR_SEARCH:
//B0002 --->
// DrvKEY_SaveKey( KEY_SEARCH_RELEASE);
if( gu08_now_mode == 2 )
{
DrvKEY_SaveKey( key_fixed+3);
}
else
{
DrvKEY_SaveKey( KEY_SEARCH_RELEASE );
}
//B0002 <---
break;
}
}
}
else
{ //傑偩墴偝傟偰傞
switch ( key_fixed )
{
case KEY_FF:
if( gu08_timer_KeyRepeat == 0 )
{ //0.5sec宱夁丒丒丒
DrvKEY_SaveKey( KEY_FF_SEARCH );
key_fixed = KEY_FF_SEARCH; // FF,FR挿墴偟妋掕丅僒乕僠偵擖傞摍
//YTC00C 20050115 gu08_timer_KeyRepeat = ( 300 / 2 ); //(300/2); //師夞偐傜俁侽侽倣俽
gu08_timer_KeyRepeat = ( CONST_EVR_KEY_REPEAT ); //YTC00C 20050115
}
break;
case KEY_FR:
if( gu08_timer_KeyRepeat == 0 )
{ //0.5sec宱夁丒丒丒
DrvKEY_SaveKey( KEY_FR_SEARCH );
key_fixed = KEY_FR_SEARCH; // FF,FR挿墴偟妋掕丅僒乕僠偵擖傞摍
//YTC00C 20050115 gu08_timer_KeyRepeat = ( 300 / 2 ); //(300/2); //師夞偐傜俁侽侽倣俽
gu08_timer_KeyRepeat = ( CONST_EVR_KEY_REPEAT ); //YTC00C 20050115
}
break;
case KEY_PRESET_UP: //B0004
case KEY_PRESET_DN: //B0004
if( gu08_now_mode != 2) //B0004
break; //B0004
if( gu08_timer_KeyRepeat == 0 )
{ //0.3sec偝傜偵宱夁
DrvKEY_SaveKey( key_fixed );
gu08_timer_KeyRepeat = ( 400/10 ); //師夞偐傜XXX倣俽 *.h偱掕媊偡傞
}
break;
case KEY_FF_SEARCH:
case KEY_FR_SEARCH:
if( gu08_timer_KeyRepeat == 0 )
{ //0.3sec偝傜偵宱夁
DrvKEY_SaveKey( key_fixed );
gu08_timer_KeyRepeat = ( CONST_FFFR_KEY_REPEAT ); //師夞偐傜XXX倣俽 *.h偱掕媊偡傞
}
break;
case KEY_UP:
case KEY_DOWN:
if( gu08_timer_KeyRepeat == 0 )
{ //0.3sec偝傜偵宱夁
DrvKEY_SaveKey( key_fixed );
gu08_timer_KeyRepeat = ( CONST_EVR_KEY_REPEAT ); //師夞偐傜XXX倣俽 *.h偱掕媊偡傞
}
break;
}
chat_count = 1;
}
break;
case 2: //僉乕擖椡懸偪
//B0003 for(gu08_i=0; gu08_i < 6; gu08_i++)
// for(gu08_i=0; gu08_i < 4; gu08_i++) //B0003 //AD
for(gu08_i=0; gu08_i < 5; gu08_i++) //B0003 //Ap
{
if(( chat_f == 0xff ) ||(chat_f == gu08_i))
{ //懠俠俫偵僠儍僞庢傝拞偺僉乕偑柍偄||偙偺俠俫偑僠儍僞庢傝拞側傜偽
switch(DrvKEY_CheckOn( now_key[gu08_i], old_key[gu08_i] ))
{
case KEY_CHATTER:
chat_f = gu08_i;
break;
case KEY_ON:
/* B0002 --->
#if !LCD_DM // SDC 20050214
if( !gu08_sts_HOLDSW )
DrvLCD_Hold_On();
else
{
#endif
*/
//B0002 <---
if( gu08_i == 0 )
DrvKEY_SaveKey( gu08_RCR_Key );
else
DrvKEY_SaveKey((6 * gu08_i) + now_key[gu08_i] );
keyscan_scc = 1;
/* B0002 --->
#if !LCD_DM // SDC 20050214
}
#endif
B0002 <---
*/
break;
default: //off
chat_f = 0xff;
break;
}
}
}
if( keyscan_scc == 1 )
{ //僉乕墴偝傟偨側傜偽丒丒丒 僆僼懸偪僔乕働儞僗傊
chat_count = 1; //YTC007 20050107
gu08_timer_KeyRepeat = CONST_FFFR_KEY_1ST;
key_fixed = gu08_KeyBuffer; //
}
break;
default:
keyscan_scc = 0; //朶憱杊巭嶔
break;
}
return;
}
/*----------------------------------------------------------------------------*/
/* [NAME] :DrvKEY_GetkeyNumber */
/* [FUNCTION] : */
/* [RETURN] :UINT08 */
/* [PARAMETER]:UINT08 u08_key_now */
/* :UINT08 u08_key_old */
/* [HISTORY] : */
/* [NOTE] : */
/*----------------------------------------------------------------------------*/
UINT08 DrvKEY_GetkeyNumber( UINT08 ad_value )
{
//UINT08 i;
// for(gu08_i=0; gu08_i<6; gu08_i++)
// {
// if(ADKEY_SLESH[gu08_i] < ad_value) break;
// }
// return(gu08_i);
//#if 0
if( ad_value > 0xC0 )
{
return 0;
} // off
else if( ad_value > 0xA0 )
{
return 1;
} // 1
else if( ad_value > 0x80 )
{
return 2;
} // 2
else if( ad_value > 0x60 )
{
return 3;
} // 3
else if( ad_value > 0x40 )
{
return 4;
} // 4
else if( ad_value > 0x20 )
{
return 5;
} // 5
else
{
return 6;
} // 6
//#endif
}
/*------------------------------------*/
UINT08 DrvKEY_GetkeyAlm1( UINT08 ad_value ) //alm1 slide sw value
{
if( ad_value > 0xC0 )
{
return 31;
} // off
else if( ad_value > 0xA0 )
{
return 32;
} // 32
else if( ad_value > 0x80 )
{
return 33;
} // on
else if( ad_value > 0x60 )
{
return 34;
} // 34
else if( ad_value > 0x40 )
{
return 35;
} // 35
else if( ad_value > 0x20 )
{
return 36;
} // 36
else
{
return 37;
} // set
//#endif
}
/*------------------------------------------*/
UINT08 DrvKEY_GetkeyAlm2( UINT08 ad6_value ) //alm1 slide sw value
{
if( ad6_value > 0xC0 )
{
return 38;
} // off
else if( ad6_value > 0xA0 )
{
return 39;
} // 32
else if( ad6_value > 0x80 )
{
return 40;
} // on
else if( ad6_value > 0x60 )
{
return 41;
} // 34
else if( ad6_value > 0x40 )
{
return 42;
} // 35
else if( ad6_value > 0x20 )
{
return 43;
} // 36
else
{
return 44;
} // set
//#endif
}
/* B0002 --->
//YTC000 徣ROM
UINT08 DrvKEY_GetkeyNumberWrem( UINT08 ad_value )
{
//UINT08 i;
for(gu08_i=0; gu08_i<6; gu08_i++)
{
if(ADKEY_SLESH_WIRE[gu08_i] < ad_value)
return(gu08_i);
}
return(0); // "6"傪"0"偵偡傞丅
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -