"""Code related to the Card Application Toolkit (CAT) as described in
mainly) ETSI TS 102 223, ETSI TS 101 220 and USIM Application Toolkit (SAT)
as described in 3GPP TS 31.111."""

# (C) 2021-2022 by Harald Welte <laforge@osmocom.org>
#
# 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, see <http://www.gnu.org/licenses/>.


from bidict import bidict
from typing import List
from pySim.utils import b2h, h2b, dec_xplmn_w_act
from pySim.tlv import TLV_IE, COMPR_TLV_IE, BER_TLV_IE, TLV_IE_Collection
from pySim.construct import PlmnAdapter, BcdAdapter, HexAdapter, GsmStringAdapter, TonNpi
from construct import Int8ub, Int16ub, Byte, Bytes, Bit, Flag, BitsInteger
from construct import Struct, Enum, Tell, BitStruct, this, Padding, RepeatUntil
from construct import GreedyBytes, Switch, GreedyRange, FlagsEnum

# Tag values as per TS 101 220 Table 7.23

# TS 102 223 Section 8.1
class Address(COMPR_TLV_IE, tag=0x06):
    _construct = Struct('ton_npi'/Int8ub,
                        'call_number'/BcdAdapter(Bytes(this._.total_len-1)))

# TS 102 223 Section 8.2
class AlphaIdentifier(COMPR_TLV_IE, tag=0x05):
    # FIXME: like EF.ADN
    pass

# TS 102 223 Section 8.3
class Subaddress(COMPR_TLV_IE, tag=0x08):
    pass

# TS 102 223 Section 8.4 + TS 31.111 Section 8.4
class CapabilityConfigParams(COMPR_TLV_IE, tag=0x07):
    pass

# TS 31.111 Section 8.5
class CBSPage(COMPR_TLV_IE, tag=0x0C):
    pass

# TS 102 223 Section 8.6 + TS 31.111 Section 8.6
class CommandDetails(COMPR_TLV_IE, tag=0x81):
    _construct = Struct('command_number'/Int8ub,
                        'type_of_command'/Int8ub,
                        'command_qualifier'/Int8ub)

# TS 102 223 Section 8.7
class DeviceIdentities(COMPR_TLV_IE, tag=0x82):
    DEV_IDS = bidict({
        0x01: 'keypad',
        0x02: 'display',
        0x03: 'earpiece',
        0x10: 'addl_card_reader_0',
        0x11: 'addl_card_reader_1',
        0x12: 'addl_card_reader_2',
        0x13: 'addl_card_reader_3',
        0x14: 'addl_card_reader_4',
        0x15: 'addl_card_reader_5',
        0x16: 'addl_card_reader_6',
        0x17: 'addl_card_reader_7',
        0x21: 'channel_1',
        0x22: 'channel_2',
        0x23: 'channel_3',
        0x24: 'channel_4',
        0x25: 'channel_5',
        0x26: 'channel_6',
        0x27: 'channel_7',
        0x31: 'ecat_client_1',
        0x32: 'ecat_client_2',
        0x33: 'ecat_client_3',
        0x34: 'ecat_client_4',
        0x35: 'ecat_client_5',
        0x36: 'ecat_client_6',
        0x37: 'ecat_client_7',
        0x38: 'ecat_client_8',
        0x39: 'ecat_client_9',
        0x3a: 'ecat_client_a',
        0x3b: 'ecat_client_b',
        0x3c: 'ecat_client_c',
        0x3d: 'ecat_client_d',
        0x3e: 'ecat_client_e',
        0x3f: 'ecat_client_f',
        0x81: 'uicc',
        0x82: 'terminal',
        0x83: 'network',
    })

    def _from_bytes(self, do: bytes):
        return {'source_dev_id': self.DEV_IDS[do[0]], 'dest_dev_id': self.DEV_IDS[do[1]]}

    def _to_bytes(self):
        src = self.DEV_IDS.inverse[self.decoded['source_dev_id']]
        dst = self.DEV_IDS.inverse[self.decoded['dest_dev_id']]
        return bytes([src, dst])

# TS 102 223 Section 8.8
class Duration(COMPR_TLV_IE, tag=0x04):
    _construct = Struct('time_unit'/Enum(Int8ub, minutes=0, seconds=1, tenths_of_seconds=2),
                        'time_interval'/Int8ub)

# TS 102 223 Section 8.9
class Item(COMPR_TLV_IE, tag=0x0f):
    _construct = Struct('identifier'/Int8ub,
                        'text_string'/GsmStringAdapter(GreedyBytes))

# TS 102 223 Section 8.10
class ItemIdentifier(COMPR_TLV_IE, tag=0x10):
    _construct = Struct('identifier'/Int8ub)

# TS 102 223 Section 8.11
class ResponseLength(COMPR_TLV_IE, tag=0x11):
    _construct = Struct('minimum_length'/Int8ub,
                        'maximum_length'/Int8ub)

