Ejemplo n.º 1
0
/**
 * A função executa_comando é uma das funções mais importantes pois é ela que vai reagir aos comandos dados pelo utilizador.
 * A função irá receber a linha de comando separa la em dois, no comando e nos argumentos do comando, e passa los para as funções associadas aos comandos.
 * @param Tab Tabuleiro do jogo
 * @param DIM dimensão do tabuleiro
 * @param linha Recebe uma string que corresponde á linha lida da shell.
 * @returns torna um inteiro que verifica se foi ou não bem sucedida a função. 
 */
int executa_comando(char *linha,int *DIM,Elem **Tab) {
  char cmd[1025];
  char args[1025];

	int nargs=sscanf(linha, "%s %[^\n]", cmd, args);

	if((strcmp(cmd, "b") == 0 || strcmp(cmd, "p") == 0 || strcmp(cmd, "i") == 0))
		return executaJogada(args,cmd,DIM,Tab);
	if(strcmp(cmd, "cr") == 0 )
		return executaCriaJogo(args,DIM,Tab);	
	if(strcmp(cmd,"gr")==0 )
		return executaGravaJogo(args,DIM,Tab);  
	if(strcmp(cmd,"?")==0 && nargs==1)
		return ajuda();	
	if(strcmp(cmd,"trp")==0 && nargs==1)
		return trp(Tab,DIM);
	if(strcmp(cmd,"snd")==0 && nargs==1)
		return snd(Tab,DIM);
	if(strcmp(cmd,"pis")==0 && nargs==1)
		return pis(Tab,DIM);
	if(strcmp(cmd,"pds")==0 && nargs==1)
		return pds(Tab,DIM);
	if(strcmp(cmd,"vb")==0 && nargs==1)
		return vb(Tab,DIM);
	if(strcmp(cmd,"vp")==0 && nargs==1)
		return vp(Tab,DIM);
	if(strcmp(cmd,"vl")==0 && nargs==1)
		return vl(Tab,DIM);
	if(strcmp(cmd,"q")==0)
		exit(0);

	return mensagem_de_erro(E_COMMAND);
}	
int main(int argc, char *argv[])
{
   key_t key;
   int msgqueue_id;
   struct minhastruct msgponteiro;

   if(argc ==1)
   {
      ajuda();
   }

   key = ftok(".", 'm');

   if((msgqueue_id = msgget(key, IPC_CREAT|0660)) == -1)
   {
      perror("msgget");
      exit(1);
   }

   switch(tolower(argv[1][0]))
   {
      case 'e': enviar_mensagem(msgqueue_id, (struct minhastruct*)&msgponteiro, atol(argv[2]), argv[3]);
         break;;

      case 'r': ler_mensagem(msgqueue_id, &msgponteiro, atol(argv[2]));
         break;

      case 'a': remove_queue(msgqueue_id);
         break;

      case 'm': mudar_permissoes(msgqueue_id, argv[2]);
         break;

      default: ajuda();
   }
   return(0);

}
/**
 * @fn void main(void)
 * @brief Funcao principal do programa
 * 
 * Aqui esta contido a FSM que foi especificada para o
 * trabalho, ela possui dois estados, PARADO e MEDINDO.
 * Estas ficam em um laco infinito esperando que o usuario
 * envie mensagens que ativem as demais funcoes descritas
 * nessa documentacao.
 **/
