@@ -455,7 +455,7 @@ class CommandSender final : public Messaging::ExchangeDelegate
455
455
private:
456
456
friend class TestCommandInteraction ;
457
457
458
- enum class State
458
+ enum class State : uint8_t
459
459
{
460
460
Idle, // /< Default state that the object starts out in, where no work has commenced
461
461
AddingCommand, // /< In the process of adding a command.
@@ -466,6 +466,14 @@ class CommandSender final : public Messaging::ExchangeDelegate
466
466
AwaitingDestruction, // /< The object has completed its work and is awaiting destruction by the application.
467
467
};
468
468
469
+ union CallbackHandle
470
+ {
471
+ CallbackHandle (Callback * apCallback) : legacyCallback (apCallback) {}
472
+ CallbackHandle (ExtendableCallback * apExtendableCallback) : extendableCallback (apExtendableCallback) {}
473
+ Callback * legacyCallback;
474
+ ExtendableCallback * extendableCallback;
475
+ };
476
+
469
477
void MoveToState (const State aTargetState);
470
478
const char * GetStateStr () const ;
471
479
@@ -513,46 +521,45 @@ class CommandSender final : public Messaging::ExchangeDelegate
513
521
void OnResponseCallback (const ResponseData & aResponseData)
514
522
{
515
523
// mpExtendableCallback and mpCallback are mutually exclusive.
516
- if (mpExtendableCallback )
524
+ if (mUseExtendableCallback && mCallbackHandle . extendableCallback )
517
525
{
518
- mpExtendableCallback ->OnResponse (this , aResponseData);
526
+ mCallbackHandle . extendableCallback ->OnResponse (this , aResponseData);
519
527
}
520
- else if (mpCallback )
528
+ else if (mCallbackHandle . legacyCallback )
521
529
{
522
- mpCallback ->OnResponse (this , aResponseData.path , aResponseData.statusIB , aResponseData.data );
530
+ mCallbackHandle . legacyCallback ->OnResponse (this , aResponseData.path , aResponseData.statusIB , aResponseData.data );
523
531
}
524
532
}
525
533
526
534
void OnErrorCallback (CHIP_ERROR aError)
527
535
{
528
536
// mpExtendableCallback and mpCallback are mutually exclusive.
529
- if (mpExtendableCallback )
537
+ if (mUseExtendableCallback && mCallbackHandle . extendableCallback )
530
538
{
531
539
ErrorData errorData = { aError };
532
- mpExtendableCallback ->OnError (this , errorData);
540
+ mCallbackHandle . extendableCallback ->OnError (this , errorData);
533
541
}
534
- else if (mpCallback )
542
+ else if (mCallbackHandle . legacyCallback )
535
543
{
536
- mpCallback ->OnError (this , aError);
544
+ mCallbackHandle . legacyCallback ->OnError (this , aError);
537
545
}
538
546
}
539
547
540
548
void OnDoneCallback ()
541
549
{
542
550
// mpExtendableCallback and mpCallback are mutually exclusive.
543
- if (mpExtendableCallback )
551
+ if (mUseExtendableCallback && mCallbackHandle . extendableCallback )
544
552
{
545
- mpExtendableCallback ->OnDone (this );
553
+ mCallbackHandle . extendableCallback ->OnDone (this );
546
554
}
547
- else if (mpCallback )
555
+ else if (mCallbackHandle . legacyCallback )
548
556
{
549
- mpCallback ->OnDone (this );
557
+ mCallbackHandle . legacyCallback ->OnDone (this );
550
558
}
551
559
}
552
560
553
561
Messaging::ExchangeHolder mExchangeCtx ;
554
- Callback * mpCallback = nullptr ;
555
- ExtendableCallback * mpExtendableCallback = nullptr ;
562
+ CallbackHandle mCallbackHandle ;
556
563
Messaging::ExchangeManager * mpExchangeMgr = nullptr ;
557
564
InvokeRequestMessage::Builder mInvokeRequestBuilder ;
558
565
// TODO Maybe we should change PacketBufferTLVWriter so we can finalize it
@@ -564,15 +571,16 @@ class CommandSender final : public Messaging::ExchangeDelegate
564
571
Optional<uint16_t > mTimedInvokeTimeoutMs ;
565
572
TLV::TLVType mDataElementContainerType = TLV::kTLVType_NotSpecified ;
566
573
567
- State mState = State::Idle;
568
574
chip::System::PacketBufferTLVWriter mCommandMessageWriter ;
569
575
uint16_t mFinishedCommandCount = 0 ;
570
576
uint16_t mRemoteMaxPathsPerInvoke = 1 ;
571
577
572
- bool mSuppressResponse = false ;
573
- bool mTimedRequest = false ;
574
- bool mBufferAllocated = false ;
575
- bool mBatchCommandsEnabled = false ;
578
+ State mState = State::Idle;
579
+ bool mSuppressResponse = false ;
580
+ bool mTimedRequest = false ;
581
+ bool mBufferAllocated = false ;
582
+ bool mBatchCommandsEnabled = false ;
583
+ bool mUseExtendableCallback = false ;
576
584
};
577
585
578
586
} // namespace app
0 commit comments