# TS 102 223 Section 8.12
class Result(COMPR_TLV_IE, tag=0x03):
    GeneralResult = Enum(Int8ub,
                         # '0X' and '1X' indicate that the command has been performed
                         performed_successfully=0,
                         performed_with_partial_comprehension=1,
                         performed_with_missing_information=2,
                         refresh_performed_with_addl_efs_read=3,
                         porformed_successfully_but_reqd_item_not_displayed=4,
                         performed_but_modified_by_call_control_by_naa=5,
                         performed_successfully_limited_service=6,
                         performed_with_modification=7,
                         refresh_performed_but_indicated_naa_was_not_active=8,
                         performed_successfully_tone_not_played=9,
                         proactive_uicc_session_terminated_by_user=0x10,
                         backward_move_in_proactive_uicc_session_requested_by_user=0x11,
                         no_response_from_user=0x12,
                         help_information_required_by_user=0x13,
                         # '2X' indicate to the UICC that it may be worth re-trying later
                         terminal_currently_unable_to_process=0x20,
                         network_currently_unable_to_process=0x21,
                         user_did_not_accept_proactive_cmd=0x22,
                         user_cleared_down_call_before_release=0x23,
                         action_in_contradiction_with_current_timer_state=0x24,
                         interaction_with_call_control_by_naa_temporary=0x25,
                         launch_browser_generic_error=0x26,
                         mms_temporary_problem=0x27,
                         # '3X' indicate that it is not worth the UICC re-trying with an identical command
                         command_beyond_terminal_capability=0x30,
                         command_type_not_understood_by_terminal=0x31,
                         command_data_not_understood_by_terminal=0x32,
                         command_number_not_known_by_terminal=0x33,
                         error_required_values_missing=0x36,
                         multiple_card_commands_error=0x38,
                         #interaction_with_call_control_by_naa_permanent=0x39, # see below 3GPP
                         bearer_independent_protocol_error=0x3a,
                         access_technology_unable_to_process_command=0x3b,
                         frames_error=0x3c,
                         mms_error=0x3d,
                         # 3GPP TS 31.111 Section 8.12
                         ussd_or_ss_transaction_terminated_by_user=0x14,
                         ss_return_error=0x34,
                         sms_rp_error=0x35,
                         ussd_return_error=0x37,
                         interaction_with_cc_by_usim_or_mo_sm_by_usim_permanent=0x39)
    # TS 102 223 Section 8.12.2
    AddlInfoTermProblem = Enum(Int8ub,
                                no_specific_cause=0x00,
                                screen_is_busy=0x01,
                                terminal_currently_busy_on_call=0x02,
                                no_service=0x04,
                                access_control_class_bar=0x05,
                                radio_resource_not_granted=0x06,
                                not_in_speech_call=0x07,
                                terminal_currently_busy_on_send_dtmf=0x09,
                                no_naa_active=0x10,
                                # TS 31.111 section 8.12
                                me_currently_busy_on_ss_transaction=0x03,
                                me_currently_busy_on_ussd_transaction=0x08)
    # TS 102 223 Section 8.12.8 / TS 31.111 Section 8.12.8
    AddlInfoCallControl= Enum(Int8ub,
                                no_specific_cause=0x00,
                                action_not_allowed=0x01,
                                the_type_of_request_has_changed=0x02)
    # TS 102 223 Section 8.12.9
    AddlInfoMultipleCard = Enum(Int8ub,
                                no_specific_cause=0x00,
                                card_reader_removed_or_not_present=0x01,
                                card_removed_or_not_present=0x02,
                                card_reader_busy=0x03,
                                card_powered_off=0x04,
                                capdu_format_error=0x05,
                                mute_card=0x06,
                                transmission_error=0x07,
                                protocol_not_supported=0x08,
                                specified_reader_not_valid=0x09)
    # TS 102 223 Section 8.12.10
    AddlInfoLaunchBrowser = Enum(Int8ub,
                                no_specific_cause=0x00,
                                bearer_unavailable=0x01,
                                browser_unavailable=0x02,
                                terminal_unable_to_read_provisioning_data=0x03,
                                default_url_unavailable=0x04)
    # TS 102 223 Section 8.12.11
    AddlInfoBip = Enum(Int8ub,  no_specific_cause=0x00,
                                no_channel_availabile=0x01,
                                channel_closed=0x02,
                                channel_id_not_valid=0x03,
                                requested_buffer_size_not_available=0x04,
                                security_error=0x05,
                                requested_uicc_if_transp_level_not_available=0x06,
                                remote_device_not_reachable=0x07,
                                service_error=0x08,
                                service_identifer_unknown=0x09,
                                port_not_available=0x10,
                                launch_parameters_missing_or_incorrect=0x11,
                                application_launch_failed=0x12)
    # TS 102 223 Section 8.12.11
    AddlInfoFrames = Enum(Int8ub,
                                no_specific_cause=0x00,
                                frame_identifier_not_valid=0x01,
                                num_of_frames_beyond_terminal_capabilities=0x02,
                                no_frame_defined=0x03,
                                requested_size_not_supported=0x04,
                                default_active_frame_not_valid=0x05)

    _construct = Struct('general_result'/GeneralResult,
                        'additional_information'/Switch(this.general_result,
                        {
                            'terminal_currently_unable_to_process': AddlInfoTermProblem,
                            'interaction_with_cc_by_usim_or_mo_sm_by_usim_permanent': AddlInfoCallControl,
                            'multiple_card_commands_error': AddlInfoMultipleCard,
                            'launch_browser_generic_error': AddlInfoLaunchBrowser,
                            'bearer_independent_protocol_error': AddlInfoBip,
                            'frames_error': AddlInfoFrames
                        }, default=HexAdapter(GreedyBytes)))

# TS 102 223 Section 8.13  + TS 31.111 Section 8.13
class SMS_TPDU(COMPR_TLV_IE, tag=0x8B):
    _construct = Struct('tpdu'/HexAdapter(GreedyBytes))

# TS 31.111 Section 8.14
class SsString(COMPR_TLV_IE, tag=0x89):
    _construct = Struct('ton_npi'/TonNpi, 'ss_string'/HexAdapter(GreedyBytes))


