#include #include #include #include #include static inline chlcd_error_t __chlcd_hd44780_decoder_init( void *connector, chlcd_sender_t sender ) { if (sender(connector, 0b0010, true, true) != CHLCD_SUCCESS) { return CHLCD_SEND_ERROR; } if (sender(connector, 0b00001111, true, false) != CHLCD_SUCCESS) { return CHLCD_SEND_ERROR; } return CHLCD_SUCCESS; } static inline chlcd_error_t __chlcd_hd44780_decoder_clear( void *connector, chlcd_sender_t sender ) { if (sender(connector, 0b00000001, true, false) != CHLCD_SUCCESS) { return CHLCD_SEND_ERROR; } if (sender(connector, 0b00000010, true, false) != CHLCD_SUCCESS) { return CHLCD_SEND_ERROR; } return CHLCD_SUCCESS; } static inline chlcd_error_t __chlcd_hd44780_decoder_send_char( void *connector, chlcd_sender_t sender, chlcd_data_t content ) { return sender(connector, content, false, false); } chlcd_error_t chlcd_hd44780_decoder( chlcd_command_t command, chlcd_data_t content, void *connector, chlcd_sender_t sender ) { switch (command) { case CHLCD_INIT: return __chlcd_hd44780_decoder_init(connector, sender); case CHLCD_CLEAR: return __chlcd_hd44780_decoder_clear(connector, sender); case CHLCD_SEND_CHAR: return __chlcd_hd44780_decoder_send_char( connector, sender, content ); default: return CHLCD_BAD_ARGUMENT; } }