engage-engine 1.249.90890017 → 1.250.90900018

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/engage.cpp CHANGED
@@ -1201,6 +1201,20 @@ NAN_METHOD(getRiffDescriptor)
1201
1201
  }
1202
1202
 
1203
1203
 
1204
+ //--------------------------------------------------------
1205
+ NAN_METHOD(beginGroupPcmPowerTracking)
1206
+ {
1207
+ NANRETI(engageBeginGroupPcmPowerTracking(STRVAL(0)));
1208
+ }
1209
+
1210
+
1211
+ //--------------------------------------------------------
1212
+ NAN_METHOD(endGroupPcmPowerTracking)
1213
+ {
1214
+ NANRETI(engageEndGroupPcmPowerTracking(STRVAL(0)));
1215
+ }
1216
+
1217
+
1204
1218
  //--------------------------------------------------------
1205
1219
  NAN_MODULE_INIT(Init)
1206
1220
  {
@@ -1279,7 +1293,10 @@ NAN_MODULE_INIT(Init)
1279
1293
  ENGAGE_BINDING(getDeviceId);
1280
1294
 
1281
1295
  ENGAGE_BINDING(verifyRiff);
1282
- ENGAGE_BINDING(getRiffDescriptor);
1296
+ ENGAGE_BINDING(getRiffDescriptor);
1297
+
1298
+ ENGAGE_BINDING(beginGroupPcmPowerTracking);
1299
+ ENGAGE_BINDING(endGroupPcmPowerTracking);
1283
1300
  }
1284
1301
 
1285
1302
  NODE_MODULE(engage, Init)
@@ -449,6 +449,52 @@ namespace AppConfigurationObjects
449
449
  }
450
450
  }
451
451
 
452
+ //-----------------------------------------------------------
453
+ JSON_SERIALIZED_CLASS(KvPair)
454
+ /**
455
+ * @brief Holds a key/value pair
456
+ *
457
+ * Helper C++ class to serialize and de-serialize KvPair JSON
458
+ *
459
+ */
460
+ class KvPair : public ConfigurationObjectBase
461
+ {
462
+ IMPLEMENT_JSON_SERIALIZATION()
463
+ IMPLEMENT_JSON_DOCUMENTATION(KvPair)
464
+
465
+ public:
466
+ /** @brief Key */
467
+ std::string key;
468
+
469
+ /** @brief Value */
470
+ std::string value;
471
+
472
+ KvPair()
473
+ {
474
+ clear();
475
+ }
476
+
477
+ void clear()
478
+ {
479
+ key.clear();
480
+ value.clear();
481
+ }
482
+ };
483
+
484
+ static void to_json(nlohmann::json& j, const KvPair& p)
485
+ {
486
+ j = nlohmann::json{
487
+ TOJSON_IMPL(key),
488
+ TOJSON_IMPL(value)
489
+ };
490
+ }
491
+ static void from_json(const nlohmann::json& j, KvPair& p)
492
+ {
493
+ p.clear();
494
+ getOptional<std::string>("key", p.key, j, EMPTY_STRING);
495
+ getOptional<std::string>("tags", p.value, j, EMPTY_STRING);
496
+ }
497
+
452
498
  //-----------------------------------------------------------
453
499
  JSON_SERIALIZED_CLASS(TuningSettings)
454
500
  class TuningSettings : public ConfigurationObjectBase
@@ -8459,6 +8505,9 @@ namespace AppConfigurationObjects
8459
8505
  /** @brief Certificate to be used for WebSockets */
8460
8506
  SecurityCertificate certificate;
8461
8507
 
8508
+ /** @brief [Default: false] Indicates whether the client is required to present a certificate */
8509
+ bool requireClientCertificate;
8510
+
8462
8511
  RallypointWebsocketSettings()
8463
8512
  {
8464
8513
  clear();
@@ -8469,6 +8518,7 @@ namespace AppConfigurationObjects
8469
8518
  enabled = false;
8470
8519
  listenPort = 8443;
8471
8520
  certificate.clear();
8521
+ requireClientCertificate = false;
8472
8522
  }
8473
8523
  };
8474
8524
 
@@ -8477,7 +8527,8 @@ namespace AppConfigurationObjects
8477
8527
  j = nlohmann::json{
8478
8528
  TOJSON_IMPL(enabled),
8479
8529
  TOJSON_IMPL(listenPort),
8480
- TOJSON_IMPL(certificate)
8530
+ TOJSON_IMPL(certificate),
8531
+ TOJSON_IMPL(requireClientCertificate)
8481
8532
  };
8482
8533
  }
8483
8534
  static void from_json(const nlohmann::json& j, RallypointWebsocketSettings& p)
@@ -8486,6 +8537,7 @@ namespace AppConfigurationObjects
8486
8537
  getOptional<bool>("enabled", p.enabled, j, false);
8487
8538
  getOptional<int>("listenPort", p.listenPort, j, 8443);
8488
8539
  getOptional<SecurityCertificate>("certificate", p.certificate, j);
8540
+ getOptional<bool>("requireClientCertificate", p.requireClientCertificate, j, false);
8489
8541
  }
8490
8542
 
8491
8543
 
@@ -9265,6 +9317,9 @@ namespace AppConfigurationObjects
9265
9317
  /** @brief Array of certificates in this store */
9266
9318
  std::vector<CertStoreCertificate> certificates;
9267
9319
 
9320
+ /** @brief [Optional] Array of KV pairs */
9321
+ std::vector<KvPair> kvp;
9322
+
9268
9323
  CertStore()
9269
9324
  {
9270
9325
  clear();
@@ -9274,6 +9329,7 @@ namespace AppConfigurationObjects
9274
9329
  {
9275
9330
  id.clear();
9276
9331
  certificates.clear();
9332
+ kvp.clear();
9277
9333
  }
9278
9334
  };
9279
9335
 
@@ -9281,7 +9337,8 @@ namespace AppConfigurationObjects
9281
9337
  {
9282
9338
  j = nlohmann::json{
9283
9339
  TOJSON_IMPL(id),
9284
- TOJSON_IMPL(certificates)
9340
+ TOJSON_IMPL(certificates),
9341
+ TOJSON_IMPL(kvp)
9285
9342
  };
9286
9343
  }
9287
9344
  static void from_json(const nlohmann::json& j, CertStore& p)
@@ -9289,6 +9346,7 @@ namespace AppConfigurationObjects
9289
9346
  p.clear();
9290
9347
  getOptional<std::string>("id", p.id, j, EMPTY_STRING);
9291
9348
  getOptional<std::vector<CertStoreCertificate>>("certificates", p.certificates, j);
9349
+ getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
9292
9350
  }
9293
9351
 
9294
9352
  //-----------------------------------------------------------
@@ -9381,6 +9439,9 @@ namespace AppConfigurationObjects
9381
9439
  /** @brief Array of certificate elements. */
9382
9440
  std::vector<CertStoreCertificateElement> certificates;
9383
9441
 
9442
+ /** @brief Array of kv pairs. */
9443
+ std::vector<KvPair> kvp;
9444
+
9384
9445
  CertStoreDescriptor()
9385
9446
  {
9386
9447
  clear();
@@ -9393,6 +9454,7 @@ namespace AppConfigurationObjects
9393
9454
  version = 0;
9394
9455
  flags = 0;
9395
9456
  certificates.clear();
9457
+ kvp.clear();
9396
9458
  }
9397
9459
  };
9398
9460
 
@@ -9403,7 +9465,8 @@ namespace AppConfigurationObjects
9403
9465
  TOJSON_IMPL(fileName),
9404
9466
  TOJSON_IMPL(version),
9405
9467
  TOJSON_IMPL(flags),
9406
- TOJSON_IMPL(certificates)
9468
+ TOJSON_IMPL(certificates),
9469
+ TOJSON_IMPL(kvp)
9407
9470
  };
9408
9471
  }
9409
9472
  static void from_json(const nlohmann::json& j, CertStoreDescriptor& p)
@@ -9414,6 +9477,7 @@ namespace AppConfigurationObjects
9414
9477
  getOptional<int>("version", p.version, j, 0);
9415
9478
  getOptional<int>("flags", p.flags, j, 0);
9416
9479
  getOptional<std::vector<CertStoreCertificateElement>>("certificates", p.certificates, j);
9480
+ getOptional<std::vector<KvPair>>("kvp", p.kvp, j);
9417
9481
  }
9418
9482
 
9419
9483
  //-----------------------------------------------------------
@@ -11870,6 +11934,352 @@ namespace AppConfigurationObjects
11870
11934
  getOptional<int>("maxPriority", p.maxPriority, j, 255);
11871
11935
  }
11872
11936
 
11937
+ //-----------------------------------------------------------
11938
+ JSON_SERIALIZED_CLASS(EngateGroup)
11939
+ /**
11940
+ * @brief Engate configuration
11941
+ *
11942
+ * Helper C++ class to serialize and de-serialize EngateGroup JSON
11943
+ *
11944
+ * Example: @include[doc] examples/EngateGroup.json
11945
+ *
11946
+ * @see TODO: ConfigurationObjects::EngateGroupsConfiguration
11947
+ */
11948
+ class EngateGroup : public Group
11949
+ {
11950
+ IMPLEMENT_JSON_SERIALIZATION()
11951
+ IMPLEMENT_JSON_DOCUMENTATION(EngateGroup)
11952
+
11953
+ public:
11954
+ bool useVad;
11955
+ uint32_t inputHangMs;
11956
+ uint32_t inputActivationPowerThreshold;
11957
+ uint32_t inputDeactivationPowerThreshold;
11958
+
11959
+ EngateGroup()
11960
+ {
11961
+ clear();
11962
+ }
11963
+
11964
+ void clear()
11965
+ {
11966
+ Group::clear();
11967
+ useVad = false;
11968
+ inputHangMs = 750;
11969
+ inputActivationPowerThreshold = 700;
11970
+ inputDeactivationPowerThreshold = 125;
11971
+ }
11972
+ };
11973
+
11974
+ static void to_json(nlohmann::json& j, const EngateGroup& p)
11975
+ {
11976
+ nlohmann::json g;
11977
+ to_json(g, static_cast<const Group&>(p));
11978
+
11979
+ j = nlohmann::json{
11980
+ TOJSON_IMPL(useVad),
11981
+ TOJSON_IMPL(inputHangMs),
11982
+ TOJSON_IMPL(inputActivationPowerThreshold),
11983
+ TOJSON_IMPL(inputDeactivationPowerThreshold)
11984
+ };
11985
+ }
11986
+ static void from_json(const nlohmann::json& j, EngateGroup& p)
11987
+ {
11988
+ p.clear();
11989
+ from_json(j, static_cast<Group&>(p));
11990
+ getOptional<uint32_t>("inputHangMs", p.inputHangMs, j, 750);
11991
+ getOptional<uint32_t>("inputActivationPowerThreshold", p.inputActivationPowerThreshold, j, 700);
11992
+ getOptional<uint32_t>("inputDeactivationPowerThreshold", p.inputDeactivationPowerThreshold, j, 125);
11993
+ }
11994
+
11995
+ //-----------------------------------------------------------
11996
+ JSON_SERIALIZED_CLASS(EngateGroupsConfiguration)
11997
+ /**
11998
+ * @brief Engate configuration
11999
+ *
12000
+ * Helper C++ class to serialize and de-serialize EngateGroupsConfiguration JSON
12001
+ *
12002
+ * Example: @include[doc] examples/EngateGroupsConfiguration.json
12003
+ *
12004
+ * @see TODO: ConfigurationObjects::EngateGroupsConfiguration
12005
+ */
12006
+ class EngateGroupsConfiguration : public ConfigurationObjectBase
12007
+ {
12008
+ IMPLEMENT_JSON_SERIALIZATION()
12009
+ IMPLEMENT_JSON_DOCUMENTATION(EngateGroupsConfiguration)
12010
+
12011
+ public:
12012
+ /** @brief Array of groups in the configuration */
12013
+ std::vector<EngateGroup> groups;
12014
+
12015
+ EngateGroupsConfiguration()
12016
+ {
12017
+ clear();
12018
+ }
12019
+
12020
+ void clear()
12021
+ {
12022
+ groups.clear();
12023
+ }
12024
+ };
12025
+
12026
+ static void to_json(nlohmann::json& j, const EngateGroupsConfiguration& p)
12027
+ {
12028
+ j = nlohmann::json{
12029
+ TOJSON_IMPL(groups)
12030
+ };
12031
+ }
12032
+ static void from_json(const nlohmann::json& j, EngateGroupsConfiguration& p)
12033
+ {
12034
+ p.clear();
12035
+ getOptional<std::vector<EngateGroup>>("groups", p.groups, j);
12036
+ }
12037
+
12038
+ //-----------------------------------------------------------
12039
+ JSON_SERIALIZED_CLASS(EngateServerStatusReportConfiguration)
12040
+ /**
12041
+ * @brief TODO: Configuration for the engate server status report file
12042
+ *
12043
+ * Helper C++ class to serialize and de-serialize EngateServerStatusReportConfiguration JSON
12044
+ *
12045
+ * Example: @include[doc] examples/EngateServerStatusReportConfiguration.json
12046
+ *
12047
+ * @see RallypointServer
12048
+ */
12049
+ class EngateServerStatusReportConfiguration : public ConfigurationObjectBase
12050
+ {
12051
+ IMPLEMENT_JSON_SERIALIZATION()
12052
+ IMPLEMENT_JSON_DOCUMENTATION(EngateServerStatusReportConfiguration)
12053
+
12054
+ public:
12055
+ /** File name to use for the status report. */
12056
+ std::string fileName;
12057
+
12058
+ /** [Optional, Default: 30] The interval at which to write out the status report to file. */
12059
+ int intervalSecs;
12060
+
12061
+ /** [Optional, Default: false] Indicates if status reporting is enabled. */
12062
+ bool enabled;
12063
+
12064
+ /** [Optional, Default: null] Command to be executed every time the status report is produced. */
12065
+ std::string runCmd;
12066
+
12067
+ /** [Optional, Default: false] Indicates whether to include details of each group. */
12068
+ bool includeGroupDetail;
12069
+
12070
+ EngateServerStatusReportConfiguration()
12071
+ {
12072
+ clear();
12073
+ }
12074
+
12075
+ void clear()
12076
+ {
12077
+ fileName.clear();
12078
+ intervalSecs = 60;
12079
+ enabled = false;
12080
+ includeGroupDetail = false;
12081
+ runCmd.clear();
12082
+ }
12083
+ };
12084
+
12085
+ static void to_json(nlohmann::json& j, const EngateServerStatusReportConfiguration& p)
12086
+ {
12087
+ j = nlohmann::json{
12088
+ TOJSON_IMPL(fileName),
12089
+ TOJSON_IMPL(intervalSecs),
12090
+ TOJSON_IMPL(enabled),
12091
+ TOJSON_IMPL(includeGroupDetail),
12092
+ TOJSON_IMPL(runCmd)
12093
+ };
12094
+ }
12095
+ static void from_json(const nlohmann::json& j, EngateServerStatusReportConfiguration& p)
12096
+ {
12097
+ p.clear();
12098
+ getOptional<std::string>("fileName", p.fileName, j);
12099
+ getOptional<int>("intervalSecs", p.intervalSecs, j, 60);
12100
+ getOptional<bool>("enabled", p.enabled, j, false);
12101
+ getOptional<std::string>("runCmd", p.runCmd, j);
12102
+ getOptional<bool>("includeGroupDetail", p.includeGroupDetail, j, false);
12103
+ }
12104
+
12105
+ //-----------------------------------------------------------
12106
+ JSON_SERIALIZED_CLASS(EngateServerInternals)
12107
+ /**
12108
+ * @brief Internal engate server settings
12109
+ *
12110
+ * These settings are used to configure internal parameters.
12111
+ *
12112
+ * Helper C++ class to serialize and de-serialize EngateServerInternals JSON
12113
+ *
12114
+ * Example: @include[doc] examples/EngateServerInternals.json
12115
+ *
12116
+ * @see engageInitialize, ConfigurationObjects::EngateServerConfiguration
12117
+ */
12118
+ class EngateServerInternals : public ConfigurationObjectBase
12119
+ {
12120
+ IMPLEMENT_JSON_SERIALIZATION()
12121
+ IMPLEMENT_JSON_DOCUMENTATION(EngateServerInternals)
12122
+
12123
+ public:
12124
+ /** @brief [Optional] Settings for the EAR's watchdog. */
12125
+ WatchdogSettings watchdog;
12126
+
12127
+ /** @brief [Optional, Default: 1000] Interval at which to run the housekeeper thread. */
12128
+ int housekeeperIntervalMs;
12129
+
12130
+ /** @brief [Optional] Low-level tuning */
12131
+ TuningSettings tuning;
12132
+
12133
+ EngateServerInternals()
12134
+ {
12135
+ clear();
12136
+ }
12137
+
12138
+ void clear()
12139
+ {
12140
+ watchdog.clear();
12141
+ tuning.clear();
12142
+ housekeeperIntervalMs = 1000;
12143
+ }
12144
+ };
12145
+
12146
+ static void to_json(nlohmann::json& j, const EngateServerInternals& p)
12147
+ {
12148
+ j = nlohmann::json{
12149
+ TOJSON_IMPL(watchdog),
12150
+ TOJSON_IMPL(housekeeperIntervalMs),
12151
+ TOJSON_IMPL(tuning)
12152
+ };
12153
+ }
12154
+ static void from_json(const nlohmann::json& j, EngateServerInternals& p)
12155
+ {
12156
+ p.clear();
12157
+ getOptional<WatchdogSettings>("watchdog", p.watchdog, j);
12158
+ getOptional<int>("housekeeperIntervalMs", p.housekeeperIntervalMs, j, 1000);
12159
+ getOptional<TuningSettings>("tuning", p.tuning, j);
12160
+ }
12161
+
12162
+ //-----------------------------------------------------------
12163
+ JSON_SERIALIZED_CLASS(EngateServerConfiguration)
12164
+ /**
12165
+ * @brief Configuration for the engate server
12166
+ *
12167
+ * Helper C++ class to serialize and de-serialize EngateServerConfiguration JSON
12168
+ *
12169
+ * Example: @include[doc] examples/EngateServerConfiguration.json
12170
+ *
12171
+ */
12172
+ class EngateServerConfiguration : public ConfigurationObjectBase
12173
+ {
12174
+ IMPLEMENT_JSON_SERIALIZATION()
12175
+ IMPLEMENT_JSON_DOCUMENTATION(EngateServerConfiguration)
12176
+
12177
+ public:
12178
+
12179
+ /** @brief A unqiue identifier for the EAR server */
12180
+ std::string id;
12181
+
12182
+ /** @brief Number of seconds between checks to see if the service configuration has been updated. Default is 60.*/
12183
+ int serviceConfigurationFileCheckSecs;
12184
+
12185
+ /** @brief Name of a file containing the ear configuration. */
12186
+ std::string groupsConfigurationFileName;
12187
+
12188
+ /** @brief Command-line to execute that returns a configuration */
12189
+ std::string groupsConfigurationFileCommand;
12190
+
12191
+ /** @brief Number of seconds between checks to see if the configuration has been updated. Default is 60.*/
12192
+ int groupsConfigurationFileCheckSecs;
12193
+
12194
+ /** @brief Details for producing a status report. @see EngateServerStatusReportConfiguration */
12195
+ EngateServerStatusReportConfiguration statusReport;
12196
+
12197
+ /** @brief Details concerning the server's interaction with an external health-checker such as a load-balancer. @see ExternalHealthCheckResponder */
12198
+ ExternalHealthCheckResponder externalHealthCheckResponder;
12199
+
12200
+ /** @brief Internal settings */
12201
+ EngateServerInternals internals;
12202
+
12203
+ /** @brief Path to the certificate store */
12204
+ std::string certStoreFileName;
12205
+
12206
+ /** @brief Hex password for the certificate store (if any) */
12207
+ std::string certStorePasswordHex;
12208
+
12209
+ /** @brief The policy to be used for the underlying Engage Engine */
12210
+ EnginePolicy enginePolicy;
12211
+
12212
+ /** @brief Name to use for signalling a configuration check */
12213
+ std::string configurationCheckSignalName;
12214
+
12215
+ /** @brief [Optional] Settings for the FIPS crypto. */
12216
+ FipsCryptoSettings fipsCrypto;
12217
+
12218
+ /** @brief [Optional] Settings for NSM. */
12219
+ NsmConfiguration nsm;
12220
+
12221
+ EngateServerConfiguration()
12222
+ {
12223
+ clear();
12224
+ }
12225
+
12226
+ void clear()
12227
+ {
12228
+ id.clear();
12229
+ serviceConfigurationFileCheckSecs = 60;
12230
+ groupsConfigurationFileName.clear();
12231
+ groupsConfigurationFileCommand.clear();
12232
+ groupsConfigurationFileCheckSecs = 60;
12233
+ statusReport.clear();
12234
+ externalHealthCheckResponder.clear();
12235
+ internals.clear();
12236
+ certStoreFileName.clear();
12237
+ certStorePasswordHex.clear();
12238
+ enginePolicy.clear();
12239
+ configurationCheckSignalName = "rts.9a164fa.${id}";
12240
+ fipsCrypto.clear();
12241
+ nsm.clear();
12242
+ }
12243
+ };
12244
+
12245
+ static void to_json(nlohmann::json& j, const EngateServerConfiguration& p)
12246
+ {
12247
+ j = nlohmann::json{
12248
+ TOJSON_IMPL(id),
12249
+ TOJSON_IMPL(serviceConfigurationFileCheckSecs),
12250
+ TOJSON_IMPL(groupsConfigurationFileName),
12251
+ TOJSON_IMPL(groupsConfigurationFileCommand),
12252
+ TOJSON_IMPL(groupsConfigurationFileCheckSecs),
12253
+ TOJSON_IMPL(statusReport),
12254
+ TOJSON_IMPL(externalHealthCheckResponder),
12255
+ TOJSON_IMPL(internals),
12256
+ TOJSON_IMPL(certStoreFileName),
12257
+ TOJSON_IMPL(certStorePasswordHex),
12258
+ TOJSON_IMPL(enginePolicy),
12259
+ TOJSON_IMPL(configurationCheckSignalName),
12260
+ TOJSON_IMPL(fipsCrypto),
12261
+ TOJSON_IMPL(nsm)
12262
+ };
12263
+ }
12264
+ static void from_json(const nlohmann::json& j, EngateServerConfiguration& p)
12265
+ {
12266
+ p.clear();
12267
+ getOptional<std::string>("id", p.id, j);
12268
+ getOptional<int>("serviceConfigurationFileCheckSecs", p.serviceConfigurationFileCheckSecs, j, 60);
12269
+ getOptional<std::string>("groupsConfigurationFileName", p.groupsConfigurationFileName, j);
12270
+ getOptional<std::string>("groupsConfigurationFileCommand", p.groupsConfigurationFileCommand, j);
12271
+ getOptional<int>("groupsConfigurationFileCheckSecs", p.groupsConfigurationFileCheckSecs, j, 60);
12272
+ getOptional<EngateServerStatusReportConfiguration>("statusReport", p.statusReport, j);
12273
+ getOptional<ExternalHealthCheckResponder>("externalHealthCheckResponder", p.externalHealthCheckResponder, j);
12274
+ getOptional<EngateServerInternals>("internals", p.internals, j);
12275
+ getOptional<std::string>("certStoreFileName", p.certStoreFileName, j);
12276
+ getOptional<std::string>("certStorePasswordHex", p.certStorePasswordHex, j);
12277
+ j.at("enginePolicy").get_to(p.enginePolicy);
12278
+ getOptional<std::string>("configurationCheckSignalName", p.configurationCheckSignalName, j, "rts.9a164fa.${id}");
12279
+ getOptional<FipsCryptoSettings>("fipsCrypto", p.fipsCrypto, j);
12280
+ getOptional<NsmConfiguration>("nsm", p.nsm, j);
12281
+ }
12282
+
11873
12283
  //-----------------------------------------------------------
11874
12284
  static inline void dumpExampleConfigurations(const char *path)
11875
12285
  {
@@ -292,6 +292,12 @@ typedef struct _EngageEvents_t
292
292
 
293
293
  /** @brief Fired whenever the previously-registered high-resolution timer interval ticks. 'tickType' is 1, 2, or 3 for pre-tick, tick, and post-tick respectively */
294
294
  // void (* _Nullable PFN_ENGAGE_ON_HIGH_RESOLUTION_TIMER_TICK)(uint32_t tickType, uint32_t ticksSoFarLow, uint32_t ticksSoFarHigh, const char * _Nullable eventExtraJson);
295
+
296
+ /** @brief Fired on a group-by-group pcm power report */
297
+ void (* _Nullable PFN_ENGAGE_ENGINE_GROUP_BY_GROUP_PCM_POWER_LEVEL_REPORT)(const char * _Nullable eventExtraJson);
298
+
299
+ /** @brief Fired on an audio device event */
300
+ void (* _Nullable PFN_ENGAGE_ENGINE_AUDIO_DEVICE_EVENT)(const char * _Nullable eventExtraJson);
295
301
  } EngageEvents_t;
296
302
  /** @} */
297
303
 
@@ -1781,6 +1787,22 @@ ENGAGE_API int engageRegisterForHighResolutionTimerNative(uint32_t durationMs, P
1781
1787
  ENGAGE_API int engageUnregisterFromHighResolutionTimerNative(void);
1782
1788
  #endif
1783
1789
 
1790
+ /**
1791
+ * @brief [ASYNC] Begins tracking of input and output PCM power for the group
1792
+ *
1793
+ * @param id The ID of the group on which to start pcm power tracking
1794
+ * @return ENGAGE_RESULT_OK if the submission request was successful
1795
+ */
1796
+ ENGAGE_API int engageBeginGroupPcmPowerTracking(const char * _Nonnull id);
1797
+
1798
+ /**
1799
+ * @brief [ASYNC] End tracking of input and output PCM power for the group
1800
+ *
1801
+ * @param id The ID of the group on which to end pcm power tracking
1802
+ * @return ENGAGE_RESULT_OK if the submission request was successful
1803
+ */
1804
+ ENGAGE_API int engageEndGroupPcmPowerTracking(const char * _Nonnull id);
1805
+
1784
1806
  #endif
1785
1807
 
1786
1808
  #ifdef __cplusplus
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "engage-engine",
3
- "version": "1.249.90890017",
3
+ "version": "1.250.90900018",
4
4
  "description": "Use Engage to communicate with everyone, everywhere, from any device",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"