@@ -66,47 +66,62 @@ const uint8_t BLEAdafruitAddressablePixel::UUID128_CHR_DATA[16] =
6666 0xA8 , 0x42 , 0x32 , 0xC3 , 0x03 , 0x09 , 0xAF , 0xAD
6767};
6868
69+ const uint8_t BLEAdafruitAddressablePixel::UUID128_CHR_BUFSIZE[16 ] =
70+ {
71+ 0xB8 , 0x6c , 0x75 , 0x05 , 0xE9 , 0x25 , 0xBD , 0x93 ,
72+ 0xA8 , 0x42 , 0x32 , 0xC3 , 0x04 , 0x09 , 0xAF , 0xAD
73+ };
74+
6975// Constructor
7076BLEAdafruitAddressablePixel::BLEAdafruitAddressablePixel (void )
71- : BLEService(UUID128_SERVICE), Pin(UUID128_CHR_PIN), Type(UUID128_CHR_TYPE), Data(UUID128_CHR_DATA)
77+ : BLEService(UUID128_SERVICE), _pin(UUID128_CHR_PIN), _type(UUID128_CHR_TYPE),
78+ _data(UUID128_CHR_DATA), _bufsize(UUID128_CHR_BUFSIZE)
7279{
7380 _neo = NULL ;
7481}
7582
76- err_t BLEAdafruitAddressablePixel::begin (Adafruit_NeoPixel_Type * neo_pixel)
83+ err_t BLEAdafruitAddressablePixel::begin (Adafruit_NeoPixel * neo_pixel)
7784{
7885 _neo = neo_pixel;
79- return begin ((uint8_t ) _neo->getPin (), 0 );
86+ uint16_t bufsize = _neo->numPixels ()*3 ; // TODO actual bufsize for 3 RGB or 4 RGBW later
87+ return begin ((uint8_t ) _neo->getPin (), 0 , bufsize); // TODO dotstart support
8088}
8189
82- err_t BLEAdafruitAddressablePixel::begin (uint8_t pin, uint8_t type)
90+ err_t BLEAdafruitAddressablePixel::begin (uint8_t pin, uint8_t type, uint16_t bufsize )
8391{
8492 // Invoke base class begin()
8593 VERIFY_STATUS ( BLEService::begin () );
8694
8795 // Add Characteristic
88- Pin .setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE);
89- Pin .setPermission (SECMODE_OPEN, SECMODE_OPEN);
90- Pin .setFixedLen (1 );
91- VERIFY_STATUS ( Pin .begin () );
92- Pin .write8 (pin);
96+ _pin .setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE);
97+ _pin .setPermission (SECMODE_OPEN, SECMODE_OPEN);
98+ _pin .setFixedLen (1 );
99+ VERIFY_STATUS ( _pin .begin () );
100+ _pin .write8 (pin);
93101
94102 // Add Characteristic
95- Type .setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE);
96- Type .setPermission (SECMODE_OPEN, SECMODE_OPEN);
97- Type .setFixedLen (1 );
98- VERIFY_STATUS ( Type .begin () );
99- Type .write8 (type);
103+ _type .setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE);
104+ _type .setPermission (SECMODE_OPEN, SECMODE_OPEN);
105+ _type .setFixedLen (1 );
106+ VERIFY_STATUS ( _type .begin () );
107+ _type .write8 (type);
100108
101109 // Add Characteristic
102- Data .setProperties (CHR_PROPS_WRITE);
103- Data .setPermission (SECMODE_NO_ACCESS, SECMODE_OPEN);
110+ _data .setProperties (CHR_PROPS_WRITE);
111+ _data .setPermission (SECMODE_NO_ACCESS, SECMODE_OPEN);
104112 // Change to use VLOC STACK to USER due to lack of memroy
105113 // Data.setMaxLen(Bluefruit.getMaxMtu(BLE_GAP_ROLE_PERIPH));
106- Data.setMaxLen (BLE_GATTS_VAR_ATTR_LEN_MAX);
107- VERIFY_STATUS ( Data.begin () );
114+ _data.setMaxLen (BLE_GATTS_VAR_ATTR_LEN_MAX);
115+ VERIFY_STATUS ( _data.begin () );
116+
117+ // Add Characteristic
118+ _bufsize.setProperties (CHR_PROPS_READ | CHR_PROPS_WRITE);
119+ _bufsize.setPermission (SECMODE_OPEN, SECMODE_OPEN);
120+ _bufsize.setFixedLen (2 );
121+ VERIFY_STATUS ( _bufsize.begin () );
122+ _bufsize.write16 (bufsize);
108123
109- Data .setWriteCallback (pixel_data_write_cb, true );
124+ _data .setWriteCallback (pixel_data_write_cb, true );
110125
111126 return ERROR_NONE;
112127}
0 commit comments