
    i/                        d Z ddlmZ ddlmZmZmZ ddlT ddlT ddl	T  G d de
          Z G d de          Z G d	 d
e
          Z G d de
          Z G d de
          Z G d de          Z G d de          Z G d de          Z G d de          Zdddddddddd d!d"Z G d# d$e          Z G d% d&e          Z G d' d(e          Zdddddddddd d!d"Z G d) d*e          Z G d+ d,e          Z G d- d.e          Zd/S )0z
DF_PHONEBOOK, DF_MULTIMEDIA, DF_MCS as specified in 3GPP TS 31.102 V16.6.0
Needs to be a separate python module to avoid cyclic imports
    )Optional)StructInt16ubInt32ub)*c                   r     e Zd Z fdZededeeef         fd            Zd Zd Z	d Z
d Zg g fd	Z xZS )
EF_UServiceTablec           	      T     t                      j        d|||||d| || _        d S )N)fidsfidnamedescsize )super__init__table	selfr   r   r   r   r   r   kwargs	__class__s	           E/home/jenkins/workspace/simtester-sanitize/pySim/ts_31_102_telecom.pyr   zEF_UServiceTable.__init__&   s9    WSt$TWWPVWWW


    servicereturnc                 (    | dz
  }|dz  }|dz  }||fS )N      r   )r   ibyte_offset
bit_offsets       r   _bit_byte_offset_for_servicez-EF_UServiceTable._bit_byte_offset_for_service*   s(    aKdU
Z((r   c                     i }t          dt          |                    D ]X}||         }t          dd          D ]=}|dz  |z   dz   }d|d|z  z  rdndi||<   || j        v r| j        |         ||         d<   >Y|S )Nr   r   r   	activatedTFdescription)rangelenr   )r   in_binretr   bytebitno
service_nrs          r   _decode_binzEF_UServiceTable._decode_bin1   s    q#f++&& 	L 	LA!9Dq! L LUU]Q.
e)<!G%#J ++59Z
5KC
OM2L 
r   c                    d}|                                 D ]9}t          |          }t                              |          \  }}||k    r|dz   }:t	          d|z            }|                                 D ]V}t          |          }t                              |          \  }}||         d         du rd}	nd}	||xx         |	|z  z  cc<   W|S )Nr   r       r$   T)keysintr	   r"   	bytearray)
r   in_jsonr   bin_lensrvr,   r    r!   outbits
             r   _encode_binzEF_UServiceTable._encode_bin>   s    <<>> 	( 	(CSJ(8(U(U) )%[*g%%%a-')**<<>> 	4 	4CSJ(8(U(U) )%[*s|K(D00 33
r   c                     |j                                         \  }}g }|                                D ]%}||         d         r|                    |           &|S )Nr$   )lchanread_binary_decr0   append)r   cmdservice_data_swactive_servicesss         r   get_active_servicesz$EF_UServiceTable.get_active_servicesT   sf    !i7799s""$$ 	* 	*AA{+ *&&q)))r   c           	         d}|                      |          }| j        j        }	 t          |                                          D ]}||v rdnd}|                    d||fz             ||         D ]}|                    |          }	 |j                            |           d}	d}
n(# t          $ r}t          |          }	d}
Y d}~nd}~ww xY w|
|k    r<|dz  }|
r|                    d	|z             |                    d
|d|	d           	 |j                            |            n# |j                            |            w xY w|S )zKCheck consistency between services of this file and files present/activatedr   activeinactivezChecking service No %u (%s)NTFr   z.  ERROR: File %s is selectable but should not!z  ERROR: File z is not selectable (z) but should!)rB   parentfiles_by_servicesortedr0   poutputshould_exist_for_servicesr:   select_fileSwMatchErrorstrperror)r   r=   num_problemsr@   rG   rA   
active_strfshould_existswexistses               r   ust_service_checkz"EF_UServiceTable.ust_service_check]   s   22377;7	(,113344 i i)*o)=)=XX:
9Q
OKLLL)!, i iA#$#>#>#O#OL'	--a000!!%' ' ' ' VV!&' --$)! iJJ'WZ['[\\\\JJJabababdfdfdf'ghhhii( I!!$''''CI!!$''''s7   A$D1 
B)(D1 )
C3C	D1 	CAD1 1Ec                 D   |j                                         \  }}t          |          }|D ]b}t                              |          \  }}|t          |          k    r||z
  }	|                    |	dz             ||xx         d|z  z  cc<   c|D ]c}t                              |          \  }}|t          |          k    r||z
  }	|                    |	dz             ||xx         d|z   z  cc<   dt          |          }|j                             |           d S )N00r   )	r:   read_binaryh2br	   r"   r'   extendb2hupdate_binary)
r   r=   activate
deactivater>   r?   r   nbytenbitmissings
             r   
