Пример #1
0
int8_t test_sensor_msg_handler(void *state, Message *msg) {
	test_sensor_state_t *s = (test_sensor_state_t *)state;

	switch (msg->type) {
		case MSG_INIT: {
			LED_DBG(LED_RED_OFF);
			LED_DBG(LED_GREEN_OFF);
			LED_DBG(LED_YELLOW_OFF);
			s->sequence = 0;
			s->ctx[0].delay = 0;
			// The sensors connected to the internal ADC use the ticks from the 32KHz clock
			s->ctx[0].period = 32768; // this is in ticks from a 32kHz clock
			s->ctx[0].samples = 0; // samples=0 means collect an infinite number of samples
			s->ctx[0].event_samples = 1; //event_samples=1 means send out one sample per buffer
			s->ctx[1].delay = 200; // the temperature sensor needs 200ms of warmup
			// The SHT1x sensors use the ticks from the 1024Hz SOS timer
			s->ctx[1].period = 512; // this is in ticks from the sos timer, e.g. 1024=1second
			s->ctx[1].samples = 64;
			s->ctx[1].event_samples = 32;
			s->ctx[2].delay = 0;
			// Module starts sampling when the user button is pressed
			if (sys_register_isr(PORT2_INTERRUPT, USER_INT_FID) == 0) {
				LED_DBG(LED_RED_TOGGLE);
			}
			break;
		}
		case MSG_TIMER_TIMEOUT: {
			break;
		}
		case MSG_DATA_READY: {
			size_t len = msg->len;
			sensor_data_msg_t *b = (sensor_data_msg_t *)sys_msg_take_data(msg);
			sys_post_uart(TEST_SENSOR_PID, 0x81, len, b, SOS_MSG_RELEASE, BCAST_ADDRESS);
			LED_DBG(LED_YELLOW_TOGGLE);
			break;
		}
		case MSG_FINAL: {
			sys_sensor_stop_sampling(LIGHT_PAR_SENSOR);
			sys_sensor_stop_sampling(TEMPERATURE_SENSOR);
			sys_deregister_isr(PORT2_INTERRUPT);
			//sys_timer_stop(0);
			break;
		}
		default: return -EINVAL;
	}
	return SOS_OK;
}
Пример #2
0
static int8_t test_tpsn_net_module_handler(void *state, Message *msg)
{
	app_state_t *s = (app_state_t *) state;
	MsgParam *p = (MsgParam*)(msg->data);
	
	switch (msg->type)
	{
		case MSG_INIT:
		{
		  s->pid = msg->did;
		  sys_register_isr(0, USERINT_FID);		  
		  s->state = 0;

		  // If master node, start the transmit_timer
		  if(sys_id() == 0) sys_timer_start(TRANSMIT_TIMER, TRANSMIT_INTERVAL, TIMER_REPEAT);
		  
		  sys_led(LED_RED_OFF);
		  sys_led(LED_GREEN_OFF);
		  sys_led(LED_YELLOW_OFF);
		  break;
		}
    	case MSG_GLOBAL_TIME_REPLY:
		{
            msg_global_time_t* msg_global_time = (msg_global_time_t*)msg->data;

            s->time = msg_global_time->time;
            s->refreshed = msg_global_time->refreshed;

            sys_timer_start(DELAY_TIMER, sys_rand()%256, TIMER_ONE_SHOT);

           break;
		}

        case MSG_GLOBAL_TIME_SEND:
        {
            msg_global_time_send_t* datamsg = (msg_global_time_send_t*) sys_msg_take_data(msg);
            //sys_led(LED_YELLOW_TOGGLE);
            sys_post_uart(s->pid, MSG_GLOBAL_TIME_SEND, sizeof(msg_global_time_send_t), datamsg, SOS_MSG_RELEASE, BCAST_ADDRESS);
            break;
        }
        case MSG_TIMER_TIMEOUT:
        {
            switch(p->byte)
            {
                case TRANSMIT_TIMER:
                    {
                        if (s->state){
                            sys_led(LED_GREEN_OFF);
                            SETBITLOW(P2OUT, 3);
                            s->state = 0;
                        } else {
                            uint32_t timestamp;
                            msg_global_time_send_t* msg_global_time_send;

                            sys_led(LED_GREEN_ON);
                            SETBITHIGH(P2OUT, 3);
                            timestamp = sys_time32();

							// Construct the packet and send it over uart
							msg_global_time_send = (msg_global_time_send_t*)sys_malloc(sizeof(msg_global_time_send_t));
                            msg_global_time_send->addr = sys_id();
                            msg_global_time_send->time = timestamp;
                            msg_global_time_send->refreshed = 0;
                            sys_post_uart(s->pid, MSG_GLOBAL_TIME_SEND, sizeof(msg_global_time_send_t), msg_global_time_send, SOS_MSG_RELEASE, BCAST_ADDRESS);

                            s->state = 1;
                        }
                        break;
                    }
                case DELAY_TIMER:
                    {
                        msg_global_time_send_t* msg_global_time_send = (msg_global_time_send_t*)sys_malloc(sizeof(msg_global_time_send_t));
                        sys_led(LED_GREEN_TOGGLE);
                        msg_global_time_send->addr = sys_id();
                        msg_global_time_send->time = s->time;
                        msg_global_time_send->refreshed = s->refreshed;
                        sys_post_net(s->pid, MSG_GLOBAL_TIME_SEND, sizeof(msg_global_time_send_t), msg_global_time_send, SOS_MSG_RELEASE, 0);
             
                        break;
                    }
                }

                break;
            }

		default:
			return -EINVAL;
	}

	/**
	 * Return SOS_OK for those handlers that have successfully been handled.
	 */
	return SOS_OK;
}
Пример #3
0
void _start(void) {
	ticks = 0;
	sys_register_isr(36, &user_isr);
	while (1);
}