void main(void) {

	PE_low_level_init();

	//Configura a memoria EEPROM
	configuraMem();

	//Configura amostragem
	configuraAmostragem();

	//Configura botao IRQ
	configuraIRQ();

	//Configura tensao baixa
	configuraLVD();

	//Estado inicial depende se a memoria esta ou nao cheia
	if (memCheia == TRUE) {

		estado = ePARADO;

	} else {

		estado = eMEDINDO;

	}

	escreveSerial("\n**********************************************");
	escreveSerial("\n    	    DATALOGGER DE TEMPERATURA	       ");
	escreveSerial("\n**********************************************");
	escreveSerial("\n Lucas Cielo, Iury Cleveston, Miguel Pfitcher ");
	escreveSerial("\n**********************************************");

	for (;;) {

		//Alimenta o DOG
		WDog_Clear();

		//Verifica se chegou algum caracter na serial
		verificaSerial();

		switch (estado) {

		case eMEDINDO:

			//Verifica se a memoria esta cheia
			if (memCheia == TRUE) {

				HEADER cabecalho;

				//Para amostragem
				paraAmostragem();

				//Obtem data/hora e salva na struct
				(void) relogio_GetTime(&(cabecalho.time));
				(void) relogio_GetDate(&(cabecalho.date));

				//Popula struct que sera salva na memoria
				cabecalho.tipo = (bool) EVENTO;
				cabecalho.dado = (int16_t) MEMORIA_CHEIA;

				//Salva header na memoria
				salvaHeader(&cabecalho);

				estado = ePARADO;

			} else if (botaoApertado == 1 && segundos >= 1 && apertado == FALSE) { //Se o botao foi clicado uma vez

				//Reset IRQ para novo clique
				resetIRQ();

				estado = ePARADO;

			} else if (botaoApertado == 2) { //Se o botao foi clicado duas vezes em menos de 1s

				//Reset IRQ para novo clique
				resetIRQ();

				//Faz upload dos dados
				mostrar();

			} else if (botaoApertado == 1 && segundos >= 3) { //Se o botao foi clicado e mantido pressionado por 3s

			//Reset IRQ para novo clique
				resetIRQ();

				//Para a amostragem
				paraAmostragem();

				escreveSerial("\nApagando Memoria...");

				//Limpa memoria
				limparMem(FALSE);

				escreveSerial("\nMemoria Apagada!");

			} else if (autenticado == TRUE && (strcmp(buffer, "status") == 0)) {

				//Mostra status do sistema
				status();

			} else if (autenticado == TRUE && (strcmp(buffer, "ajuda") == 0)) {

				//Mostra ajuda do sistema
				ajuda();

			} else if (autenticado == TRUE && (strcmp(buffer, "senha") == 0)) {

				//Altera senha de configuracao
				setSenha();

			} else if (autenticado == TRUE
					&& (strcmp(buffer, "amostragem") == 0)) {

				//Para amostragem
				paraAmostragem();

				//Altera taxa de amostragem
				setAmostragem();

			} else if (autenticado == TRUE && (strcmp(buffer, "parar") == 0)) {

				estado = ePARADO;

			} else if (autenticado == TRUE
					&& (strcmp(buffer, "mostrar") == 0)) {

				//Mostra dados na tela
				mostrar();

			} else if (autenticado == TRUE && (strcmp(buffer, "apagar") == 0)) {

				//Para amostragem
				paraAmostragem();

				escreveSerial("\nApagando Memoria...");

				//Limpa dados da memoria
				limparMem(FALSE);

				escreveSerial("\nMemoria Apagada!");

			} else if (autenticado == TRUE && (strcmp(buffer, "data") == 0)) {

				//Para amostragem
				paraAmostragem();

				//Configura nova data
				setDate();

			} else if (autenticado == TRUE && (strcmp(buffer, "hora") == 0)) {

				//Para amostragem
				paraAmostragem();

				//Configura novo horario
				setTime();

			} else if (autenticado == TRUE
					&& (strcmp(buffer, "calibrar") == 0)) {

				//Para amostragem
				paraAmostragem();

				//Funcao que calibra o sensor
				calibrar();

			} else if (autenticado == TRUE && (strcmp(buffer, "sair") == 0)) {

				//Funcao que desloga o usuario
				sair();

			} else if (amostrando == FALSE) {

				//Inicia amostragem
				iniciaAmostragem();

			}

			break;

		case ePARADO:

			if (botaoApertado == 1 && segundos >= 1 && apertado == FALSE) {

				//Reset IRQ para novo clique
				resetIRQ();

				//Verifica se a memoria esta cheia
				if (memCheia == FALSE) {

					estado = eMEDINDO;

				}

			} else if (botaoApertado == 2) {

				//Reset IRQ para novo clique
				resetIRQ();

				mostrar();

			} else if (botaoApertado == 1 && segundos >= 3) {

				escreveSerial("\nApagando Memoria...");

				//Limpa memoria
				limparMem(FALSE);

				escreveSerial("\nMemoria Apagada!");

				//Reset IRQ para novo clique
				resetIRQ();

				estado = eMEDINDO;

			} else if (autenticado == TRUE && (strcmp(buffer, "ajuda") == 0)) {

				//Mostra ajuda do sistema
				ajuda();

			} else if (autenticado == TRUE && (strcmp(buffer, "status") == 0)) {

				//Mostra status do sistema
				status();

			} else if (autenticado == TRUE && (strcmp(buffer, "senha") == 0)) {

				//Altera senha de configuracao
				setSenha();

			} else if (autenticado == TRUE
					&& (strcmp(buffer, "amostragem") == 0)) {

				//Altera taxa de amostragem
				setAmostragem();

			} else if (autenticado == TRUE && (strcmp(buffer, "ir") == 0)) {

				//Verifica se a memoria esta cheia
				if (memCheia == FALSE) {

					estado = eMEDINDO;

				} else {

					escreveSerial("\nMemoria Cheia!");
				}

			} else if (autenticado == TRUE
					&& (strcmp(buffer, "mostrar") == 0)) {

				//Mostrar dados na tela
				mostrar();

			} else if (autenticado == TRUE && (strcmp(buffer, "apagar") == 0)) {

				escreveSerial("\nApagando Memoria...");

				//Limpa memoria
				limparMem(FALSE);

				escreveSerial("\nMemoria Apagada!");

				estado = eMEDINDO;

			} else if (autenticado == TRUE && (strcmp(buffer, "data") == 0)) {

				//Configura nova data
				setDate();

			} else if (autenticado == TRUE && (strcmp(buffer, "hora") == 0)) {

				//Configura novo horario
				setTime();

			} else if (autenticado == TRUE
					&& (strcmp(buffer, "calibrar") == 0)) {

				//Funcao que calibra o sensor
				calibrar();

			} else if (autenticado == TRUE && (strcmp(buffer, "sair") == 0)) {

				//Funcao que desloga o usuario
				sair();

			} else if (amostrando == TRUE) {

				//Para amostragem
				paraAmostragem();

			}

			break;

		default:

			estado = eMEDINDO;

			break;
		}

	}

	/*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
	for (;;) {
	}
	/*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
} /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/
Ejemplo n.º 4
0
int main(int argc, char *argv[]){
	char nome_arquivo[60];
	int opcao;
	if(argc == 1){
	  printf("É necessário indicar ao menos o nome do arquivo de entrada!\n\n");
	  printf("Para mais detalhe, indique a diretiva -h para acessar a Seção Ajuda\n\n");
	  return 0;
	}

	while((opcao = getopt(argc,argv,"ha:b:c:f:i:r:t:")) != -1){
	  	switch (opcao) {
     	case 'h':
	    {
			ajuda();
	        return 0;
	    }
     	case 'i':
    	{
        	strcpy(nome_arquivo, optarg);
	        break;
     	}
    	case 'a':
    	{
			alpha = atof(optarg);
	        break;
	    }
	    case 'b':
	    {
    	    beta = atof(optarg);
        	break;
     	}
    	case 'c':
	    {
    	    ciclos = atoi(optarg);
	        break;
	    }
	     case 'f':
	    {
	        NumeroFormigas = atoi(optarg);
	        break;
	    }
	     case 'r':
	    {
	        rho = atof(optarg);
	        break;
	    }
	     case 't':
	    {
	        num_threads = atoi(optarg);
	        break;
	    }
	  }
	  
	}

	FILE* fp;
	if((fp = fopen(nome_arquivo, "r")) == NULL){
	  printf("Arquivo inexistente\n");
	  return 0;
	}
	readgraph(fp);

	MPI_Init(&argc, &argv);


	MPI_Comm_rank(MPI_COMM_WORLD, &wrank);
	MPI_Comm_size(MPI_COMM_WORLD, &wsize);


	inicializarVertices();
	melhor_geral.qtdVertice = 0;
   melhor_colonia = (Formiga *) calloc (ciclos, sizeof (Formiga));
	AntSystemColony();

	//barreira

	//MPI_Send(&BUFFER, NUM_ELEMENTOS, MPI_INT, DESTINO, TAG, COMUNICADOR);
	//if(wrank == 0){}
	//MPI_Send(&wrank, 1, MPI_INT, destino, 0, MPI_COMM_WORLD);

	//MPI_Recv(&BUFFER, NUM_ELEMENTOS, MPI_INT, FONTE, TAG, COMUNICADOR, STATUS, ERROR);
	//MPI_Recv(&mensagem, 1, MPI_INT, origem, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
	/*if(dele x recebeu){
		escolhe
	}
	send*/
	//comparar os resultados (dele x recebido)

	//printf("O Processo: %d recebeu de %d, o seu wrank: %d\n\n", wrank, origem, mensagem);
   if(wrank == 0){
      mostraRespostaColonia(&melhor_geral);
   }
	MPI_Finalize();

   //==================
   //pthread_mutex_init(&lock, NULL);
   //pthread_barrier_init(&barreira, NULL, num_threads);
   //pthread_t threads[num_threads];

   //==================
   //inicializarVertices();
   //melhor_geral.qtdVertice = 0;
   //melhor_colonia = (Formiga *) calloc (ciclos, sizeof (Formiga));
   //int i;
   //for(i = 0; i < num_threads; i++){
   //   pthread_create(&threads[i], NULL, AntSystemColony, (void *) &i);
   //}
   //for(i = 0; i < num_threads; i++){
   //   pthread_join(threads[i], NULL);
   //}
   //mostraRespostaColonia(&melhor_geral);
   //AntSystemColony();
   return 0;
}