ust_updatezEF_UServiceTable.ust_update|   sN   I1133c<(( 	/ 	/G*GGPPKE4s<((((,.##GdN333AI.! 	0 	0G*GGPPKE4s<((((,.##GdN333Q$Y</<((	-----r   )__name__
__module____qualname__r   staticmethodr1   Tupler"   r-   r8   rB   rV   rc   __classcell__r   s   @r   r	   r	   %   s             )c )eCHo ) ) ) \)    ,    > (*b . . . . . . . .r   r	   c                         e Zd Zd fd	Z xZS )EF_PBR4F30EF.PBRPhone Book Referencec                 B     t                      j        |f||d| d S N)r   r   r   r   r   r   r   r   r   r   s        r   r   zEF_PBR.__init__   /    =4d==f=====r   )rm   rn   ro   rd   re   rf   r   ri   rj   s   @r   rl   rl      s=        > > > > > > > > > >r   rl   c                   <     e Zd Z edez            Zd fd	Z xZS )EF_PSCsynce_counter4F22EF.PSC"Phone Book Synchronization Counterc                 B     t                      j        |f||d| d S rq   rr   rs   s        r   r   zEF_PSC.__init__   rt   r   )ry   rz   r{   )rd   re   rf   r   r   
_constructr   ri   rj   s   @r   rw   rw      sQ        /00J> > > > > > > > > >r   rw   c                   <     e Zd Z edez            Zd fd	Z xZS )EF_CCchange_counter4F23EF.CCChange Counterc                 B     t                      j        |f||d| d S rq   rr   rs   s        r   r   zEF_CC.__init__   rt   r   )r   r   r   rd   re   rf   r   r   r}   r   ri   rj   s   @r   r   r      sR        (011J> > > > > > > > > >r   r   c                   <     e Zd Z edez            Zd fd	Z xZS )EF_PUIDprevious_uid4F24EF.PUIDPrevious Unique Identiferc                 B     t                      j        |f||d| d S rq   rr   rs   s        r   r   zEF_PUID.__init__   rt   r   )r   r   r   r   rj   s   @r   r   r      sQ        w.//J> > > > > > > > > >r   r   c                         e Zd Zd fd	Z xZS )DF_PHONEBOOK5F3ADF.PHONEBOOK	Phonebookc                      t                      j        d|||d| t                      t                      t	                      t                      g}|                     |           d S N)r   r   r   r   )r   r   rl   rw   r   r   	add_filesr   r   r   r   r   filesr   s         r   r   zDF_PHONEBOOK.__init__   sf    ASt$AA&AAAHHHHGGII	 	ur   )r   r   r   ru   rj   s   @r   r   r      s=        	 	 	 	 	 	 	 	 	 	r   r   c                         e Zd Zd fd	Z xZS )EF_MML4F47EF.MMLMultimedia Messages Listc                 B     t                      j        |f||d| d S rq   rr   rs   s        r   r   zEF_MML.__init__   rt   r   )r   r   r   ru   rj   s   @r   r   r      =        > > > > > > > > > >r   r   c                         e Zd Zd fd	Z xZS )EF_MMDF4F48EF.MMDFMultimedia Messages Data Filec                 B     t                      j        |f||d| d S rq   rr   rs   s        r   r   zEF_MMDF.__init__   rt   r   )r   r   r   ru   rj   s   @r   r   r      r   r   r   c                         e Zd Zd fd	Z xZS )DF_MULTIMEDIA5F3BDF.MULTIMEDIA
Multimediac                      t                      j        d|||d| t                      t                      g}|                     |           d S r   )r   r   r   r   r   r   s         r   r   zDF_MULTIMEDIA.__init__   sX    ASt$AA&AAAHHII 	ur   )r   r   r   ru   rj   s   @r   r   r      =                 r   r   zMCPTT UE configuration datazMCPTT User profile datazMCS Group configuration dataz MCPTT Service configuration dataz!MCS UE initial configuration datazMCData UE configuration datazMCData user profile dataz!MCData service configuration datazMCVideo UE configuration datazMCVideo user profile dataz"MCVideo service configuration data)r                     r   	   
      c                       e Zd Z G d ded          Z G d ded          Z G d d	ed
          Z G d ded          Z G d ded          Z G d ded          Z	 G d ded          Z
 G d ded          Z G d ded          Z G d ded          Z G d  d!ed"          Z G d# d$eeeeeee	e
