Skip to content

Commit

Permalink
Merge pull request #341 from adafruit/develop
Browse files Browse the repository at this point in the history
follow up to pr #336 , close #335
  • Loading branch information
hathach committed Sep 26, 2019
2 parents 5f1b5d5 + 3e978f5 commit 343c946
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 138 deletions.
147 changes: 38 additions & 109 deletions libraries/Bluefruit52Lib/src/services/BLEDis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,80 +40,41 @@
BLEDis::BLEDis(void)
: BLEService(UUID16_SVC_DEVICE_INFORMATION)
{
memclr(_strarr, sizeof(_strarr));
memclr(_strarr_length, sizeof(_strarr_length));

#ifdef NRF52840_XXAA
_model = "Bluefruit Feather nRF52840";
this->setModel("Bluefruit Feather nRF52840");
#else
_model = "Bluefruit Feather nRF52832";
this->setModel("Bluefruit Feather nRF52832");
#endif

_serial = NULL;
_firmware_rev = NULL;
_hardware_rev = NULL;
_software_rev = ARDUINO_BSP_VERSION;
_manufacturer = "Adafruit Industries";
_system_id = NULL;
_reg_cert_list = NULL;
_pnp_id = NULL;
}

void BLEDis::setFirmwareRev(const char* firmware_rev)
{
_firmware_rev = firmware_rev;
_firmware_rev_length = strlen(firmware_rev);
}
void BLEDis::setFirmwareRev(const char* firmware_rev, uint8_t length)
{
_firmware_rev = firmware_rev;
_firmware_rev_length = length;
}

void BLEDis::setSerialNum(const char* serial_num)
{
_serial = serial_num;
_serial_length = strlen(serial_num);
}
void BLEDis::setSerialNum(const char* serial_num, uint8_t length)
{
_serial = serial_num;
_serial_length = length;
this->setSoftwareRev(ARDUINO_BSP_VERSION);
this->setManufacturer("Adafruit Industries");
}

void BLEDis::setSystemID(const char* system_id)
{
_system_id = system_id;
_system_id_length = strlen(system_id);
}
void BLEDis::setSystemID(const char* system_id, uint8_t length)
{
_system_id = system_id;
_system_id_length = length;
}

void BLEDis::setRegCertList(const char* reg_cert_list)
{
_reg_cert_list = reg_cert_list;
_reg_cert_list_length = strlen(reg_cert_list);
}
void BLEDis::setRegCertList(const char* reg_cert_list, uint8_t length)
void BLEDis::setModel(const char* model,uint8_t length)
{
_reg_cert_list = reg_cert_list;
_reg_cert_list_length = length;
_model = model;
_model_length = length;
}

void BLEDis::setPNPID(const char* pnp_id)
{
_pnp_id = pnp_id;
_pnp_id_length = strlen(pnp_id);
}
void BLEDis::setPNPID(const char* pnp_id, uint8_t length)
void BLEDis::setSerialNum(const char* serial_num, uint8_t length)
{
_pnp_id = pnp_id;
_pnp_id_length = length;
_serial = serial_num;
_serial_length = length;
}
void BLEDis::setModel(const char* model,uint8_t length)

void BLEDis::setFirmwareRev(const char* firmware_rev, uint8_t length)
{
_model = model;
_model_length = length;
_firmware_rev = firmware_rev;
_firmware_rev_length = length;
}

void BLEDis::setHardwareRev(const char* hw_rev,uint8_t length)
Expand All @@ -134,81 +95,49 @@ void BLEDis::setManufacturer(const char* manufacturer, uint8_t length)
_manufacturer_length = length;
}

void BLEDis::setModel(const char* model)
{
_model = model;
_model_length = strlen(model);
}

void BLEDis::setHardwareRev(const char* hw_rev)
void BLEDis::setRegCertList(const char* reg_cert_list, uint8_t length)
{
_hardware_rev = hw_rev;
_hardware_rev_length = strlen(hw_rev);
_reg_cert_list = reg_cert_list;
_reg_cert_list_length = length;
}

void BLEDis::setSoftwareRev(const char* sw_rev)
void BLEDis::setPNPID(const char* pnp_id, uint8_t length)
{
_software_rev = sw_rev;
_software_rev_length = strlen(sw_rev);
_pnp_id = pnp_id;
_pnp_id_length = length;
}

void BLEDis::setManufacturer(const char* manufacturer)
{
_manufacturer = manufacturer;
_manufacturer_length = strlen(manufacturer);
}

