Source code for bluetooth_mesh.messages.health
#
# python-bluetooth-mesh - Bluetooth Mesh for Python
#
# Copyright (C) 2019 SILVAIR sp. z o.o.
#
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
#
import enum
from construct import (
Default,
ExprValidator,
GreedyRange,
Int8ul,
Int16ul,
Struct,
Switch,
obj_,
this,
)
from .util import EnumAdapter, Opcode
# fmt: off
FaultTest = Struct(
"test_id" / Int8ul,
"company_id" / Int16ul,
)
FaultStatus = Struct(
"test_id" / Int8ul,
"company_id" / Int16ul,
"fault_array" / Default(GreedyRange(Int8ul), [])
)
FastPeriodDivisor = Struct(
"fast_period_divisor" / ExprValidator(Int8ul, obj_ <= 15)
)
Attention = Struct(
"attention" / Int8ul
)
CompanyId = Struct(
"company_id" / Int16ul
)
HealthCurrentStatus = FaultStatus
HealthFaultGet = CompanyId
HealthFaultClear = CompanyId
HealthFaultTest = FaultTest
HealthFaultStatus = FaultStatus
HealthPeriodGet = Struct()
HealthPeriodSet = FastPeriodDivisor
HealthPeriodStatus = FastPeriodDivisor
HealthAttentionGet = Struct()
HealthAttentionSet = Attention
HealthAttentionStatus = Attention
# fmt: off
[docs]class HealthOpcode(enum.IntEnum):
ATTENTION_GET = 0x8004
ATTENTION_SET = 0x8005
ATTENTION_SET_UNACKNOWLEDGED = 0x8006
ATTENTION_STATUS = 0x8007
CURRENT_STATUS = 0x04
FAULT_CLEAR = 0x802F
FAULT_CLEAR_UNACKNOWLEDGED = 0x8030
FAULT_GET = 0x8031
FAULT_STATUS = 0x05
FAULT_TEST = 0x8032
FAULT_TEST_UNACKNOWLEDGED = 0x8033
PERIOD_GET = 0x8034
PERIOD_SET = 0x8035
PERIOD_SET_UNACKNOWLEDGED = 0x8036
PERIOD_STATUS = 0x8037
# fmt: off
HealthMessage = Struct(
"opcode" / EnumAdapter(Opcode, HealthOpcode),
"params" / Switch(
this.opcode,
{
HealthOpcode.ATTENTION_GET: HealthAttentionGet,
HealthOpcode.ATTENTION_SET: HealthAttentionSet,
HealthOpcode.ATTENTION_SET_UNACKNOWLEDGED: HealthAttentionSet,
HealthOpcode.ATTENTION_STATUS: HealthAttentionStatus,
HealthOpcode.CURRENT_STATUS: HealthCurrentStatus,
HealthOpcode.FAULT_CLEAR: HealthFaultClear,
HealthOpcode.FAULT_CLEAR_UNACKNOWLEDGED: HealthFaultClear,
HealthOpcode.FAULT_GET: HealthFaultGet,
HealthOpcode.FAULT_STATUS: HealthCurrentStatus,
HealthOpcode.FAULT_TEST: HealthFaultTest,
HealthOpcode.FAULT_TEST_UNACKNOWLEDGED: HealthFaultTest,
HealthOpcode.PERIOD_GET: HealthPeriodGet,
HealthOpcode.PERIOD_SET: HealthPeriodSet,
HealthOpcode.PERIOD_SET_UNACKNOWLEDGED: HealthPeriodSet,
HealthOpcode.PERIOD_STATUS: HealthPeriodStatus,
}
)
)
# fmt: on