/* * * Copyright (c) 2020 Project CHIP Authors * * 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. */ #include "Device.h" #include #include #include using namespace ::chip::Platform; Device::Device(const char * szDeviceName, const char * szLocation) { CopyString(mName, sizeof(mName), szDeviceName); CopyString(mLocation, sizeof(mLocation), szLocation); mState = kState_Off; mReachable = false; mEndpointId = 0; mChanged_CB = nullptr; } bool Device::IsOn() const { return mState == kState_On; } bool Device::IsReachable() const { return mReachable; } void Device::SetOnOff(bool aOn) { bool changed; if (aOn) { changed = (mState != kState_On); mState = kState_On; ChipLogProgress(DeviceLayer, "Device[%s]: ON", mName); } else { changed = (mState != kState_Off); mState = kState_Off; ChipLogProgress(DeviceLayer, "Device[%s]: OFF", mName); } if (changed && mChanged_CB) { mChanged_CB(this, kChanged_State); } } void Device::SetReachable(bool aReachable) { bool changed = (mReachable != aReachable); mReachable = aReachable; if (aReachable) { ChipLogProgress(DeviceLayer, "Device[%s]: ONLINE", mName); } else { ChipLogProgress(DeviceLayer, "Device[%s]: OFFLINE", mName); } if (changed && mChanged_CB) { mChanged_CB(this, kChanged_Reachable); } } void Device::SetName(const char * szName) { bool changed = (strncmp(mName, szName, sizeof(mName)) != 0); ChipLogProgress(DeviceLayer, "Device[%s]: New Name=\"%s\"", mName, szName); CopyString(mName, sizeof(mName), szName); if (changed && mChanged_CB) { mChanged_CB(this, kChanged_Name); } } void Device::SetLocation(const char * szLocation) { bool changed = (strncmp(mLocation, szLocation, sizeof(mLocation)) != 0); CopyString(mLocation, sizeof(mLocation), szLocation); ChipLogProgress(DeviceLayer, "Device[%s]: Location=\"%s\"", mName, mLocation); if (changed && mChanged_CB) { mChanged_CB(this, kChanged_Location); } } void Device::SetChangeCallback(DeviceCallback_fn aChanged_CB) { mChanged_CB = aChanged_CB; }