err_t BLEDis::begin(void)
{
// Invoke base class begin()
VERIFY_STATUS( BLEService::begin() );

if(!_serial) {
_serial = getMcuUniqueID();
}
if (!_firmware_rev) {
_firmware_rev = getBootloaderVersion();
}
if (!_serial) setSerialNum(getMcuUniqueID());
if (!_firmware_rev) setFirmwareRev(getBootloaderVersion());

for(uint8_t i=0; i<arrcount(_strarr)-1; i++) // without PNP_ID
for(uint8_t i=0; i<arrcount(_strarr); i++)
{
if ( _strarr[i] != NULL )
{
BLECharacteristic chars(UUID16_CHR_SYSTEM_ID+i);
chars.setTempMemory();
chars.setProperties(CHR_PROPS_READ);
if (_strarr_length[i]) {
chars.setFixedLen(_strarr_length[i]);
} else {
chars.setFixedLen(strlen(_strarr[i]));
}
VERIFY_STATUS( chars.begin() );
if (_strarr_length[i]) {
chars.write(_strarr[i], _strarr_length[i]);
} else {
chars.write(_strarr[i]);
BLECharacteristic chars;

// PNP_ID is not consecutive with the rest
if ( _strarr[i] == _pnp_id )
{
chars.setUuid(UUID16_CHR_PNP_ID);
}else
{
chars.setUuid(UUID16_CHR_SYSTEM_ID+i);
}

}
}

if ( _strarr[arrcount(_strarr)-1] != NULL )
{
BLECharacteristic chars(UUID16_CHR_PNP_ID);
chars.setTempMemory();
chars.setProperties(CHR_PROPS_READ);
if (_pnp_id_length == 0) {
chars.setFixedLen(strlen(_strarr[arrcount(_strarr)-1]));
} else {
chars.setFixedLen(_pnp_id_length);
}
chars.setFixedLen(_strarr_length[i]);
VERIFY_STATUS( chars.begin() );
if (_pnp_id_length == 0) {
chars.write(_strarr[arrcount(_strarr)-1]);
} else {
chars.write(_strarr[arrcount(_strarr)-1], _pnp_id_length);
}
chars.write(_strarr[i], _strarr_length[i]);
}
}

return ERROR_NONE;
}
61 changes: 32 additions & 29 deletions libraries/Bluefruit52Lib/src/services/BLEDis.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,18 +46,19 @@ class BLEDis : public BLEService
protected:
union {
struct {
const char * _system_id;
const char * _model;
const char * _serial;
const char * _firmware_rev;
const char * _hardware_rev;
const char * _software_rev;
const char * _manufacturer;
const char * _reg_cert_list;
const char * _pnp_id;
const char * _system_id; // UUID 0x2A23
const char * _model; // UUID 0x2A23
const char * _serial; // UUID 0x2A25
const char * _firmware_rev; // UUID 0x2A26
const char * _hardware_rev; // UUID 0x2A27
const char * _software_rev; // UUID 0x2A28
const char * _manufacturer; // UUID 0x2A29
const char * _reg_cert_list; // UUID 0x2A2A

const char * _pnp_id; // UUID 0x2A50
};

const char * _strarr[9];
const char * _strarr[9];
};

union {
Expand All @@ -72,30 +73,32 @@ class BLEDis : public BLEService
uint8_t _reg_cert_list_length;
uint8_t _pnp_id_length;
};
const uint8_t _strarr_length[9];

uint8_t _strarr_length[9];
};

public:
BLEDis(void);

void setModel(const char* model);
void setModel(const char* model,uint8_t length);
void setHardwareRev(const char* hw_rev);
void setHardwareRev(const char* hw_rev,uint8_t length);
void setSoftwareRev(const char* sw_rev);
void setSoftwareRev(const char* sw_rev, uint8_t length);
void setManufacturer(const char* manufacturer);
void setManufacturer(const char* manufacturer, uint8_t length);
void setFirmwareRev(const char* firmware_rev);
void setFirmwareRev(const char* firmware_rev, uint8_t length);
void setSerialNum(const char* serial_num);
void setSerialNum(const char* serial_num, uint8_t length);
void setSystemID(const char* system_id);
void setSystemID(const char* system_id, uint8_t length);
void setRegCertList(const char* reg_cert_list);
void setRegCertList(const char* reg_cert_list, uint8_t length);
void setPNPID(const char* pnp_id);
void setPNPID(const char* pnp_id, uint8_t pnp_id_length);
void setSystemID (const char* system_id, uint8_t length);
void setModel (const char* model,uint8_t length);
void setSerialNum (const char* serial_num, uint8_t length);
void setFirmwareRev (const char* firmware_rev, uint8_t length);
void setHardwareRev (const char* hw_rev,uint8_t length);
void setSoftwareRev (const char* sw_rev, uint8_t length);
void setManufacturer (const char* manufacturer, uint8_t length);
void setRegCertList (const char* reg_cert_list, uint8_t length);
void setPNPID (const char* pnp_id, uint8_t pnp_id_length);

void setSystemID (const char* system_id ) { setSystemID(system_id, strlen(system_id)); }
void setModel (const char* model ) { setModel(model, strlen(model)); }
void setSerialNum (const char* serial_num ) { setSerialNum(serial_num, strlen(serial_num)); }
void setFirmwareRev (const char* firmware_rev ) { setFirmwareRev(firmware_rev, strlen(firmware_rev)); }
void setHardwareRev (const char* hw_rev ) { setHardwareRev(hw_rev, strlen(hw_rev)); }
void setSoftwareRev (const char* sw_rev ) { setSoftwareRev(sw_rev, strlen(sw_rev)); }
void setManufacturer (const char* manufacturer ) { setManufacturer(manufacturer, strlen(manufacturer)); }
void setRegCertList (const char* reg_cert_list ) { setRegCertList(reg_cert_list, strlen(reg_cert_list)); }
void setPNPID (const char* pnp_id ) { setPNPID(pnp_id, strlen(pnp_id)); }

virtual err_t begin(void);
};
Expand Down

0 comments on commit 343c946

Please sign in to comment.