void print_gen(struct pessoa*no, int geracao){//Aqui descobrimos as pessoas de uma geração específica
 		if(no!=NULL || no->geracao <= geracao){
 			print_gen(no->esq, geracao);
 			if(no->geracao==geracao){
 				printf("%s", no->nome);
			 }
			 print_gen(no->dir, geracao);
		 }
 		
	 }
void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *heth) {
	print_gen("MAC error!");
}
Пример #3
0
static void SNTP_thread(void* pvp)
{
	struct sntp_c 		params;
	const TickType_t 	xReceiveTimeOut = 500;
	uint32_t			ntp_addr=0;
	struct sntp_msg		sntpmsg,sntpresponse;
	uint16_t			usBytes;
	uint32_t			addr_len = sizeof(params.xClient);



	sys_time.timezone = 1;

	params.poll_interval = SNTP_POLL_INTERVAL;

    /* Attempt to open the socket. */
    params.socket = FreeRTOS_socket( FREERTOS_AF_INET,
    									 FREERTOS_SOCK_DGRAM,
			 	 	 	 	 	 	 	 FREERTOS_IPPROTO_UDP );

    /* Set a time out so connect() will try connect over and over */
    FreeRTOS_setsockopt( params.socket,
                         0,
                         FREERTOS_SO_RCVTIMEO,
                         &xReceiveTimeOut,
                         sizeof( xReceiveTimeOut ) );

    params.xClient.sin_port = FreeRTOS_htons(SNTP_PORT_NR);

    memset(&sntpmsg,0,sizeof(sntpmsg));
    sntpmsg.li_vn_mode = SNTP_LI_NO_WARNING | SNTP_VERSION | SNTP_MODE_CLIENT;


    for(;;)
    {
        while(ntp_addr==0)
        {
        	ntp_addr=FreeRTOS_gethostbyname(SNTP_SERVER_ADDRESS_NAME); // try to connect 5 times after that returns 0
        	params.xClient.sin_addr = ntp_addr;
        }

        FreeRTOS_sendto(params.socket,&sntpmsg,sizeof(sntpmsg),0,&params.xClient,sizeof(params.xClient)); // send request

        usBytes=FreeRTOS_recvfrom(params.socket,&sntpresponse,sizeof(sntpresponse),0,&params.xClient,&addr_len); // wait for NTP's server response,blocking

        if(usBytes == SNTP_MSG_LEN)
        {
        	/* Kiss-of-death packet. Use another server or increase SNTP_POLL_INTERVAL. */
        	if(sntpresponse.stratum == SNTP_STRATUM_KOD)
        	{
        		print_gen(s_KOD);
        		params.poll_interval +=1000;

        	}
        	else if (((sntpresponse.li_vn_mode & SNTP_MODE_MASK) == SNTP_MODE_SERVER) ||
                    ((sntpresponse.li_vn_mode & SNTP_MODE_MASK) == SNTP_MODE_BROADCAST))
        	{
        		getDate(FreeRTOS_ntohl(sntpresponse.receive_timestamp[0]),&sys_time);
				#if SNTP_PRINT_LOG
        			PRINT_SYSTIME;
				#endif
        	}
        }
        else //error
        {

        }

        vTaskDelay(params.poll_interval);
    }
}
	void main(){
		char nome[10];
		char nome1[10];
		char nome2[10];
		int d;
		char i,h;
		struct ponteiro p;
		struct ponteiro q;
		struct pessoa *raiz=(struct pessoa *)malloc(sizeof(struct pessoa));//Alocamos memoria para a raiz da arvore
		printf("Qual a primeira pessoa da arvore genealógica?\n");
		gets(nome);
		raiz->nome=nome;
		raiz->geracao = 0;
		printf("%s\n", raiz->nome);	
		insira(raiz);//Começamos a raiz propriamente aqui
		
		printf("Adicionar mais alguem? <S/N>");
		scanf("%c", &h);
		if(h=='S' || h=='s'){
			adiciona(raiz);
		}
		
		printf("Deseja fazer mais alguma coisa? \n1-)imprimir os membros por geracao \n2-)imprimir os antepassados de alguem \n ");
		printf("3-) imprimir labelled bracketing \n4-) calcular grau de parentesco \n5-) encerrar programa\n");//Aqui temos o menu
		scanf("%c",&i);
		
		if(i='1'){
		
				printf("Qual geracao?");
				scanf("%i", &d);
				print_gen(raiz,d);
		}
		else if(i='2'){
		
			
				printf("De quem?");
				gets(nome);
				emordem(raiz);
		}
		
			else if(i='3'){
			
				imprimir_lb(raiz);
			}
		
			else if(i='4'){
			
				printf("Pessoa 1:");
				gets(nome1);
				printf("Pessoa 2");
				gets(nome2);
				
				
				
				if(p.ponteiro->geracao > q.ponteiro->geracao){
					grau(q.ponteiro, p.ponteiro, q.ponteiro->geracao);
				}else{
					grau(p.ponteiro,q.ponteiro, p.ponteiro->geracao);
				}
			}
			else{
				printf("Bye Bye");
			}
		}