Exemplo n.º 1
0
char TOS_COMMAND(YELLOW_LED_TOGGLE)(){
  if(VAR(leds_on) & 0x4){
	return TOS_CALL_COMMAND(YELLOW_LED_OFF)();
  }else{
	return TOS_CALL_COMMAND(YELLOW_LED_ON)();
  } 
}
Exemplo n.º 2
0
char TOS_EVENT(WAVE_PHOTO_EVENT)(int newlight){
  int diff = newlight - VAR(light);
  VAR(light) = newlight;
  diff = (diff > 0) ? diff : -diff;
  if (diff > 0x50) TOS_CALL_COMMAND(WAVE_LEDr_off)(); else TOS_CALL_COMMAND(WAVE_LEDr_on)();
  return 1;
}
Exemplo n.º 3
0
char TOS_COMMAND(GREEN_LED_TOGGLE)(){
  if(VAR(leds_on) & 0x2){
	return TOS_CALL_COMMAND(GREEN_LED_OFF)();
  }else{
	return TOS_CALL_COMMAND(GREEN_LED_ON)();
  } 
}
Exemplo n.º 4
0
//This handler responds to routing updates.
TOS_MsgPtr TOS_MSG_EVENT(CONNECT_UPDATE)(TOS_MsgPtr msg){
    TOS_MsgPtr tmp;
    char* data = msg->data;

    //clear LED2 when update is received.
    TOS_CALL_COMMAND(CONNECT_LED2_OFF)();

    update_connections(data[(int)data[0]], data[28]);
    //if route hasn't already been set this period...
    if(VAR(set) == 0){
	//record route
	VAR(route) = data[(int)data[0]];
	VAR(set) = 8;
       	data[0] ++;
	//create a update packet to be sent out.
        data[(int)data[0]] = TOS_LOCAL_ADDRESS;
	//send the update packet.
	if(VAR(msg_send_pending) == 0){
		VAR(msg_send_pending) = TOS_CALL_COMMAND(CONNECT_SUB_SEND_MSG)(TOS_BCAST_ADDR, AM_MSG(CONNECT_UPDATE),msg);
	}else{
		return msg;
	}
	printf("route set to %x\n", VAR(route));
    	tmp = VAR(msg);
    	VAR(msg) = msg;
    	return tmp;

    }else{
	    printf("route already set to %x\n", VAR(route));
	    return msg;
    }
}
Exemplo n.º 5
0
/* WAVE_INIT: flash all the LEDs on */
char TOS_COMMAND(WAVE_INIT)(){
  VAR(state) = 0;
  TOS_CALL_COMMAND(WAVE_LEDy_off)();
  TOS_CALL_COMMAND(WAVE_LEDr_off)();
  TOS_CALL_COMMAND(WAVE_LEDg_off)();
  TOS_COMMAND(WAVE_SUB_DATA_INIT)(); /* initialize lower components */
  TOS_COMMAND(WAVE_SUB_INIT)(255, 0x03); /* initialize lower components */
  return 1;
}
Exemplo n.º 6
0
char TOS_COMMAND(AM_INIT)(){

    TOS_CALL_COMMAND(AM_SUB_INIT)();
    TOS_CALL_COMMAND(AM_UART_SUB_INIT)();
    VAR(state) = 0;
#ifdef FULLPC 
    printf("AM Module initialized\n");
#endif
    return 1;
}
Exemplo n.º 7
0
/* Clock Event Handler: 
   signaled at end of each clock interval.

 */
void TOS_EVENT(MAGS_CLOCK_EVENT)(){
  TOS_CALL_COMMAND(MAGS_GET_DATA)(DATA_PORT); /* start data reading */

  //count down the LED_on variable.  when it hits 0, turn off the led.
  if(VAR(led_on == 1)) TOS_CALL_COMMAND(MAGS_LEDg_off)();
  if(VAR(led_on) != 0) VAR(led_on) --;

  //count done the pot_wait variable
  if(VAR(pot_wait) != 0) VAR(pot_wait) --;
}
Exemplo n.º 8
0
/*
 * ------- commands accepted --------- 
 */
