// ----------------------------------------------------------------------------- /// @file nhd0420.h /// @brief File description // ----------------------------------------------------------------------------- // Micro-Key bv // Industrieweg 28, 9804 TG Noordhorn // Postbus 92, 9800 AB Zuidhorn // The Netherlands // Tel: +31 594 503020 // Fax: +31 594 505825 // Email: support@microkey.nl // Web: www.microkey.nl // ----------------------------------------------------------------------------- /// $Revision$ /// $Author$ /// $Date$ // (c) 2017 Micro-Key bv // ----------------------------------------------------------------------------- /** * %NHD0420 implementation * \defgroup NHD0420 Package NHD0420 * \ingroup HAL * @{ */ #ifndef DISPLAY_INC_NHD0420_H_ #define DISPLAY_INC_NHD0420_H_ // ----------------------------------------------------------------------------- // Include files // ----------------------------------------------------------------------------- #include "DisplayDevice.h" #include "IODevice.h" #include "spi.h" // ----------------------------------------------------------------------------- // Constant and macro definitions // ----------------------------------------------------------------------------- #define NHD0420_SPI_MAX_CLK_HZ (100000) // SPI settings #define NHD0420_SPI_Direction (SPI_Direction_1Line_Tx) #define NHD0420_SPI_Mode (SPI_Mode_Master) #define NHD0420_SPI_DataSize (SPI_DataSize_8b) #define NHD0420_SPI_CPOL (SPI_CPOL_High) #define NHD0420_SPI_CPHA (SPI_CPHA_2Edge) #define NHD0420_SPI_NSS (SPI_NSS_Soft) #define NHD0420_SPI_NSS_INTERNAL (SPI_NSSInternalSoft_Reset) #define NHD0420_SPI_FirstBit (SPI_FirstBit_MSB) #define NHD0420_SPI_CRCPolynomial (7) #define NHD0420_SPI_RX_QUEUE (32) #define NHD0420_SPI_TX_QUEUE (32) #define NHD0420_NUMBER_OF_ROWS (4) #define NHD0420_NUMBER_OF_COLUMNS (20) #define NHD0420_CONTRAST_MIN (1) #define NHD0420_CONTRAST_MAX (50) #define NHD0420_BRIGHTNESS_MIN (1) #define NHD0420_BRIGHTNESS_MAX (8) #define NHD0420_BAUDRATE_MIN (1) #define NHD0420_BAUDRATE_MAX (8) #define NHD0420_CMD_LENGTH (2) #define NHD0420_CMD_PREFIX (0xFE) #define NHD0420_CMD_DISPLAY_ON (0x41) #define NHD0420_CMD_DISPLAY_OFF (0x42) #define NHD0420_CMD_CURSOR_SET (0x45) #define NHD0420_CMD_CURSOR_HOME (0x46) #define NHD0420_CMD_CURSOR_UL_ON (0x47) #define NHD0420_CMD_CURSOR_UL_OFF (0x48) #define NHD0420_CMD_CURSOR_MV_LEFT (0x49) #define NHD0420_CMD_CURSOR_MV_RIGHT (0x4A) #define NHD0420_CMD_CURSOR_BLK_ON (0x4B) #define NHD0420_CMD_CURSOR_BLK_OFF (0x4C) #define NHD0420_CMD_CURSOR_BACKSPACE (0x4E) #define NHD0420_CMD_CLR_SCREEN (0x51) #define NHD0420_CMD_SET_CONTRAST (0x52) #define NHD0420_CMD_SET_BRIGHTNESS (0x53) #define NHD0420_CMD_LOAD_CSTM_CHAR (0x54) #define NHD0420_CMD_MV_DISPLAY_LEFT (0x55) #define NHD0420_CMD_MV_DISPLAY_RIGHT (0x56) #define NHD0420_CMD_CHANGE_RS232_BR (0x61) #define NHD0420_CMD_CHANGE_I2C_ADDRSS (0x62) #define NHD0420_CMD_SHOW_VERSION (0x70) #define NHD0420_CMD_SHOW_RS232_BR (0x71) #define NHD0420_CMD_SHOW_I2C_ADDRSS (0x72) #define NHD0420_turnOnDisplay(a) NHD0420_sendCommand(a, NHD0420_CMD_DISPLAY_ON) #define NHD0420_turnOffDisplay(a) NHD0420_sendCommand(a, NHD0420_CMD_DISPLAY_OFF) #define NHD0420_setCursorToHome(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_HOME) #define NHD0420_setUnderlineCursorOn(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_UL_ON) #define NHD0420_setUnderlineCursorOff(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_UL_OFF) #define NHD0420_moveCursorToLeft(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_MV_LEFT) #define NHD0420_moveCursorToRight(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_MV_RIGHT) #define NHD0420_turnOnBlinkingCursor(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_BLK_ON) #define NHD0420_turnOffBlinkingCursor(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_BLK_OFF) #define NHD0420_useBackspace(a) NHD0420_sendCommand(a, NHD0420_CMD_CURSOR_BACKSPACE) #define NHD0420_clearScreen(a) NHD0420_sendCommand(a, NHD0420_CMD_CLR_SCREEN) #define NHD0420_moveDisplayToLeft(a) NHD0420_sendCommand(a, NHD0420_CMD_MV_DISPLAY_LEFT) #define NHD0420_moveDisplayToRight(a) NHD0420_sendCommand(a, NHD0420_CMD_MV_DISPLAY_RIGHT) #define NHD0420_showFirmwareVersion(a) NHD0420_sendCommand(a, NHD0420_CMD_SHOW_VERSION) #define NHD0420_showRS232Baudrate(a) NHD0420_sendCommand(a, NHD0420_CMD_SHOW_RS232_BR) #define NHD0420_showI2CAddress(a) NHD0420_sendCommand(a, NHD0420_CMD_SHOW_I2C_ADDRSS) // ----------------------------------------------------------------------------- // Type definitions. // ----------------------------------------------------------------------------- /** * \class NHD0420 * \extends DisplayDevice */ struct NHD0420 { struct DisplayDevice displayDevice; //!< \private const struct IODevice* device; bool initialized; }; // ----------------------------------------------------------------------------- // Function declarations // ----------------------------------------------------------------------------- /** ---------------------------------------------------------------------------- * NHD0420_construct * Initialises the NewHeaven Display 0420 * * @memberof NHD0420 * @param interface The interface to use * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_construct(struct NHD0420* self, const struct IODevice* device); /** ---------------------------------------------------------------------------- * NHD0420_destruct * Destructor for the NHD0420 instance * * @memberof NHD0420 * @param interface The object to destruct * * @return void * * @todo * ----------------------------------------------------------------------------- */ extern void NHD0420_destruct(struct NHD0420* self); /** ---------------------------------------------------------------------------- * NHD0420_getSpiParameters * Function that assigns the NHD0420 SPI parameters to a spiParameters struct * * @param parameters * * @return ErrorStatus * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_getSpiParameters(struct SpiParameters* parameters); /** ---------------------------------------------------------------------------- * NHD0420_setCursorToPosition * Sets the cursor of the display to the specified row and column * * @memberof NHD0420 * @param row The Row to set - between 1 and 4 * @param column The column to set - between 1 and 20 * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_setCursorToPosition(const struct NHD0420* self, unsigned int row, unsigned int column); /** ---------------------------------------------------------------------------- * NHD0420_setContrast * Sets the contrast of the display * * @memberof NHD0420 * @param contrast The contrast to set - between 1 and 50. * If passed value is outside the boundaries * this function will return ERROR * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_setContrast(const struct NHD0420* self, char contrast); /** ---------------------------------------------------------------------------- * NHD0420_setBacklightBrightness * Sets the backlight brightness of the display * * @memberof NHD0420 * @param brightness The contrast to set - between 1 and 8 * If passed value is outside the boundaries * this function will return ERROR * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_setBacklightBrightness(const struct NHD0420* self, char brightness); /** ---------------------------------------------------------------------------- * NHD0420_setRS232Baudrate * Sets the baudrate of the display * * @memberof NHD0420 * @param baudrate The baudrate to set - between 1 and 8 * 1 = 300 baud * 2 = 1200 baud * 3 = 2400 baud * 4 = 9600 baud * 5 = 14400 baud * 6 = 19200 baud * 7 = 57600 baud * 8 = 115200 baud * If passed value is outside the boundaries * this function will return ERROR * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_setRS232Baudrate(const struct NHD0420* self, char baudrate); /** ---------------------------------------------------------------------------- * NHD0420_setI2CAddress * Sets the I2C address of the display * * @memberof NHD0420 * @param address The address to set * This command sets the I2C address. The * address must be an even number (LSB = 0) * and must not be 0xFF. * The address change requires 20 us to * take effect; therefore, the subsequent * input must have an appropriate delay. * The default I2C address can be * restored if SPI or RS-232 is selected as * the communication mode. * Default: 0x50 * * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_setI2CAddress(const struct NHD0420* self, char address); /** ---------------------------------------------------------------------------- * NHD0420_SendCommand * Send a command to the display * * @memberof NHD0420 * @param command * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_sendCommand(const struct NHD0420* self, char command); /** ---------------------------------------------------------------------------- * NHD0420_sendData * * @memberof NHD0420 * * @return ErrorStatus SUCCESS if initialisation was successful * ERROR otherwise * * @todo * ----------------------------------------------------------------------------- */ extern ErrorStatus NHD0420_sendData(const struct NHD0420* self, const char* buffer, unsigned int length); #endif /* DISPLAY_INC_NHD0420_H_ */ /** @} */