eeeeg%          Zd+ fd*	Z xZS ),EF_MCS_CONFIGc                       e Zd ZdS )&EF_MCS_CONFIG.McpttUeConfigurationDataNrd   re   rf   r   r   r   McpttUeConfigurationDatar              r   r      tagc                       e Zd ZdS )"EF_MCS_CONFIG.McpttUserProfileDataNr   r   r   r   McpttUserProfileDatar      r   r   r      c                       e Zd ZdS )'EF_MCS_CONFIG.McsGroupConfigurationDataNr   r   r   r   McsGroupConfigurationDatar      r   r   r      c                       e Zd ZdS )+EF_MCS_CONFIG.McpttServiceConfigurationDataNr   r   r   r   McpttServiceConfigurationDatar      r   r   r      c                       e Zd ZdS )+EF_MCS_CONFIG.McsUeInitialConfigurationDataNr   r   r   r   McsUeInitialConfigurationDatar      r   r   r      c                       e Zd ZdS )'EF_MCS_CONFIG.McdataUeConfigurationDataNr   r   r   r   McdataUeConfigurationDatar      r   r   r      c                       e Zd ZdS )#EF_MCS_CONFIG.McdataUserProfileDataNr   r   r   r   McdataUserProfileDatar      r   r   r      c                       e Zd ZdS ),EF_MCS_CONFIG.McdataServiceConfigurationDataNr   r   r   r   McdataServiceConfigurationDatar      r   r   r      c                       e Zd ZdS )(EF_MCS_CONFIG.McvideoUeConfigurationDataNr   r   r   r   McvideoUeConfigurationDatar      r   r   r      c                       e Zd ZdS )$EF_MCS_CONFIG.McvideoUserProfileDataNr   r   r   r   McvideoUserProfileDatar      r   r   r      c                       e Zd ZdS )-EF_MCS_CONFIG.McvideoServiceConfigurationDataNr   r   r   r   McvideoServiceConfigurationDatar      r   r   r      c                       e Zd ZdS )%EF_MCS_CONFIG.McsConfigDataCollectionNr   r   r   r   McsConfigDataCollectionr      s         	r   r   nested4F02r   EF.MCS_CONFIGMCS configuration datac                 f     t                      j        d||||d| t          j        | _        d S N)r   r   r   r   r   )r   r   r   r   _tlvr   r   r   r   r   r   r   s         r   r   zEF_MCS_CONFIG.__init__   9    LSt$TLLVLLL!9			r   )r   r   r   r   )rd   re   rf   
BER_TLV_IEr   r   r   r   r   r   r   r   r   r   r   TLV_IE_Collectionr   r   ri   rj   s   @r   r   r      s           :4        zt        JD        
        
        JD        
                ZT                *$        "3=U"68Q"?A^";=R"@B\"8:Y=[    : : : : : : : : : :r   r   c                   ,     e Zd Zdddddef fd	Z xZS )EF_MST4F01r   zEF.MSTzMCS Service Tabler   r   c                 V    t                                          ||||||           d S N)r   r   r   r   r   r   rr   r   s	           r   r   zEF_MST.__init__  /    St$TTYZZZZZr   )rd   re   rf   
EF_MST_mapr   ri   rj   s   @r   r   r     W        !8BU\a![ [ [ [ [ [ [ [ [ [r   r   c                         e Zd Zd fd	Z xZS )DF_MCS5F3DDF.MCSMission Critical Servicesc                      t                      j        d|||d| t                      t                      g}|                     |           d S r   )r   r   r   r   r   r   s         r   r   zDF_MCS.__init__  X    ASt$AA&AAAHHOO 	ur   )r   r  r  ru   rj   s   @r   r   r     r   r   r   c                   ,     e Zd Zdddddef fd	Z xZS )EF_VSTr   r   zEF.VSTzV2X Service Tabler   c                 V    t                                          ||||||           d S r   rr   r   s	           r   r   zEF_VST.__init__!  r   r   )rd   re   rf   
EF_VST_mapr   ri   rj   s   @r   r  r     r   r   r  c                   b     e Zd Z G d ded          Z G d deeg          Zd fd	Z xZS )EF_V2X_CONFIGc                       e Zd ZdS )"EF_V2X_CONFIG.V2xConfigurationDataNr   r   r   r   V2xConfigurationDatar  '  r   r   r  r   r   c                       e Zd ZdS )%EF_V2X_CONFIG.V2xConfigDataCollectionNr   r   r   r   V2xConfigDataCollectionr  )  r   r   r  r   r   r   EF.V2X_CONFIGV2X configuration datac                 f     t                      j        d||||d| t          j        | _        d S r   )r   r   r
  r  r   r   s         r   r   zEF_V2X_CONFIG.__init__+  r   r   )r   r   r  r  )	rd   re   rf   r   r  r   r  r   ri   rj   s   @r   r
  r
  &  s            zt        "3=Q<R    : : : : : : : : : :r   r
  c                         e Zd Zd fd	Z xZS )DF_V2X5F3EDF.V2XVehicle to Xc                      t                      j        d|||d| t                      t                      g}|                     |           d S r   )r   r   r  r
  r   r   s         r   r   zDF_V2X.__init__1  r  r   )r  r  r  ru   rj   s   @r   r  r  0  r   r   r  N)__doc__	constructr   	COptionalr   r   r   osmocom.tlvosmocom.constructpySim.filesystemTransparentEFr	   
LinFixedEFrl   rw   r   r   CardDFr   BerTlvEFr   r   r   r   r   r   r   r  r  r
  r  r   r   r   <module>r$     s_   , , + + + + + . . . . . . . . . .            j. j. j. j. j.} j. j. j.Z> > > > >Z > > >> > > > >] > > >> > > > >M > > >> > > > >m > > >
 
 
 
 
6 
 
 
> > > > >X > > >
> > > > >h > > >    F    % %)*%!*&#, 
 :  :  :  :  :H  :  :  :F[ [ [ [ [ [ [ [
    V    % %)*%!*&#, 
[ [ [ [ [ [ [ [: : : : :H : : :    V     r   