/**************************************************************************//** * @brief Initialize the LS013B7DH03 display driver * * @return EMSTATUS code of the operation. *****************************************************************************/ bool Display_init(void) { /* Initialize the Platform Abstraction Layer (PAL) interface. */ PAL_TimerInit(); PAL_SpiInit(); PAL_GpioInit(); /* Setup GPIOs */ PAL_GpioPinModeSet(LCD_PORT_SCLK, LCD_PIN_SCLK, palGpioModePushPull, 0); PAL_GpioPinModeSet(LCD_PORT_SI, LCD_PIN_SI, palGpioModePushPull, 0); PAL_GpioPinModeSet(LCD_PORT_SCS, LCD_PIN_SCS, palGpioModePushPull, 0); PAL_GpioPinModeSet(LCD_PORT_DISP_PWR,LCD_PIN_DISP_PWR,palGpioModePushPull,0); PAL_GpioPinModeSet(LCD_PORT_EXTCOMIN,LCD_PIN_EXTCOMIN,palGpioModePushPull,0); /* Setup system (via PAL) to toggle the EXTCOMIN pin every second. */ if (PAL_GpioPinAutoToggle(LCD_PORT_EXTCOMIN, LCD_PIN_EXTCOMIN, LS013B7DH03_POLARITY_INVERSION_FREQUENCY) != PAL_EMSTATUS_OK) { return false; } Display_enable(true); Display_clear(); return true; }
/**************************************************************************//** * @brief Refresh the LS013B7DH03 display device. * * @param[in] device Display device pointer. * * @return EMSTATUS code of the operation. *****************************************************************************/ static EMSTATUS DriverRefresh(DISPLAY_Device_t* device) { EMSTATUS status = DISPLAY_EMSTATUS_OK; (void) device; /* Suppress compiler warning: unused parameter. */ /* Reinitialize the timer and SPI configuration. */ PAL_TimerInit(); PAL_SpiInit(); return status; }
/**************************************************************************//** * @brief Refresh the LS013B7DH03 display device. * * @param[in] device Display device pointer. * * @return EMSTATUS code of the operation. *****************************************************************************/ static EMSTATUS DriverRefresh(DISPLAY_Device_t* device) { EMSTATUS status = DISPLAY_EMSTATUS_OK; (void) device; /* Suppress compiler warning: unused parameter. */ /* Reinitialize the timer and SPI configuration. */ PAL_TimerInit(); spi_handle = spi_init(0, PAL_SPI_BAUDRATE, 8, false, 0); // TODO defines from platform lcd_spi_handle = spi_init_slave(spi_handle, A10, false); return status; }
/**************************************************************************//** * @brief Refresh the LS013B7DH03 display device. * * @param[in] device Display device pointer. * * @return EMSTATUS code of the operation. *****************************************************************************/ void Display_refresh(void) { /* Reinitialize the timer and SPI configuration. */ PAL_TimerInit(); PAL_SpiInit(); }
/**************************************************************************//** * @brief Initialize the LS013B7DH03 display driver * * @return EMSTATUS code of the operation. *****************************************************************************/ EMSTATUS DISPLAY_Ls013b7dh03Init(void) { DISPLAY_Device_t display; EMSTATUS status; /* Initialize the Platform Abstraction Layer (PAL) interface. */ PAL_TimerInit(); PAL_SpiInit(); PAL_GpioInit(); /* Setup GPIOs */ PAL_GpioPinModeSet(LCD_PORT_SCLK, LCD_PIN_SCLK, palGpioModePushPull,0); PAL_GpioPinModeSet(LCD_PORT_SI, LCD_PIN_SI, palGpioModePushPull,0); PAL_GpioPinModeSet(LCD_PORT_SCS, LCD_PIN_SCS, palGpioModePushPull,0); #if defined( LCD_PORT_DISP_SEL ) PAL_GpioPinModeSet(LCD_PORT_DISP_SEL,LCD_PIN_DISP_SEL,palGpioModePushPull,0); #endif #if defined( LCD_PORT_DISP_PWR ) PAL_GpioPinModeSet(LCD_PORT_DISP_PWR,LCD_PIN_DISP_PWR,palGpioModePushPull,0); #endif #if defined( LCD_PORT_EXTMODE ) PAL_GpioPinModeSet(LCD_PORT_EXTMODE, LCD_PIN_EXTMODE, palGpioModePushPull,0); #endif PAL_GpioPinModeSet(LCD_PORT_EXTCOMIN,LCD_PIN_EXTCOMIN,palGpioModePushPull,0); #ifdef PAL_TIMER_REPEAT_FUNCTION /* If the platform specifies to use a timer repeat function we should register the DisplayPolarityInverse to be called every second in order to toggle the EXTCOMIN pin at 1Hz. */ status = PAL_TimerRepeat((void(*)(void*)) DisplayPolarityInverse, 0, LS013B7DH03_POLARITY_INVERSION_FREQUENCY); #elif defined POLARITY_INVERSION_EXTCOMIN_PAL_AUTO_TOGGLE /* Setup system (via PAL) to toggle the EXTCOMIN pin every second. */ status = PAL_GpioPinAutoToggle(LCD_PORT_EXTCOMIN, LCD_PIN_EXTCOMIN, LS013B7DH03_POLARITY_INVERSION_FREQUENCY); #else /* System does not support toggling the EXTCOMIN pin. Return error. */ return DISPLAY_EMSTATUS_NOT_SUPPORTED; #endif if (PAL_EMSTATUS_OK != status) { return status; } /* Setup and register the LS013B7DH03 as a DISPLAY device now. */ display.name = SHARP_MEMLCD_DEVICE_NAME; display.colourMode = DISPLAY_COLOUR_MODE_MONOCHROME_INVERSE; display.addressMode = DISPLAY_ADDRESSING_BY_ROWS_ONLY; display.geometry.width = LS013B7DH03_WIDTH; display.geometry.height = LS013B7DH03_HEIGHT; /* stride = pixels + ctrl bytes */ display.geometry.stride = display.geometry.width + LS013B7DH03_CONTROL_BYTES*8; display.pDisplayPowerOn = DisplayEnable; #ifdef PIXEL_MATRIX_ALLOC_SUPPORT display.pPixelMatrixAllocate = PixelMatrixAllocate; display.pPixelMatrixFree = PixelMatrixFree; #else display.pPixelMatrixAllocate = NULL; display.pPixelMatrixFree = NULL; #endif display.pPixelMatrixDraw = PixelMatrixDraw; display.pPixelMatrixClear = PixelMatrixClear; display.pDriverRefresh = DriverRefresh; status = DISPLAY_DeviceRegister (&display); if (DISPLAY_EMSTATUS_OK == status) { /* Turn on display. */ DisplayEnable(&display, true); /* Clear display */ DisplayClear(); } return status; }