Line data Source code
1 : #include "AP_Camera_Relay.h" 2 : 3 : #if AP_CAMERA_RELAY_ENABLED 4 : 5 : #include <AP_Relay/AP_Relay.h> 6 : 7 : // update - should be called at 50hz 8 0 : void AP_Camera_Relay::update() 9 : { 10 0 : if (trigger_counter > 0) { 11 0 : trigger_counter--; 12 : } else { 13 0 : AP_Relay *ap_relay = AP::relay(); 14 0 : if (ap_relay == nullptr) { 15 0 : return; 16 : } 17 0 : ap_relay->set(AP_Relay_Params::FUNCTION::CAMERA, !_params.relay_on); 18 : } 19 : 20 : // call parent update 21 0 : AP_Camera_Backend::update(); 22 : } 23 : 24 : // entry point to actually take a picture. returns true on success 25 0 : bool AP_Camera_Relay::trigger_pic() 26 : { 27 : // fail if have not completed previous picture 28 0 : if (trigger_counter > 0) { 29 0 : return false; 30 : } 31 : 32 : // exit immediately if no relay is setup 33 0 : AP_Relay *ap_relay = AP::relay(); 34 0 : if (ap_relay == nullptr) { 35 0 : return false; 36 : } 37 : 38 0 : ap_relay->set(AP_Relay_Params::FUNCTION::CAMERA, _params.relay_on); 39 : 40 : // set counter to move servo to off position after this many iterations of update (assumes 50hz update rate) 41 0 : trigger_counter = constrain_float(_params.trigger_duration * 50, 0, UINT16_MAX); 42 : 43 0 : return true; 44 : } 45 : 46 : #endif // AP_CAMERA_RELAY_ENABLED