Example #1
0
static EVENT_HANDLER(transmit)
{
    WLAN_FRAME	frame;
    int		link	= 1;

//  POPULATE A NEW FRAME
    do {
	frame.header.dest	= CNET_rand() % NNODES;
    } while(frame.header.dest == nodeinfo.nodenumber);
    frame.header.src		= nodeinfo.nodenumber;
    frame.header.prevpos	= positions[nodeinfo.nodenumber];	// me!

    sprintf(frame.payload, "hello from %d", nodeinfo.nodenumber);
    frame.header.length	= strlen(frame.payload) + 1;	// send nul-byte too

//  TRANSMIT THE FRAME
    size_t len	= sizeof(WLAN_HEADER) + frame.header.length;
    CHECK(CNET_write_physical_reliable(link, &frame, &len));
    ++stats[0];

    if(verbose) {
	fprintf(stdout, "\n%s: transmitting '%s' to %d\n",
			nodeinfo.nodename, frame.payload, frame.header.dest);
    }

//  SCHEDULE OUR NEXT TRANSMISSION
    CNET_start_timer(EV_TIMER1, TX_NEXT, 0);
}
Example #2
0
///Worker Method
///Called to send a nl_packet to an associated access point.
///If this device is not associated, we abort and manage association instead
///as there is nowhere to transmit the packet to.
static int transmit(struct nl_packet *packet)
{  
  fprintf(stdout, "\tTransmitting.\n");
  
  // Create a broadcast address.
  CnetNICaddr wifi_dest;
  CHECK(CNET_parse_nicaddr(wifi_dest, "ff:ff:ff:ff:ff:ff"));
  
  //uint16_t packet_length = NL_PACKET_LENGTH(packet);
  uint16_t packet_length = sizeof(*packet);
  
  if(packet->type == NULL_FRAME)
  {
    fprintf(stderr, "\t%s is attempting to send a null packet!\n",nodeinfo.nodename);
    exit(0);
  }
  if(isAss == false)
  {
    fprintf(stdout, "\tWhoops! %s is not associated!\n\t Starting Probe\n", nodeinfo.nodename);
   // CHECK(CNET_disable_application(ALLNODES));
    probe_timer = CNET_start_timer(EV_TIMER1, 100, 0);
    return 0;
  }
  else
  {
    fprintf(stdout, "\tAssociation is true, sending frame.\n");
    fprintf(stdout, "\n packet src:%i dest:%i\n",packet->src, packet->dest);
    if(packet->dest > 133) exit(0);

    dll_wifi_write(dll_states[1], wifi_dest, (char *)packet, packet_length);

    if(packet->type == NL_DATA )	
    {
      CHECK(CNET_disable_application(ALLNODES));
      printf(" DATA transmitted, seq=%d\n", packet->seq);
      data_timeout = CNET_start_timer(EV_TIMER2, CNET_rand() * 50000 + 500000, 0); /// one second wait time
    }
    
    return 1;
  }
}
Example #3
0
static EVENT_HANDLER(walker)
{
	static	double		dx	= 0.0;
	static	double		dy	= 0.0;
	static	double		newx	= 0.0;
	static	double		newy	= 0.0;
	static	int		nsteps	= 0;

	CnetPosition	now;
	CnetTime		movenext;

	//  IF PAUSED, WE NEED TO CHOOSE A NEW DESTINATION AND WALKING SPEED
	if(paused) {
		CnetPosition	newdest;

		CHECK(CNET_get_position(&now, NULL));

		//  CHOOSE A NEW DESTINATION THAT DOESN'T REQUIRE WALKING THROUGH A WALL!
		do {
			int			newspeed;
			double		dist;

			newdest	= now;
			do {
				choose_position(&newdest, MAX_WALK_DIST);
			} while(through_an_object(now, newdest));

			dx		= newdest.x - now.x;
			dy		= newdest.y - now.y;
			dist	= sqrt(dx*dx + dy*dy);	// only walking in 2D

			newspeed	= CNET_rand() % MAX_SPEED + 1;
			nsteps	= dist / newspeed;
		} while(nsteps < 3);		// ensure we'll take at least 3 steps
		//draw_walk(&now, &newdest);

		//  CALCULATE MOVEMENTS PER STEP
		dx	= (dx / nsteps);
		dy	= (dy / nsteps);
		newx	= now.x;
		newy	= now.y;
		paused	= false;		// and off we go....
	}

	//  WE'RE WALKING;  DO WE STILL HAVE SOME STEPS TO TAKE?
	if(nsteps > 0) {
		newx	+= dx;
		newy	+= dy;

		now.x	 = newx;
		now.y	 = newy;
		now.z	 = 0;
		CHECK(CNET_set_position(now));
		paused	= false;
		--nsteps;
		movenext = WALK_FREQUENCY;
	}
	//  WE'VE FINISHED WALKING, SO WE PAUSE HERE FOR A WHILE
	else {
		paused	= true;
		nsteps	= 0;
		movenext = (CNET_rand() % (MAX_PAUSE-MIN_PAUSE) + MIN_PAUSE) * 1000000;
	}

	//  RESCHEDULE THIS WALKING EVENT
	tid	= CNET_start_timer(EV_WALKING, movenext, data);
}