void DataInitiate() { uint8_t i,j; uint8_t buf[2],fd; for(i=0; i<MaxHopsPossible; i++) { if(cache[i] == Gateway) { break; } } uint8_t temp[szMax]; temp[0]=TTL+1; for(j=1; j<i+2; j++) { temp[j]=cache[j-1]; } fd=nrk_open(FIREFLY_SENSOR_BASIC,READ); //wait_ms(1); nrk_set_status(fd, SENSOR_SELECT, TEMP); nrk_read(fd, &buf[0], 2); temp[j++] = buf[1]; temp[j++] = buf[0]; nrk_set_status(fd, SENSOR_SELECT, LIGHT); nrk_read(fd, &buf[0], 2); temp[j++] = buf[1]; temp[j] = buf[0]; nrk_close(fd); DataTx(temp,i+6,0); }
void tx_task() { int8_t v,fd; uint8_t len,cnt,chan; printf( "Tx Task PID=%u\r\n",nrk_get_pid()); while(!tdma_started()) nrk_wait_until_next_period(); v=tdma_tx_slot_add(mac_address); cnt=0; while(1) { // Open ADC device as read fd = nrk_open (FIREFLY_SENSOR_BASIC, READ); nrk_wait_until_next_period(); // allow sensor to warm up if (fd == NRK_ERROR) nrk_kprintf (PSTR ("Failed to open sensor driver\r\n")); v = nrk_set_status (fd, SENSOR_SELECT, BAT); v = nrk_read (fd, &bat, 2); v = nrk_set_status (fd, SENSOR_SELECT, LIGHT); v = nrk_read (fd, &light, 2); v = nrk_set_status (fd, SENSOR_SELECT, TEMP); v = nrk_read (fd, &temp, 2); v = nrk_set_status (fd, SENSOR_SELECT, ACC_X); v = nrk_read (fd, &adxl_x, 2); v = nrk_set_status (fd, SENSOR_SELECT, ACC_Y); v = nrk_read (fd, &adxl_y, 2); v = nrk_set_status (fd, SENSOR_SELECT, ACC_Z); v = nrk_read (fd, &adxl_z, 2); v = nrk_set_status (fd, SENSOR_SELECT, AUDIO_P2P); v = nrk_read (fd, &mic, 2); nrk_close(fd); // Build a sensor packet sprintf (tx_buf, "S MAC: %u bat: %u light: %u temp: %u audio: %u adxl: %u %u %u\r\n", (uint16_t) (mac_address & 0xffff), bat, light, temp, mic, adxl_x, adxl_y, adxl_z); len=strlen(tx_buf); v=tdma_send(&tx_tdma_fd, &tx_buf, len, TDMA_BLOCKING ); if(v==NRK_OK) { printf ("%s", tx_buf); } } }
void Task1() { uint16_t cnt; int8_t i,fd,val; uint16_t buf; printf( "My node's address is %d\r\n",NODE_ADDR ); printf( "Task1 PID=%d\r\n",nrk_get_pid()); cnt=0; while(1) { // Open ADC device as read fd=nrk_open(FIREFLY_SENSOR_BASIC,READ); if(fd==NRK_ERROR) nrk_kprintf(PSTR("Failed to open sensor driver\r\n")); nrk_led_toggle(BLUE_LED); // Example of setting a sensor val=nrk_set_status(fd,SENSOR_SELECT,BAT); // Read battery first while other sensors warm up val=nrk_read(fd,&buf,2); printf( "Task bat=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,LIGHT); val=nrk_read(fd,&buf,2); printf( " light=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,TEMP); val=nrk_read(fd,&buf,2); printf( " temp=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_X); val=nrk_read(fd,&buf,2); printf( " acc_x=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_Y); val=nrk_read(fd,&buf,2); printf( " acc_y=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_Z); val=nrk_read(fd,&buf,2); printf( " acc_z=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,AUDIO_P2P); nrk_spin_wait_us(60000); val=nrk_read(fd,&buf,2); printf( " audio=%d\r\n",buf); nrk_close(fd); nrk_wait_until_next_period(); cnt++; } }
void Task1() { nrk_led_clr(ORANGE_LED); nrk_led_clr(BLUE_LED); nrk_led_clr(GREEN_LED); nrk_led_clr(RED_LED); while(1) { nrk_led_toggle(ORANGE_LED); fd=nrk_open(FIREFLY_SENSOR_BASIC,READ); wait_ms(1); val = nrk_set_status(fd, SENSOR_SELECT, TEMP); val = nrk_read(fd, &buf[0], 2); adc_int = buf[0] + (buf[1]<<8); printf(" temp: %d\r\n", adc_int); nrk_close(fd); nrk_wait_until_next_period(); } }
void tx_task () { uint8_t j, i, val, cnt; int8_t len; int8_t v,fd; uint8_t buf[2]; nrk_sig_mask_t ret; nrk_time_t t; // Set Port D.0 as input // On the FireFly nodes we use this for motion or syntonistor input // It can be interrupt driven, but we don't do this with TDMA since updates are so fast anyway // DDRD &= ~(0x1); printf ("tx_task PID=%d\r\n", nrk_get_pid ()); // setup a software watch dog timer t.secs=10; t.nano_secs=0; nrk_sw_wdt_init(0, &t, NULL); nrk_sw_wdt_start(0); while (!tdma_started ()) nrk_wait_until_next_period (); // set port G as input for gpio DDRG=0; while (1) { nrk_led_clr(RED_LED); tx_pkt.payload[0] = 1; // ELEMENTS tx_pkt.payload[1] = 3; // Key fd=nrk_open(FIREFLY_3_SENSOR_BASIC,READ); if(fd==NRK_ERROR) nrk_kprintf(PSTR("Failed to open sensor driver\r\n")); val=nrk_set_status(fd,SENSOR_SELECT,MOTION); val=nrk_read(fd,&buf,2); tx_pkt.payload[28]=buf[1]; tx_pkt.payload[29]=buf[0]; val=nrk_set_status(fd,SENSOR_SELECT,BAT); val=nrk_read(fd,&buf,2); tx_pkt.payload[2]=buf[1]; tx_pkt.payload[3]=buf[0]; //printf( "Task bat=%d",buf); // tx_pkt.payload[2]=0; // tx_pkt.payload[3]=0; val=nrk_set_status(fd,SENSOR_SELECT,LIGHT); val=nrk_read(fd,&buf,2); tx_pkt.payload[4]=buf[1]; tx_pkt.payload[5]=buf[0]; //printf( " light=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,TEMP); val=nrk_read(fd,&buf,2); tx_pkt.payload[6]=buf[1]; tx_pkt.payload[7]=buf[0]; //printf( " temp=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_X); val=nrk_read(fd,&buf,2); tx_pkt.payload[8]=buf[1]; tx_pkt.payload[9]=buf[0]; //printf( " acc_x=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_Y); val=nrk_read(fd,&buf,2); tx_pkt.payload[10]=buf[1]; tx_pkt.payload[11]=buf[0]; //printf( " acc_y=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_Z); val=nrk_read(fd,&buf,2); tx_pkt.payload[12]=buf[1]; tx_pkt.payload[13]=buf[0]; //printf( " acc_z=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,HUMIDITY); val=nrk_read(fd,&buf,4); tx_pkt.payload[16]=buf[3]; tx_pkt.payload[17]=buf[2]; tx_pkt.payload[18]=buf[1]; tx_pkt.payload[19]=buf[0]; val=nrk_set_status(fd,SENSOR_SELECT,TEMP2); val=nrk_read(fd,&buf,4); tx_pkt.payload[20]=buf[3]; tx_pkt.payload[21]=buf[2]; tx_pkt.payload[22]=buf[1]; tx_pkt.payload[23]=buf[0]; val=nrk_set_status(fd,SENSOR_SELECT,PRESS); val=nrk_read(fd,&buf,4); tx_pkt.payload[24]=buf[3]; tx_pkt.payload[25]=buf[2]; tx_pkt.payload[26]=buf[1]; tx_pkt.payload[27]=buf[0]; val=nrk_set_status(fd,SENSOR_SELECT,AUDIO_P2P); val=nrk_read(fd,&buf,2); tx_pkt.payload[14]=buf[1]; tx_pkt.payload[15]=buf[0]; // GPIO data // gpio_pin = !!(PINE & 0x4); gpio_pin = PING & 0x1; tx_pkt.payload[30]=gpio_pin; //printf( " audio=%d\r\n",buf); nrk_close(fd); tx_pkt.payload_len=31; tx_pkt.src_mac=mac_address; tx_pkt.dst_mac=0; tx_pkt.type=APP; len=pkt_to_buf(&tx_pkt,&tx_buf ); if(len>0) { v = tdma_send (&tx_tdma_fd, &tx_buf, len, TDMA_BLOCKING); if (v == NRK_OK) { } } else { nrk_kprintf(PSTR("Pkt tx error\r\n")); nrk_wait_until_next_period(); } nrk_sw_wdt_update(0); } }
void tx_task () { uint8_t j, i, val, cnt; int8_t len; int8_t v,fd; uint8_t buf[2]; nrk_sig_t tx_done_signal; nrk_sig_mask_t ret; nrk_time_t r_period; // Set Port D.0 as input // On the FireFly nodes we use this for motion or syntonistor input // It can be interrupt driven, but we don't do this with TDMA since updates are so fast anyway DDRD &= ~(0x1); printf ("tx_task PID=%d\r\n", nrk_get_pid ()); // Wait until the tx_task starts up bmac // This should be called by all tasks using bmac that while (!tdma_started ()) nrk_wait_until_next_period (); while (1) { fd=nrk_open(FIREFLY_SENSOR_BASIC,READ); if(fd==NRK_ERROR) nrk_kprintf(PSTR("Failed to open sensor driver\r\n")); tx_pkt.payload[0] = 1; // ELEMENTS tx_pkt.payload[1] = 3; // Key val=nrk_set_status(fd,SENSOR_SELECT,BAT); val=nrk_read(fd,&buf,2); tx_pkt.payload[2]=buf[1]; tx_pkt.payload[3]=buf[0]; //printf( "Task bat=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,LIGHT); val=nrk_read(fd,&buf,2); tx_pkt.payload[4]=buf[1]; tx_pkt.payload[5]=buf[0]; //printf( " light=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,TEMP); val=nrk_read(fd,&buf,2); tx_pkt.payload[6]=buf[1]; tx_pkt.payload[7]=buf[0]; //printf( " temp=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_X); val=nrk_read(fd,&buf,2); tx_pkt.payload[8]=buf[1]; tx_pkt.payload[9]=buf[0]; //printf( " acc_x=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_Y); val=nrk_read(fd,&buf,2); tx_pkt.payload[10]=buf[1]; tx_pkt.payload[11]=buf[0]; //printf( " acc_y=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,ACC_Z); val=nrk_read(fd,&buf,2); tx_pkt.payload[12]=buf[1]; tx_pkt.payload[13]=buf[0]; //printf( " acc_z=%d",buf); val=nrk_set_status(fd,SENSOR_SELECT,AUDIO_P2P); nrk_spin_wait_us(60000); val=nrk_read(fd,&buf,2); tx_pkt.payload[14]=buf[1]; tx_pkt.payload[15]=buf[0]; // GPIO data gpio_pin = (PIND & 0x1); tx_pkt.payload[16]=gpio_pin; //printf( " audio=%d\r\n",buf); tx_pkt.payload_len=17; nrk_close(fd); tx_pkt.src_mac=mac_address; tx_pkt.dst_mac=0; tx_pkt.type=APP; len=pkt_to_buf(&tx_pkt,&tx_buf ); if(len>0) { v = tdma_send (&tx_tdma_fd, &tx_buf, len, TDMA_BLOCKING); if (v == NRK_OK) { //nrk_kprintf (PSTR ("App Packet Sent\n")); } } else nrk_wait_until_next_period(); } }
int8_t transducer_handler(TRANSDUCER_MSG_T *in_msg, TRANSDUCER_MSG_T *out_msg) { int8_t fd,val,i; uint8_t value; if(in_msg->type==TRAN_LED_BLINK) { value=in_msg->payload[0]; if((value&TRAN_RED_LED_MASK)!=0) nrk_led_set(RED_LED); if((value&TRAN_GREEN_LED_MASK)!=0) nrk_led_set(GREEN_LED); if((value&TRAN_BLUE_LED_MASK)!=0) nrk_led_set(BLUE_LED); if((value&TRAN_ORANGE_LED_MASK)!=0) nrk_led_set(ORANGE_LED); nrk_wait_until_ticks(50); nrk_led_clr(RED_LED); nrk_led_clr(GREEN_LED); nrk_led_clr(BLUE_LED); nrk_led_clr(ORANGE_LED); out_msg->type=TRAN_ACK; return 1; } else if(in_msg->type==TRAN_FF_BASIC_SHORT) { FF_SENSOR_SHORT_PKT_T s; debug_stats.sensor_samples++; // Open ADC device as read fd=nrk_open(FIREFLY_SENSOR_BASIC,READ); if(fd==NRK_ERROR) nrk_kprintf(PSTR("Failed to open sensor driver\r\n")); val=nrk_set_status(fd,SENSOR_SELECT,BAT); val=nrk_read(fd,&tmp,2); s.battery=(uint8_t)(tmp-100); // subtract 1 volt to fit in 8 bits // Wait for Audio sensor to stabalize nrk_wait_ticks(100); val=nrk_set_status(fd,SENSOR_SELECT,LIGHT); val=nrk_read(fd,&(s.light),1); val=nrk_set_status(fd,SENSOR_SELECT,TEMP); val=nrk_read(fd,&tmp,2); if(tmp<TEMPERATURE_OFFSET) tmp=0; else tmp-=TEMPERATURE_OFFSET; // subtract offset and divide by 2 #ifndef FIREFLY_2_3 tmp=tmp>>1; #endif if(tmp>255) tmp=255; s.temperature=tmp; max_delta=0; val=nrk_set_status(fd,SENSOR_SELECT,ACC_X); val=nrk_read(fd,&buf,2); if(buf> adxl_prev_x ) tmp=buf-adxl_prev_x; else tmp=adxl_prev_x-buf; adxl_prev_x=buf; if(tmp>max_delta) max_delta=tmp; val=nrk_set_status(fd,SENSOR_SELECT,ACC_Y); val=nrk_read(fd,&buf,2); if(buf> adxl_prev_y ) tmp=buf-adxl_prev_y; else tmp=adxl_prev_y-buf; adxl_prev_y=buf; if(tmp>max_delta) max_delta=tmp; val=nrk_set_status(fd,SENSOR_SELECT,ACC_Z); val=nrk_read(fd,&buf,2); if(buf> adxl_prev_z ) tmp=buf-adxl_prev_z; else tmp=adxl_prev_z-buf; adxl_prev_z=buf; if(tmp>max_delta) max_delta=tmp; if(max_delta>255) s.acceleration=255; else s.acceleration=(uint8_t)(max_delta & 0xFF); val=nrk_set_status(fd,SENSOR_SELECT,AUDIO_P2P); val=nrk_read(fd,&tmp,2); if(tmp>255) tmp=255; s.sound_level=tmp; nrk_close(fd); // Pack up the data ff_basic_sensor_short_pack( out_msg, &s ); return 1; }