Skip to content

Commit 3e978f5

Browse files
committed
follow up to pr #336 bledis
- inline function for no-length API - clean up using strarr_len - handle PNP_ID char
1 parent 5f1b5d5 commit 3e978f5

File tree

2 files changed

+70
-138
lines changed

2 files changed

+70
-138
lines changed

libraries/Bluefruit52Lib/src/services/BLEDis.cpp

Lines changed: 38 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -40,80 +40,41 @@
4040
BLEDis::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-
}
8656
void 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

11980
void 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

161111
err_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
}

libraries/Bluefruit52Lib/src/services/BLEDis.h

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,19 @@ class BLEDis : public BLEService
4646
protected:
4747
union {
4848
struct {
49-
const char * _system_id;
50-
const char * _model;
51-
const char * _serial;
52-
const char * _firmware_rev;
53-
const char * _hardware_rev;
54-
const char * _software_rev;
55-
const char * _manufacturer;
56-
const char * _reg_cert_list;
57-
const char * _pnp_id;
49+
const char * _system_id; // UUID 0x2A23
50+
const char * _model; // UUID 0x2A23
51+
const char * _serial; // UUID 0x2A25
52+
const char * _firmware_rev; // UUID 0x2A26
53+
const char * _hardware_rev; // UUID 0x2A27
54+
const char * _software_rev; // UUID 0x2A28
55+
const char * _manufacturer; // UUID 0x2A29
56+
const char * _reg_cert_list; // UUID 0x2A2A
57+
58+
const char * _pnp_id; // UUID 0x2A50
5859
};
5960

60-
const char * _strarr[9];
61+
const char * _strarr[9];
6162
};
6263

6364
union {
@@ -72,30 +73,32 @@ class BLEDis : public BLEService
7273
uint8_t _reg_cert_list_length;
7374
uint8_t _pnp_id_length;
7475
};
75-
const uint8_t _strarr_length[9];
76+
77+
uint8_t _strarr_length[9];
7678
};
7779

7880
public:
7981
BLEDis(void);
8082

81-
void setModel(const char* model);
82-
void setModel(const char* model,uint8_t length);
83-
void setHardwareRev(const char* hw_rev);
84-
void setHardwareRev(const char* hw_rev,uint8_t length);
85-
void setSoftwareRev(const char* sw_rev);
86-
void setSoftwareRev(const char* sw_rev, uint8_t length);
87-
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);
83+
void setSystemID (const char* system_id, uint8_t length);
84+
void setModel (const char* model,uint8_t length);
85+
void setSerialNum (const char* serial_num, uint8_t length);
86+
void setFirmwareRev (const char* firmware_rev, uint8_t length);
87+
void setHardwareRev (const char* hw_rev,uint8_t length);
88+
void setSoftwareRev (const char* sw_rev, uint8_t length);
89+
void setManufacturer (const char* manufacturer, uint8_t length);
90+
void setRegCertList (const char* reg_cert_list, uint8_t length);
91+
void setPNPID (const char* pnp_id, uint8_t pnp_id_length);
92+
93+
void setSystemID (const char* system_id ) { setSystemID(system_id, strlen(system_id)); }
94+
void setModel (const char* model ) { setModel(model, strlen(model)); }
95+
void setSerialNum (const char* serial_num ) { setSerialNum(serial_num, strlen(serial_num)); }
96+
void setFirmwareRev (const char* firmware_rev ) { setFirmwareRev(firmware_rev, strlen(firmware_rev)); }
97+
void setHardwareRev (const char* hw_rev ) { setHardwareRev(hw_rev, strlen(hw_rev)); }
98+
void setSoftwareRev (const char* sw_rev ) { setSoftwareRev(sw_rev, strlen(sw_rev)); }
99+
void setManufacturer (const char* manufacturer ) { setManufacturer(manufacturer, strlen(manufacturer)); }
100+
void setRegCertList (const char* reg_cert_list ) { setRegCertList(reg_cert_list, strlen(reg_cert_list)); }
101+
void setPNPID (const char* pnp_id ) { setPNPID(pnp_id, strlen(pnp_id)); }
99102

100103
virtual err_t begin(void);
101104
};

0 commit comments

Comments
 (0)