|
35 | 35 |
|
36 | 36 | #include "sl_board_control.h"
|
37 | 37 |
|
| 38 | +#include <lib/support/logging/CHIPLogging.h> |
| 39 | + |
38 | 40 | #define LCD_SIZE 128
|
39 | 41 | #define QR_CODE_VERSION 4
|
40 | 42 | #define QR_CODE_MODULE_SIZE 3
|
@@ -214,18 +216,29 @@ void SilabsLCD::SetScreen(Screen_e screen)
|
214 | 216 | {
|
215 | 217 | return;
|
216 | 218 | }
|
217 |
| - |
| 219 | +#ifdef SL_ENABLE_ICD_LCD |
| 220 | + TurnOn(); |
| 221 | +#endif // SL_ENABLE_ICD_LCD |
218 | 222 | switch (screen)
|
219 | 223 | {
|
220 | 224 | case DemoScreen:
|
221 | 225 | WriteDemoUI();
|
| 226 | +#ifdef SL_ENABLE_ICD_LCD |
| 227 | + TurnOff(kActivityLCDTimeout); |
| 228 | +#endif // SL_ENABLE_ICD_LCD |
222 | 229 | break;
|
223 | 230 | case StatusScreen:
|
224 | 231 | WriteStatus();
|
| 232 | +#ifdef SL_ENABLE_ICD_LCD |
| 233 | + TurnOff(kActivityLCDTimeout); |
| 234 | +#endif // SL_ENABLE_ICD_LCD |
225 | 235 | break;
|
226 | 236 | #ifdef QR_CODE_ENABLED
|
227 | 237 | case QRCodeScreen:
|
228 | 238 | WriteQRCode();
|
| 239 | +#ifdef SL_ENABLE_ICD_LCD |
| 240 | + TurnOff(kQRCodeScreenTimeout); |
| 241 | +#endif // SL_ENABLE_ICD_LCD |
229 | 242 | break;
|
230 | 243 | #endif
|
231 | 244 | default:
|
@@ -259,27 +272,60 @@ void SilabsLCD::SetStatus(DisplayStatus_t & status)
|
259 | 272 |
|
260 | 273 | CHIP_ERROR SilabsLCD::TurnOn(void)
|
261 | 274 | {
|
262 |
| - CHIP_ERROR err = CHIP_NO_ERROR; |
263 |
| - EMSTATUS status; |
| 275 | + sl_status_t status = SL_STATUS_OK; |
264 | 276 | #if (SLI_SI91X_MCU_INTERFACE)
|
265 |
| - sl_memlcd_display_enable(); |
| 277 | + status = sl_memlcd_power_on(sl_memlcd_get(), true); |
266 | 278 | #else
|
267 | 279 | status = sl_board_enable_display();
|
| 280 | +#endif // SLI_SI91X_MCU_INTERFACE |
268 | 281 | if (status != SL_STATUS_OK)
|
269 | 282 | {
|
270 |
| - SILABS_LOG("Board Display enable fail %d", status); |
271 |
| - err = CHIP_ERROR_INTERNAL; |
| 283 | + ChipLogError(DeviceLayer, "sl_board_enable_display failed: %ld", status); |
| 284 | + return CHIP_ERROR_INTERNAL; |
272 | 285 | }
|
273 |
| -#endif // SLI_SI91X_MCU_INTERFACE |
274 |
| - return err; |
| 286 | + return CHIP_NO_ERROR; |
275 | 287 | }
|
276 | 288 |
|
277 | 289 | CHIP_ERROR SilabsLCD::TurnOff(void)
|
278 | 290 | {
|
279 |
| - CHIP_ERROR err = CHIP_NO_ERROR; |
280 |
| - Clear(); |
281 |
| - sl_board_disable_display(); |
| 291 | + sl_status_t status = SL_STATUS_OK; |
| 292 | + status = SilabsLCD::Clear(); |
| 293 | + if (status != SL_STATUS_OK) |
| 294 | + { |
| 295 | + ChipLogError(DeviceLayer, "LCD clear failed: %ld", status); |
| 296 | + return CHIP_ERROR_INTERNAL; |
| 297 | + } |
| 298 | +#if (SLI_SI91X_MCU_INTERFACE) |
| 299 | + status = sl_memlcd_power_on(sl_memlcd_get(), false); |
| 300 | +#else |
| 301 | + status = sl_board_disable_display(); |
| 302 | +#endif // SLI_SI91X_MCU_INTERFACE |
| 303 | + if (status != SL_STATUS_OK) |
| 304 | + { |
| 305 | + ChipLogError(DeviceLayer, "sl_board_disable_display failed: %ld", status); |
| 306 | + return CHIP_ERROR_INTERNAL; |
| 307 | + } |
| 308 | + ChipLogDetail(DeviceLayer, "SilabsLCD::TurnOff completed"); |
| 309 | + return CHIP_NO_ERROR; |
| 310 | +} |
| 311 | + |
| 312 | +#ifdef SL_ENABLE_ICD_LCD |
| 313 | +CHIP_ERROR SilabsLCD::TurnOff(uint32_t delayInMs) |
| 314 | +{ |
| 315 | + ChipLogDetail(DeviceLayer, "start LCD timeout timer"); |
| 316 | + sl_sleeptimer_restart_timer(&lcdTimerHandle, sl_sleeptimer_ms_to_tick(delayInMs), LcdTimeoutCallback, this, 0, |
| 317 | + SL_SLEEPTIMER_NO_HIGH_PRECISION_HF_CLOCKS_REQUIRED_FLAG); |
| 318 | + return CHIP_NO_ERROR; |
| 319 | +} |
| 320 | + |
| 321 | +void SilabsLCD::LcdTimeoutCallback(sl_sleeptimer_timer_handle_t * handle, void * data) |
| 322 | +{ |
| 323 | + // Perform the desired task when the timer expires |
| 324 | + (void) handle; |
| 325 | + SilabsLCD * sLCD = reinterpret_cast<SilabsLCD *>(data); |
| 326 | + sLCD->TurnOff(); |
282 | 327 | }
|
| 328 | +#endif // SL_ENABLE_ICD_LCD |
283 | 329 |
|
284 | 330 | #ifdef QR_CODE_ENABLED
|
285 | 331 | void SilabsLCD::WriteQRCode()
|
|
0 commit comments