char            TOS_COMMAND(UART_2_LEDS_INIT) () {
    /*
     * initialize output component 
     */

    if (TOS_CALL_COMMAND(UART_2_LEDS_LEDS_INIT) () == 0)
	return 0;

    return TOS_CALL_COMMAND(UART_2_LEDS_UART_INIT) ();

}
Exemplo n.º 9
0
/*
 * GENERIC_BASE_INIT: initialize lower components. initialize component
 * state, including constant portion of msgs. 
 */
char            TOS_COMMAND(GENERIC_BASE_INIT) () {
    TOS_CALL_COMMAND(GENERIC_BASE_SUB_INIT) ();	/* initialize lower
						 * components */
    TOS_CALL_COMMAND(GENERIC_BASE_SUB_UART_INIT) ();	/* initialize
							 * lower
							 * components */
    VAR(msg) = &VAR(data);
    VAR(send_pending) = 0;
    printf("GENERIC_BASE initialized\n");
    return 1;
}
Exemplo n.º 10
0
TOS_MsgPtr      TOS_MSG_EVENT(DATA_MSG) (TOS_MsgPtr msg) {
    char           *data = msg->data;
    TOS_MsgPtr      tmp = msg;
    char            source;
    // this handler forwards packets traveling to the base.
    TOS_CALL_COMMAND(CONNECT_LED2_OFF) ();
    // if this is the first hop on the route, then use the origin of the
    // packet< 
    // as the name of the person who sent the packet to you instead of the 
    // 
    // 
    // last hop ID (which is null)
    source = data[2];
    if (source == 0) {
	source = data[0];
    }
    update_connections(source, data[28]);
    // if a route is known, forward the packet towards the base.
    if (VAR(route) != 0 && data[1] == TOS_LOCAL_ADDRESS) {
#ifdef BASE_STATION
	if (VAR(msg_send_pending) == 0) {
	    VAR(msg_send_pending) =
		TOS_CALL_COMMAND(CONNECT_SUB_SEND_MSG) (TOS_UART_ADDR,
							AM_MSG(DATA_MSG),
							msg);
	    tmp = VAR(msg);
	    VAR(msg) = msg;
	}
#else
	// update the packet.
	data[5] = data[4];
	data[4] = data[3];
	data[3] = data[2];
	data[2] = data[1];
	data[1] = VAR(route);
	// send the packet.
	if (VAR(msg_send_pending) == 0) {
	    VAR(msg_send_pending) =
		TOS_CALL_COMMAND(CONNECT_SUB_SEND_MSG) (TOS_BCAST_ADDR,
							AM_MSG
							(CONNECT_UPDATE),
							msg);
	    tmp = VAR(msg);
	    VAR(msg) = msg;
	}
#endif
	printf("routing to home %x\n", VAR(route));
    }
    return tmp;
}
Exemplo n.º 11
0
/* MAGS_INIT:  
   flash the LEDs
   initialize lower components.
   initialize component state, including constant portion of msgs.
*/
char TOS_COMMAND(MAGS_INIT)(){
  struct adc_packet* pack = (struct adc_packet*)(VAR(msg).data);
  SET_MAG_POT_SELECT();
  TOS_CALL_COMMAND(MAGS_LEDy_off)();   
  TOS_CALL_COMMAND(MAGS_LEDr_off)();
  TOS_CALL_COMMAND(MAGS_LEDg_off)();       /* light LEDs */
  TOS_CALL_COMMAND(MAGS_SUB_INIT)();       /* initialize lower components */
  TOS_CALL_COMMAND(MAGS_CLOCK_INIT)(40, 1);    /* set clock interval */
  VAR(state) = 0;
  VAR(send_pending) = 0;
  pack->count = 0; 
  printf("MAGS initialized\n");
  return 1;
}
Exemplo n.º 12
0
char            TOS_COMMAND(CONNECT_INIT) () {
    // initialize sub components
    TOS_CALL_COMMAND(CONNECT_SUB_INIT) ();
    VAR(msg) = &VAR(route_buf);
    VAR(data_send_pending) = 0;
    VAR(msg_send_pending) = 0;
#ifdef BASE_STATION
    // set beacon rate for route updates to be sent
    TOS_COMMAND(CONNECT_SUB_CLOCK_INIT) (255, 0x06);
    printf("base route set to TOS_UART_ADDR\n");
    // route to base station is over UART.
    VAR(route) = TOS_UART_ADDR;
    VAR(set) = 1;
    VAR(place) = 0;
    VAR(data_buf).data[0] = 1;
    VAR(data_buf).data[1] = TOS_LOCAL_ADDRESS;
#else
    // set rate for sampling.
    TOS_COMMAND(CONNECT_SUB_CLOCK_INIT) (255, 0x03);
    VAR(set) = 0;
    VAR(route) = 0;
    VAR(count) = 0;
#endif
    return 1;
}
Exemplo n.º 13
0
char TOS_COMMAND(UART_PACKET_TX_PACKET)(TOS_MsgPtr msg){
#ifndef FULLPC
    if(VAR(state) == 0){
	VAR(send_ptr) = (char*)msg;
	VAR(count) = 1;
	VAR(state) = 1;
	if(TOS_CALL_COMMAND(UART_PACKET_SUB_TX_BYTES)(VAR(send_ptr)[0])){
	    return 1;
	}else{
	    VAR(state) = 0;
	    VAR(count) = 0;
	    return 0;
	}
    }else{
	return 0;
    }
#else
    {
    	int i;
	printf("uart_send_packet\n");
	VAR(send_ptr) = (char*)msg;
	if(uart_send != 0){
    		printf("sending packet: %d \n", write(uart_send, VAR(send_ptr), sizeof(TOS_Msg)));
	}
    	for(i = 0; i < sizeof(TOS_Msg); i ++)printf("%x,", VAR(send_ptr)[i]);
    	printf("\n");
    }
    return 0;
#endif
}
Exemplo n.º 14
0
char            TOS_EVENT(UART_TO_LEDS_RX_BYTE_READY) (char data,
						       char error) {
    int             tmp = data;
    TOS_CALL_COMMAND(UART_TO_LEDS_LED_OUTPUT) (tmp);
    printf("\n");
    return 1;
}
Exemplo n.º 15
0
/*
 * for some reason, most of the power commands return void. Does this
 * violate the TOS command-handshake protocol?
 */
