Skip to content

Commit 5f1b5d5

Browse files
authored
Merge pull request #336 from elral/elral-bledis
Additional Device Informations for ble
2 parents d19720b + 23f57eb commit 5f1b5d5

File tree

2 files changed

+155
-10
lines changed

2 files changed

+155
-10
lines changed

libraries/Bluefruit52Lib/src/services/BLEDis.cpp

Lines changed: 122 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

56137
void BLEDis::setModel(const char* model)
57138
{
58139
_model = model;
140+
_model_length = strlen(model);
59141
}
60142

61143
void BLEDis::setHardwareRev(const char* hw_rev)
62144
{
63145
_hardware_rev = hw_rev;
146+
_hardware_rev_length = strlen(hw_rev);
64147
}
65148

66149
void BLEDis::setSoftwareRev(const char* sw_rev)
67150
{
68151
_software_rev = sw_rev;
152+
_software_rev_length = strlen(sw_rev);
69153
}
70154

71155
void BLEDis::setManufacturer(const char* manufacturer)
72156
{
73157
_manufacturer = manufacturer;
158+
_manufacturer_length = strlen(manufacturer);
74159
}
75160

76161
err_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-

libraries/Bluefruit52Lib/src/services/BLEDis.h

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,56 @@ class BLEDis : public BLEService
4646
protected:
4747
union {
4848
struct {
49+
const char * _system_id;
4950
const char * _model;
5051
const char * _serial;
5152
const char * _firmware_rev;
5253
const char * _hardware_rev;
5354
const char * _software_rev;
5455
const char * _manufacturer;
56+
const char * _reg_cert_list;
57+
const char * _pnp_id;
5558
};
5659

57-
const char * _strarr[6];
60+
const char * _strarr[9];
61+
};
62+
63+
union {
64+
struct {
65+
uint8_t _system_id_length;
66+
uint8_t _model_length;
67+
uint8_t _serial_length;
68+
uint8_t _firmware_rev_length;
69+
uint8_t _hardware_rev_length;
70+
uint8_t _software_rev_length;
71+
uint8_t _manufacturer_length;
72+
uint8_t _reg_cert_list_length;
73+
uint8_t _pnp_id_length;
74+
};
75+
const uint8_t _strarr_length[9];
5876
};
5977

6078
public:
6179
BLEDis(void);
6280

6381
void setModel(const char* model);
82+
void setModel(const char* model,uint8_t length);
6483
void setHardwareRev(const char* hw_rev);
84+
void setHardwareRev(const char* hw_rev,uint8_t length);
6585
void setSoftwareRev(const char* sw_rev);
86+
void setSoftwareRev(const char* sw_rev, uint8_t length);
6687
void setManufacturer(const char* manufacturer);
88+
void setManufacturer(const char* manufacturer, uint8_t length);
89+
void setFirmwareRev(const char* firmware_rev);
90+
void setFirmwareRev(const char* firmware_rev, uint8_t length);
91+
void setSerialNum(const char* serial_num);
92+
void setSerialNum(const char* serial_num, uint8_t length);
93+
void setSystemID(const char* system_id);
94+
void setSystemID(const char* system_id, uint8_t length);
95+
void setRegCertList(const char* reg_cert_list);
96+
void setRegCertList(const char* reg_cert_list, uint8_t length);
97+
void setPNPID(const char* pnp_id);
98+
void setPNPID(const char* pnp_id, uint8_t pnp_id_length);
6799

68100
virtual err_t begin(void);
69101
};

0 commit comments

Comments
 (0)