コード例 #1
0
 void SetOptions()
 {
    SetCommandLineOptions();
    SetCommonOptions();
    SetConfigOnlyOptions();
    SetEnvMapping();
 }
コード例 #2
0
ファイル: RaspiVoiceMain.cpp プロジェクト: Ar-es/raspivoice
int main(int argc, char *argv[])
{
	if (!SetCommandLineOptions(argc, argv))
	{
		return -1;
	}

	cmdline_opt = GetCommandLineOptions();

	if (cmdline_opt.daemon)
	{
		std::cout << "raspivoice daemon started." << std::endl;
		daemon_startup();
	}

	pthread_mutex_init(&rvopt_mutex, NULL);
	rvopt = cmdline_opt;

	//Setup keyboard:
	KeyboardInput keyboardInput;
	keyboardInput.Verbose = cmdline_opt.verbose;

	bool use_ncurses = true;
	if (cmdline_opt.verbose || cmdline_opt.daemon)
	{
		use_ncurses = false;
	}

	if (cmdline_opt.use_rotary_encoder)
	{
		keyboardInput.SetInputType(KeyboardInput::InputType::RotaryEncoder);
	}
	else if (cmdline_opt.grab_keyboard != "")
	{
		if (!keyboardInput.SetInputType(KeyboardInput::InputType::Keyboard, cmdline_opt.grab_keyboard))
		{
			std::cerr << "Cannot grab keyboard device: " << cmdline_opt.grab_keyboard << "." << std::endl;
			return -1;
		}
	}
	else if (use_ncurses)
	{
		keyboardInput.SetInputType(KeyboardInput::InputType::NCurses);
	}
	else if (!cmdline_opt.daemon)
	{
		keyboardInput.SetInputType(KeyboardInput::InputType::Terminal);
	}


	//Start Program in worker thread:
	//Warning: Do not read or write rvopt or quit_flag without locking after this.
	pthread_t thr;
	AudioData::Init();
	if (pthread_create(&thr, NULL, run_worker_thread, NULL))
	{
		std::cerr << "Error setting up thread." << std::endl;
		return -1;
	}

	//Setup UI:
	if (use_ncurses)
	{
		//Show interactive screen:
		if (setup_screen())
		{
			printw("%s", keyboardInput.GetInteractiveCommandList().c_str());
			refresh();

			main_loop(keyboardInput);

			close_screen();
		}
	}
	else if ((cmdline_opt.verbose) && (!cmdline_opt.daemon))
	{
		std::cout << "Verbose mode on, curses UI disabled." << std::endl;
		std::cout << keyboardInput.GetInteractiveCommandList();
		main_loop(keyboardInput);
	}
	else
	{
		main_loop(keyboardInput);
	}

	if (cmdline_opt.grab_keyboard != "")
	{
		keyboardInput.ReleaseKeyboard();
	}

	//Wait for worker thread:
	pthread_join(thr, nullptr);

	//Check for exception from worker thread:
	if (exc_ptr != nullptr)
	{
		try
		{
			std::rethrow_exception(exc_ptr);
		}
		catch (const std::exception& e)
		{
			std::cerr << "Error: " << e.what() << std::endl;
			return(-1);
		}
	}

	return(0);
}