char            TOS_COMMAND(SLIP_POWER) (char mode) {
    /*
     * no power-mode code for now, call UART power mode
     */

    return (TOS_CALL_COMMAND(SLIP_SUB_POWER) (mode));
}
Exemplo n.º 16
0
char TOS_COMMAND(AGRO_INIT)(){
    //initialize sub components
   TOS_CALL_COMMAND(AGRO_SUB_INIT)();
   VAR(msg) = &VAR(data_buf);
   {
   	   VAR(my_parent)[0] = TOS_LOCAL_ADDRESS - 0x10;
   	   VAR(my_parent)[1] = TOS_LOCAL_ADDRESS - 0x1;
   	   VAR(my_parent)[2] = TOS_LOCAL_ADDRESS - 0x11;
   	   VAR(my_parent)[3] = TOS_LOCAL_ADDRESS - 0x20;
   	   VAR(my_parent)[4] = TOS_LOCAL_ADDRESS - 0x2;
	   if(TOS_LOCAL_ADDRESS == 0x200) VAR(my_parent)[0] = TOS_UART_ADDR;
	   VAR(parent_ptr) = 0;

   }
   VAR(dupe_ptr) = 0;
   VAR(data_send_pending) = 0;
   VAR(msg_send_pending) = 0;
   VAR(rel_send_pending) = 0;
   VAR(rel_send_req) = 0;
   VAR(rel_ptr) = &VAR(rel_buf);
   //set rate for sampling.
   VAR(set) = 0;
   VAR(route) = 0;
   VAR(count) = 0;

   VAR(max_strength) = 0;
   return 1;
}
Exemplo n.º 17
0
/*
 * PACKET_TX_BYTE_READY: spool bytes to packet component in event-driven
 * manner. On each byte event, return the next byte till done. 
 */
