4040BLEDis::BLEDis (void )
4141 : BLEService(UUID16_SVC_DEVICE_INFORMATION)
4242{
43+ memclr (_strarr, sizeof (_strarr));
44+ memclr (_strarr_length, sizeof (_strarr_length));
45+
4346#ifdef NRF52840_XXAA
44- _model = " Bluefruit Feather nRF52840" ;
47+ this -> setModel ( " Bluefruit Feather nRF52840" ) ;
4548#else
46- _model = " Bluefruit Feather nRF52832" ;
49+ this -> setModel ( " Bluefruit Feather nRF52832" ) ;
4750#endif
4851
49- _serial = NULL ;
50- _firmware_rev = NULL ;
51- _hardware_rev = NULL ;
52- _software_rev = ARDUINO_BSP_VERSION;
53- _manufacturer = " Adafruit Industries" ;
54- _system_id = NULL ;
55- _reg_cert_list = NULL ;
56- _pnp_id = NULL ;
57- }
58-
59- void BLEDis::setFirmwareRev (const char * firmware_rev)
60- {
61- _firmware_rev = firmware_rev;
62- _firmware_rev_length = strlen (firmware_rev);
63- }
64- void BLEDis::setFirmwareRev (const char * firmware_rev, uint8_t length)
65- {
66- _firmware_rev = firmware_rev;
67- _firmware_rev_length = length;
68- }
69-
70- void BLEDis::setSerialNum (const char * serial_num)
71- {
72- _serial = serial_num;
73- _serial_length = strlen (serial_num);
74- }
75- void BLEDis::setSerialNum (const char * serial_num, uint8_t length)
76- {
77- _serial = serial_num;
78- _serial_length = length;
52+ this ->setSoftwareRev (ARDUINO_BSP_VERSION);
53+ this ->setManufacturer (" Adafruit Industries" );
7954}
8055
81- void BLEDis::setSystemID (const char * system_id)
82- {
83- _system_id = system_id;
84- _system_id_length = strlen (system_id);
85- }
8656void BLEDis::setSystemID (const char * system_id, uint8_t length)
8757{
8858 _system_id = system_id;
8959 _system_id_length = length;
9060}
9161
92- void BLEDis::setRegCertList (const char * reg_cert_list)
93- {
94- _reg_cert_list = reg_cert_list;
95- _reg_cert_list_length = strlen (reg_cert_list);
96- }
97- void BLEDis::setRegCertList (const char * reg_cert_list, uint8_t length)
62+ void BLEDis::setModel (const char * model,uint8_t length)
9863{
99- _reg_cert_list = reg_cert_list ;
100- _reg_cert_list_length = length;
64+ _model = model ;
65+ _model_length = length;
10166}
10267
103- void BLEDis::setPNPID (const char * pnp_id)
104- {
105- _pnp_id = pnp_id;
106- _pnp_id_length = strlen (pnp_id);
107- }
108- void BLEDis::setPNPID (const char * pnp_id, uint8_t length)
68+ void BLEDis::setSerialNum (const char * serial_num, uint8_t length)
10969{
110- _pnp_id = pnp_id ;
111- _pnp_id_length = length;
70+ _serial = serial_num ;
71+ _serial_length = length;
11272}
113- void BLEDis::setModel (const char * model,uint8_t length)
73+
74+ void BLEDis::setFirmwareRev (const char * firmware_rev, uint8_t length)
11475{
115- _model = model ;
116- _model_length = length;
76+ _firmware_rev = firmware_rev ;
77+ _firmware_rev_length = length;
11778}
11879
11980void BLEDis::setHardwareRev (const char * hw_rev,uint8_t length)
@@ -134,81 +95,49 @@ void BLEDis::setManufacturer(const char* manufacturer, uint8_t length)
13495 _manufacturer_length = length;
13596}
13697
137- void BLEDis::setModel (const char * model)
138- {
139- _model = model;
140- _model_length = strlen (model);
141- }
142-
143- void BLEDis::setHardwareRev (const char * hw_rev)
98+ void BLEDis::setRegCertList (const char * reg_cert_list, uint8_t length)
14499{
145- _hardware_rev = hw_rev ;
146- _hardware_rev_length = strlen (hw_rev) ;
100+ _reg_cert_list = reg_cert_list ;
101+ _reg_cert_list_length = length ;
147102}
148103
149- void BLEDis::setSoftwareRev (const char * sw_rev )
104+ void BLEDis::setPNPID (const char * pnp_id, uint8_t length )
150105{
151- _software_rev = sw_rev ;
152- _software_rev_length = strlen (sw_rev) ;
106+ _pnp_id = pnp_id ;
107+ _pnp_id_length = length ;
153108}
154109
155- void BLEDis::setManufacturer (const char * manufacturer)
156- {
157- _manufacturer = manufacturer;
158- _manufacturer_length = strlen (manufacturer);
159- }
160110
161111err_t BLEDis::begin (void )
162112{
163113 // Invoke base class begin()
164114 VERIFY_STATUS ( BLEService::begin () );
165115
166- if (!_serial) {
167- _serial = getMcuUniqueID ();
168- }
169- if (!_firmware_rev) {
170- _firmware_rev = getBootloaderVersion ();
171- }
116+ if (!_serial) setSerialNum (getMcuUniqueID ());
117+ if (!_firmware_rev) setFirmwareRev (getBootloaderVersion ());
172118
173- for (uint8_t i=0 ; i<arrcount (_strarr)- 1 ; i++) // without PNP_ID
119+ for (uint8_t i=0 ; i<arrcount (_strarr); i++)
174120 {
175121 if ( _strarr[i] != NULL )
176122 {
177- BLECharacteristic chars (UUID16_CHR_SYSTEM_ID+i);
178- chars.setTempMemory ();
179- chars.setProperties (CHR_PROPS_READ);
180- if (_strarr_length[i]) {
181- chars.setFixedLen (_strarr_length[i]);
182- } else {
183- chars.setFixedLen (strlen (_strarr[i]));
184- }
185- VERIFY_STATUS ( chars.begin () );
186- if (_strarr_length[i]) {
187- chars.write (_strarr[i], _strarr_length[i]);
188- } else {
189- chars.write (_strarr[i]);
123+ BLECharacteristic chars;
124+
125+ // PNP_ID is not consecutive with the rest
126+ if ( _strarr[i] == _pnp_id )
127+ {
128+ chars.setUuid (UUID16_CHR_PNP_ID);
129+ }else
130+ {
131+ chars.setUuid (UUID16_CHR_SYSTEM_ID+i);
190132 }
191-
192- }
193- }
194133
195- if ( _strarr[arrcount (_strarr)-1 ] != NULL )
196- {
197- BLECharacteristic chars (UUID16_CHR_PNP_ID);
198134 chars.setTempMemory ();
199135 chars.setProperties (CHR_PROPS_READ);
200- if (_pnp_id_length == 0 ) {
201- chars.setFixedLen (strlen (_strarr[arrcount (_strarr)-1 ]));
202- } else {
203- chars.setFixedLen (_pnp_id_length);
204- }
136+ chars.setFixedLen (_strarr_length[i]);
205137 VERIFY_STATUS ( chars.begin () );
206- if (_pnp_id_length == 0 ) {
207- chars.write (_strarr[arrcount (_strarr)-1 ]);
208- } else {
209- chars.write (_strarr[arrcount (_strarr)-1 ], _pnp_id_length);
210- }
138+ chars.write (_strarr[i], _strarr_length[i]);
211139 }
140+ }
212141
213142 return ERROR_NONE;
214143}
0 commit comments