Skip to content

Commit

Permalink
Added subscribeToEventsWithEndpointID
Browse files Browse the repository at this point in the history
- Added event-min to ReadEvent
  • Loading branch information
ready2die4u committed Jan 9, 2023
1 parent 923e8a8 commit 9b7b82f
Show file tree
Hide file tree
Showing 5 changed files with 276 additions and 22 deletions.
102 changes: 82 additions & 20 deletions examples/darwin-framework-tool/commands/clusters/ReportCommandBridge.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,21 @@ class SubscribeEvent : public ModelCommand {
public:
SubscribeEvent()
: ModelCommand("subscribe-all-events")
{
AddCommonArguments();
}

SubscribeEvent(chip::ClusterId clusterId)
: ModelCommand("subscribe-event-by-id")
, mClusterId(clusterId)
{
AddArgument("event-id", 0, UINT32_MAX, &mEventId);
AddArgument("event-min", 0, UINT64_MAX, &mEventNumber);
AddArgument("is-urgent", 0, 1, &mIsUrgent);
AddCommonArguments();
}

void AddCommonArguments()
{
AddArgument("min-interval", 0, UINT16_MAX, &mMinInterval);
AddArgument("max-interval", 0, UINT16_MAX, &mMaxInterval);
Expand All @@ -206,27 +221,54 @@ class SubscribeEvent : public ModelCommand {
params.resubscribeIfLost = mAutoResubscribe.Value();
}

[device subscribeWithQueue:callbackQueue
params:params
clusterStateCacheContainer:nil
attributeReportHandler:^(NSArray * value) {
SetCommandExitStatus(CHIP_NO_ERROR);
}
eventReportHandler:^(NSArray * value) {
for (id item in value) {
NSLog(@"Response Item: %@", [item description]);
if (mClusterId != chip::kInvalidAttributeId)
{
NSNumber * eventMin = (mEventNumber.HasValue()) ? [NSNumber numberWithUnsignedLongLong:mEventNumber.Value()] : nil;
NSNumber * isUrgent = (mIsUrgent.HasValue()) ? [NSNumber numberWithBool:mIsUrgent.Value()] : nil;

[device subscribeToEventsWithEndpointID:[NSNumber numberWithUnsignedShort:endpointId]
clusterID:[NSNumber numberWithUnsignedInteger:mClusterId]
eventID:[NSNumber numberWithUnsignedInteger:mEventId]
eventMin:eventMin
isUrgent:isUrgent
params:params
queue:callbackQueue
reportHandler:^(NSArray<NSDictionary<NSString *, id> *> * _Nullable values, NSError * _Nullable error) {
if (values) {
for (id item in values) {
NSLog(@"Response Item: %@", [item description]);
}
}
SetCommandExitStatus(error);
}
SetCommandExitStatus(CHIP_NO_ERROR);
}
errorHandler:^(NSError * error) {
SetCommandExitStatus(error);
}
subscriptionEstablished:^() {
mSubscriptionEstablished = YES;
}
resubscriptionScheduled:^(NSError * error, NSNumber * resubscriptionDelay) {
NSLog(@"Subscription dropped with error %@. Resubscription in %@ms", error, resubscriptionDelay);
}];
subscriptionEstablished:^() {
mSubscriptionEstablished = YES;
}];
}
else
{
[device subscribeWithQueue:callbackQueue
params:params
clusterStateCacheContainer:nil
attributeReportHandler:^(NSArray * value) {
SetCommandExitStatus(CHIP_NO_ERROR);
}
eventReportHandler:^(NSArray * value) {
for (id item in value) {
NSLog(@"Response Item: %@", [item description]);
}
SetCommandExitStatus(CHIP_NO_ERROR);
}
errorHandler:^(NSError * error) {
SetCommandExitStatus(error);
}
subscriptionEstablished:^() {
mSubscriptionEstablished = YES;
}
resubscriptionScheduled:^(NSError * error, NSNumber * resubscriptionDelay) {
NSLog(@"Subscription dropped with error %@. Resubscription in %@ms", error, resubscriptionDelay);
}];
}

return CHIP_NO_ERROR;
}
Expand All @@ -237,9 +279,22 @@ class SubscribeEvent : public ModelCommand {
chip::Optional<bool> mKeepSubscriptions;
chip::Optional<bool> mAutoResubscribe;
chip::Optional<chip::EventNumber> mEventNumber;
chip::Optional<bool> mIsUrgent;
bool mSubscriptionEstablished = NO;
uint16_t mMinInterval;
uint16_t mMaxInterval;

void Shutdown() override
{
mSubscriptionEstablished = NO;
ModelCommand::Shutdown();
}

bool DeferInteractiveCleanup() override { return mSubscriptionEstablished; }

private:
chip::ClusterId mClusterId = chip::kInvalidAttributeId;
chip::EventId mEventId;
};

class ReadEvent : public ModelCommand {
Expand All @@ -249,6 +304,7 @@ class ReadEvent : public ModelCommand {
{
AddArgument("cluster-id", 0, UINT32_MAX, &mClusterId);
AddArgument("event-id", 0, UINT32_MAX, &mEventId);
AddArgument("event-min", 0, UINT64_MAX, &mEventNumber);
ModelCommand::AddArguments();
}

Expand All @@ -257,13 +313,15 @@ class ReadEvent : public ModelCommand {
, mClusterId(clusterId)
{
AddArgument("event-id", 0, UINT32_MAX, &mEventId);
AddArgument("event-min", 0, UINT64_MAX, &mEventNumber);
ModelCommand::AddArguments();
}

ReadEvent(const char * _Nonnull eventName)
: ModelCommand("read-event")
{
AddArgument("event-name", eventName);
AddArgument("event-min", 0, UINT64_MAX, &mEventNumber);
ModelCommand::AddArguments();
}

Expand All @@ -276,9 +334,12 @@ class ReadEvent : public ModelCommand {
if (mFabricFiltered.HasValue()) {
params.filterByFabric = mFabricFiltered.Value();
}
NSNumber * eventMin = (mEventNumber.HasValue()) ? [NSNumber numberWithUnsignedLongLong:mEventNumber.Value()] : nil;

[device readEventsWithEndpointID:[NSNumber numberWithUnsignedShort:endpointId]
clusterID:[NSNumber numberWithUnsignedInteger:mClusterId]
eventID:[NSNumber numberWithUnsignedInteger:mEventId]
eventMin:eventMin
params:params
queue:callbackQueue
completion:^(NSArray<NSDictionary<NSString *, id> *> * _Nullable values, NSError * _Nullable error) {
Expand All @@ -297,6 +358,7 @@ class ReadEvent : public ModelCommand {

protected:
chip::Optional<bool> mFabricFiltered;
chip::Optional<chip::EventNumber> mEventNumber;

private:
chip::ClusterId mClusterId;
Expand Down
3 changes: 2 additions & 1 deletion examples/darwin-framework-tool/templates/commands.zapt
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ void registerCluster{{asUpperCamelCase name}}(Commands & commands)
{{#zcl_events}}
{{#first}}
make_unique<ReadEvent>(Id), //
make_unique<SubscribeEvent>(Id), //
{{/first}}
{{/zcl_events}}
};
Expand All @@ -301,8 +302,8 @@ void registerClusterAny(Commands & commands)
make_unique<ReadAttribute>(), //
make_unique<WriteAttribute>(), //
make_unique<SubscribeAttribute>(), //
make_unique<SubscribeEvent>(), //
make_unique<ReadEvent>(), //
make_unique<SubscribeEvent>(), //
};

commands.Register(clusterName, clusterCommands);
Expand Down
24 changes: 24 additions & 0 deletions src/darwin/Framework/CHIP/MTRBaseDevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -332,10 +332,34 @@ typedef NS_ENUM(uint8_t, MTRTransportType) {
- (void)readEventsWithEndpointID:(NSNumber * _Nullable)endpointID
clusterID:(NSNumber * _Nullable)clusterID
eventID:(NSNumber * _Nullable)eventID
eventMin:(NSNumber * _Nullable)eventMin
params:(MTRReadParams * _Nullable)params
queue:(dispatch_queue_t)queue
completion:(MTRDeviceResponseHandler)completion MTR_NEWLY_AVAILABLE;

/**
* Subscribes to the specified events on the device.
*
* Nil values for endpointID, clusterID, eventID indicate wildcards
* (e.g. nil eventID means "subscribe to all the events from the
* endpoint(s) and cluster(s) that match endpointID/clusterID").
*
* If all of endpointID, clusterID, eventID are non-nil, a single event
* will be subscribed to.
*
* If all of endpointID, clusterID, eventID are nil, all events on the
* device will be subscribed to.
*/
- (void)subscribeToEventsWithEndpointID:(NSNumber * _Nullable)endpointID
clusterID:(NSNumber * _Nullable)clusterID
eventID:(NSNumber * _Nullable)eventID
eventMin:(NSNumber * _Nullable)eventMin
isUrgent:(NSNumber * _Nullable)isUrgent
params:(MTRSubscribeParams * _Nullable)params
queue:(dispatch_queue_t)queue
reportHandler:(MTRDeviceResponseHandler)reportHandler
subscriptionEstablished:(MTRSubscriptionEstablishedHandler _Nullable)subscriptionEstablished
MTR_NEWLY_AVAILABLE;
@end

/**
Expand Down
Loading

0 comments on commit 9b7b82f

Please sign in to comment.