// Copyright (C) 2024 Fredrik Öhrström (gpl-3.0-or-later)
driver {
    name           = kampress
    default_fields = name,id,status,pressure_bar,max_pressure_bar,min_pressure_bar,timestamp
    meter_type     = PressureSensor
    detect {
        mvt = KAM,01,18
    }
    compact_frame_formats {
        difvif = 22691269026905FF0905FF0A02FD17
    }
    fields {
        field {
            name     = status
            quantity = Text
            info     = status_and_error_flags
            match {
                measurement_type = Instantaneous
                vif_range        = ErrorFlags
            }
            lookup {
                name            = ERROR_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffff
                default_message = OK
                map {
                    name  = DROP
                    info  = 'Unexpected drop in pressure in relation to average pressure.'
                    value = 0x01
                    test  = Set
                }
                map {
                    name  = SURGE
                    info  = 'Unexpected increase in pressure in relation to average pressure.'
                    value = 0x02
                    test  = Set
                }
                map {
                    name  = HIGH
                    info  = 'Average pressure has reached configurable limit. Default 15 bar.'
                    value = 0x04
                    test  = Set
                }
                map {
                    name  = LOW
                    info  = 'Average pressure has reached configurable limit. Default 1.5 bar.'
                    value = 0x08
                    test  = Set
                }
                map {
                    name  = TRANSIENT
                    info  = 'Pressure changes quickly over short timeperiods. Average is fluctuating.'
                    value = 0x10
                    test  = Set
                }
                map {
                    name  = COMM_ERROR
                    info  = 'Cannot measure properly or bad internal communication.'
                    value = 0x20
                    test  = Set
                }
            }
        }
        field {
            name     = pressure
            quantity = Pressure
            info     = 'The measured pressure.'
            match {
                measurement_type = Instantaneous
                vif_range        = Pressure
            }
        }
        field {
            name     = max_pressure
            quantity = Pressure
            info     = 'The maximum pressure measured during ?'
            match {
                measurement_type = Maximum
                vif_range        = Pressure
            }
        }
        field {
            name     = min_pressure
            quantity = Pressure
            info     = 'The minimum pressure measured during ?'
            match {
                measurement_type = Minimum
                vif_range        = Pressure
            }
        }
        field {
            name        = alfa
            info        = 'We do not know what this is.'
            quantity    = Dimensionless
            vif_scaling = None
            match {
                difvifkey = 05FF09
            }
        }
        field {
            name        = beta
            info        = 'We do not know what this is.'
            quantity    = Dimensionless
            vif_scaling = None
            match {
                difvifkey = 05FF0A
            }
        }
    }
    tests {
        test {
            comment  = 'Long Frame'
            args     = 'Pressing kampress 77000317 NOKEY'
            telegram = 32442D2C1703007701188D280080E39322DB8F78_22696600126967000269660005FF091954A33A05FF0A99BD823A02FD170800
            json     = '{"_":"telegram","media":"pressure","meter":"kampress","name":"Pressing","id":"77000317","status":"LOW","pressure_bar":1.02,"max_pressure_bar":1.03,"min_pressure_bar":1.02,"alfa_counter":0.001246,"beta_counter":0.000997,"timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'Pressing;77000317;LOW;1.02;1.03;1.02;1111-11-11 11:11.11'
        }
        test {
            comment  = 'Compact Frame'
            args     = 'Pressing kampress 77000317 NOKEY'
            telegram = 27442D2C1703007701188D28FE48E39322E8F179DE735DD3660066006600E007883AA7F738BA0800
            json     = '{"_":"telegram","media":"pressure","meter":"kampress","name":"Pressing","id":"77000317","status":"LOW","pressure_bar":1.02,"max_pressure_bar":1.02,"min_pressure_bar":1.02,"alfa_counter":0.001038,"beta_counter":-0.000706,"timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'Pressing;77000317;LOW;1.02;1.02;1.02;1111-11-11 11:11.11'
        }
    }
}