From ea31e718fdbd2f29d2d5fe0106d207a8864acf0d Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Tue, 14 Jul 2020 23:52:24 -0400 Subject: [PATCH] Switch iOS CHIPTool to using the new On/Off implementation. --- .../Framework/CHIP/CHIPDeviceController.h | 6 +- .../Framework/CHIP/CHIPDeviceController.mm | 60 +++++++++---------- src/darwin/Framework/CHIP/CHIPOnOff.mm | 12 +--- 3 files changed, 34 insertions(+), 44 deletions(-) diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.h b/src/darwin/Framework/CHIP/CHIPDeviceController.h index aec702d775b638..d9b1c358809f75 100644 --- a/src/darwin/Framework/CHIP/CHIPDeviceController.h +++ b/src/darwin/Framework/CHIP/CHIPDeviceController.h @@ -41,9 +41,9 @@ typedef void (^ControllerOnErrorBlock)(NSError * error); error:(NSError * __autoreleasing *)error; - (nullable AddressInfo *)getAddressInfo; - (BOOL)sendMessage:(NSData *)message error:(NSError * __autoreleasing *)error; -// We can't include definitions of ChipZclClusterId_t and ChipZclCommandId_t -// here, but they're just integers, so pass them that way. -- (BOOL)sendCHIPCommand:(uint16_t)cluster command:(uint16_t)command; +- (BOOL)sendOnCommand; +- (BOOL)sendOffCommand; +- (BOOL)sendToggleCommand; - (BOOL)disconnect:(NSError * __autoreleasing *)error; - (BOOL)isConnected; diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.mm b/src/darwin/Framework/CHIP/CHIPDeviceController.mm index 38236d0338a797..339b4710b9febe 100644 --- a/src/darwin/Framework/CHIP/CHIPDeviceController.mm +++ b/src/darwin/Framework/CHIP/CHIPDeviceController.mm @@ -17,11 +17,7 @@ #import -extern "C" { -#include "chip-zcl/chip-zcl-buffer.h" -#include "chip-zcl/chip-zcl.h" -#include "gen/gen-command-id.h" -} // extern "C" +#include "chip-zcl/chip-zcl-zpro-codec.h" #import "CHIPDeviceController.h" #import "CHIPError.h" @@ -261,7 +257,7 @@ - (BOOL)sendMessage:(NSData *)message error:(NSError * __autoreleasing *)error return YES; } -- (BOOL)sendCHIPCommand:(ChipZclClusterId_t)cluster command:(ChipZclCommandId_t)command +- (BOOL)sendCHIPCommand:(uint32_t (^)(chip::System::PacketBuffer *, uint16_t))encodeCommandBlock { CHIP_ERROR err = CHIP_NO_ERROR; [self.lock lock]; @@ -269,24 +265,8 @@ - (BOOL)sendCHIPCommand:(ChipZclClusterId_t)cluster command:(ChipZclCommandId_t) static const size_t bufferSize = 1024; chip::System::PacketBuffer * buffer = chip::System::PacketBuffer::NewWithAvailableSize(bufferSize); - ChipZclBuffer_t * zcl_buffer = (ChipZclBuffer_t *) buffer; - ChipZclCommandContext_t ctx = { - 1, // endpointId - cluster, // clusterId - true, // clusterSpecific - false, // mfgSpecific - 0, // mfgCode - command, // commandId - ZCL_DIRECTION_CLIENT_TO_SERVER, // direction - 0, // payloadStartIndex - nullptr, // request - nullptr // response - }; - chipZclEncodeZclHeader(zcl_buffer, &ctx); - - const size_t data_len = chipZclBufferDataLength(zcl_buffer); - - buffer->SetDataLength(data_len); + uint32_t dataLength = encodeCommandBlock(buffer, (uint16_t) bufferSize); + buffer->SetDataLength(dataLength); err = self.cppController->SendMessage((__bridge void *) self, buffer); [self.lock unlock]; @@ -297,6 +277,30 @@ - (BOOL)sendCHIPCommand:(ChipZclClusterId_t)cluster command:(ChipZclCommandId_t) return YES; } +- (BOOL)sendOnCommand +{ + return [self sendCHIPCommand:^(chip::System::PacketBuffer * buffer, uint16_t bufferSize) { + // Hardcode endpoint to 1 for now + return encodeOnCommand(buffer->Start(), bufferSize, 1); + }]; +} + +- (BOOL)sendOffCommand +{ + return [self sendCHIPCommand:^(chip::System::PacketBuffer * buffer, uint16_t bufferSize) { + // Hardcode endpoint to 1 for now + return encodeOffCommand(buffer->Start(), bufferSize, 1); + }]; +} + +- (BOOL)sendToggleCommand +{ + return [self sendCHIPCommand:^(chip::System::PacketBuffer * buffer, uint16_t bufferSize) { + // Hardcode endpoint to 1 for now + return encodeToggleCommand(buffer->Start(), bufferSize, 1); + }]; +} + - (BOOL)disconnect:(NSError * __autoreleasing *)error { CHIP_ERROR err = CHIP_NO_ERROR; @@ -360,11 +364,3 @@ - (void)registerCallbacks:appCallbackQueue onMessage:(ControllerOnMessageBlock)o } @end - -extern "C" { -// We have to have this empty callback, because the ZCL code links against it. -void chipZclPostAttributeChangeCallback(uint8_t endpoint, ChipZclClusterId clusterId, ChipZclAttributeId attributeId, uint8_t mask, - uint16_t manufacturerCode, uint8_t type, uint8_t size, uint8_t * value) -{ -} -} // extern "C" diff --git a/src/darwin/Framework/CHIP/CHIPOnOff.mm b/src/darwin/Framework/CHIP/CHIPOnOff.mm index cca829b6693fe1..ff854a783da95d 100644 --- a/src/darwin/Framework/CHIP/CHIPOnOff.mm +++ b/src/darwin/Framework/CHIP/CHIPOnOff.mm @@ -19,12 +19,6 @@ #import "CHIPOnOff.h" -extern "C" { -#include "chip-zcl/chip-zcl.h" -#include "gen/gen-cluster-id.h" -#include "gen/gen-types.h" -} - @interface CHIPOnOff () @property (readonly) CHIPDeviceController * deviceController; @@ -43,17 +37,17 @@ - (instancetype)initWithDeviceController:(CHIPDeviceController *)deviceControlle - (BOOL)lightOn { - return [self.deviceController sendCHIPCommand:CHIP_ZCL_CLUSTER_ON_OFF command:CHIP_ZCL_CLUSTER_ON_OFF_SERVER_COMMAND_ON]; + return [self.deviceController sendOnCommand]; } - (BOOL)lightOff { - return [self.deviceController sendCHIPCommand:CHIP_ZCL_CLUSTER_ON_OFF command:CHIP_ZCL_CLUSTER_ON_OFF_SERVER_COMMAND_OFF]; + return [self.deviceController sendOffCommand]; } - (BOOL)toggleLight { - return [self.deviceController sendCHIPCommand:CHIP_ZCL_CLUSTER_ON_OFF command:CHIP_ZCL_CLUSTER_ON_OFF_SERVER_COMMAND_TOGGLE]; + return [self.deviceController sendToggleCommand]; } @end