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

📄 menu.c

📁 silicon wireless开发套件F920+Si4432原理图,源码
💻 C
📖 第 1 页 / 共 4 页
字号:

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  +
  + 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;
	sint8 temp1,temp2;

	//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:
						
			
			//draw ANT1 only
			switch ( MenuItems.name.rssi_format )
			{
				case 0://RSSI format - Bar graph
					LcdSetPictureCursor(2,62);
					LcdDrawPicture(ant9x8);
					PrintRssi(2, 72, rssi1);
					printf(" RSSI:%4bu\n\r", rssi1);		//print to UART
				break;

				case 1://RSSI format - dBm
					temp1 = (rssi1 >> 1) - 120;
					sprintf(&lcd_data[11],"%4bd",temp1);
					LcdWriteLine(LCD_LINE_2,lcd_data);	
					LcdSetPictureCursor(2,55);
					LcdDrawPicture(ant9x8);
					printf(" RSSI:%4bddBm\n\r", temp1);		//print to UART
				break;

				case 2://RSSI format - Number
					sprintf(&lcd_data[12],"%3bu",rssi1);
					LcdWriteLine(LCD_LINE_2,lcd_data);
					LcdSetPictureCursor(2,62);
					LcdDrawPicture(ant9x8);
					printf(" RSSI:%4bu\n\r", rssi1);		//print to UART
				break;

			}	
		break;
		case DIVERSITY_FIX_B:
			//draw AN2 only
			
			switch ( MenuItems.name.rssi_format )
			{
				case 0://RSSI format - Bar graph
					LcdSetPictureCursor(2,87);			
					LcdDrawPicture(ant9x8);
					PrintRssi(2, 98, rssi1);
					printf(" RSSI:%4bu\n\r", rssi1);		//print to UART

				break;

				case 1://RSSI format - dBm
					temp1 = (rssi1 >> 1) - 120;
					sprintf(&lcd_data[15],"%4bd",temp1);
					LcdWriteLine(LCD_LINE_2,lcd_data);	
					LcdSetPictureCursor(2,80);			
					LcdDrawPicture(ant9x8);
					printf(" RSSI:%4bddBm\n\r", temp1);		//print to UART
				break;

				case 2://RSSI - Number
					sprintf(&lcd_data[16],"%3bu",rssi1);
					LcdWriteLine(LCD_LINE_2,lcd_data);
					LcdSetPictureCursor(2,87);			
					LcdDrawPicture(ant9x8);
					printf(" RSSI:%4bu\n\r", rssi1);		//print to UART
				break;
			}
		break;
		default:
			//draw both
			switch ( MenuItems.name.rssi_format )
			{
				case 0://RSSI format - Bar graph
					LcdSetPictureCursor(2,62);			
					LcdDrawPicture(ant9x8);
					PrintRssi(2, 72, rssi1);
					PrintRssi(2, 98, rssi2);
					printf(" RSSI:%4bu %4bu\n\r", rssi1, rssi2);		//print to UART
				break;

				case 1://RSSI format - dBm
					temp1 = (rssi1 >> 1) - 120;
					temp2 = (rssi2 >> 1) - 120;
					sprintf(&lcd_data[11],"%4bd%4bd", temp1, temp2);
					LcdWriteLine(LCD_LINE_2,lcd_data);	
					LcdSetPictureCursor(2,55);			
					LcdDrawPicture(ant9x8);
					printf(" RSSI:%4bddBm %4bddBm\n\r", temp1, temp2);		//print to UART
				break;	

				case 2://RSSI - Number
					sprintf(&lcd_data[12],"%3bu %3bu", rssi1, rssi2);
					LcdWriteLine(LCD_LINE_2,lcd_data);
					LcdSetPictureCursor(2,62);			
					LcdDrawPicture(ant9x8);
					printf(" RSSI:%4bu %4bu\n\r", rssi1, rssi2);		//print to UART
				break;
			}				
		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 + -