2011-10-01 19:55:41 -03:00
// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
/*
* AP_Relay . cpp
*
* Created on : Oct 2 , 2011
* Author : Amilcar Lucas
*/
2012-11-30 21:47:32 -04:00
# include <AP_HAL.h>
2011-10-01 19:55:41 -03:00
# include "AP_Relay.h"
2012-12-17 11:03:51 -04:00
# if CONFIG_HAL_BOARD == HAL_BOARD_APM1
2012-11-30 21:47:32 -04:00
# define RELAY_PIN 47
2013-01-01 19:19:43 -04:00
# elif CONFIG_HAL_BOARD == HAL_BOARD_APM2 || CONFIG_HAL_BOARD == HAL_BOARD_AVR_SITL
2013-01-05 17:51:59 -04:00
# define RELAY_PIN 13
2013-07-11 00:02:18 -03:00
# elif CONFIG_HAL_BOARD == HAL_BOARD_PX4
2013-07-11 00:49:37 -03:00
# define RELAY_PIN 111
2012-12-17 11:03:51 -04:00
# else
2013-01-01 21:51:56 -04:00
// no relay for this board
# define RELAY_PIN -1
2012-12-17 11:03:51 -04:00
# endif
2011-10-01 19:55:41 -03:00
2013-06-24 09:39:18 -03:00
const AP_Param : : GroupInfo AP_Relay : : var_info [ ] PROGMEM = {
// @Param: PIN
// @DisplayName: Relay Pin
2013-07-11 00:49:37 -03:00
// @Description: Digital pin number for relay control. This is normally 47 for the APM1 relay, 13 for the A9 pin on APM2 and 111 for the high power relay pin on the PX4.
2013-06-24 09:39:18 -03:00
// @User: Standard
AP_GROUPINFO ( " PIN " , 0 , AP_Relay , _pin , RELAY_PIN ) ,
2012-12-04 19:26:30 -04:00
2013-06-24 09:39:18 -03:00
AP_GROUPEND
} ;
2011-10-01 19:55:41 -03:00
2013-06-24 09:39:18 -03:00
extern const AP_HAL : : HAL & hal ;
AP_Relay : : AP_Relay ( void )
{
AP_Param : : setup_object_defaults ( this , var_info ) ;
2011-10-01 19:55:41 -03:00
}
2013-06-24 09:39:18 -03:00
void AP_Relay : : init ( )
{
if ( _pin ! = - 1 ) {
hal . gpio - > pinMode ( _pin , GPIO_OUTPUT ) ;
2012-08-17 03:21:08 -03:00
off ( ) ;
2013-06-24 09:39:18 -03:00
}
2012-11-30 21:47:32 -04:00
}
2013-06-24 09:39:18 -03:00
void AP_Relay : : on ( )
{
if ( _pin ! = - 1 ) {
hal . gpio - > write ( _pin , 1 ) ;
}
2011-10-01 19:55:41 -03:00
}
2013-06-24 09:39:18 -03:00
void AP_Relay : : off ( )
{
if ( _pin ! = - 1 ) {
hal . gpio - > write ( _pin , 0 ) ;
}
2011-10-01 19:55:41 -03:00
}
2013-06-24 09:39:18 -03:00
void AP_Relay : : toggle ( )
{
if ( _pin ! = - 1 ) {
bool ison = hal . gpio - > read ( _pin ) ;
if ( ison )
off ( ) ;
else
on ( ) ;
}
}