📄 menu.c
字号:
sprintf(&lcd_data[17],"---");
LcdWriteLine(LCD_LINE_6,lcd_data);
//print RSSI2
sprintf(lcd_data," ");
sprintf(lcd_data," ");
if( fPacketReceived == RF_OK )
sprintf(&lcd_data[17],"%3bu",rssi2);
else
sprintf(&lcd_data[17],"---");
LcdWriteLine(LCD_LINE_7,lcd_data);
//draw antenna icons
LcdSetPictureCursor(6,82);
LcdDrawPicture(ant1_inverted15x8);
LcdSetPictureCursor(7,82);
LcdDrawPicture(ant2_inverted15x8);
break;
case DIVERSITY_FIX_B:
//print RSSI1
sprintf(lcd_data," ");
if( fPacketReceived == RF_OK )
sprintf(&lcd_data[17],"%3bu",rssi2);
else
sprintf(&lcd_data[17],"---");
LcdWriteLine(LCD_LINE_7,lcd_data);
//draw antenna icon
LcdSetPictureCursor(7,82);
LcdDrawPicture(ant2_inverted15x8);
break;
case SEPARATE_RX_TX:
case RX_TX_SWITCH:
case DIVERSITY_FIX_A:
default:
//print RSSI1
if( fPacketReceived == RF_OK )
sprintf(&lcd_data[17],"%3bu",rssi1);
else
sprintf(&lcd_data[17],"---");
LcdWriteLine(LCD_LINE_6,lcd_data);
//draw antenna icon
LcdSetPictureCursor(6,82);
LcdDrawPicture(ant1_inverted15x8);
break;
};
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void PrintFreqDr(void)
+
+ DESCRIPTION: prints the frequency & DR into the screen
+
+ RETURN: None
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void PrintFreqDr(void)
{
memcpy(lcd_data,"---------------------",21);
LcdWriteLine(LCD_LINE_2,lcd_data);
sprintf(lcd_data," Data Rate: %skbps ",&t_data_rate[MenuItems.name.data_rate][0]);
LcdWriteLine(LCD_LINE_3,lcd_data);
sprintf(lcd_data," Modulation: %s ",&t_modulation_mode[MenuItems.name.modulation_mode][0]);
LcdWriteLine(LCD_LINE_4,lcd_data);
if( MenuItems.name.arib_mode == FALSE )
{
sprintf(lcd_data," Frequency: %sMHz",demo_freqs[MenuItems.name.frequency].freq_text);
}
else
{
sprintf(lcd_data," Frequency: %sMHz",arib_freqs[MenuItems.name.frequency].freq_text);
}
LcdWriteLine(LCD_LINE_5,lcd_data);
LcdSetPictureCursor(8,70);
LcdDrawPicture(setting_inverted48x8);
if( SelectedAntennaType > RX_TX_SWITCH )
{
sprintf(lcd_data," Ant. Mode: %s ",&t_antenna_mode[MenuItems.name.antenna_mode][0]);
LcdWriteLine(LCD_LINE_6,lcd_data);
}
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void PrintRssiToLcd(void)
+
+ DESCRIPTION: it prints the RSS result(s) to the LCD
+
+ RETURN: None
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void PrintRssiToLcd(void)
{
uint8 rssi1, rssi2, fPacketReceived;
//get RSSI value(s)
fPacketReceived = RFGetRssiResult(&rssi1, &rssi2);
//print to the screen
sprintf(&lcd_data[0]," ");
LcdWriteLine(LCD_LINE_2,lcd_data);
if( fPacketReceived != RF_OK )
{
rssi1 = 0;
rssi2 = 0;
}
switch( SelectedAntennaType )
{
case SEPARATE_RX_TX:
case RX_TX_SWITCH:
case DIVERSITY_FIX_A:
LcdSetPictureCursor(2,62);
LcdDrawPicture(ant9x8);
//draw ANT1 only
PrintRssi(2, 72, rssi1);
break;
case DIVERSITY_FIX_B:
//draw AN2 only
LcdSetPictureCursor(2,87);
LcdDrawPicture(ant9x8);
PrintRssi(2, 98, rssi2);
break;
default:
//draw both
LcdSetPictureCursor(2,62);
LcdDrawPicture(ant9x8);
PrintRssi(2, 72, rssi1);
PrintRssi(2, 98, rssi2);
break;
}
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void PrintRssi(uint8 row, uint8 column, uint8 rssi)
+
+ DESCRIPTION: it prints the RSSI result into a specific place on the LCD
+
+ RETURN: None
+
+ INPUT: row, column, and the RSSI value
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void PrintRssi(uint8 row, uint8 column, uint8 rssi)
{
//set picture position
LcdSetPictureCursor(row,column);
//draw the picture
if( rssi == 0 )
{//no packet were received
LcdDrawPicture(no_packet11x8);
return;
}
if( rssi < 55 )
{//rssi1
LcdDrawPicture(rssi12x8);
return;
}
if( rssi < 65 )
{//rssi2
LcdDrawPicture(rssi24x8);
return;
}
if( rssi < 75 )
{//rssi3
LcdDrawPicture(rssi36x8);
return;
}
if( rssi < 85 )
{//rssi4
LcdDrawPicture(rssi48x8);
return;
}
if( rssi < 95 )
{//rssi5
LcdDrawPicture(rssi510x8);
return;
}
if( rssi < 105 )
{//rssi6
LcdDrawPicture(rssi612x8);
return;
}
//rssi7
LcdDrawPicture(rssi714x8);
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void IncFreqCounter(void)
+
+ DESCRIPTION: increases the frequency pointer
+
+ RETURN: None
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void IncFreqCounter(void)
{
if( MenuItems.name.frequency < (MAX_FREQ_SETTING - 1) )
{
MenuItems.name.frequency++;
}
else
{
MenuItems.name.frequency = 0;
}
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void DecFreqCounter(void)
+
+ DESCRIPTION: decreasing the frequency pointer
+
+ RETURN: None
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void DecFreqCounter(void)
{
if( MenuItems.name.frequency == 0 )
{
MenuItems.name.frequency = MAX_FREQ_SETTING - 1;
}
else
{
MenuItems.name.frequency--;
}
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: uint8 CheckFreqBand(void)
+
+ DESCRIPTION: checks whether the frequency band is supported by the testcard or not
+
+ RETURN: TRUE / FALSE
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
uint8 CheckFreqBand(void)
{
uint8 freq_band;
//check Freq band command
freq_band = demo_freqs[MenuItems.name.frequency].frequency_band & 0x1F;
//check whether it is supported by the radio testcard or not?!
if( demo_freqs[MenuItems.name.frequency].frequency_band & 0x20 )
{//high band
if( TestcardData.freq_band & 0x0010 )
{//480...499MHz supported?
if( freq_band == 0 ) return TRUE;
}
if( TestcardData.freq_band & 0x0020 )
{//500...599MHz supported?
if( freq_band > 0 && freq_band < 6 ) return TRUE;
}
if( TestcardData.freq_band & 0x0040 )
{//600...699MHz supported?
if( freq_band > 5 && freq_band < 11 ) return TRUE;
}
if( TestcardData.freq_band & 0x0080 )
{//700...799MHz supported?
if( freq_band > 10 && freq_band < 16 ) return TRUE;
}
if( TestcardData.freq_band & 0x0100 )
{//800...899MHz supported?
if( freq_band > 15 && freq_band < 21 ) return TRUE;
}
if( TestcardData.freq_band & 0x0200 )
{//900...999MHz supported?
if( freq_band > 20 && freq_band < 24 ) return TRUE;
}
}
else
{//low band
if( TestcardData.freq_band & 0x0004 )
{//200...299MHz supported?
if( freq_band < 6 ) return TRUE;
}
if( TestcardData.freq_band & 0x0008 )
{//300...399MHz supported?
if( freq_band > 5 && freq_band < 16 ) return TRUE;
}
if( TestcardData.freq_band & 0x0010 )
{//400...480MHz supported?
if( freq_band > 15 && freq_band < 24 ) return TRUE;
}
}
//any other case the frequency is not supported
return FALSE;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void DrawEmptySettingPage(void)
+
+ DESCRIPTION: draws an empty setting screen to the LCD
+
+ RETURN: None
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void DrawEmptySettingPage(void)
{
//clear LCD
LcdClearDisplay();
memcpy(lcd_data,"---------------------",21);
LcdWriteLine(LCD_LINE_2,lcd_data);
LcdWriteLine(LCD_LINE_7,lcd_data);
//draw button icons
LcdSetPictureCursor(8,13);
LcdDrawPicture(up_down_inverted16x8);
LcdSetPictureCursor(8,43);
LcdDrawPicture(plus_inverted16x8);
LcdSetPictureCursor(8,73);
LcdDrawPicture(minus_inverted16x8);
LcdSetPictureCursor(8,103);
LcdDrawPicture(go_inverted16x8);
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: BUTTON_STATES CheckPushButtons(void)
+
+ DESCRIPTION: Button handling
+
+ RETURN: state of the buttons
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
BUTTON_STATES CheckPushButtons(void)
{
static U16 delay;
if( PB1_PIN == 0 )
{//wait for release the button or timeout occures (if the switch is pressed continuously)
delay = 0;
while( (PB1_PIN == 0) && (delay++ < PB_TIMING) );
return Button1Pressed;
}
if( PB2_PIN == 0 )
{//wait for release the button or timeout occures (if the switch is pressed continuously)
delay = 0;
while( (PB2_PIN == 0) && (delay++ < PB_TIMING) );
return Button2Pressed;
}
if( PB3_PIN == 0 )
{//wait for release the button or timeout occures (if the switch is pressed continuously)
delay = 0;
while( (PB3_PIN == 0) && (delay++ < PB_TIMING) );
return Button3Pressed;
}
if( PB4_PIN == 0 )
{//wait for release the button or timeout occures (if the switch is pressed continuously)
delay = 0;
while( (PB4_PIN == 0) && (delay++ < PB_TIMING) );
return Button4Pressed;
}
return NothingPressed;
}
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+ FUNCTION NAME: void ChangeSettingsIfNotvalid(void)
+
+ DESCRIPTION: checks whether the selected settings are supported by the enviroment or not
+ if not -> it sets the default
+
+ RETURN: None
+
+ INPUT: None
+
+ NOTES:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void ChangeSettingsIfNotvalid(void)
{
//LAB MODE
switch( TestcardData.chip_type )
{
case SI4030: case SI4031: case SI4032:
if( MenuItems.name.lab_mode > 1 ) MenuItems.name.lab_mode = 0;
break;
case SI4330:
if( MenuItems.name.lab_mode > MAX_LM_VALUE || MenuItems.name.lab_mode < 2) MenuItems.name.lab_mode = 2;
break;
default: break;
}
//DEMO MODE
switch( TestcardData.chip_type )
{
case SI4030: case SI4031: case SI4032: //TRANSMIT ONLY DEMO
MenuItems.name.demo_mode = 1;
break;
case SI4330: //RECEIVE ONLY DEMO
MenuItems.name.demo_mode = 2;
break;
default: break;
}
//FREQUENCY & DATA RATE
if( MenuItems.name.arib_mode == FALSE )
{//find the next valid settings in non arib mode
if(MenuItems.name.full_menu == FALSE)
{
if( CheckFreqBand() == FALSE )
{
do{
IncFreqCounter();
}while( CheckFreqBand() == FALSE );
}
}
switch(MenuItems.name.modulation_mode)
{
case 0:
case 1:
if( MenuItems.name.data_rate > MAX_DR_VALUE ) MenuItems.name.data_rate = 0;
break;
default:
if( MenuItems.name.data_rate > MAX_OOKDR_VALUE ) MenuItems.name.data_rate = 0;
break;
}
}
else
{//find the next valid in arib mode
if( MenuItems.name.frequency > MAX_ARIB_FREQ_SETTING-1 ) MenuItems.name.frequency = 0;
if( MenuItems.name.data_rate > MAX_ADR_VALUE ) MenuItems.name.data_rate = 0;
MenuItems.name.modulation_mode = 0;
}
//ANTENNA MODE
if( TestcardData.ant_type == ANT_DIVERSITY )
{
SelectedAntennaType = 2 + MenuItems.name.antenna_mode;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -