Fix firmware version reported by Device Information Service on BLE. It was previously hard-coded, it is now set by CMake accoridng to the project version.

Fix Manufacturer name, model number, sw revision according to https://wiki.pine64.org/index.php?title=Firmware_versioning_for_companion_apps.
This commit is contained in:
JF 2020-09-02 21:31:31 +02:00
parent 61e7ad9186
commit 1aa5b0a440
3 changed files with 30 additions and 8 deletions

View file

@ -8,6 +8,8 @@ constexpr ble_uuid16_t DeviceInformationService::serialNumberUuid;
constexpr ble_uuid16_t DeviceInformationService::fwRevisionUuid; constexpr ble_uuid16_t DeviceInformationService::fwRevisionUuid;
constexpr ble_uuid16_t DeviceInformationService::deviceInfoUuid; constexpr ble_uuid16_t DeviceInformationService::deviceInfoUuid;
constexpr ble_uuid16_t DeviceInformationService::hwRevisionUuid; constexpr ble_uuid16_t DeviceInformationService::hwRevisionUuid;
constexpr ble_uuid16_t DeviceInformationService::swRevisionUuid;
int DeviceInformationCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) { int DeviceInformationCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) {
auto deviceInformationService = static_cast<DeviceInformationService*>(arg); auto deviceInformationService = static_cast<DeviceInformationService*>(arg);
@ -44,6 +46,9 @@ int DeviceInformationService::OnDeviceInfoRequested(uint16_t conn_handle, uint16
case hwRevisionId: case hwRevisionId:
str = hwRevision; str = hwRevision;
break; break;
case swRevisionId:
str = swRevision;
break;
default: default:
return BLE_ATT_ERR_UNLIKELY; return BLE_ATT_ERR_UNLIKELY;
} }
@ -84,6 +89,12 @@ DeviceInformationService::DeviceInformationService() :
.arg = this, .arg = this,
.flags = BLE_GATT_CHR_F_READ, .flags = BLE_GATT_CHR_F_READ,
}, },
{
.uuid = (ble_uuid_t *) &swRevisionUuid,
.access_cb = DeviceInformationCallback,
.arg = this,
.flags = BLE_GATT_CHR_F_READ,
},
{ {
0 0
} }

View file

@ -3,6 +3,7 @@
#include <array> #include <array>
#include <host/ble_gap.h> #include <host/ble_gap.h>
#include <Version.h>
namespace Pinetime { namespace Pinetime {
namespace Controllers { namespace Controllers {
@ -21,12 +22,15 @@ namespace Pinetime {
static constexpr uint16_t serialNumberId {0x2a25}; static constexpr uint16_t serialNumberId {0x2a25};
static constexpr uint16_t fwRevisionId {0x2a26}; static constexpr uint16_t fwRevisionId {0x2a26};
static constexpr uint16_t hwRevisionId {0x2a27}; static constexpr uint16_t hwRevisionId {0x2a27};
static constexpr uint16_t swRevisionId {0x2a28};
static constexpr const char* manufacturerName = "Codingfield"; static constexpr const char* manufacturerName = "PINE64";
static constexpr const char* modelNumber = "1"; static constexpr const char* modelNumber = "PineTime";
static constexpr const char* serialNumber = "9.8.7.6.5.4";
static constexpr const char* fwRevision = "0.7.0";
static constexpr const char* hwRevision = "1.0.0"; static constexpr const char* hwRevision = "1.0.0";
static constexpr const char* serialNumber = "0";
static constexpr const char* fwRevision = Version::VersionString();
static constexpr const char* swRevision = "InfiniTime";
static constexpr ble_uuid16_t deviceInfoUuid { static constexpr ble_uuid16_t deviceInfoUuid {
.u { .type = BLE_UUID_TYPE_16 }, .u { .type = BLE_UUID_TYPE_16 },
@ -58,7 +62,12 @@ namespace Pinetime {
.value = hwRevisionId .value = hwRevisionId
}; };
struct ble_gatt_chr_def characteristicDefinition[6]; static constexpr ble_uuid16_t swRevisionUuid {
.u {.type = BLE_UUID_TYPE_16},
.value = swRevisionId
};
struct ble_gatt_chr_def characteristicDefinition[7];
struct ble_gatt_svc_def serviceDefinition[2]; struct ble_gatt_svc_def serviceDefinition[2];

View file

@ -5,12 +5,14 @@
namespace Pinetime { namespace Pinetime {
class Version { class Version {
public: public:
static uint32_t Major() {return major;} static constexpr uint32_t Major() {return major;}
static uint32_t Minor() {return minor;} static constexpr uint32_t Minor() {return minor;}
static uint32_t Patch() {return patch;} static constexpr uint32_t Patch() {return patch;}
static constexpr char* VersionString() {return versionString;}
private: private:
static constexpr uint32_t major = @PROJECT_VERSION_MAJOR@; static constexpr uint32_t major = @PROJECT_VERSION_MAJOR@;
static constexpr uint32_t minor = @PROJECT_VERSION_MINOR@; static constexpr uint32_t minor = @PROJECT_VERSION_MINOR@;
static constexpr uint32_t patch = @PROJECT_VERSION_PATCH@; static constexpr uint32_t patch = @PROJECT_VERSION_PATCH@;
static constexpr char* versionString = "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@";
}; };
} }