From 29a9b484cfeb6b2905a078d9ebe5bc65ad1808b6 Mon Sep 17 00:00:00 2001 From: Martin/Geno <geno+dev@fireorbit.de> Date: Sat, 24 Aug 2019 18:03:49 +0200 Subject: [PATCH] ble: card10 svc - add lcd brightness --- Documentation/bluetooth/card10.rst | 13 ++++++++ epicardium/ble/card10.c | 51 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/Documentation/bluetooth/card10.rst b/Documentation/bluetooth/card10.rst index a8811511..3326d6d0 100644 --- a/Documentation/bluetooth/card10.rst +++ b/Documentation/bluetooth/card10.rst @@ -80,6 +80,11 @@ The current draft uses following service specification: UUID: ``42230220-2342-2342-2342-234223422342`` write no reponse +- LCD brightness characteristic: + + UUID: ``42230221-2342-2342-2342-234223422342`` + write no reponse + - Light sensor characteristic: UUID: ``422302f0-2342-2342-2342-234223422342`` @@ -175,6 +180,14 @@ By defining 11x rgb from left to right. You need also to set exchange a bigger M - set a rainbow beginnig with red on the right edge: ``0xff0000ff8b00e8ff005dff0000ff2e00ffb900b9ff002eff5d00ffe800ffff008b`` +LCD brightness characteristic +--------------------------------- +This charatieristic set the brightness of the lcd backlight 0-100 in ``uint16``. +It works only, if no application (pycardium app) blocks the screen. + +- set to 100 % ``0x6400`` +- set to 20 % ``0x1400`` (default value) + Light sensor characteristic --------------------------------- diff --git a/epicardium/ble/card10.c b/epicardium/ble/card10.c index 2105ac02..9551f789 100644 --- a/epicardium/ble/card10.c +++ b/epicardium/ble/card10.c @@ -65,6 +65,9 @@ enum { /*!< \brief leds above characteristic */ CARD10_LEDS_ABOVE_CH_HDL, CARD10_LEDS_ABOVE_VAL_HDL, + /*!< \brief lcd birhtness characteristic */ + CARD10_LCD_BRIGHTNESS_CH_HDL, + CARD10_LCD_BRIGHTNESS_VAL_HDL, /*!< \brief light sensor characteristic */ CARD10_LIGHT_SENSOR_CH_HDL, CARD10_LIGHT_SENSOR_VAL_HDL, @@ -235,6 +238,17 @@ static const uint8_t UUID_char_leds_above[] = { static const uint8_t UUID_attChar_leds_above[] = { CARD10_UUID_SUFFIX, 0x20, CARD10_UUID_PREFIX }; + +/* BLE UUID for card10 set lcd brightness */ +static const uint8_t UUID_char_lcd_brightness[] = { + ATT_PROP_WRITE_NO_RSP, + UINT16_TO_BYTES(CARD10_LCD_BRIGHTNESS_VAL_HDL), + CARD10_UUID_SUFFIX, 0x21, CARD10_UUID_PREFIX +}; + +static const uint8_t UUID_attChar_lcd_brightness[] = { + CARD10_UUID_SUFFIX, 0x21, CARD10_UUID_PREFIX +}; // starting at 0xf0 with read only characteristics /* BLE UUID for card10 char light sensor */ @@ -463,6 +477,21 @@ static const attsAttr_t card10SvcAttrList[] = { (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | ATTS_PERMIT_WRITE_AUTH) }, + // LCD Brightness + + { .pUuid = attChUuid, + .pValue = (uint8_t *)UUID_char_lcd_brightness, + .pLen = (uint16_t *)&UUID_char_len, + .maxLen = sizeof(UUID_char_lcd_brightness), + .permissions = ATTS_PERMIT_READ }, + { .pUuid = UUID_attChar_lcd_brightness, + .pValue = NULL, + .maxLen = sizeof(uint16_t), + .settings = ATTS_SET_WRITE_CBACK, + .permissions = + (ATTS_PERMIT_WRITE | ATTS_PERMIT_WRITE_ENC | + ATTS_PERMIT_WRITE_AUTH) }, + // Light sensor { .pUuid = attChUuid, @@ -515,6 +544,7 @@ static uint8_t writeCard10CB( ) { uint16_t ui16 = 0; uint8_t ui8 = 0; + int intVar = 0; switch (handle) { // time @@ -704,6 +734,27 @@ static uint8_t writeCard10CB( pValue[ui16 * 3 + 2] ); } + return ATT_SUCCESS; + case CARD10_LCD_BRIGHTNESS_VAL_HDL: + intVar = epic_disp_open(); + if (intVar < 0) { + APP_TRACE_INFO1( + "ble-card10: lock display to set brightness failed: %d", + intVar + ); + return ATT_ERR_RANGE; + } + BYTES_TO_UINT16(ui16, pValue); + intVar = epic_disp_backlight(ui16); + APP_TRACE_INFO2( + "ble-card10: set lcd brightness to %ld - %d\n", + ui16, + intVar + ); + epic_disp_close(); + if (intVar < 0) + return ATT_ERR_RANGE; + return ATT_SUCCESS; default: APP_TRACE_INFO1( "ble-card10: unsupported characteristic: %c\n", handle -- GitLab