@@ -51,51 +51,164 @@ BLEDis::BLEDis(void)
5151 _hardware_rev = NULL ;
5252 _software_rev = ARDUINO_BSP_VERSION;
5353 _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;
79+ }
80+
81+ void BLEDis::setSystemID (const char * system_id)
82+ {
83+ _system_id = system_id;
84+ _system_id_length = strlen (system_id);
85+ }
86+ void BLEDis::setSystemID (const char * system_id, uint8_t length)
87+ {
88+ _system_id = system_id;
89+ _system_id_length = length;
90+ }
91+
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)
98+ {
99+ _reg_cert_list = reg_cert_list;
100+ _reg_cert_list_length = length;
101+ }
102+
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)
109+ {
110+ _pnp_id = pnp_id;
111+ _pnp_id_length = length;
112+ }
113+ void BLEDis::setModel (const char * model,uint8_t length)
114+ {
115+ _model = model;
116+ _model_length = length;
117+ }
118+
119+ void BLEDis::setHardwareRev (const char * hw_rev,uint8_t length)
120+ {
121+ _hardware_rev = hw_rev;
122+ _hardware_rev_length = length;
123+ }
124+
125+ void BLEDis::setSoftwareRev (const char * sw_rev, uint8_t length)
126+ {
127+ _software_rev = sw_rev;
128+ _software_rev_length = length;
129+ }
130+
131+ void BLEDis::setManufacturer (const char * manufacturer, uint8_t length)
132+ {
133+ _manufacturer = manufacturer;
134+ _manufacturer_length = length;
54135}
55136
56137void BLEDis::setModel (const char * model)
57138{
58139 _model = model;
140+ _model_length = strlen (model);
59141}
60142
61143void BLEDis::setHardwareRev (const char * hw_rev)
62144{
63145 _hardware_rev = hw_rev;
146+ _hardware_rev_length = strlen (hw_rev);
64147}
65148
66149void BLEDis::setSoftwareRev (const char * sw_rev)
67150{
68151 _software_rev = sw_rev;
152+ _software_rev_length = strlen (sw_rev);
69153}
70154
71155void BLEDis::setManufacturer (const char * manufacturer)
72156{
73157 _manufacturer = manufacturer;
158+ _manufacturer_length = strlen (manufacturer);
74159}
75160
76161err_t BLEDis::begin (void )
77162{
78163 // Invoke base class begin()
79164 VERIFY_STATUS ( BLEService::begin () );
80165
81- _serial = getMcuUniqueID ();
82- _firmware_rev = getBootloaderVersion ();
166+ if (!_serial) {
167+ _serial = getMcuUniqueID ();
168+ }
169+ if (!_firmware_rev) {
170+ _firmware_rev = getBootloaderVersion ();
171+ }
83172
84- for (uint8_t i=0 ; i<arrcount (_strarr); i++)
173+ for (uint8_t i=0 ; i<arrcount (_strarr)- 1 ; i++) // without PNP_ID
85174 {
86175 if ( _strarr[i] != NULL )
87176 {
88- BLECharacteristic chars (UUID16_CHR_MODEL_NUMBER_STRING +i);
177+ BLECharacteristic chars (UUID16_CHR_SYSTEM_ID +i);
89178 chars.setTempMemory ();
90-
91179 chars.setProperties (CHR_PROPS_READ);
92- chars.setFixedLen (strlen (_strarr[i]));
93-
180+ if (_strarr_length[i]) {
181+ chars.setFixedLen (_strarr_length[i]);
182+ } else {
183+ chars.setFixedLen (strlen (_strarr[i]));
184+ }
94185 VERIFY_STATUS ( chars.begin () );
95- chars.write (_strarr[i]);
186+ if (_strarr_length[i]) {
187+ chars.write (_strarr[i], _strarr_length[i]);
188+ } else {
189+ chars.write (_strarr[i]);
190+ }
191+
96192 }
97193 }
98194
195+ if ( _strarr[arrcount (_strarr)-1 ] != NULL )
196+ {
197+ BLECharacteristic chars (UUID16_CHR_PNP_ID);
198+ chars.setTempMemory ();
199+ 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+ }
205+ 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+ }
211+ }
212+
99213 return ERROR_NONE;
100214}
101-
0 commit comments