"""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 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'/BcdAdapter(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'/HexAdapter(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
}
