@@ -51,51 +51,164 @@ BLEDis::BLEDis(void)
51
51
_hardware_rev = NULL ;
52
52
_software_rev = ARDUINO_BSP_VERSION;
53
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;
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;
54
135
}
55
136
56
137
void BLEDis::setModel (const char * model)
57
138
{
58
139
_model = model;
140
+ _model_length = strlen (model);
59
141
}
60
142
61
143
void BLEDis::setHardwareRev (const char * hw_rev)
62
144
{
63
145
_hardware_rev = hw_rev;
146
+ _hardware_rev_length = strlen (hw_rev);
64
147
}
65
148
66
149
void BLEDis::setSoftwareRev (const char * sw_rev)
67
150
{
68
151
_software_rev = sw_rev;
152
+ _software_rev_length = strlen (sw_rev);
69
153
}
70
154
71
155
void BLEDis::setManufacturer (const char * manufacturer)
72
156
{
73
157
_manufacturer = manufacturer;
158
+ _manufacturer_length = strlen (manufacturer);
74
159
}
75
160
76
161
err_t BLEDis::begin (void )
77
162
{
78
163
// Invoke base class begin()
79
164
VERIFY_STATUS ( BLEService::begin () );
80
165
81
- _serial = getMcuUniqueID ();
82
- _firmware_rev = getBootloaderVersion ();
166
+ if (!_serial) {
167
+ _serial = getMcuUniqueID ();
168
+ }
169
+ if (!_firmware_rev) {
170
+ _firmware_rev = getBootloaderVersion ();
171
+ }
83
172
84
- for (uint8_t i=0 ; i<arrcount (_strarr); i++)
173
+ for (uint8_t i=0 ; i<arrcount (_strarr)- 1 ; i++) // without PNP_ID
85
174
{
86
175
if ( _strarr[i] != NULL )
87
176
{
88
- BLECharacteristic chars (UUID16_CHR_MODEL_NUMBER_STRING +i);
177
+ BLECharacteristic chars (UUID16_CHR_SYSTEM_ID +i);
89
178
chars.setTempMemory ();
90
-
91
179
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
+ }
94
185
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
+
96
192
}
97
193
}
98
194
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
+
99
213
return ERROR_NONE;
100
214
}
101
-
0 commit comments