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); } }
/** \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++; } }