Ejemplo n.º 1
0
void menuSelect(){
	menu_item* curr = menuStack_top();
	if(curr->subMenu.items[selected_i].attr & MENU_ATTR_HASSUBMENU){
		// We're moving to a new submenu, push it on our stack
		menuStack_push( &curr->subMenu.items[selected_i] );
		selected_i = 0;
	} else {
		// Otherwise, run the menu item's function
		setMessage( curr->subMenu.items[selected_i].func(selected_i) );
		if(_message_item.caption){
			menuBack();
			menuStack_push( &message_item );
		}
		selected_i = 0;
	}
}
Ejemplo n.º 2
0
/******************************************************************************
 * @fn          main
 *
 * @brief       Main handles all applications attached to the menu system
 *
 * input parameters
 *
 * output parameters
 *
 *@return
 */
void main( void )
{
   
  // Init clocks and I/O 
  bspInit(BSP_SYS_CLK_16MHZ);
  
  // Init leds 
  bspLedInit(); 

  // Init Buttons
  bspKeyInit(BSP_KEY_MODE_POLL);
  
  // Initialize SPI interface to LCD (shared with SPI flash)
  bspIoSpiInit(BSP_FLASH_LCD_SPI, BSP_FLASH_LCD_SPI_SPD);  

  /* Init Buttons */
  bspKeyInit(BSP_KEY_MODE_ISR);
  bspKeyIntEnable(BSP_KEY_ALL);
  /* Init LCD and issue a welcome */
  lcdInit();
  lcdClear();
  // Instantiate tranceiver RF spi interface to SCLK ~ 4 MHz */
  //input clockDivider - SMCLK/clockDivider gives SCLK frequency
  trxRfSpiInterfaceInit(0x10);
  
  /* Welcome Screen Part */
  lcdSendBuffer(trxebWelcomeScreen);
  lcdBufferPrintString(lcdDefaultBuffer,"TEXAS",60,eLcdPage6);
  lcdBufferPrintString(lcdDefaultBuffer,"INSTRUMENTS",60,eLcdPage7);
  lcdSendBufferPart(lcdDefaultBuffer, 60,127,eLcdPage6, eLcdPage7);
  /* MCU will stay in sleep until button is pressed */
  __low_power_mode_3();
  bspKeyPushed(BSP_KEY_ALL);
  //Clear screen
  lcdBufferClear(0);

  /* Menu Driver */
  menu_t *pCurrentMenu = &mainMenu;
  uint8 menuButtonsPressed;
  menuDisplay(pCurrentMenu);
  __low_power_mode_3();
  while(1)
  {
    menuButtonsPressed = bspKeyPushed(BSP_KEY_ALL);
    switch(menuButtonsPressed)
    {
      case BSP_KEY_LEFT:
        pCurrentMenu = menuBack(pCurrentMenu);
        break;
      case BSP_KEY_RIGHT:
        pCurrentMenu = menuEnter(pCurrentMenu);
        break;
      case BSP_KEY_DOWN:
        menuDown(pCurrentMenu);
        break;
      case BSP_KEY_UP:
        menuUp(pCurrentMenu);
        break;
      default:
        break;
    }
    menuDisplay(pCurrentMenu);
    /* Enter low power mode while menu driver waits on user input */
    __low_power_mode_3();
  }
}
Ejemplo n.º 3
0
void LCDST7565::buttonEvent(int buttonIndex, button_event_e event)
{
	pressedButtonIndex = buttonIndex;
	if( event == RELEASE_EVENT )
	{
		pressedButtonIndex = -1;
		//return;
	}
	if(currentMenu == MENU_HOME)
	{
		if(event == PRESS_EVENT)
		{
			switch(buttonIndex)
			{
			case 3:
			{
				menuSelect();
				break;
			}
			case 0:
			{
				midi->setEnabled( ! midi->configuration()->enabled );
				break;
			}
			case 1:
			{
				synth->setEnabled( ! synth->configuration()->enabled );
				break;
			}
			}
		}
	}
	else // We are in a menu or sub menu
	{
		if(event == PRESS_EVENT || event == REPEATED_PRESS_EVENT)
		{
			if(event == PRESS_EVENT)
			{
				valStepFactor = 1;
			}
			else if(valueMenuActive)
			{
				if(++valRepeatedCount >= cSynthVal.incSpeed)
				{
					valRepeatedCount = 0;
					valStepFactor *= 2;
				}
			}
			switch(buttonIndex)
			{
			case BUT_BACK:
			{
				if( event == REPEATED_PRESS_EVENT )
				{
					if( _menu_items[_item_index].type == MENU_ITEM_TYPE_INLINE_INT )
						menuBack();
				}
				else
				{
					menuBack();
				}
				break;
			}
			case BUT_UP:
			{
				if(valueMenuActive)
				{
					valueMenuUp();
				}
				else
				{
					menuUp();
				}
				break;
			}
			case BUT_DOWN:
			{
				if(valueMenuActive)
				{
					valueMenuDown();
				}
				else
				{
					menuDown();
				}
				break;
			}
			case BUT_OK:
			{
				if( event == REPEATED_PRESS_EVENT )
				{
					if( _menu_items[_item_index].type == MENU_ITEM_TYPE_INLINE_INT )
						menuSelect();
				}
				else
				{
					if(valueMenuActive)
					{
						menuBack();
					}
					else
					{
						menuSelect();
					}
				}
				break;
			}
			}
		}
	}
	update();
}
Ejemplo n.º 4
0
void LCDST7565::makeValueMenu(int menu)
{
	switch(menu)
	{
		//TODO: set current value when enter a valueMenu
		case MENU_MIDI_RENOTE:
		{
			midi->reNote();
			menuBack();
			break;
		}
		case MENU_MIDI_NOTEOFF:
		{
			midi->noteOff();
			menuBack();
			break;
		}
		case MENU_MIDI_CHANNEL:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_MIDI_CHANNEL;
			cSynthVal.min = 0;
			cSynthVal.max = 15;
			cSynthVal.value = midi->configuration()->channel;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "MIDI Channel");
			strcpy(cSynthVal.unit, "");
			break;
		}
		case MENU_MIDI_NOTE:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_MIDI_NOTE;
			cSynthVal.min = 0;
			cSynthVal.max = 127;
			cSynthVal.value = midi->configuration()->baseNote;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Note");
			strcpy(cSynthVal.unit, "");
			break;
		}
		case MENU_MIDI_VELOCITY:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_MIDI_CC;
			cSynthVal.min = 0;
			cSynthVal.max = 127;
			cSynthVal.value = midi->configuration()->velocity;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Velocity");
			strcpy(cSynthVal.unit, "");
			break;
		}
		case MENU_MIDI_CC_PITCH:
		case MENU_MIDI_CC_VOL:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_MIDI_CC;
			cSynthVal.min = 0;
			cSynthVal.max = 127;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			if(menu == MENU_MIDI_CC_PITCH)
			{
				strcpy(cSynthVal.name, "MIDI CC Pitch");
				cSynthVal.value = midi->configuration()->antenna[CT_PITCH].cc;
			}
			else
			{
				strcpy(cSynthVal.name, "MIDI CC Vol");
				cSynthVal.value = midi->configuration()->antenna[CT_VOLUME].cc;
			}

			strcpy(cSynthVal.unit, "");
			break;
		}
		case MENU_DISP_CONTRAST:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_INT;
			cSynthVal.min = 0;
			cSynthVal.max = 100;
			cSynthVal.value = contrast;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Contrast");
			strcpy(cSynthVal.unit, "%");
			break;
		}
		case MENU_SYNTH_GAIN:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 0.f;
			cSynthVal.fmax = 100.f;
			cSynthVal.fvalue = synth->config->masterGain * 100.f;
			cSynthVal.fstep = 0.01;
			cSynthVal.fdigits = 2;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "MasterGain");
			strcpy(cSynthVal.unit, "%");
			break;
		}
		case MENU_SYNTH_BASEFREQ:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 10;
			cSynthVal.fmax = 10000;
			cSynthVal.fvalue = synth->configuration()->baseFreq;
			cSynthVal.fstep = 0.1f;
			cSynthVal.fdigits = 1;
			cSynthVal.incSpeed = 3;
			strcpy(cSynthVal.name, "Basefrequency");
			strcpy(cSynthVal.unit, "Hz");
			break;
		}
		case MENU_SYNTH_SEMIRANGE:
		{
			cSynthVal.type = VAL_TYPE_INT;
			cSynthVal.min = 0;
			cSynthVal.max = 24;
			cSynthVal.indexOffset = 0;
			cSynthVal.value = synth->configuration()->semiRange;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Semitone Range");
			strcpy(cSynthVal.unit, "+/-");
			break;
		}
		case MENU_SYNTH_OSC_AMPLITUDE:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 0.f;
			cSynthVal.fmax = 100.f;
			cSynthVal.fvalue = synth->preset->osc[selectedPartIndex].amplitude * 100.f;
			cSynthVal.fstep = 0.01;
			cSynthVal.fdigits = 2;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Amplitude");
			strcpy(cSynthVal.unit, "%");
			break;
		}
		case MENU_SYNTH_OSC_SEMI:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_INT;
			cSynthVal.min = -24;
			cSynthVal.max = 24;
			cSynthVal.value = synth->preset->osc[selectedPartIndex].semitones;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Semitones");
			strcpy(cSynthVal.unit, "");
			break;
		}
		case MENU_SYNTH_OSC_CENT:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_INT;
			cSynthVal.min = -100;
			cSynthVal.max = 100;
			cSynthVal.value = synth->preset->osc[selectedPartIndex].cents;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Cents");
			strcpy(cSynthVal.unit, "");
			break;
		}
		case MENU_SYNTH_OSC_WTPOS:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 0.f;
			cSynthVal.fmax = 100.f;
			cSynthVal.fvalue = synth->preset->osc[selectedPartIndex].wavetable_position;
			cSynthVal.fstep = 0.01;
			cSynthVal.fdigits = 2;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Wavetable Position");
			strcpy(cSynthVal.unit, "%");
			break;
		}
		case MENU_SYNTH_OSC_DUTY:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_INT;
			cSynthVal.min = 0;
			cSynthVal.max = 100;
			cSynthVal.value = synth->preset->osc[selectedPartIndex].wavetable_position;
			cSynthVal.step = 1;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Dutycycle");
			strcpy(cSynthVal.unit, "%");
			break;
		}
		case MENU_SYNTH_FILTER_SERPAR:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 0.f;
			cSynthVal.fmax = 100.f;
			cSynthVal.fvalue = synth->preset->filter.serParCF * 100.f;
			cSynthVal.fstep = 0.01;
			cSynthVal.fdigits = 2;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Serial / Parallel");
			strcpy(cSynthVal.unit, "%");
			break;
		}
		case MENU_SYNTH_FILTER1_FREQ:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 10;
			cSynthVal.fmax = 20000;
			cSynthVal.fvalue = synth->preset->filter.flt1.frequency;
			cSynthVal.fstep = 0.1f;
			cSynthVal.fdigits = 1;
			cSynthVal.incSpeed = 3;
			strcpy(cSynthVal.name, "Frequency");
			strcpy(cSynthVal.unit, "Hz");
			break;
		}
		case MENU_SYNTH_FILTER1_RESO:
		{
			cSynthVal.indexOffset = 0;
			cSynthVal.type = VAL_TYPE_FLOAT;
			cSynthVal.fmin = 0.0;
			cSynthVal.fmax = 3.0;
			cSynthVal.fvalue = synth->preset->filter.flt1.resonance;
			cSynthVal.fstep = 0.001;
			cSynthVal.fdigits = 3;
			cSynthVal.incSpeed = 5;
			strcpy(cSynthVal.name, "Resonance");
			strcpy(cSynthVal.unit, "");
			break;
		}
	}
}