#ifndef OUTPUT_EXTENDER_H_ #define OUTPUT_EXTENDER_H_ #include "4094.h" #include "util.h" #include "main.h" /** Portextender Bitdefinitionen */ enum extout_bits { /** LCD Reset pin */ EXTOUT_LCD_RST, /** LCD CS1 pin */ EXTOUT_LCD_CS2, /** LCD CS2 pin */ EXTOUT_LCD_CS1, #if BOARDID == BOARDID_MYAVR /** LCD E pin */ EXTOUT_LCD_E, #else EXTOUT_UNUSED_3, #endif /** LED 1 */ EXTOUT_LED1, /** LED 0 */ EXTOUT_LED0, /** LCD DI pin */ EXTOUT_LCD_DI, /** LCD RW pin */ EXTOUT_LCD_RW, }; extern sr4094_t extout_state; extern sr4094_t old_extout_state; /** \brief Portextender Bitstatus abfragen */ static inline bool extout_bit_is_set(uint8_t bit_number) { return !!(extout_state & ((sr4094_t)1 << bit_number)); } /** \brief Portextender Bit setzen */ static inline void extout_set_bit(uint8_t bit_number) { extout_state |= ((sr4094_t)1 << bit_number); } /** \brief Portextender Bit loeschen */ static inline void extout_clear_bit(uint8_t bit_number) { extout_state &= ~((sr4094_t)1 << bit_number); } /** \brief Portextender Bit setzen oder loeschen. */ static inline void extout_write_bit(uint8_t bit_number, bool set) { if (set) extout_set_bit(bit_number); else extout_clear_bit(bit_number); } /** \brief Portextender Status in Hardware uebertragen. */ static inline void extout_commit(void) { /* Schieberegister beschreiben. */ sr4094_put_data(old_extout_state, extout_state); old_extout_state = extout_state; } void extout_init(void); #endif /* OUTPUT_EXTENDER_H_ */