return true;
}
-bool Server::SetAdvertisement(const std::vector<Uuid> &ids,
- const std::vector<uint8_t> &service_data,
+bool Server::SetAdvertisement(const std::vector<Uuid>& ids,
+ const std::vector<uint8_t>& service_data,
+ const std::vector<uint8_t>& manufacturer_data,
bool transmit_name) {
std::vector<uint8_t> id_data;
+ auto mutable_manufacturer_data = manufacturer_data;
auto mutable_service_data = service_data;
for (const Uuid &id : ids) {
false, /* no txpower */
2, 2, /* interval */
0, /* appearance */
- 0, nullptr, /* no mfg data */
+ mutable_manufacturer_data.size(),
+ reinterpret_cast<char *>(mutable_manufacturer_data.data()),
mutable_service_data.size(),
reinterpret_cast<char *>(mutable_service_data.data()), id_data.size(),
reinterpret_cast<char *>(id_data.data()));
return true;
}
-bool Server::SetScanResponse(const std::vector<Uuid> &ids,
- const std::vector<uint8_t> &service_data,
- bool transmit_name) {
+bool Server::SetScanResponse(const std::vector<Uuid>& ids,
+ const std::vector<uint8_t>& service_data,
+ const std::vector<uint8_t>& manufacturer_data,
+ bool transmit_name) {
std::vector<uint8_t> id_data;
+ auto mutable_manufacturer_data = manufacturer_data;
auto mutable_service_data = service_data;
for (const Uuid &id : ids) {
false, /* no txpower */
2, 2, /* interval */
0, /* appearance */
- 0, nullptr, /* no mfg data */
+ mutable_manufacturer_data.size(),
+ reinterpret_cast<char *>(mutable_manufacturer_data.data()),
mutable_service_data.size(),
reinterpret_cast<char *>(mutable_service_data.data()), id_data.size(),
reinterpret_cast<char *>(id_data.data()));
bool Initialize(const Uuid &service_id, int *gatt_pipe, CoreStack *bt);
// Control the content of service advertisement.
- bool SetAdvertisement(const std::vector<Uuid> &ids,
- const std::vector<uint8_t> &service_data,
+ bool SetAdvertisement(const std::vector<Uuid>& ids,
+ const std::vector<uint8_t>& service_data,
+ const std::vector<uint8_t>& manufacturer_data,
bool transmit_name);
// Control the content of service scan response.
- bool SetScanResponse(const std::vector<Uuid> &ids,
- const std::vector<uint8_t> &service_data,
+ bool SetScanResponse(const std::vector<Uuid>& ids,
+ const std::vector<uint8_t>& service_data,
+ const std::vector<uint8_t>& manufacturer_data,
bool transmit_name);
// Add an ordinary characteristic for reading and/or writing.
bool UnixIPCHost::OnSetAdvertisement(const std::string& service_uuid,
const std::string& advertise_uuids,
const std::string& advertise_data,
+ const std::string& manufacturer_data,
const std::string& transmit_name) {
LOG_INFO(LOG_TAG, "%s: service:%s uuids:%s data:%s", __func__, service_uuid.c_str(),
advertise_uuids.c_str(), advertise_data.c_str());
std::string decoded_data;
base::Base64Decode(advertise_data, &decoded_data);
- std::vector<uint8_t> blob_data(decoded_data.begin(), decoded_data.end());
- gatt_servers_[service_uuid]->SetAdvertisement(ids, blob_data,
+ std::vector<uint8_t> decoded_advertise_data(decoded_data.begin(),
+ decoded_data.end());
+
+ base::Base64Decode(manufacturer_data, &decoded_data);
+ std::vector<uint8_t> decoded_manufacturer_data(decoded_data.begin(),
+ decoded_data.end());
+
+ gatt_servers_[service_uuid]->SetAdvertisement(ids, decoded_advertise_data,
+ decoded_manufacturer_data,
TokenBool(transmit_name));
return true;
}
bool UnixIPCHost::OnSetScanResponse(const std::string& service_uuid,
const std::string& scan_response_uuids,
const std::string& scan_response_data,
+ const std::string& manufacturer_data,
const std::string& transmit_name) {
std::vector<std::string> scan_response_uuid_tokens;
base::SplitString(scan_response_uuids, '.', &scan_response_uuid_tokens);
std::string decoded_data;
base::Base64Decode(scan_response_data, &decoded_data);
- std::vector<uint8_t> blob_data(decoded_data.begin(), decoded_data.end());
- gatt_servers_[service_uuid]->SetScanResponse(ids, blob_data,
+ std::vector<uint8_t> decoded_advertise_data(decoded_data.begin(),
+ decoded_data.end());
+
+ base::Base64Decode(manufacturer_data, &decoded_data);
+ std::vector<uint8_t> decoded_manufacturer_data(decoded_data.begin(),
+ decoded_data.end());
+
+ gatt_servers_[service_uuid]->SetScanResponse(ids, decoded_advertise_data,
+ decoded_manufacturer_data,
TokenBool(transmit_name));
return true;
}
return OnSetCharacteristicValue(tokens[1], tokens[2], tokens[3]);
break;
case 5:
- if (tokens[0] == kSetAdvertisementCommand)
- return OnSetAdvertisement(tokens[1], tokens[2], tokens[3], tokens[4]);
- if (tokens[0] == kSetScanResponseCommand)
- return OnSetScanResponse(tokens[1], tokens[2], tokens[3], tokens[4]);
if (tokens[0] == kAddCharacteristicCommand)
return OnAddCharacteristic(tokens[1], tokens[2], tokens[3], tokens[4]);
break;
+ case 6:
+ if (tokens[0] == kSetAdvertisementCommand)
+ return OnSetAdvertisement(tokens[1], tokens[2], tokens[3], tokens[4], tokens[5]);
+ if (tokens[0] == kSetScanResponseCommand)
+ return OnSetScanResponse(tokens[1], tokens[2], tokens[3], tokens[4], tokens[5]);
+ break;
default:
break;
}
bool OnSetAdvertisement(const std::string& service_uuid,
const std::string& advertise_uuids,
const std::string& advertise_data,
+ const std::string& manufacturer_data,
const std::string& transmit_name);
// Applies settings to scan response.
bool OnSetScanResponse(const std::string& service_uuid,
const std::string& advertise_uuids,
const std::string& advertise_data,
+ const std::string& manufacturer_data,
const std::string& transmit_name);
// Starts service (advertisement and connections)