diff --git a/firmware/common/max2837.c b/firmware/common/max2837.c index 5473c6a6..da0d51d9 100644 --- a/firmware/common/max2837.c +++ b/firmware/common/max2837.c @@ -260,6 +260,43 @@ void max2837_mode_rx(void) { (PIN_XCVR_ENABLE | PIN_XCVR_RXENABLE)); } +max2837_mode_t max2837_mode(void) { + if( gpio_get(PORT_XCVR_ENABLE, PIN_XCVR_ENABLE) ) { + if( gpio_get(PORT_XCVR_ENABLE, PIN_XCVR_TXENABLE) ) { + return MAX2837_MODE_TX; + } else if( gpio_get(PORT_XCVR_ENABLE, PIN_XCVR_RXENABLE) ) { + return MAX2837_MODE_RX; + } else { + return MAX2837_MODE_STANDBY; + } + } else { + return MAX2837_MODE_SHUTDOWN; + } +} + +void max2837_set_mode(const max2837_mode_t new_mode) { + switch(new_mode) { + case MAX2837_MODE_SHUTDOWN: + max2837_mode_shutdown(); + break; + + case MAX2837_MODE_STANDBY: + max2837_mode_standby(); + break; + + case MAX2837_MODE_TX: + max2837_mode_tx(); + break; + + case MAX2837_MODE_RX: + max2837_mode_rx(); + break; + + default: + break; + } +} + void max2837_start(void) { LOG("# max2837_start\n"); diff --git a/firmware/common/max2837.h b/firmware/common/max2837.h index 0a09a497..582a0966 100644 --- a/firmware/common/max2837.h +++ b/firmware/common/max2837.h @@ -37,11 +37,21 @@ extern void max2837_regs_read(void); * provided routines for those operations. */ extern void max2837_regs_commit(void); +typedef enum { + MAX2837_MODE_SHUTDOWN, + MAX2837_MODE_STANDBY, + MAX2837_MODE_TX, + MAX2837_MODE_RX +} max2837_mode_t; + void max2837_mode_shutdown(void); void max2837_mode_standby(void); void max2837_mode_tx(void); void max2837_mode_rx(void); +max2837_mode_t max2837_mode(void); +void max2837_set_mode(const max2837_mode_t new_mode); + /* Turn on/off all chip functions. Does not control oscillator and CLKOUT */ extern void max2837_start(void); extern void max2837_stop(void);