📄 card.cpp
字号:
{
case TX_SYN_CODE_STATUS:
//if(wStatusDelay > 0)
//{
PORTB &= ~SPI_CLK;
FMTxStatus = CP_RESET_STATUS;
wStatusDelay = 0;
//bTxCommand = TRUE;
PORTC &= ~CP_RESET;
//}
break;
case CP_RESET_STATUS:
if(wStatusDelay > MS_10)
{
PORTC |= CP_RESET;
FMTxStatus = CP_RESET_DELAY_STATUS;
TxRetryCounts = TX_RETRY_COUNTS;
IdentifyRetryCounts = IDENTIFY_RETRY_COUNTS;
FlagBuff1 &= ~IDENTIFY_ACK;
wStatusDelay = 0;
//bTxCommand = TRUE;
}
break;
case CP_RESET_DELAY_STATUS:
if(wStatusDelay > MS_30)
{
if((IdentifyRetryCounts > 0) && !(FlagBuff1 & IDENTIFY_ACK)) //授权是否通过
{
IdentifyRetryCounts--;
if(IdentifyRetryCounts < (IDENTIFY_RETRY_COUNTS -1))
{
if(wStatusDelay > MS_200)
{
SendIdentifyDeviceLingoes(); //发送CP授权命令
wStatusDelay = 0;
//bTxCommand = TRUE;
}
}
else
{
SendIdentifyDeviceLingoes();
wStatusDelay = 0;
//bTxCommand = TRUE;
}
//FMTxStatus = TX_IDENTIFY_DEVICE_LINGO_STATUS;
//AckAuthStatCoun = ACK_AUTHENTICATION_STATUS_COUNTS;
}
else
{
bTxCommand = FALSE;
}
}
break;
case IDENTIFY_STATUS:
if(wStatusDelay > MS_30)
{
SendSetIpodPreferences();
bTxCommand = FALSE;
}
break;
#if defined(FM_CUP) || defined(FM_CUP_RECORD)
case TX_SEND_CONTEX_BOTTON_PRESS_STATUS:
if(wStatusDelay > MS_10)
{
SendContextButtonStatus(0x00000001);//PRESS_PAUSE_KEY);
FMTxStatus = CONTEX_BOTTON_PRESS_STATUS2;
wStatusDelay = 0;
bTxCommand = TRUE;
}
break;
case CONTEX_BOTTON_PRESS_STATUS2:
if(wStatusDelay > MS_20) //10ms
{
SendContextButtonStatus(RELEASE_PAUSE_KEY);//RELEASE_PLAY_PAUSE_KEY);
FMTxStatus = FMTxStatusBuff;
bTxCommand = FALSE;
}
break;
#endif
default:
break;
}
}
}
////sent iPod some command to do something
if(bTxCommand1 == TRUE)
{
switch(FMTxStatus1)
{
case CONTEX_BOTTON_PRESS_STATUS:
if(wStatusDelay1 > MS_20)
{
SendContextButtonStatus(RELEASE_PAUSE_KEY);
bTxCommand1 = FALSE;
}
break;
default:
break;
}
}
}
////////////
void send_bt_command(unsigned char *p) //MCU发送蓝牙指令
{
unsigned char i=1;
while(i)
{
if(!BtTxDataStart)
{
if(BtTxDataCount<((*(p+1))+2))
{
BtTxData[BtTxDataCount++]=*(p++);
BtTxDataStart=1;
}
else
{i=0;
BtTxDataStart=0;
BtTxDataCount=0;
}
}
}
}
///////////key to do things
void ipod_key_dothing(void)
{
if(bKeyUse == TRUE)
{
bKeyUse = FALSE;
switch(KeyValue)
{
/*
case KEY_RECORD:
#if defined(FM_CUP_RECORD) || defined(FM_CUP_RECORD_BLUETOOTH)
if((FMTxStatus == IDENTIFY_STATUS) || (FMTxStatus == RECORD_STATUS))
{
if(FMTxStatus == IDENTIFY_STATUS)
{
//TxBuff[0] = 0xff;
//WriteUart(1,UN_WAIT_TX);
//FMTxStatus = TX_IDENTIFY_DEVICE_LINGO_STATUS;
//TxRetryCounts = TX_RETRY_COUNTS;
FMTxStatus = CP_RESET_STATUS;
PORTC &= ~CP_RESET; //Reset cp
}
else
{
SendContextButtonStatus(0x00400000);//PRESS_PAUSE_KEY);
ReturnLastMenuLevel = RET_LAST_MENU_LEVEL;
FMTxStatus = CONTEX_BOTTON_PRESS_STATUS1;
wStatusDelay = 0;
}
bTxCommand = TRUE;
wStatusDelay = 0;
TurnOnLed(MS_30000);
}
#endif
#if defined(FM_CUP) || defined(FM_CUP_BLUETOOTH)
if(!(FlagBuff & BT_AUDIO_ON))
{
bFMFrequenceChange = TRUE;
if((FMFrequenceStep == M4) || (FMFrequenceStep == NO_M))
{
FMFrequenceStep = M1;
}
else
{
FMFrequenceStep <<= 1;
}
FMFrequenceAndMode.FMFrequence.wFMFrequence = FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep) >> 1];
FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FrequenceToDisplayBuff(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FrequenceAreaToDisplayBuff(FMFrequenceStep);
DisplayFrequence();
FMFrequenceAndMode.FMFrequenceMode = FMFrequenceStep;
}
else
{
BTTxBuff[2] = 0x03;
if(FlagBuff1 & MICROPHONE_MUTE_ON)
{
FlagBuff1 &= ~MICROPHONE_MUTE_ON;
BTTxBuff[3] = 0x01;
BTTxBuff[4] = 0x04;
}
else
{
FlagBuff1 |= MICROPHONE_MUTE_ON;
BTTxBuff[3] = 0x00;
BTTxBuff[4] = 0x03;
}
BTTxBuff[0] = 0x55; //No privacy
BTTxBuff[1] = 0x03; //Command length
TIFR2 |= (1 << TOV2);
TCNT2 = 0xcd; //0xb4 Wait for 104+52-2-2 us,-2-2 is running time for instruction
TCCR2B = 0x02;//Timer 2 init;
TIMSK2 = 0x01; //Turn on timer2 interrupt
PORTD &= ~BT_RX;
BTTxBitCount = 0;
BTTxByteCount = 0;
BTTxConfig();
}
TurnOnLed(MS_30000);
#endif
break;
*/
//unsigned char TempFMFrequenceStep;
//unsigned char TempFMFrequenceStep1;
//unsigned int wTempFMFrequence;
/*
case KEY_FQ_MODE_SET:
TurnOnLed(MS_30000);
//if(FMFrequenceStep == NO_M)
//{
//FMFrequenceStep = M1;
//}
wTempFMFrequence = FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep >> 1)];
FlagBuff1 |= LCD_LIGHT_KEEP;
LCDFlashTime = 0;
LCDFlashTimePreset = MS_500;
FrequenceToDisplayBuff(wTempFMFrequence);
FrequenceAreaToDisplayBuff(FMFrequenceStep);
DisplayFrequence();
i = TRUE;
while(i)
{
LCDFlash();
if(bKeyUse == TRUE)
{
bKeyUse = FALSE;
switch(KeyValue)
{
case KEY_RECORD:
i = FALSE;
goto LightLED30S;
case KEY_FQ_MODE_SET:
bFMFrequenceChange = TRUE;
FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep >> 1)]=wTempFMFrequence;
i = FALSE;
goto LightLED30S;
case KEY_UP:
if(wTempFMFrequence < FM_MAX_FREQUENCE)
{
wTempFMFrequence++;
}
else
{
wTempFMFrequence = FM_MIN_FREQUENCE;
}
goto FMFreqControl1;
case KEY_DOWN:
if(wTempFMFrequence > FM_MIN_FREQUENCE)
{
wTempFMFrequence--;
}
else
{
wTempFMFrequence = FM_MAX_FREQUENCE;
}
FMFreqControl1:
FlagBuff1 |= LCD_LIGHT_KEEP;
LCDFlashTime = 0;
WriteCommand(LCD_ON);
FrequenceToDisplayBuff(wTempFMFrequence);
DisplayFrequence();
LightLED30S:
TurnOnLed(MS_30000);
break;
case KEY_ON_OFF:
bKeyUse = TRUE;
i = FALSE;
break;
default:
break;
}
}
}
FlagBuff1 |= LCD_LIGHT_KEEP;
LCDFlashTime = 0;
LCDFlashTimePreset = MS_2000;
WriteCommand(LCD_ON);
//FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FrequenceToDisplayBuff(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FrequenceAreaToDisplayBuff(NO_M);
FMFrequenceAndMode.FMFrequenceMode = NO_M;
DisplayFrequence();
break;
*/
//////////////
//FMFrequenceAndMode.wModeFrequenceValue[(FMFrequenceStep >> 1)]=wTempFMFrequence;
/////////////
/*
#if defined(FM_CUP_RECORD) || defined(FM_CUP_RECORD_BLUETOOTH)
case KEY_FM_TOGGLE: //模式选择
bFMFrequenceChange = TRUE;
FMFrequenceAndMode.FMFrequence.wFMFrequence = FMFrequenceStepValue[(FMFrequenceStep) >> 1];
FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence);
//KT0801Configuration(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FrequenceToDisplayBuff(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FrequenceAreaToDisplayBuff(FMFrequenceStep);
DisplayFrequence();
FMFrequenceAndMode.FMFrequenceMode = FMFrequenceStep;
if((FMFrequenceStep == M4) || (FMFrequenceStep == NO_M))
{
FMFrequenceStep = M1;
}
else
{
FMFrequenceStep <<= 1;
}
TurnOnLed(MS_30000);
break;
#endif
*/
/////////////
case KEY_FQ_MODE_SET: //FM频率模式选择
FmFrequenceData=OsModeSelect[OsMode++];
if(OsMode==4)
OsMode=0;
goto FMFreqControl;
//////////////
case KEY_UP: //频率递增
if(FmFrequenceData < FM_MAX_FREQUENCE)
{
FmFrequenceData++;
}
else
{
FmFrequenceData = FM_MIN_FREQUENCE;
}
goto FMFreqControl;
case KEY_DOWN: //频率递减
if(FmFrequenceData > FM_MIN_FREQUENCE)
{
FmFrequenceData--;
}
else
{
FmFrequenceData = FM_MAX_FREQUENCE;
}
FMFreqControl:
bFMFrequenceChange = TRUE;
FMFrequeceControl(FmFrequenceData);
//KT0801Configuration(FMFrequenceAndMode.FMFrequence.wFMFrequence);
FmFrequenceToLcdDiplaySub(FmFrequenceData);
TurnOnLed(MS_30000);
break;
case KEY_ON_OFF:
/*
if(FMTxStatus == CP_RESET_DELAY_STATUS)
{
SendIdentify();
wStatusDelay = 0;
while(wStatusDelay < MS_20)
{
asm("wdr");
}
}
*/
SendContextButtonStatus(PAUSE);
wStatusDelay = 0;
while(wStatusDelay < MS_20)
{
asm("wdr");
}
SendContextButtonStatus(RELEASE_PAUSE_KEY);
wStatusDelay = 0;
while(wStatusDelay < MS_30)
{
asm("wdr");
}
PORTC |= LED;
LedWorkMode = LED_OFF;
bTxCommand = FALSE; //关机
bTxCommand1 = FALSE;
FlagBuff = 0;
/*
#if defined(FM_CUP_RECORD) || defined(FM_CUP_RECORD_BLUETOOTH)
if(FMTxStatus == RECORD_STATUS)
{
PORTC &= ~nSHDN;
SendContextButtonStatus(0x00400000);//PRESS_PAUSE_KEY);
wStatusDelay = 0;
while(wStatusDelay < MS_200)
{
asm("wdr");
}
SendContextButtonStatus(RELEASE_PAUSE_KEY);//RELEASE_PLAY_PAUSE_KEY);
}
#endif
*/
WriteCommand(SYS_DIS);
UCSRB &= (~(1 << RXEN) & ~(1 << TXEN));//Disable UART TX and RX
PORTD &= (~BT_POWER_ON & ~KT0801_POWER_ON);
PORTD &= (~TX & ~RX & ~FM_CLK & ~FM_DATA);//Set tx rx as high impendance input
DDRD &= (~TX & ~RX & ~FM_CLK & ~FM_DATA);
PORTC &= ~KT0801_RESET;
do
{
MCUCR|=(1<<SE); //SMCR = RE_SE;
asm("sleep\n");
//SMCR &= ~RE_SE;
MCUCR&=~(1<<SE);
asm("wdr");
}
while(!((bKeyUse == TRUE) && (KeyValue == KEY_ON_OFF)));
bKeyUse = FALSE;
while(!((bKeyUse == TRUE) && (KeyValue == KEY_ON_OFF))); //开机
bKeyUse = FALSE;
UartReceive = UART_RECEIVE;
FMTxStatus = NO_IPOD_CONNECT_STATUS;
bTxBuffLock = FALSE;
PORTD |= (TX | RX | FM_CLK | FM_DATA);
DDRD =0b11010001; //0xdc;//0xf6;
UCSRB |= (1 << RXEN) | (1 << TXEN);
PORTD |= (BT_POWER_ON | KT0801_POWER_ON);
wStatusDelay = 0;
while(wStatusDelay < MS_20)
{
asm("wdr");
}
PORTC |= KT0801_RESET;
TurnOnLed(MS_30000);
WriteCommand(BIAS);
WriteCommand(SYS_EN);
WriteCommand(LCD_ON);
//FMFrequeceControl(FMFrequenceAndMode.FMFrequence.wFMFrequence,STEREO | PLL_OUTPUT_USUAL | FM_TEST);
KT0801Configuration(FmFrequenceData);
FlagBuff |= (AUDIO_TRANSMIT | AUDIO_ON);
FlagBuff &= (~IPOD_POWER_UP & ~IPOD_POWER_UP_HOLD);
FlagBuff1 &= (~IPOD_POWER_STEADY & ~GET_IPOD_PLAY_STATUS);
//FlagBuff1 |= (LCD_LIGHT_KEEP | LCD_LIGHT);
FlagBuff1 |= LCD_LIGHT_KEEP;
//FlagBuff &= ~FM_MUTE_ON;
break;
/*
#if defined(FM_CUP) || defined(FM_CUP_RECORD)
case KEY_PLAY_PAUSE:
if((FMTxStatus == IDENTIFY_STATUS) || (FMTxStatus == RECORD_STATUS))
{
FMTxStatusBuff = FMTxStatus;
if(FMTxStatus == RECORD_STATUS)
{
SendContextButtonStatus(0x00800000);//PRESS_PAUSE_KEY);
FMTxStatus = CONTEX_BOTTON_PRESS_STATUS2;
}
else
{
TxBuff[0] = 0xff;
WriteUart(1,UN_WAIT_TX);
FMTxStatus = TX_SEND_CONTEX_BOTTON_PRESS_STATUS;
}
wStatusDelay = 0;
bTxCommand = TRUE;
TurnOnLed(MS_30000);
}
break;
#endif
*/
////////////////////////////////////////////////////IPOD附加功能
case KEY_IPOD_NEXT:
if(!(FlagBuff&BT_AUDIO_ON)&&(FMTxStatus ==AUTHENTICATION_FINISH_STATUS))
{
while(IpodLongKey)
{
TurnOnLed(MS_30000);
wStatusDelay=0;
SendContextButtonStatus(NEXT_TRACK);
while(wStatusDelay < MS_50);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -