⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.c

📁 silicon wireless开发套件F920+Si4432原理图,源码
💻 C
📖 第 1 页 / 共 3 页
字号:
				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 + -