/* | |
* Copyright (c) 2022 Project CHIP Authors | |
* All rights reserved. | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
* | |
*/ | |
package com.matter.controller.commands.pairing; | |
import com.matter.controller.commands.common.CredentialsIssuer; | |
import com.matter.controller.commands.common.IPAddress; | |
import com.matter.controller.commands.common.MatterCommand; | |
import java.net.InetAddress; | |
import java.net.UnknownHostException; | |
import java.util.concurrent.atomic.AtomicBoolean; | |
import java.util.concurrent.atomic.AtomicInteger; | |
import java.util.concurrent.atomic.AtomicLong; | |
public abstract class PairingCommand extends MatterCommand { | |
private PairingModeType mPairingMode = PairingModeType.NONE; | |
private PairingNetworkType mNetworkType = PairingNetworkType.NONE; | |
private DiscoveryFilterType mFilterType = DiscoveryFilterType.NONE; | |
private final IPAddress mRemoteAddr; | |
private final AtomicLong mNodeId = new AtomicLong(); | |
private final AtomicLong mDiscoveryFilterCode = new AtomicLong(); | |
private final AtomicInteger mTimeout = new AtomicInteger(); | |
private final AtomicBoolean mDiscoverOnce = new AtomicBoolean(); | |
private final AtomicBoolean mUseOnlyOnNetworkDiscovery = new AtomicBoolean(); | |
private final AtomicInteger mRemotePort = new AtomicInteger(); | |
private final AtomicInteger mDiscriminator = new AtomicInteger(); | |
private final AtomicInteger mSetupPINCode = new AtomicInteger(); | |
private final StringBuffer mOperationalDataset = new StringBuffer(); | |
private final StringBuffer mSSID = new StringBuffer(); | |
private final StringBuffer mPassword = new StringBuffer(); | |
private final StringBuffer mOnboardingPayload = new StringBuffer(); | |
private final StringBuffer mDiscoveryFilterInstanceName = new StringBuffer(); | |
public PairingCommand( | |
String commandName, | |
PairingModeType mode, | |
PairingNetworkType networkType, | |
CredentialsIssuer credsIssuer) { | |
this(commandName, mode, networkType, credsIssuer, DiscoveryFilterType.NONE); | |
} | |
public PairingCommand( | |
String commandName, | |
PairingModeType mode, | |
PairingNetworkType networkType, | |
CredentialsIssuer credsIssuer, | |
DiscoveryFilterType filterType) { | |
super(commandName, credsIssuer); | |
this.mPairingMode = mode; | |
this.mNetworkType = networkType; | |
this.mFilterType = filterType; | |
try { | |
this.mRemoteAddr = new IPAddress(InetAddress.getByName("0.0.0.0")); | |
} catch (UnknownHostException e) { | |
throw new RuntimeException(e); | |
} | |
addArgument("node-id", 0, Long.MAX_VALUE, mNodeId, null); | |
switch (networkType) { | |
case NONE: | |
case ETHERNET: | |
break; | |
case WIFI: | |
addArgument("ssid", mSSID, null); | |
addArgument("password", mPassword, null); | |
break; | |
case THREAD: | |
addArgument("operationalDataset", mOperationalDataset, null); | |
break; | |
} | |
switch (mode) { | |
case NONE: | |
break; | |
case CODE: | |
case CODE_PASE_ONLY: | |
Only: | |
addArgument("payload", mOnboardingPayload, null); | |
addArgument("discover-once", mDiscoverOnce, null); | |
addArgument("use-only-onnetwork-discovery", mUseOnlyOnNetworkDiscovery, null); | |
break; | |
case BLE: | |
addArgument("setup-pin-code", 0, 134217727, mSetupPINCode, null); | |
addArgument("discriminator", (short) 0, (short) 4096, mDiscriminator, null); | |
break; | |
case ON_NETWORK: | |
addArgument("setup-pin-code", 0, 134217727, mSetupPINCode, null); | |
break; | |
case SOFT_AP: | |
AP: | |
addArgument("setup-pin-code", 0, 134217727, mSetupPINCode, null); | |
addArgument("discriminator", (short) 0, (short) 4096, mDiscriminator, null); | |
addArgument("device-remote-ip", mRemoteAddr); | |
addArgument("device-remote-port", (short) 0, Short.MAX_VALUE, mRemotePort, null); | |
break; | |
case ETHERNET: | |
addArgument("setup-pin-code", 0, 134217727, mSetupPINCode, null); | |
addArgument("discriminator", (short) 0, (short) 4096, mDiscriminator, null); | |
addArgument("device-remote-ip", mRemoteAddr); | |
addArgument("device-remote-port", (short) 0, Short.MAX_VALUE, mRemotePort, null); | |
break; | |
} | |
switch (filterType) { | |
case NONE: | |
break; | |
case SHORT_DISCRIMINATOR: | |
addArgument("discriminator", (short) 0, (short) 4096, mDiscriminator, null); | |
break; | |
case LONG_DISCRIMINATOR: | |
addArgument("discriminator", (short) 0, (short) 4096, mDiscriminator, null); | |
break; | |
case VENDOR_ID: | |
addArgument("vendor-id", (short) 0, Short.MAX_VALUE, mDiscoveryFilterCode, null); | |
break; | |
case COMPRESSED_FABRIC_ID: | |
addArgument("fabric-id", 0, Long.MAX_VALUE, mDiscoveryFilterCode, null); | |
break; | |
case COMMISSIONING_MODE: | |
case COMMISSIONER: | |
break; | |
case DEVICE_TYPE: | |
addArgument("device-type", (short) 0, Short.MAX_VALUE, mDiscoveryFilterCode, null); | |
break; | |
case INSTANCE_NAME: | |
addArgument("name", mDiscoveryFilterInstanceName, null); | |
break; | |
} | |
addArgument("timeout", (short) 0, Short.MAX_VALUE, mTimeout, null); | |
} | |
} |