OpenCommissioningWindowCommand.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright (c) 2021 Project CHIP Authors
  3. * All rights reserved.
  4. *
  5. * Licensed under the Apache License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. *
  17. */
  18. #include "OpenCommissioningWindowCommand.h"
  19. #include <system/SystemClock.h>
  20. using namespace ::chip;
  21. CHIP_ERROR OpenCommissioningWindowCommand::RunCommand()
  22. {
  23. mWindowOpener = Platform::MakeUnique<Controller::CommissioningWindowOpener>(&CurrentCommissioner());
  24. if (mCommissioningWindowOption == Controller::CommissioningWindowOpener::CommissioningWindowOption::kOriginalSetupCode)
  25. {
  26. return mWindowOpener->OpenBasicCommissioningWindow(mNodeId, System::Clock::Seconds16(mCommissioningWindowTimeout),
  27. &mOnOpenBasicCommissioningWindowCallback);
  28. }
  29. if (mCommissioningWindowOption == Controller::CommissioningWindowOpener::CommissioningWindowOption::kTokenWithRandomPIN)
  30. {
  31. SetupPayload ignored;
  32. return mWindowOpener->OpenCommissioningWindow(mNodeId, System::Clock::Seconds16(mCommissioningWindowTimeout), mIteration,
  33. mDiscriminator, NullOptional, NullOptional,
  34. &mOnOpenCommissioningWindowCallback, ignored,
  35. /* readVIDPIDAttributes */ true);
  36. }
  37. ChipLogError(chipTool, "Unknown commissioning window option: %d", to_underlying(mCommissioningWindowOption));
  38. return CHIP_ERROR_INVALID_ARGUMENT;
  39. }
  40. void OpenCommissioningWindowCommand::OnOpenCommissioningWindowResponse(void * context, NodeId remoteId, CHIP_ERROR err,
  41. chip::SetupPayload payload)
  42. {
  43. LogErrorOnFailure(err);
  44. OnOpenBasicCommissioningWindowResponse(context, remoteId, err);
  45. }
  46. void OpenCommissioningWindowCommand::OnOpenBasicCommissioningWindowResponse(void * context, NodeId remoteId, CHIP_ERROR err)
  47. {
  48. LogErrorOnFailure(err);
  49. OpenCommissioningWindowCommand * command = reinterpret_cast<OpenCommissioningWindowCommand *>(context);
  50. VerifyOrReturn(command != nullptr, ChipLogError(chipTool, "OnOpenCommissioningWindowCommand: context is null"));
  51. command->SetCommandExitStatus(err);
  52. }