#AT Commands used by Bluetooth HFP profiles.


# Bluetooth Retrieve Supported Features command
# HFP 1.8 4.35.1
# TODO(fxb/71403) Guarantee this int is 32 bits.
command { AT+BRSF=features: Integer }

# Bluetooth Retrieve Supported Features response
# HFP 1.8 4.35.1
# TODO(fxb/71403) Guarantee this int is 32 bits.
response { +BRSF: features: Integer}

# Standard Indicator Update read command
# HFP 1.8 4.34.2
command { AT+CIND=?}

# Standard Indicator Update test command
# HFP 1.8 4.34.2
command { AT+CIND? }

# Standard Indicator Update response
# HFP 1.8 4.34.2
response { +CIND:
    service: BoolAsInt,
    call: BoolAsInt,
    callsetup: Integer,
    callheld: Integer,
    signal: Integer,
    roam: BoolAsInt,
    battchg: Integer,
}

# Standard List Current Calls command
# HFP 1.8 4.34.2
command { AT+CLCC }

# Standard List Current Calls response
# HFP 1.8 4.34.2
response { +CLCC:
    index: Integer,
    dir: Integer,
    status: Integer,
    mode: Integer,
    mpty: Integer,
    number: String,
    ty: Integer,
}

# Bluetooth Available Codecs command
# HFP 1.8 4.35.1
command { AT+BAC=codecs: List<Integer> }

# Bluetooth HF Indicators
# Bluetooth Assigned Numbers - HF Indicators
# via https://www.bluetooth.com/specifications/assigned-numbers/hands-free-profile/
enum BluetoothHFIndicator {
    EnhancedSafety = 1,
    BatteryLevel = 2,
}

# Bluetooth HF Indicators Feature list command
# HFP 1.8 4.35.1
command { AT+BIND=indicators: List<Integer> }

# Bluetooth HF Indicators Feature read command
# HFP 1.8 4.35.1
command { AT+BIND=? }

# Bluetooth HF Indicators Feature read response
# Lists the supported HF indicators.
# HFP 1.8 4.35.1
response BindList { +BIND: (indicators: List<BluetoothHFIndicator>) }

# Bluetooth HF Indicators Feature test command
# HFP 1.8 4.35.1
command { AT+BIND? }

# Bluetooth HF Indicators Feature test response
# Lists the enabled/disabled status of the supported HF indicators.
# HFP 1.8 4.36.1.3
response BindStatus { +BIND:anum:BluetoothHFIndicator,state:BoolAsInt }

# Bluetooth HF Indicator value command
# HFP 1.8 4.36.1.5
command { AT+BIEV=anum:BluetoothHFIndicator,value:Integer}

# Standard Call hold read command.
# HFP 1.8 4.34.2
command { AT+CHLD=? }

# Standard Call hold read response.
# HFP 1.8 4.34.2
response { +CHLD: (commands: List<String>)}

# Standard Event Reporting command
# HFP 1.8 4.34.2
command { AT+CMER=mode: Integer, keyp: Integer, disp: Integer, ind: Integer }

# Standard Noise Cancelling command
# HFP 1.8 4.34.2
command { AT+NREC=nrec:BoolAsInt }

# Standard Set Network Operator Format command
# HFP 1.8 4.34.2
command { AT+COPS=three: Integer, format: NetworkOperatorNameFormat}

# Standard Query Operator Selection read command
# HFP 1.8 4.34.2
command { AT+COPS? }

# Standard Query Operator Selection read response
# HFP 1.8 4.34.2
response { +COPS: format: NetworkOperatorNameFormat, zero: Integer, operator: String}

# The parameter used to determine how the network operator name should be defined.
# This is defined in HFP v1.8, Section 4.8.
# Note: The HFP specification does not provide alternate formats besides the Long
# Alphanumeric format. For the sake of strong type safety and to provide forward-looking
# flexibility, this is represented as an enum with a single variant.
enum NetworkOperatorNameFormat {
    LongAlphanumeric = 0,
}

# Standard Set Extended Error Reporting command
# HFP 1.8 4.34.2
command { AT+CMEE=enable: BoolAsInt }

# Call Waiting Notification Activation
# HFP 1.8 4.34.2
command { AT+CCWA=enable: BoolAsInt }

# Call Line Identification (CLI) Notification
# HFP 1.8 4.34.2
command { AT+CLIP=enable: BoolAsInt }

# Call Line Identification Notification
# HFP 1.8 4.34.2
response { +CLIP: number: String, ty: Integer }

# Subscriber Number Information
# HFP 1.8 4.34.2
command { AT+CNUM }

response { +CNUM:
    alpha: String,
    number: String,
    ty: Integer,
    speed: String,
    service: Integer,
}

# Transmit DTMF Codes
# HFP 1.8 4.34.2
# Code should be a single ascii character 0-9,*,#,A-D
command { AT+VTS=code: String }

# Volume Level Synchronization
# HFP 1.8 4.34.2
command { AT+VGS=level: Integer }
command { AT+VGM=level: Integer }

# Standard indicator events reporting command
# HFP 1.8 4.34.2
response { +CIEV: ind: Integer, value: Integer }

# Indicator activation and deactivation command
# HFP 1.8 4.35
command { AT+BIA=indrep: List<String> }

# Answer
# HFP 1.8 4.34.2
command Answer { ATA }

# Hang Up
# HFP 1.8 4.34.2
command { AT+CHUP }

# Call Waiting Notification
# HFP 1.8 4.34.2
response { CCWA: number: String, ty: Integer }
