コード例 #1
0
void p2p_enable(struct p2p *p)
{
	if(p->enable == -1 )
	{
		if(p->wpa_open == 1){
			p->wpa_open = 0;
			system("killall wpa_supplicant");
#ifdef DHCP
			system("killall dhclient");
#endif			
		}
		if(p->ap_open ==1){
			p->ap_open = 0;
			system("killall hostapd");
#ifdef DHCP
			system("killall dhcpd");
#endif
		}

		memset( p->cmd, 0x00, CMD_SZ );
		sprintf( p->cmd, "iwpriv %s p2p_set enable=0", p->ifname);
		system( p->cmd );
		
		return;
	}
	
	p->p2p_get=0;
	memset( p->cmd, 0x00, CMD_SZ );
	sprintf( p->cmd, "iwpriv %s p2p_set enable=%d", p->ifname, p->enable);
	system( p->cmd );
	
	if( p->enable == P2P_ROLE_DISABLE )
	{
		p->have_p2p_dev = 0;
		p->wps_info = 0;
		p->pin = 12345670;

		if(p->res == 0)
		{
			p->res = 1;
		}

		if(p->res_go == 0)
		{
			p->res_go = 1;
		}
				
		p->wpa_open = 0;
		system("killall wpa_supplicant");
#ifdef DHCP
		system("killall dhclient");
#endif
		system("clear");
		p->ap_open = 0;
		system("killall hostapd");
#ifdef DHCP
		system("killall dhcpd");
#endif
		system("clear");
		
	}
	else if( p->enable == P2P_ROLE_DEVICE )
	{
		char msg[5] = "NULL";

#ifdef P2P_AUTO
		p->res = pthread_create(&p->pthread, NULL, &polling_status, (void *)p);
#endif
		
		if( p->res !=0 )
		{
			p->p2p_get=1;
			memset( p->print_line, 0x00, CMD_SZ );
			sprintf( p->print_line, "Thread creation failed" );
		}
		
		if(p->wpa_open == 1){
			p->wpa_open = 0;
			system("killall wpa_supplicant");
#ifdef DHCP
			system("killall dhclient");
#endif
		}
		if(p->ap_open ==1){
			p->ap_open = 0;
			system("killall hostapd");
#ifdef DHCP
			system("killall dhcpd");
#endif
		}
		
		p->intent = 1;
		p2p_intent(p);
		
		p2p_set_opch(p, NULL, 0);
		usleep(50000);
		p2p_softap_ssid(p, NULL, 0);

		p2p_setDN(p);

		p2p_scan( p );
		
	}
	else if( p->enable == P2P_ROLE_CLIENT )
	{
		if(p->ap_open ==1){
			p->ap_open = 0;
			system("killall hostapd");
#ifdef DHCP
			system("killall dhcpd");
#endif
		}
		
		p2p_status(p, 0);
		p2p_role(p, 0);
		p2p_intent(p);
	}
	else if( p->enable == P2P_ROLE_GO )
	{
		if(p->wpa_open == 1){
			p->wpa_open = 0;
			system("killall wpa_supplicant");
#ifdef DHCP
			system("killall dhclient");
#endif
		}

		p2p_status(p, 0);
		p2p_role(p, 0);
		p2p_intent(p);
		
		p2p_set_opch(p, NULL, 0);
		usleep(50000);
		p2p_softap_ssid(p, NULL, 0);

		if(p->ap_open != 1)
		{
			memset( p->cmd, 0x00, CMD_SZ );
			sprintf( p->cmd, "%s -B %s > temp.txt",p->ap_path, p->ap_conf);
			system( p->cmd );
	
			p->ap_open = 1;
		}

#ifdef P2P_AUTO
		p->res_go = pthread_create(&p->pthread_go, NULL, &polling_client, (void *)p);
#endif

		if( p->res_go != 0 )
		{
			p->p2p_get=1;
			memset( p->print_line, 0x00, CMD_SZ );
			sprintf( p->print_line, "Thread creation failed" );
		}
		
	}

}
コード例 #2
0
//int main()
int main(int argc, char **argv)
{
	char	peerifa[40] = { 0x00 };
	char	scan[CMD_SZ];	
	struct p2p p2pstruct;
	struct p2p *p=NULL;

   if ( argc != 2 )
   {
      printf( "usage: %s <ifname>\n", argv[0] );
      return 1;
   }

	p = &p2pstruct;	
	if( p != NULL)
	{
		memset(p, 0x00, sizeof(struct p2p));
		init_p2p(p);
	}

	strcpy(p->ifname, argv[1] );
	
	/* Disable P2P functionalities at first*/
	p->enable=P2P_ROLE_DISABLE;
	p2p_enable(p);
	p2p_get_hostapd_conf(p);
	usleep(50000);
  
    rename_intf(p);
  
	//do
	//{
		/* Enable P2P (option e) */
		printf("Enable P2P\n");
		p->enable = P2P_ROLE_DEVICE;
		p2p_enable(p);
		p->show_scan_result=1;
		
		/* Set Intent 1 (option i) */
		printf("Set Intent 1\n");
		p->intent = 15;
		p2p_intent(p);
		
		/* Scan Wi-Fi Direct Devices (option a) */
		//printf("Scaning for Wi-Fi Direct Devices\n");
		//p2p_scan(p);
		
		/* Set Peer Device Address (option m) */
		printf("Set Peer Device Address\n");
		p2p_devaddr(p);
		
		/* Provision Discovery (option p) */
		printf("Provision Discovery\n");
		char msg[CMD_SZ];
		memset( msg, 0x00, CMD_SZ );
		char dis_msg[CMD_SZ];
		memset( dis_msg, 0x00, CMD_SZ );
		char label_msg[CMD_SZ];
		memset( label_msg, 0x00, CMD_SZ );

		if(strncmp(p->peer_devaddr, "00:00:00:00:00:00", 17) == 0)
		{
			strcpy( msg, "Please insert peer P2P device at first" );			

			p2p_prov_disc_no_addr(p, msg);
			p->show_scan_result = 1;
		}
		else
		{
			strcpy( msg, "Please insert WPS configuration method ;[0]display, [1]keypad, [2]pbc, [3]label:\n" );
			strcpy( dis_msg, "Please insert PIN code displays on peer device screen:" );
			strcpy( label_msg, "Please insert PIN code displays on peer label:" );

			p2p_prov_disc(p, msg, dis_msg, label_msg);
		}
		// ui_screen(p);

		// printf("*insert cmd:");
		// memset( scan, 0x00, CMD_SZ );
		// scanf("%s", scan);

		// if( p->thread_trigger == THREAD_NONE )		//Active mode for user interface
		// {
			
			// if( strncmp(scan, "e", 1) == 0 )	//Enable
			// {
				// p->show_scan_result = 1;
				// ui_screen(p);
				// printf("Please insert enable mode;[0]Disable, [1]Device, [2]Client, [3]GO:");
				// scanf("%d",&p->enable);
	
				// p2p_enable(p);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "a", 1) == 0 )	// Scan P2P device
			// {
				// p2p_scan(p);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "d", 1) == 0 )	// Set device name
			// {
				// p->p2p_get = 0;
				// printf("Please insert device name :");
				// scanf("\n%[^\n]", p->dev_name);
				// p2p_setDN(p);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "i", 1) == 0 )	// Intent
			// {
				// p->show_scan_result = 1;
				// ui_screen(p);
				// printf("Please insert intent from [0~15(must be softap)] :");
				// scanf("%d",&p->intent);
				// p2p_intent(p);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "w", 1) == 0 )	// WPS_info
			// {
				// p->show_scan_result = 1;
				// ui_screen(p);
				// printf("Please insert WPS method\n");
				// printf("[0]None, [1]Peer Display PIN, [2]Self Display Pin, [3]PBC :");
				// scanf("%d",&p->wps_info);
				// p2p_wpsinfo(p);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "c", 1) == 0 )	// PIN_code
			// {
				// char ins_no[CMD_SZ], ins_no_again[CMD_SZ];
				// memset(ins_no, 0x00, CMD_SZ); 
				// strcpy(ins_no, "Please insert 8-digit number, eg:12345670 :" );
				// memset(ins_no_again, 0x00, CMD_SZ);
				// strcpy(ins_no_again, "Invalid number, insert again, eg:12345670 :" );
	
				// p2p_pincode(p, ins_no, ins_no_again);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "m", 1) == 0 )	// Set peer device address
			// {
				// p->show_scan_result = 1;
				// ui_screen(p);
				// printf("Please insert number in scan list:");
				// p2p_devaddr(p);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "r", 1) == 0 )	// Get role
			// {
				// p2p_role(p,1);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "s", 1) == 0 )	// Get status
			// {
				// p2p_status(p, 1);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "p", 1) == 0 )	// Provision discovery
			// {
				// char msg[CMD_SZ];
				// memset( msg, 0x00, CMD_SZ );
				// char dis_msg[CMD_SZ];
				// memset( dis_msg, 0x00, CMD_SZ );
				// char label_msg[CMD_SZ];
				// memset( label_msg, 0x00, CMD_SZ );
	
	
				// if(strncmp(p->peer_devaddr, "00:00:00:00:00:00", 17) == 0)
				// {
					// strcpy( msg, "Please insert peer P2P device at first" );			
	
					// p2p_prov_disc_no_addr(p, msg);
					// p->show_scan_result = 1;
				// }
				// else
				// {
					// strcpy( msg, "Please insert WPS configuration method ;[0]display, [1]keypad, [2]pbc, [3]label:\n" );
					// strcpy( dis_msg, "Please insert PIN code displays on peer device screen:" );
					// strcpy( label_msg, "Please insert PIN code displays on peer label:" );

					// p2p_prov_disc(p, msg, dis_msg, label_msg);
				// }
			// }
			// else if( strncmp(scan, "n", 1) == 0 )	// Set negotiation
			// {
				// p2p_set_nego(p);
			// }
			// else if( strncmp(scan, "f", 1) == 0 ) // Reflash current state
			// {
				// p->show_scan_result = 1;
				// p2p_status(p, 0);
				// p2p_role(p, 0);
				// p2p_ifaddr(p);

				// if( p->status == P2P_STATE_RX_PROVISION_DIS_REQ )
				// {
					// char peer_devaddr[18];
					// char peer_req_cm[4];
					
					// memset( peer_devaddr, 0x00, 18);
					// memset( peer_req_cm, 0x00, 4);
					
					// p2p_peer_devaddr(p, peer_devaddr);
					// p2p_peer_req_cm(p, peer_req_cm);
					// p2p_peer_info(p, p->peer_devaddr, peer_req_cm);
				// }
// #ifndef P2P_AUTO
				// else
				// {
					// if( p->role == P2P_ROLE_CLIENT )
					// {
						// p2p_client_mode(p);
					// }
					// else if( p->role == P2P_ROLE_GO )
					// {
						// p2p_go_mode(p);
					// }
				// }
// #endif //P2P_AUTO
		
			// }
			// else if( strncmp(scan, "x", 1) == 0 )	// Start wpa_supplicant/hostapd
			// {
				// if( p->role == P2P_ROLE_CLIENT )
				// {
					// p2p_client_mode(p);
				// }
				// else if( p->role == P2P_ROLE_GO )
				// {
					// p2p_go_mode(p);
				// }
			// }
			// else if( strncmp(scan, "h", 1) == 0 )	// Set operation channel
			// {
				// char msg[CMD_SZ];
				// memset( msg, 0x00, CMD_SZ );
				// strcpy( msg, "Please insert desired operation channel:" );			
	
				// p2p_set_opch(p, msg, 1);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "t", 1) == 0 )	// Set SoftAP ssid
			// {
				// char msg[CMD_SZ];
				// memset( msg, 0x00, CMD_SZ );
				// strcpy( msg, "Please insert desired SoftAP ssid:" );			
	
				// p2p_softap_ssid(p, msg, 1);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "l", 1) == 0 )	// Set Listen channel
			// {
				// char msg[CMD_SZ];
				// memset( msg, 0x00, CMD_SZ );
				// strcpy( msg, "Please insert desired Listen channel, only ch.1.6.11 are available:" );			

				// p2p_listen_ch(p, msg);
				// p->show_scan_result = 1;
			// }
			// else if( strncmp(scan, "q", 1) == 0 )	// Quit
			// {
				// if( p->res == 0 )
					// p->res = 1;
				// if( p->res_go == 0 )
					// p->res_go = 1;
				// break;
			// }
			// else	// Insert wrong commamd
			// {
				// p->p2p_get=1;
				// p->show_scan_result = 1;
				// memset( p->print_line, 0x00, CMD_SZ );
				// sprintf( p->print_line, " BAD argument");
			// }
			
		// }
		// else if( p->thread_trigger == THREAD_DEVICE )		//Passive mode for user interface
		// {
			
			// p->thread_trigger = THREAD_NONE ;
			
			// if( strncmp(scan, "b", 1) == 0 )
			// {
				// p->wps_info=3;
				// p2p_wpsinfo(p);
				
				// p2p_status(p, 0);
				
				// if(p->status != P2P_STATE_GONEGO_OK)
				// {
					// p2p_set_nego(p);
				// }
				// else
				// {
					// p2p_role(p,0);
										
					// if( p->role == P2P_ROLE_CLIENT )
					// {
						// p2p_client_mode(p);
					// }
					// else if( p->role == P2P_ROLE_GO )
					// {
						// p2p_go_mode(p);
					// }
				// }
			// }
			// else if( strncmp(scan, "c", 1) == 0 )
			// {
				// p->wps_info=2;
				// p2p_wpsinfo(p);
				
				// p2p_status(p, 0);
							
				// if(p->status != P2P_STATE_GONEGO_OK)
				// {
					// p2p_set_nego(p);
				// }					
				// else
				// {
					// p2p_role(p,0);
					// p2p_ifaddr(p);
										
					// if( p->role == P2P_ROLE_CLIENT )
					// {
						// p2p_client_mode(p);
					// }
					// else if( p->role == P2P_ROLE_GO )
					// {
						// p2p_go_mode(p);
					// }
				// }
			// }
			// else if( ('0' <= *scan ) && ( *scan <= '9') )
			// {
				// printf("In passive pin code\n");
				
				// p->pin = atoi(scan);
				
				// p->wps_info=1;
				// p2p_wpsinfo(p);
				
				// p2p_set_nego(p);
			// }
		// }
		// else if( p->thread_trigger == THREAD_GO )		//Passive mode for user interface
		// {
			
			// p->thread_trigger = THREAD_NONE ;
			
			// if( strncmp(scan, "b", 1) == 0 )
			// {
				// p->wps_info=3;
				// p2p_wpsinfo(p);

			// }
			// else if( strncmp(scan, "c", 1) == 0 )
			// {
				// p->wps_info=2;
				// p2p_wpsinfo(p);
			// }
			// else if( ('0' <= *scan ) && ( *scan <= '9') )
			// {
				// printf("In passive pin code\n");
				
				// p->pin = atoi(scan);
				
				// p->wps_info=1;
				// p2p_wpsinfo(p);
			// }
			
			// p2p_go_mode(p);
			
		// }
	do {
	}
	while( 1 );

	/* Disable P2P functionalities when exits*/
	p->enable= -1 ;
	p2p_enable(p);

	system( "rm -f ./supp_status.txt" );
	system( "rm -f ./temp.txt" );
	system( "rm -f ./scan.txt" );
	system( "rm -f ./peer.txt" );
	system( "rm -f ./status.txt" );
	system( "rm -f ./cm.txt" );
	
	return 0;

}