# TS 102 223 Section 8.15
class TextString(COMPR_TLV_IE, tag=0x0d):
    _construct = Struct('dcs'/Int8ub, # TS 03.38
                        'text_string'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.16
class Tone(COMPR_TLV_IE, tag=0x0e):
    _construct = Struct('tone'/Enum(Int8ub, dial_tone=0x01,
                                            called_subscriber_busy=0x02,
                                            congestion=0x03,
                                            radio_path_acknowledge=0x04,
                                            radio_path_not_available=0x05,
                                            error_special_info=0x06,
                                            call_waiting_tone=0x07,
                                            ringing_tone=0x08,
                                            general_beep=0x10,
                                            positive_ack_tone=0x11,
                                            negative_ack_or_error_tone=0x12,
                                            ringing_tone_speech=0x13,
                                            alert_tone_sms=0x14,
                                            critical_alert=0x15,
                                            vibrate_only=0x20,
                                            happy_tone=0x30,
                                            sad_tone=0x31,
                                            urgent_action_tone=0x32,
                                            question_tone=0x33,
                                            message_received_tone=0x34,
                                            melody_1=0x40,
                                            melody_2=0x41,
                                            melody_3=0x42,
                                            melody_4=0x43,
                                            melody_5=0x44,
                                            melody_6=0x45,
                                            melody_7=0x46,
                                            melody_8=0x47))

# TS 31 111 Section 8.17
class USSDString(COMPR_TLV_IE, tag=0x0a):
    _construct = Struct('dcs'/Int8ub,
                        'ussd_string'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.18
class FileList(COMPR_TLV_IE, tag=0x12):
    FileId=HexAdapter(Bytes(2))
    _construct = Struct('number_of_files'/Int8ub,
                        'files'/GreedyRange(FileId))

# TS 102 223 Secton 8.19
class LocationInformation(COMPR_TLV_IE, tag=0x93):
    pass

# TS 102 223 Secton 8.20
class IMEI(COMPR_TLV_IE, tag=0x94):
    _construct = BcdAdapter(GreedyBytes)

# TS 102 223 Secton 8.21
class HelpRequest(COMPR_TLV_IE, tag=0x95):
    pass

# TS 102 223 Secton 8.22
class NetworkMeasurementResults(COMPR_TLV_IE, tag=0x96):
    _construct = BcdAdapter(GreedyBytes)

# TS 102 223 Section 8.23
class DefaultText(COMPR_TLV_IE, tag=0x97):
    _construct = Struct('dcs'/Int8ub,
                        'text_string'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.24
class ItemsNextActionIndicator(COMPR_TLV_IE, tag=0x18):
    _construct = GreedyRange(Int8ub)

class EventList(COMPR_TLV_IE, tag=0x99):
    Event = Enum(Int8ub,    mt_call=0x00,
                            call_connected=0x01,
                            call_disconnected=0x02,
                            location_status=0x03,
                            user_activity=0x04,
                            idle_screen_available=0x05,
                            card_reader_status=0x06,
                            language_selection=0x07,
                            browser_termination=0x08,
                            data_available=0x09,
                            channel_status=0x0a,
                            access_technology_change=0x0b,
                            display_parameters_changed=0x0c,
                            local_connection=0x0d,
                            network_search_mode_change=0x0e,
                            browsing_status=0x0f,
                            frames_informtion_change=0x10,
                            hci_connectivity_event=0x13,
                            access_technology_change_multiple=0x14,
                            contactless_state_request=0x16,
                            profile_container=0x19,
                            secured_profile_container=0x1b,
                            poll_interval_negotation=0x1c,
                            # TS 31.111 Section 8.25
                            wlan_access_status=0x11,
                            network_rejection=0x12,
                            csg_cell_selection=0x15,
                            ims_registration=0x17,
                            incoming_ims_data=0x18,
                            data_connection_status_change=0x1d)
    _construct = GreedyRange(Event)

# TS 102 223 Section 8.26
class Cause(COMPR_TLV_IE, tag=0x9a):
    pass

# TS 102 223 Section 8.27
class LocationStatus(COMPR_TLV_IE, tag=0x9b):
    _construct = Enum(Int8ub, normal_service=0, limited_service=1, no_service=2)

# TS 102 223 Section 8.31
class IconIdentifier(COMPR_TLV_IE, tag=0x1e):
    _construct = Struct('icon_qualifier'/FlagsEnum(Int8ub, not_self_explanatory=1),
                        'icon_identifier'/Int8ub)

# TS 102 223 Section 8.32
class ItemIconIdentifierList(COMPR_TLV_IE, tag=0x9f):
    _construct = Struct('icon_list_qualifier'/FlagsEnum(Int8ub, not_self_explanatory=1),
                        'icon_identifiers'/GreedyRange(Int8ub))

# TS 102 223 Section 8.35
class CApdu(COMPR_TLV_IE, tag=0xA2):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.37
class TimerIdentifier(COMPR_TLV_IE, tag=0xA4):
    _construct = Int8ub

# TS 102 223 Section 8.38
class TimerValue(COMPR_TLV_IE, tag=0xA5):
    _construct = Struct('hour'/Int8ub, 'minute'/Int8ub, 'second'/Int8ub)

# TS 102 223 Section 8.40
class AtCommand(COMPR_TLV_IE, tag=0xA8):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.43
class ImmediateResponse(COMPR_TLV_IE, tag=0x2b):
    pass

# TS 102 223 Section 8.45
class Language(COMPR_TLV_IE, tag=0xAD):
    _construct = HexAdapter(GreedyBytes)

# TS 31.111 Section 8.46
class TimingAdvance(COMPR_TLV_IE, tag=0x46):
    _construct = Struct('me_status'/Enum(Int8ub, in_idle_state=0, not_in_idle_state=1),
                        'timing_advance'/Int8ub)

# TS 31.111 Section 8.49
class Bearer(COMPR_TLV_IE, tag=0xB2):
    SingleBearer = Enum(Int8ub, sms=0, csd=1, ussd=2, packet_Service=3)
    _construct = GreedyRange(SingleBearer)

# TS 102 223 Section 8.52
class BearerDescription(COMPR_TLV_IE, tag=0xB5):
    # TS 31.111 Section 8.52.1
    BearerParsCs = Struct('data_rate'/Int8ub,
                          'bearer_service'/Int8ub,
                          'connection_element'/Int8ub)
    # TS 31.111 Section 8.52.2
    BearerParsPacket = Struct('precendence_class'/Int8ub,
                              'delay'/Int8ub,
                              'reliability'/Int8ub,
                              'peak_throughput'/Int8ub,
                              'mean_throughput'/Int8ub,
                              'pdp_type'/Enum(Int8ub, ip=0x02, non_ip=0x07))
    # TS 31.111 Section 8.52.3
    BearerParsPacketExt = Struct('traffic_class'/Int8ub,
                                 'max_bitrate_ul'/Int16ub,
                                 'max_bitrate_dl'/Int16ub,
                                 'guaranteed_bitrate_ul'/Int16ub,
                                 'guaranteed_bitrate_dl'/Int16ub,
                                 'delivery_order'/Int8ub,
                                 'max_sdu_size'/Int8ub,
                                 'sdu_err_ratio'/Int8ub,
                                 'residual_ber'/Int8ub,
                                 'delivery_of_erroneous_sdu'/Int8ub,
                                 'transfer_delay'/Int8ub,
                                 'traffic_handling_priority'/Int8ub,
                                 'pdp_type'/Enum(Int8ub, ip=0x02, non_ip=0x07)) # 24.008
    # TODO: TS 31.111 Section 8.52.4 I-WLAN
    # TODO: TS 31.111 Section 8.52.5 E-UTRAN / mapped UTRAN packet service
    # TS 31.111 Section 8.52.6
    BearerParsNgRan = Struct('pdu_session_type'/Int8ub)
    _construct = Struct('bearer_type'/Enum(Int8ub,
                            # TS 31.111 section 8.52
                            csd=1, packet_grps_utran_eutran=2, packet_with_extd_params=9, wlan=0x0a,
                            packet_eutran_mapped_utran=0x0b, ng_ran=0x0c,
                            # TS 102 223 Section 8.52
                            default=3, local_link=4, bluetooth=5, irda=6, rs232=7, cdma2000=8,
                            usb=10),
                        'bearer_parameters'/Switch(this.bearer_type,{
                                                        'csd': BearerParsCs,
                                                        'packet_grps_utran_eutran': BearerParsPacket,
                                                        'packet_with_extd_params': BearerParsPacketExt,
                                                        'ng_ran': BearerParsNgRan,
                                                    }, default=HexAdapter(GreedyBytes)))

# TS 102 223 Section 8.53
class ChannelData(COMPR_TLV_IE, tag = 0xB6):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.54
class ChannelDataLength(COMPR_TLV_IE, tag = 0xB7):
    _construct = Int8ub

# TS 102 223 Section 8.55
class BufferSize(COMPR_TLV_IE, tag = 0xB9):
    _construct = Int16ub

# TS 31.111 Section 8.56
class ChannelStatus(COMPR_TLV_IE, tag = 0xB8):
    # complex decoding, depends on out-of-band context/knowledge :(
    pass

# TS 102 223 Section 8.58
class OtherAddress(COMPR_TLV_IE, tag = 0xBE):
    _construct = Struct('type_of_address'/Enum(Int8ub, ipv4=0x21, ipv6=0x57),
                        'address'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.59
class UiccTransportLevel(COMPR_TLV_IE, tag = 0xBC):
    _construct = Struct('protocol_type'/Enum(Int8ub, udp_uicc_client_remote=1, tcp_uicc_client_remote=2,
                                             tcp_uicc_server=3, udp_uicc_client_local=4,
                                             tcp_uicc_client_local=5, direct_channel=6),
                        'port_number'/Int16ub)

# TS 102 223 Section 8.60
class Aid(COMPR_TLV_IE, tag=0x2f):
    _construct = Struct('aid'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.61
class AccessTechnology(COMPR_TLV_IE, tag=0xBF):
    SingleAccessTech = Enum(Int8ub, gsm=0, tia_eia_533=1, tia_eia_136_270=2, utran=3, tetra=4,
                                    tia_eia_95_b=5, cdma1000_1x=6, cdma2000_hrpd=7, eutran=8,
                                    ehrpd=9, nr=0x0a)
    _construct = GreedyRange(SingleAccessTech)

# TS 102 223 Section 8.63
class ServiceRecord(COMPR_TLV_IE, tag=0xC1):
    BearerTechId = Enum(Int8ub, technology_independent=0, bluetooth=1, irda=2, rs232=3, usb=4)
    _construct = Struct('local_bearer_technology'/BearerTechId,
                        'service_identifier'/Int8ub,
                        'service_record'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.64
class DeviceFilter(COMPR_TLV_IE, tag=0xC2):
    _construct = Struct('local_bearer_technology'/ServiceRecord.BearerTechId,
                        'device_filter'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.65
class ServiceSearchIE(COMPR_TLV_IE, tag=0xC3):
    _construct = Struct('local_bearer_technology'/ServiceRecord.BearerTechId,
                        'service_search'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.66
class AttributeInformation(COMPR_TLV_IE, tag=0xC4):
    _construct = Struct('local_bearer_technology'/ServiceRecord.BearerTechId,
                        'attribute_information'/HexAdapter(GreedyBytes))


# TS 102 223 Section 8.68
class RemoteEntityAddress(COMPR_TLV_IE, tag=0xC9):
    _construct = Struct('coding_type'/Enum(Int8ub, ieee802_16=0, irda=1),
                        'address'/HexAdapter(GreedyBytes))

# TS 102 223 Section 8.70
class NetworkAccessName(COMPR_TLV_IE, tag=0xC7):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.72
class TextAttribute(COMPR_TLV_IE, tag=0x50):
    pass

# TS 31.111 Section 8.72
class PdpContextActivationParams(COMPR_TLV_IE, tag=0xD2):
    pass

# TS 31.111 Section 8.73
class UtranEutranMeasurementQualifier(COMPR_TLV_IE, tag=0xE9):
    _construct = Enum(Int8ub,   utran_intra_freq=0x01,
                                utran_inter_freq=0x02,
                                utran_inter_rat_geran=0x03,
                                utran_inter_rat_eutran=0x04,
                                eutran_intra_freq=0x05,
                                eutran_inter_freq=0x06,
                                eutran_inter_rat_geran=0x07,
                                eutran_inter_rat_utran=0x08,
                                eutran_inter_rat_nr=0x09)

# TS 102 223 Section 8.75
class NetworkSearchMode(COMPR_TLV_IE, tag=0xE5):
    _construct = Enum(Int8ub, manual=0, automatic=1)

# TS 102 223 Section 8.76
class BatteryState(COMPR_TLV_IE, tag=0xE3):
    _construct = Enum(Int8ub, very_low=0, low=1, average=2, good=3, full=5)

# TS 102 223 Section 8.78
class FrameLayout(COMPR_TLV_IE, tag=0xE6):
    _construct = Struct('layout'/Enum(Int8ub, horizontal=1, vertical=2),
                        'relative_sized_frame'/GreedyRange(Int8ub))

class ItemTextAttributeList(COMPR_TLV_IE, tag=0xD1):
    _construct = GreedyRange(Int8ub)

# TS 102 223 Section 8.80
class FrameIdentifier(COMPR_TLV_IE, tag=0x68):
    _construct = Struct('identifier'/Int8ub)

# TS 102 223 Section 8.82
class MultimediaMessageReference(COMPR_TLV_IE, tag=0xEA):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.83
class MultimediaMessageIdentifier(COMPR_TLV_IE, tag=0xEB):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.85
class MmContentIdentifier(COMPR_TLV_IE, tag=0xEE):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.89
class ActivateDescriptor(COMPR_TLV_IE, tag=0xFB):
    _construct = Struct('target'/Int8ub)

# TS 31.111 Section 8.90
class PlmnWactList(COMPR_TLV_IE, tag=0xF2):
    def _from_bytes(self, x):
        r = []
        i = 0
        while i < len(x):
            r.append(dec_xplmn_w_act(b2h(x[i:i+5])))
            i += 5
        return r

# TS 102 223 Section 8.92
class ContactlessFunctionalityState(COMPR_TLV_IE, tag=0xD4):
    _construct = Enum(Int8ub, enabled=0, disabled=1)

# TS 31.111 Section 8.91
class RoutingAreaIdentification(COMPR_TLV_IE, tag=0xF3):
    _construct = Struct('mcc_mnc'/PlmnAdapter(Bytes(3)),
                        'lac'/HexAdapter(Bytes(2)),
                        'rac'/Int8ub)

# TS 31.111 Section 8.92
class UpdateAttachRegistrationType(COMPR_TLV_IE, tag=0xF4):
    _construct = Enum(Int8ub,   normal_location_updating_lu=0x00,
                                periodic_updating_lu=0x01,
                                imsi_attach_lu=0x02,
                                gprs_attach=0x03,
                                combined_gprs_imsi_attach=0x04,
                                ra_updating_rau=0x05,
                                combined_ra_la_updting_rau=0x06,
                                combined_ra_la_updting_with_imsi_attach_rau=0x07,
                                periodic_updating_rau=0x08,
                                eps_attach_emm=0x09,
                                combined_eps_imsi_attach_emm=0x0a,
                                ta_updating_tau=0x0b,
                                combined_ta_la_updating_tau=0x0c,
                                combined_ta_la_updating_with_imsi_attach_tau=0x0d,
                                periodic_updating_tau=0x0e,
                                initial_registration_5grr=0x0f,
                                mobility_registration_updating_5grr=0x10,
                                periodic_registration_updating_5grr=0x11)

# TS 31.111 Section 8.93
class RejectionCauseCode(COMPR_TLV_IE, tag=0xF5):
    _construct = Int8ub

# TS 31.111 Section 8.94
class GeographicalLocationParameters(COMPR_TLV_IE, tag=0xF6):
    _construct = Struct('horizontal_accuracy'/Int8ub,
                        'vertical_coordinate'/Int8ub,
                        'velocity'/FlagsEnum(Int8ub, horizontal_requested=0, vertical_requested=1,
                                             horizontal_uncertainty_requested=2,
                                             vertical_uncertainty_requested=4),
                        'preferred_gad_shapes'/FlagsEnum(Int8ub, ellipsoid_point=0,
                                                         ellipsoid_point_with_uncertainty_circle=1,
                                                         ellipsoid_point_with_uncertainty_ellipse=2,
                                                         ellipsoid_point_with_altitude=3,
                                                         polygon=4,
                                                         ellipsoid_point_with_altitude_and_uncertainty_ellipsoid=5,
                                                         ellipsoid_arc=6),
                        'preferred_nmea_sentences'/FlagsEnum(Int8ub, rmc=0, gga=1, gll=2, gns=3),
                        'preferred_maximum_response_time'/Int8ub)

# TS 31.111 Section 8.97
class PlmnList(COMPR_TLV_IE, tag=0xF9):
    _construct = GreedyRange('mcc_mnc'/PlmnAdapter(Bytes(3)))

# TS 102 223 Section 8.98
class EcatSequenceNumber(COMPR_TLV_IE, tag=0xA1):
    CmdTypeIndicator = Enum(BitsInteger(2), command_container=0,
                                            terminal_response=1,
                                            envelope_profile_container_event=2,
                                            envelope_profile_container_response=3)
    _construct = BitStruct('command_type_indicator'/CmdTypeIndicator,
                           'counter'/BitsInteger(22))

# TS 102 223 Section 8.99
class EncryptedTlvList(COMPR_TLV_IE, tag=0xA2):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.100
class Mac(COMPR_TLV_IE, tag=0xE0):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.101
class SaTemplate(COMPR_TLV_IE, tag=0xA3):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.103
class RefreshEnforcementPolicy(COMPR_TLV_IE, tag=0x3A):
    _construct = FlagsEnum(Byte, even_if_navigating_menus=0, even_if_data_call=1, even_if_voice_call=2)

# TS 102 223 Section 8.104
class DnsServerAddress(COMPR_TLV_IE, tag=0xC0):
    _construct = HexAdapter(GreedyBytes)

# TS 102 223 Section 8.105
class SupportedRadioAccessTechnologies(COMPR_TLV_IE, tag=0xB4):
    AccessTechTuple = Struct('technology'/AccessTechnology.SingleAccessTech,
                             'state'/FlagsEnum(Int8ub, enabled=0))
    _construct = GreedyRange(AccessTechTuple)

# TS 102 223 Section 8.107
class ApplicationSpecificRefreshData(COMPR_TLV_IE, tag=0x3B):
    pass

# TS 31.111 Section 8.108
class ImsUri(COMPR_TLV_IE, tag=0xB1):
    pass

# TS 31.111 Section 8.132
class MediaType(COMPR_TLV_IE, tag=0xFE):
    _construct = FlagsEnum(Int8ub, voice=0, video=1)

# TS 31.111 Section 8.137
class DataConnectionStatus(COMPR_TLV_IE, tag=0x9D):
    _construct = Enum(Int8ub, successful=0, rejected=1, dropped_or_deactivated=2)

# TS 31.111 Section 8.138
class DataConnectionType(COMPR_TLV_IE, tag=0xAA):
    _construct = Enum(Int8ub, pdp=0, pdn=1, pdu=2)

# TS 31.111 Section 8.139
class SmCause(COMPR_TLV_IE, tag=0xAE):
    _construct = Int8ub


# TS 101 220 Table 7.17 + 31.111 7.1.1.2
class SMSPPDownload(BER_TLV_IE, tag=0xD1,
                    nested=[DeviceIdentities, Address, SMS_TPDU]):
    pass

# TS 101 220 Table 7.17 + 31.111 7.1.1.3
class SMSCBDownload(BER_TLV_IE, tag=0xD2,
                    nested=[DeviceIdentities, CBSPage]):
    pass


class USSDDownload(BER_TLV_IE, tag=0xD9,
                   nested=[DeviceIdentities, USSDString]):
    pass




class ProactiveCmd(BER_TLV_IE):
    def _compute_tag(self) -> int:
        return 0xD0


# TS 101 220 Table 7.17 + 102 223 6.6.13/9.4 + TS 31.111 6.6.13
class Refresh(ProactiveCmd, tag=0x01,
              nested=[CommandDetails, DeviceIdentities, FileList, Aid, AlphaIdentifier,
                      IconIdentifier, TextAttribute, FrameIdentifier, RefreshEnforcementPolicy,
                      ApplicationSpecificRefreshData, PlmnWactList, PlmnList]):
    pass

class MoreTime(ProactiveCmd, tag=0x02,
        nested=[CommandDetails]):
    pass

class PollInterval(ProactiveCmd, tag=0x03,
        nested=[CommandDetails]):
    pass

class PollingOff(ProactiveCmd, tag=0x04,
        nested=[CommandDetails]):
    pass

class SetUpEventList(ProactiveCmd, tag=0x05,
        nested=[CommandDetails]):
    pass

# TS 31.111 Section 6.6.12
class SetUpCall(ProactiveCmd, tag=0x10,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, Address, ImsUri,
                CapabilityConfigParams, Subaddress, Duration, IconIdentifier, AlphaIdentifier,
                TextAttribute, FrameIdentifier, MediaType]):
    pass

# TS 31.111 Section 6.6.10
class SendSS(ProactiveCmd, tag=0x11,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, SsString, IconIdentifier,
                TextAttribute, FrameIdentifier]):
    pass

# TS 31.111 Section 6.6.11
class SendUSSD(ProactiveCmd, tag=0x12,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, USSDString, IconIdentifier,
                TextAttribute, FrameIdentifier]):
    pass

# TS 101 220 Table 7.17 + 102 223 6.6.9/9.4 + TS 31.111 Section 6.6.9
class SendShortMessage(ProactiveCmd, tag=0x13,
                       nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, Address,
                               SMS_TPDU, IconIdentifier, TextAttribute, FrameIdentifier]):
    pass

class SendDTMF(ProactiveCmd, tag=0x14,
        nested=[CommandDetails]):
    pass

class LaunchBrowser(ProactiveCmd, tag=0x15,
        nested=[CommandDetails]):
    pass

class GeographicalLocationRequest(ProactiveCmd, tag=0x16,
        nested=[CommandDetails]):
    pass

class PlayTone(ProactiveCmd, tag=0x20,
        nested=[CommandDetails]):
    pass

# TS 101 220 Table 7.17 + 102 223 6.6.1/9.4 CMD=0x21
class DisplayText(ProactiveCmd, tag=0x21,
                  nested=[CommandDetails, DeviceIdentities, TextString, IconIdentifier,
                          ImmediateResponse, Duration, TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.2
class GetInkey(ProactiveCmd, tag=0x22,
        nested=[CommandDetails, DeviceIdentities, TextString, IconIdentifier, Duration,
                TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.3
class GetInput(ProactiveCmd, tag=0x23,
        nested=[CommandDetails, DeviceIdentities, TextString, ResponseLength, DefaultText,
                IconIdentifier, TextAttribute, FrameIdentifier, Duration]):
    pass

# TS 102 223 6.6.8
class SelectItem(ProactiveCmd, tag=0x24,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, #
                ItemsNextActionIndicator, ItemIdentifier, IconIdentifier, ItemIconIdentifierList,
                TextAttribute, ItemTextAttributeList, FrameIdentifier]):
    pass

# TS 102 223 6.6.7
class SetUpMenu(ProactiveCmd, tag=0x25,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, #
                ItemsNextActionIndicator, IconIdentifier, ItemIconIdentifierList,
                TextAttribute, ItemTextAttributeList]):
    pass

# TS 102 223 6.6.15
class ProvideLocalInformation(ProactiveCmd, tag=0x26,
        nested=[CommandDetails, DeviceIdentities]):
    pass

# TS 102 223 6.6.21
class TimerManagement(ProactiveCmd, tag=0x27,
        nested=[CommandDetails, DeviceIdentities, TimerIdentifier, TimerValue]):
    pass

# TS 102 223 6.6.22
class SetUpIdleModeText(ProactiveCmd, tag=0x28,
        nested=[CommandDetails, DeviceIdentities, TextString, IconIdentifier, TextAttribute,
                FrameIdentifier]):
    pass

# TS 102 223 6.6.17
class PerformCardApdu(ProactiveCmd, tag=0x30,
        nested=[CommandDetails, DeviceIdentities, CApdu]):
    pass

# TS 102 223 6.6.19
class PowerOnCard(ProactiveCmd, tag=0x31,
        nested=[CommandDetails, DeviceIdentities]):
    pass

# TS 102 223 6.6.18
class PowerOffCard(ProactiveCmd, tag=0x32,
        nested=[CommandDetails, DeviceIdentities]):
    pass

# TS 102 223 6.6.20
class GetReaderStatus(ProactiveCmd, tag=0x33,
        nested=[CommandDetails, DeviceIdentities]):
    pass

# TS 102 223 6.6.23
class RunAtCommand(ProactiveCmd, tag=0x34,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, AtCommand, IconIdentifier,
                TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.25
class LanguageNotification(ProactiveCmd, tag=0x35,
        nested=[CommandDetails, DeviceIdentities, Language]):
    pass

# TS 102 223 6.6.27
class OpenChannel(ProactiveCmd, tag=0x40,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, Address, Subaddress,
                Duration, BearerDescription, BufferSize, NetworkAccessName, OtherAddress,
                TextString, UiccTransportLevel, RemoteEntityAddress, TextAttribute,
                FrameIdentifier]):
    pass

# TS 102 223 6.6.28
class CloseChannel(ProactiveCmd, tag=0x41,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, TextAttribute,
                FrameIdentifier]):
    pass

# TS 102 223 6.6.29
class ReceiveData(ProactiveCmd, tag=0x42,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, ChannelDataLength,
                TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.30
class SendData(ProactiveCmd, tag=0x43,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, ChannelData,
                TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.31
class GetChannelStatus(ProactiveCmd, tag=0x44,
        nested=[CommandDetails, DeviceIdentities]):
    pass

# TS 102 223 6.6.32
class ServiceSearch(ProactiveCmd, tag=0x45,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, ServiceSearchIE,
                DeviceFilter, TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.33
class GetServiceInformation(ProactiveCmd, tag=0x46,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, AttributeInformation,
                TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.34
class DeclareService(ProactiveCmd, tag=0x47,
        nested=[CommandDetails, DeviceIdentities, ServiceRecord, UiccTransportLevel]):
    pass

# TS 102 223 6.6.35
class SetFrames(ProactiveCmd, tag=0x50,
        nested=[CommandDetails, DeviceIdentities, FrameIdentifier, FrameLayout]):
    pass

# TS 102 223 6.6.36
class GetFramesStatus(ProactiveCmd, tag=0x51,
        nested=[CommandDetails, DeviceIdentities]):
    pass

# TS 102 223 6.6.37
class RetrieveMultimediaMessage(ProactiveCmd, tag=0x60,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, MultimediaMessageReference,
                FileList, MmContentIdentifier, MultimediaMessageIdentifier, TextAttribute,
                FrameIdentifier]):
    pass

# TS 102 223 6.6.38
class SubmitMultimediaMessage(ProactiveCmd, tag=0x61,
        nested=[CommandDetails, DeviceIdentities, AlphaIdentifier, IconIdentifier, FileList,
                MultimediaMessageIdentifier, TextAttribute, FrameIdentifier]):
    pass

# TS 102 223 6.6.39
class DisplayMultimediaMessage(ProactiveCmd, tag=0x62,
        nested=[CommandDetails, DeviceIdentities, FileList, MultimediaMessageIdentifier,
                ImmediateResponse, FrameIdentifier]):
    pass

# TS 102 223 6.6.40
class Activate(ProactiveCmd, tag=0x70,
        nested=[CommandDetails, DeviceIdentities, ActivateDescriptor]):
    pass

# TS 102 223 6.6.41
class ContactlessStateChanged(ProactiveCmd, tag=0x71,
        nested=[CommandDetails, DeviceIdentities, ContactlessFunctionalityState]):
    pass

# TS 102 223 6.6.42
class CommandContainer(ProactiveCmd, tag=0x72,
        nested=[CommandDetails, DeviceIdentities, EcatSequenceNumber, Mac, EncryptedTlvList]):
    pass

# TS 102 223 6.6.43
class EncapsulatedSessionControl(ProactiveCmd, tag=0x73,
        nested=[CommandDetails, DeviceIdentities, SaTemplate]):
    pass



# TS 101 220 Table 7.17: FIXME: Merge all nested?
class ProactiveCommandBase(BER_TLV_IE, tag=0xD0, nested=[CommandDetails]):
    def find_cmd_details(self):
        for c in self.children:
            if type(c).__name__ == 'CommandDetails':
                return c
        else:
            return None

class ProactiveCommand(TLV_IE_Collection,
                       nested=[Refresh, MoreTime, PollInterval, PollingOff, SetUpEventList, SetUpCall,
                               SendSS, SendUSSD, SendShortMessage, SendDTMF, LaunchBrowser,
                               GeographicalLocationRequest, PlayTone, DisplayText, GetInkey, GetInput,
                               SelectItem, SetUpMenu, ProvideLocalInformation, TimerManagement,
                               SetUpIdleModeText, PerformCardApdu, PowerOnCard, PowerOffCard,
                               GetReaderStatus, RunAtCommand, LanguageNotification, OpenChannel,
                               CloseChannel, ReceiveData, SendData, GetChannelStatus, ServiceSearch,
                               GetServiceInformation, DeclareService, SetFrames, GetFramesStatus,
                               RetrieveMultimediaMessage, SubmitMultimediaMessage, DisplayMultimediaMessage,
                               Activate, ContactlessStateChanged, CommandContainer,
                               EncapsulatedSessionControl]):
    """Class representing a CAT proactive command, as (for example) sent via a FETCH response. Parsing this is
    more difficult than any normal TLV IE Collection, because the content of one of the IEs defines the
    definitions of all the other IEs.  So we first need to find the CommandDetails, and then parse according
    to the command type indicated in that IE data."""
    def from_bytes(self, binary: bytes) -> List[TLV_IE]:
        # do a first parse step to get the CommandDetails
        pcmd = ProactiveCommandBase()
        pcmd.from_tlv(binary)
        cmd_details = pcmd.find_cmd_details()
        # then do a second decode stage for the specific
        cmd_type = cmd_details.decoded['type_of_command']
        if cmd_type in self.members_by_tag:
            cls = self.members_by_tag[cmd_type]
            inst = cls()
            dec, remainder = inst.from_tlv(binary)
            self.decoded = inst
        else:
            self.decoded = pcmd
        return self.decoded

    #def from_dict(self, decoded):
    #    pass

    def to_dict(self):
        return self.decoded.to_dict()

    def to_bytes(self):
        return self.decoded.to_tlv()


# reasonable default for playing with OTA
# 010203040506070809101112131415161718192021222324252627282930313233
# '7fe1e10e000000000000001f43000000ff00000000000000000000000000000000'

# TS 102 223 Section 5.2
term_prof_bits = {
    # first byte
    1: 'Profile download',
    2: 'SMS-PP data download',
    3: 'Cell Broadcast data download',
    4: 'Menu selection',
    5: 'SMS-PP data download',
    6: 'Timer expiration',
    7: 'USSD string DO support in CC by USIM',
    8: 'Call Control by NAA',

    # first byte
    9: 'Command result',
    10: 'Call Control by NAA',
    11: 'Call Control by NAA',
    12: 'MO short message control support',
    13: 'Call Control by NAA',
    14: 'UCS2 Entry supported',
    15: 'UCS2 Display supported',
    16: 'Display Text',

    # third byte
    17: 'Proactive UICC: DISPLAY TEXT',
    18: 'Proactive UICC: GET INKEY',
    19: 'Proactive UICC: GET INPUT',
    20: 'Proactive UICC: MORE TIME',
    21: 'Proactive UICC: PLAY TONE',
    22: 'Proactive UICC: POLL INTERVAL',
    23: 'Proactive UICC: POLLING OFF',
    24: 'Proactive UICC: REFRESH',

    # fourth byte
    25: 'Proactive UICC: SELECT ITEM',
    26: 'Proactive UICC: SEND SHORT MESSAGE with 3GPP-SMS-TPDU',
    27: 'Proactive UICC: SEND SS',
    28: 'Proactive UICC: SEND USSD',
    29: 'Proactive UICC: SET UP CALL',
    30: 'Proactive UICC: SET UP MENU',
    31: 'Proactive UICC: PROVIDE LOCAL INFORMATION (MCC, MNC, LAC, Cell ID & IMEI)',
    32: 'Proactive UICC: PROVIDE LOCAL INFORMATION (NMR)',

    # fifth byte
    33: 'Proactive UICC: SET UP EVENT LIST',
    34: 'Event: MT call',
    35: 'Event: Call connected',
    36: 'Event: Call disconnected',
    37: 'Event: Location status',
    38: 'Event: User activity',
    39: 'Event: Idle screen available',
    40: 'Event: Card reader status',

    # sixth byte
    41: 'Event: Language selection',
    42: 'Event: Browser Termination',
    43: 'Event: Data aailable',
    44: 'Event: Channel status',
    45: 'Event: Access Technology Change',
    46: 'Event: Display parameters changed',
    47: 'Event: Local Connection',
    48: 'Event: Network Search Mode Change',

    # seventh byte
    49: 'Proactive UICC: POWER ON CARD',
    50: 'Proactive UICC: POWER OFF CARD',
    51: 'Proactive UICC: PERFORM CARD RESET',
    52: 'Proactive UICC: GET READER STATUS (Card reader status)',
    53: 'Proactive UICC: GET READER STATUS (Card reader identifier)',
    # RFU: 3 bit (54,55,56)

    # eighth byte
    57: 'Proactive UICC: TIMER MANAGEMENT (start, stop)',
    58: 'Proactive UICC: TIMER MANAGEMENT (get current value)',
    59: 'Proactive UICC: PROVIDE LOCAL INFORMATION (date, time and time zone)',
    60: 'GET INKEY',
    61: 'SET UP IDLE MODE TEXT',
    62: 'RUN AT COMMAND',
    63: 'SETUP CALL',
    64: 'Call Control by NAA',

    # ninth byte
    65: 'DISPLAY TEXT',
    66: 'SEND DTMF command',
    67: 'Proactive UICC: PROVIDE LOCAL INFORMATION (NMR)',
    68: 'Proactive UICC: PROVIDE LOCAL INFORMATION (language)',
    69: 'Proactive UICC: PROVIDE LOCAL INFORMATION (Timing Advance)',
    70: 'Proactive UICC: LANGUAGE NOTIFICATION',
    71: 'Proactive UICC: LAUNCH BROWSER',
    72: 'Proactive UICC: PROVIDE LOCAL INFORMATION (Access Technology)',

    # tenth byte
    73: 'Soft keys support for SELECT ITEM',
    74: 'Soft keys support for SET UP MENU ITEM',
    # RFU: 6 bit (75-80)

    # eleventh byte: max number of soft keys as 8bit value (81..88)

    # twelfth byte
    89: 'Proactive UICC: OPEN CHANNEL',
    90: 'Proactive UICC: CLOSE CHANNEL',
    91: 'Proactive UICC: RECEIVE DATA',
    92: 'Proactive UICC: SEND DATA',
    93: 'Proactive UICC: GET CHANNEL STATUS',
    94: 'Proactive UICC: SERVICE SEARCH',
    95: 'Proactive UICC: GET SERVICE INFORMATION',
    96: 'Proactive UICC: DECLARE SERVICE',

    # thirteenth byte
    97: 'BIP supported Bearer: CSD',
    98: 'BIP supported Bearer: GPRS',
    99: 'BIP supported Bearer: Bluetooth',
    100: 'BIP supported Bearer: IrDA',
    101: 'BIP supported Bearer: RS232',
    # 3 bits: number of channels supported (102..104)

    # fourtheenth byte (screen height)
    # fifteenth byte (screen width)
    # sixeenth byte (screen effects)
    # seventeenth byte (BIP supported bearers)
    129: 'BIP: TCP, UICC in client mode, remote connection',
    130: 'BIP: UDP, UICC in client mode, remote connection',
    131: 'BIP: TCP, UICC in server mode',
    132: 'BIP: TCP, UICC in client mode, local connection',
    133: 'BIP: UDP, UICC in client mode, local connection',
    134: 'BIP: direct communication channel',
    # 2 bits reserved: 135, 136

    # FIXME: remainder
}
