diff --git a/Documentation/bluetooth/card10.rst b/Documentation/bluetooth/card10.rst index 5242664bcc2dded392c7d81b6d759526d719524c..af3c7e124c255e2bd17863c87faf3c0cd8db82e6 100644 --- a/Documentation/bluetooth/card10.rst +++ b/Documentation/bluetooth/card10.rst @@ -30,6 +30,11 @@ The current draft uses following service specification: UUID: ``42230210-2342-2342-2342-234223422342`` write +- Single rgb led characteristic: + + UUID: ``422302ef-2342-2342-2342-234223422342`` + write + - Light sensor characteristic: UUID: ``422302f0-2342-2342-2342-234223422342`` @@ -66,6 +71,23 @@ Rocket0 Rocket1 Rocket2 - Enable only Rocket0: ``0xff0000`` - Enable all rockets with 50% brightness: ``0x7f7f7f`` +Single rgb led characteristic +--------------------------------- + +This characteristic makes it possible to address every single rgb led. +Just write a byte array ``uint18`` address of led and three ``uint8`` for the rgb color. + +Dataformat: + +====== ===== ===== ===== + 0-1 2 3 4 +------ ----- ----- ----- +led nr red green blue + +- set led 14 red: ``0x0e00ff0000`` +- set led 14 blue: ``0x0e000000ff`` +- disable led 14: ``0x0e00000000`` + Light sensor characteristic --------------------------------- diff --git a/epicardium/ble/card10.c b/epicardium/ble/card10.c index 3834d2bcddce3ea1415a95681f9c2297c1802d1e..8bc1c1ff1f48c65d4346ef4d3e4e1c446d9573b1 100644 --- a/epicardium/ble/card10.c +++ b/epicardium/ble/card10.c @@ -47,6 +47,9 @@ enum { /*!< \brief rockets led characteristic */ CARD10_ROCKETS_CH_HDL, CARD10_ROCKETS_VAL_HDL, + /*!< \brief single led characteristic */ + CARD10_LED_S_CH_HDL, + CARD10_LED_S_VAL_HDL, /*!< \brief light sensor characteristic */ CARD10_LIGHT_SENSOR_CH_HDL, CARD10_LIGHT_SENSOR_VAL_HDL, @@ -98,6 +101,16 @@ static const uint8_t UUID_attChar_rockets[] = { CARD10_UUID_SUFFIX, 0x10, CARD10_UUID_PREFIX }; +/* BLE UUID for card10 char led single (debugging) */ +static const uint8_t UUID_char_led_s[] = { + ATT_PROP_WRITE_NO_RSP, + UINT16_TO_BYTES(CARD10_LED_S_VAL_HDL), + CARD10_UUID_SUFFIX, 0xef, CARD10_UUID_PREFIX +}; + +static const uint8_t UUID_attChar_led_s[] = { + CARD10_UUID_SUFFIX, 0xef, CARD10_UUID_PREFIX +}; // starting at 0xf0 with read only characteristics /* BLE UUID for card10 char light sensor */ @@ -196,6 +209,27 @@ static void *addCard10GroupDyn(void) ATTS_PERMIT_WRITE ); + // SINGLE LED + + AttsDynAddAttrConst( + pSHdl, + attChUuid, + UUID_char_led_s, + sizeof(UUID_char_led_s), + 0, + ATTS_PERMIT_READ + ); + + AttsDynAddAttr( + pSHdl, + UUID_attChar_led_s, + NULL, + 0, + sizeof(uint16_t) + 3 * sizeof(uint8_t), + ATTS_SET_WRITE_CBACK, + ATTS_PERMIT_WRITE + ); + // LIGHT_SENSOR AttsDynAddAttrConst( @@ -281,6 +315,17 @@ static uint8_t writeCard10CB( pValue[2] ); return ATT_SUCCESS; + case CARD10_LED_S_VAL_HDL: + BYTES_TO_UINT16(ui16, pValue); + epic_leds_set(ui16, pValue[2], pValue[3], pValue[4]); + APP_TRACE_INFO4( + "ble-card10: set single led %ld to #%x%x%x\n", + ui16, + pValue[2], + pValue[3], + pValue[4] + ); + return ATT_SUCCESS; default: APP_TRACE_INFO1( "ble-card10: unsupported characteristic: %c\n", handle