char            TOS_EVENT(PACKET_TX_BYTE_READY) (char success) {
    if (success == 0) {
	printf("TX_packet failed, TX_byte_failed");
	TOS_SIGNAL_EVENT(PACKET_TX_PACKET_DONE) ((TOS_MsgPtr) VAR(msg));
	VAR(state) = 0;
	VAR(count) = 0;
    }
    if (VAR(state) == 1) {
	if (VAR(count) < sizeof(TOS_Msg)) {
#ifdef FULLPC_DEBUG
	    printf("PACKET: byte sent: %x, STATE: %d, COUNT: %d\n",
		   VAR(data)[(int) VAR(count)] & 0xff, VAR(state),
		   VAR(count));
#endif
	    TOS_CALL_COMMAND(PACKET_SUB_TX_BYTES) (VAR(data)
						   [(int) VAR(count)]);
	    VAR(count)++;
	} else if (VAR(count) == sizeof(TOS_Msg)) {
	    VAR(count)++;
	    return 0;
	} else {
	    VAR(state) = 0;
	    VAR(count) = 0;
	    TOS_SIGNAL_EVENT(PACKET_TX_PACKET_DONE) ((TOS_MsgPtr)
						     VAR(data));
	    return 0;
	}
    }
    return 1;
}
Exemplo n.º 18
0
char            TOS_COMMAND(PACKET_INIT) () {
    TOS_CALL_COMMAND(PACKET_SUB_INIT) ();
    VAR(msg) = (char *) &VAR(recbuf);
    VAR(state) = 0;
#ifdef FULLPC
    printf("Packet handler initialized.\n");
#endif
    return 1;
}
Exemplo n.º 19
0
void TOS_EVENT(CONNECT_SUB_CLOCK)(){
    //clear LED3 when the clock ticks.
    TOS_CALL_COMMAND(CONNECT_LED3_OFF)();
    printf("route clock\n");
#ifdef BASE_STATION
	//if is the base, then it should send out the route update.
	if(VAR(data_send_pending) == 0){
		VAR(data_send_pending) = TOS_CALL_COMMAND(CONNECT_SUB_SEND_MSG)(TOS_BCAST_ADDR, AM_MSG(CONNECT_UPDATE),&VAR(data_buf));
	}
#else
    //decrement the set var to know when a period is over.
    if(VAR(set) != 0) VAR(set) --;
    //read the value from the sensor.
    TOS_COMMAND(CONNECT_SUB_READ)();
#endif //BASE_STATION
    TOS_CALL_COMMAND(CONNECT_LED1_TOGGLE)();

}
Exemplo n.º 20
0
int main() {    
    /* reset the ports, and set the directions */
    SET_PIN_DIRECTIONS();
    TOS_CALL_COMMAND(MAIN_SUB_POT_INIT)(0);
    TOS_sched_init();
    
    TOS_CALL_COMMAND(MAIN_SUB_INIT)();
    TOS_CALL_COMMAND(MAIN_SUB_START)();
    dbg(DBG_BOOT,("mote initialized.\n"));

    while(1){
	while(!TOS_schedule_task()) { };
	sbi(MCUCR, SE);
	asm volatile ("sleep" ::);
        asm volatile ("nop" ::);
        asm volatile ("nop" ::);
    }
}
Exemplo n.º 21
0
char TOS_EVENT(MAGS_DATA_EVENT)(int data){
  struct adc_packet* pack = (struct adc_packet*)(VAR(msg).data);
  printf("data_event\n");
  VAR(reading) = data;
  TOS_POST_TASK(FILTER_DATA);
  if(VAR(send_pending) == 0){
	pack->count ++; 
	pack->data[(int)VAR(state)] = data;
  	VAR(state) ++;
  } 
	
  if(VAR(pot_wait) == 0){
  		TOS_CALL_COMMAND(MAGS_LEDy_off)();
  		TOS_CALL_COMMAND(MAGS_LEDr_off)();
  	if(data > 0x200){
		decrease_r();
		//this is a counter so that we can only reset the POT once
		//every 255 samples.
  		TOS_CALL_COMMAND(MAGS_LEDy_on)();
		VAR(pot_wait) = 255;
	}
  	else if(data < 0x100){
		increase_r();
		//this is a counter so that we can only reset the POT once
		//every 255 samples.
		VAR(pot_wait) = 255;
  		TOS_CALL_COMMAND(MAGS_LEDr_on)();
		
		
	}
  }

  if(VAR(state) == sizeof(pack->data)/sizeof(int)){
  	pack->data[(int)VAR(state)] = VAR(diff);
	VAR(state) = 0;
  	if (TOS_CALL_COMMAND(MAGS_SUB_SEND_MSG)(TOS_UART_ADDR,AM_MSG(mags_msg),&VAR(msg))) {
		VAR(send_pending) = 1;
    		return 1;
	}else {
    		return 0;
  	}
  }
  return 1;
}
Exemplo n.º 22
0
char TOS_EVENT(AGRO_SUB_DATA_READY)(short data){
	if(data > VAR(my_strength)) VAR(my_strength) = data;
	VAR(count) ++;
	if(VAR(count) == 8){
	    VAR(count) = 0;
	    if(VAR(id_gen) == 0) VAR(id_gen) = data;
	    if(VAR(my_strength) > VAR(max_strength) && VAR(my_strength) > MAG_THRESHOLD){
		uint8_t i;
    	    	TOS_CALL_COMMAND(AGRO_LED1_ON)();	
		agroDataPacket* pack = (agroDataPacket*)VAR(rel_ptr)->data;
		pack->pack_ID = VAR(id_gen);
		pack->from = TOS_LOCAL_ADDRESS;
		pack->readings[0].nodeID = TOS_LOCAL_ADDRESS;
		pack->readings[0].value = VAR(my_strength);
		for(i = 1; i < 4; i ++){
        		pack->readings[i].value = VAR(dataBlock)[i-1].value;
        		pack->readings[i].nodeID = VAR(dataBlock)[i-1].nodeID;
        		VAR(dataBlock)[i-1].value = 0;
        		VAR(dataBlock)[i-1].nodeID = 0xff;
		}
		bar_foo();
	    }else{
    	    	TOS_CALL_COMMAND(AGRO_LED1_OFF)();
	    }
	    VAR(my_strength) = 0;
	    VAR(max_strength) = 0;
	    
	}else {
	  if(data > MAG_THRESHOLD && VAR(msg_send_pending) == 0){
		CLR_YELLOW_LED_PIN();
   		agroDataPacket* pack = (agroDataPacket*)VAR(msg)->data;		
		pack->readings[0].nodeID = TOS_LOCAL_ADDRESS;
		pack->readings[0].value = data;
		//TIME to send out an data messgae.
		VAR(msg)->length = 6;
		VAR(msg_send_pending) = TOS_CALL_COMMAND(AGRO_SUB_SEND_MSG)(TOS_BCAST_ADDR, AM_MSG(AGRO_DATA_MSG), VAR(msg));
	   }else{
		SET_YELLOW_LED_PIN();
    	    	TOS_CALL_COMMAND(AGRO_LED1_OFF)();
	   }
	}
        return 1;
}
Exemplo n.º 23
0
char TOS_COMMAND(UART_PACKET_INIT)(){
    VAR(state) = 0;
    VAR(rec_ptr) = (char*)&VAR(buffer);
#ifdef FULLPC
   udp_init_socket();
    printf("UART Packet handler initialized.\n");
#endif
	TOS_CALL_COMMAND(UART_PACKET_SUB_INIT)();
    return 1;
} 
Exemplo n.º 24
0
/* INTERP_INIT:  
   flash the LEDs
   initialize lower components.
   initialize component state, including constant portion of msgs.
*/
char TOS_COMMAND(INTERP_INIT)(){
  TOS_CALL_COMMAND(INTERP_SUB_INIT)();       /* initialize lower components */
  VAR(state)    = 0;
  VAR(light)    = 0;
  VAR(codesize) = 0;
  VAR(sp)       = 0;
  VAR(ip)       = 0;
  printf("INTERP initialized\n");
  return 1;
}
Exemplo n.º 25
0
/* Command to transmit a packet */
char TOS_COMMAND(PACKET_TX_PACKET)(TOS_MsgPtr msg){
    if(VAR(send_state) == IDLE_STATE){
	VAR(send_ptr) = msg;
	VAR(send_state) = SEND_WAITING;
	VAR(tx_count) = 1;
	TOS_CALL_COMMAND(PACKET_SUB_MAC_DELAY)();
	return 1;
    }else{
	return 0;
    }
}
Exemplo n.º 26
0
/* The handles the latest decoded byte propagated by the Byte Level component*/
char TOS_EVENT(PACKET_SUB_START_SYM_DETECT)(){
	short tmp;
	VAR(ack_count) = 0;
	VAR(rec_count) = 0;
	VAR(state) = RX_STATE;
		//outp(VAR(state), UDR);
	tmp = TOS_CALL_COMMAND(PACKET_SUB_GET_TIMING)();
	TOS_CALL_COMMAND(PACKET_SUB_FIFO_READ)(tmp);
  	VAR(msg_length) = MSG_DATA_SIZE - 2;
  	VAR(calc_crc) = 0;
	VAR(rec_ptr)->time = tmp;
	//set the sound time to zero now so we can tell if no tone was detected
	VAR(rec_ptr)->tone_time = 0;
	//outp(tmp >> 8, UDR);
	//outp(0xff, UDR);
	sbi(EIMSK, INT3);
	//outp(tmp, UDR);
	VAR(rec_ptr)->strength = 0;
	return 1;
}
Exemplo n.º 27
0
char TOS_EVENT(CONNECT_SUB_DATA_READY)(int data){
    //when the data comes back from the sensor, see if the counter
    // has expired or if the  value is significantly different
    // from the previous value.
    if(VAR(route) != 0 &&
	((VAR(prev) - data) > 100 ||
	 (data - VAR(prev)) > 100 ||
	 VAR(count) > 10)){
	 char* buf = VAR(data_buf).data;
        //if a new data packet needs to be sent, go for it.
	if(VAR(data_send_pending) == 0){
		buf[6] = data >> 8;
		buf[7] = data & 0xff;
		buf[0] = TOS_LOCAL_ADDRESS;
		buf[1] = VAR(route);
		VAR(data_send_pending) = TOS_CALL_COMMAND(CONNECT_SUB_SEND_MSG)(TOS_BCAST_ADDR, AM_MSG(DATA_MSG),&VAR(data_buf));
		VAR(count) = 0;
		//blink the LED
		TOS_CALL_COMMAND(CONNECT_LED3_ON)();
	}
Exemplo n.º 28
0
char TOS_EVENT(PACKET_SUB_CHANNEL_IDLE)(){
  if(VAR(send_state) == SEND_WAITING){
	char first = ((char*)VAR(send_ptr))[0];
	VAR(buf_end) = VAR(buf_head) = 0;
	VAR(enc_count) = 0;
	TOS_CALL_COMMAND(PACKET_SUB_RADIO_ENCODE)(first);
  	VAR(rx_count) = 0;
	VAR(msg_length) = (unsigned char)(VAR(send_ptr)->length) + MSG_DATA_SIZE - DATA_LENGTH - 2;
	VAR(send_state) = IDLE_STATE;
	VAR(state) = TRANSMITTING_START;
  	TOS_CALL_COMMAND(PACKET_SUB_FIFO_SEND)(start[0]);
	VAR(send_ptr)->time = TOS_CALL_COMMAND(RF_COMM_SUB_GET_CURRENT_TIME)();
	VAR(calc_crc) = add_crc_byte(first, 0x00);
	//turn sounder on
	if(VAR(sounder_length)>0){
	  SET_PW2_PIN();
	  VAR(sounder_length)=0;
	}
  }
  return 1;
}
Exemplo n.º 29
0
char            TOS_COMMAND(SEND_DV_FP_INIT) () {
    CLR_RED_LED_PIN();
    CLR_GREEN_LED_PIN();
    CLR_YELLOW_LED_PIN();
    TOS_CALL_COMMAND(SEND_DV_FP_SUB_INIT) ();
    printf("SEND_DV_FP initialized\n");
    SET_RED_LED_PIN();
    SET_GREEN_LED_PIN();
    SET_YELLOW_LED_PIN();

    return 1;
}
Exemplo n.º 30
0
void bar_foo(){
	if(VAR(rel_send_pending) == 0){
		VAR(id_gen) ++;
		VAR(rel_cnt) = 0;
		VAR(rel_ptr)->length = 16;
		((agroDataPacket*)(VAR(rel_ptr)->data))->from = VAR(my_parent)[VAR(parent_ptr)];
				
		VAR(rel_send_pending) = TOS_CALL_COMMAND(AGRO_SUB_SEND_MSG)(VAR(my_parent)[VAR(parent_ptr)], AM_MSG(AGRO_REL_MSG), VAR(rel_ptr));
		if(VAR(rel_send_pending) == 0) VAR(id_gen) --;
	}

}