Ejemplo n.º 1
0
void light_trigger_SENSOR(void) {
   bool                 iShouldSend;
   uint8_t              pktId;
#ifdef LIGHT_FAKESEND
   uint16_t             numAsnSinceLastEvent;
#else
   callbackRead_cbt     light_read_cb;
#endif
   
#ifdef LIGHT_FAKESEND
   // how many cells since the last time I transmitted?
   numAsnSinceLastEvent = ieee154e_asnDiff(&light_vars.lastEventAsn);
   
   // set light_reading to fake high/low value to trigger packets
   if (numAsnSinceLastEvent>LIGHT_FAKESEND_PERIOD) {
      if (light_vars.light_reading<LUX_THRESHOLD) {
         light_vars.light_reading=2*LUX_THRESHOLD;
      } else {
         light_vars.light_reading=0;
      }
   }
#else
   // current light reading
   light_read_cb             = sensors_getCallbackRead(SENSOR_LIGHT);
   light_vars.light_reading  = light_read_cb();
#endif
   
   // detect light state switches
   if (       light_vars.light_state==FALSE && (light_vars.light_reading >= (LUX_THRESHOLD + LUX_HYSTERESIS))) {
      // light was just turned on
      
      light_vars.light_state = TRUE;
      debugpins_light_set();
      leds_light_on();
      iShouldSend = TRUE;
   } else if (light_vars.light_state==TRUE  && (light_vars.light_reading <  (LUX_THRESHOLD - LUX_HYSTERESIS))) {
      // light was just turned off
      
      light_vars.light_state = FALSE;
      debugpins_light_clr();
      leds_light_off();
      iShouldSend = TRUE;
   } else {
      // light stays in same state
      
      iShouldSend = FALSE;
   }
   
   // abort if no packet to send
   if (iShouldSend==FALSE) {
      return;
   }
   
   //=== if I get here, I send a packet
   
   // remember the current ASN
   ieee154e_getAsnStruct(&light_vars.lastEventAsn);
   
   // increment the burstId
   light_vars.burstId = (light_vars.burstId+1)%16;
   
   // send burst of LIGHT_BURSTSIZE packets
   for (pktId=0;pktId<LIGHT_BURSTSIZE;pktId++) {
      light_send_one_packet(pktId);
   }
}
Ejemplo n.º 2
0
/**
   \brief Register a OpenSensors resource

   \param[in] sensorType the sensor type representation.
   \param[in] callbackRead callback to read rough sensor data.
   \param[in] callbackConvert callback to convert rough sensor data to human understandable.
*/
void opensensors_register(uint8_t sensorType) {
   if (sensors_is_present(sensorType)) {
      opensensors_vars.opensensors_resource[opensensors_vars.numSensors].sensorType      = sensorType;
      opensensors_vars.opensensors_resource[opensensors_vars.numSensors].callbackRead    = sensors_getCallbackRead(sensorType);
      opensensors_vars.opensensors_resource[opensensors_vars.numSensors].callbackConvert = sensors_getCallbackConvert(sensorType);
      opensensors_vars.numSensors++;
   }
}