
    di;                     0   d Z ddlT ddlmZmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlT ddlmZ ddlT  G d de          Z G d	 d
e          Z G d de          Z G d de          Z eeddddd          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# G d% d&e          Z$ G d' d(e%          Z& G d) d*e          Z'd+S ),z
The File (and its derived classes) uses the classes of pySim.filesystem in
order to describe the files specified in UIC Reference P38 T 9001 5.0 "FFFIS for GSM-R SIM Cards"
    )*)packunpack)StructInt8ubInt16ubInt24ubInt32ub	FlagsEnum)Optional)CardProfileAddonc                       e Zd Zd Zd ZdS )FuncNTypeAdapterc                     t          t          |                    }t          |d         d          }|d d         t          |dz            t          |dz            dS )N         functional_numberpresentation_of_only_this_fnpermanent_fn)swap_nibblesb2hintbool)selfobjcontextpathbcd
last_digits         9/home/jenkins/workspace/simtester-sanitize/pySim/gsm_r.py_decodezFuncNTypeAdapter._decode*   s`    3s88$$R"%%
%("X04Z!^0D0D $Z!^ 4 46 6 	6    c                     dS )NFIXME r   r   r   r    s       r#   _encodezFuncNTypeAdapter._encode1   s    wr%   N)__name__
__module____qualname__r$   r*   r(   r%   r#   r   r   )   s2        6 6 6    r%   r   c                   :     e Zd ZdZdddddddfgZ fdZ xZS )	EF_FNzSection 7.240315801000010ff0104138510000001fTr      )functional_number_and_typelist_numberc                     t                                          dd ddd           t          dt          t	          d                    z  dt
          z            | _        d S )	N6ff1zEF.FNzFunctional numbers	   r8   fidsfidnamedescrec_lenr3   r   r4   )super__init__r   r   Bytesr   
_constructr   	__class__s    r#   r@   zEF_FN.__init__<   sg    V$W2F 	 	D 	D 	D !=>NuUVxx>X>X!X!.v!57 7r%   )r+   r,   r-   __doc___test_decoder@   __classcell__rD   s   @r#   r/   r/   5   sq        
AR04d+M +M]^a a	cL
7 7 7 7 7 7 7 7 7r%   r/   c                       e Zd ZdZd Zd ZdS )PlConfAdapterzSection 7.4.3c                     t          |          dz  }|dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS d S )	N   r   Noner2   r            r   r   r   r   r    nums        r#   r$   zPlConfAdapter._decodeF   sl    #hhn!886!881!881!881!881!881 8r%   c                     |dk    rdS t          |          }|dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS d S )NrM   r   r   r2   rO   rN   rP   rQ   r)   s       r#   r*   zPlConfAdapter._encodeU   sh    &==1#hh!881!881!881!881!881 8r%   Nr+   r,   r-   rE   r$   r*   r(   r%   r#   rJ   rJ   C   s8              r%   rJ   c                       e Zd ZdZd Zd ZdS )PlCallAdapterzSection 7.4.12c                     t          |          dz  }|dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS |d	k    rd
S |dk    rdS d S )NrL   r   rM   r2   r   rN   rO   rP      BArQ   rR   s        r#   r$   zPlCallAdapter._decodeh   s    #hhn!886!881!881!881!881!881!883!883 8r%   c                     |dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rdS |dk    rd	S |d
k    rdS d S )NrM   r   r   r2   rO   rN   rP   rZ   rY   r[   rL   r(   r)   s       r#   r*   zPlCallAdapter._encode{   sy    &==1!881!881!881!881!881#::1#::1 :r%   NrU   r(   r%   r#   rW   rW   e   s8          &    r%   rW                  )decision
predefinednum_dial_digitsicemptyc                   @     e Zd ZdZdddddddddd	d
	fgZ fdZ xZS )EF_CallconfCzSection 7.30026121ffffffffffff1e000a040a010253600795792426f0rO   1612ffffffffffff   
   r2   rN   350670599742620f)	pl_confconf_nrmax_rand	n_ack_maxpl_ackn_nested_maxtrain_emergency_gidshunting_emergency_gidimeic                    t                                          dd ddd           t          dt          t                    z  dt          t          d                    z  d	t          z  d
t          z  dt          t                    z  dt          z  dt          z  dt          z  dt          t          d                    z  	  	        | _	        d S )N6ff2zEF.CallconfC)   ry   z3Call Configuration of emergency calls Configuration)r:   r;   r<   sizer=   rn   ro   r   rp   rq   rr   rs   rt   ru   rv   )
r?   r@   r   rJ   r   
BcdAdapterrA   r   rW   rB   rC   s    r#   r@   zEF_CallconfC.__init__   s    V$^(S 	 	U 	U 	U =+@+@!@!*:eAhh+?+?!?!+F!2!,W!4!)-*?*?!?!/!6!6v!=!9&!@!'
588(<(<!<> >r%   r+   r,   r-   rE   _test_de_encoder@   rG   rH   s   @r#   rh   rh      so        
<%7RVXAab%( (	*O> > > > > > > > >r%   rh   c                   "     e Zd ZdZ fdZ xZS )EF_CallconfIzSection 7.5c                 v   t                                          dd ddd           t          dt          z  dt          z  dt          t                    z  d	t          t          d
dd          z  dt          t          d                    z  dt          t          d                    z            | _
        d S )N6ff3zEF.CallconfI)   r   z1Call Configuration of emergency calls Information)r:   r;   r<   r>   r=   t_dur	t_relcalcpl_callcauser2   rN   rP   )powered_offradio_link_erroruser_commandgcrr   fnrr   )r?   r@   r   r	   r
   rW   r   r   r{   rA   rB   rC   s    r#   r@   zEF_CallconfI.__init__   s    V$^XQ 	 	S 	S 	S !,W!4!*=+@+@!@!(!*6q<=A"O "O "O"O "'z%((';';!;!&z%((';';!;= =r%   )r+   r,   r-   rE   r@   rG   rH   s   @r#   r   r      s>        
= 
= 
= 
= 
= 
= 
= 
= 
=r%   r   c                   D     e Zd ZdZdd ed          dfgZ fdZ xZS )EF_ShuntingzSection 7.603f8ffffff000000rO   f8ffffff000000)
common_gidshunting_gidc                     t                                          dd ddd           t          dt          z  dt	          d          z            | _        d S )	N6ff4zEF.ShuntingShuntingr   r   r:   r;   r<   r=   rz   r   r   rL   )r?   r@   r   r   rA   rB   rC   s    r#   r@   zEF_Shunting.__init__   s\    V$+*6 	 	K 	K 	K f!4!/a!8: :r%   r+   r,   r-   rE   h2br}   r@   rG   rH   s   @r#   r   r      s`        
aEUAVAVXXZO: : : : : : : : :r%   r   c            	            e Zd ZdZdddddddddd ed           ed	           ed
          dfdddddddddd ed           ed	           ed          dfgZ fdZ xZS )EF_GsmrPLMNzSection 7.722f860f86f8d6f8e01z228-06Tvbsvgcsemlppfneirener   )	supported
preference6f8d6f8e01)plmnclass_of_networkic_incoming_ref_tbloutgoing_ref_tblic_table_ref22f810416f8d6f8e02z228-01Fr2   02c                    t                                          dd ddd           t          dt          t	          d                    z  dt          d	t          t          d
          ddddd          z  dt          d          z            z  dt	          d          z  dt	          d          z  dt	          d          z            | _        d S )N6ff5zEF.GsmrPLMNzGSM-R network selectionr7   r9   r   rO   r   r   rP   r2   rN   r   r   r   r   r   r   r   r   )	r?   r@   r   PlmnAdapterrA   	BitStructr   BitsIntegerrB   rC   s    r#   r@   zEF_GsmrPLMN.__init__   s    V$]7 	 	I 	I 	I E!HH(=(=!=!3Ik)T_`aTbTbhipqyz  @A  JL  KM  KM  KM  ?M>J;WX>>>Y5[ 5[ "[!6uQxx!?!3E!HH!<!/a!8: :r%   r   rH   s   @r#   r   r      s       
(:>W[*.$2A 2APQIT IT :=VZ]Z]^dZeZe25#d))	!> !> 	@
 (:?Y^*.%2B 2BQRIU IU :=VZ]Z]^dZeZe25#d))	!> !> 	@O: : : : : : : : :r%   r   c                   j     e Zd ZdZdd ed          dddfdd	 ed
          d
ddfgZ fdZ xZS )EF_ICzSection 7.8f06f8e40f10001rb   r   041fr2   )next_table_typeid_of_next_tableic_decision_valuenetwork_string_table_indexffffffffffffffrf   ffffi  c           
          t                                          dd ddd           t          dt          z  dt	          d          z  d	t          t	          d                    z  d
t          z            | _        d S )Nr   zEF.ICzInternational Code)rL   rL   r9   r   r   rN   r   r   )r?   r@   r   NextTableTyperA   r{   r   rB   rC   s    r#   r@   zEF_IC.__init__   s}    V$W2F 	 	D 	D 	D !2=!@!3E!HH!<!4Za5I5I!I!=g!EG Gr%   r   rH   s   @r#   r   r      s        
QTQTU[Q\Q\39YZ] ] 	_
ccRXkk39Y^a a 	cOG G G G G G G G Gr%   r   c                   *     e Zd ZdZg dZ fdZ xZS )EF_NWzSection 7.9))47534d2d52204348zGSM-R CH)537769737347534dSwissGSM)47534d2d52204442zGSM-R DB)47534d2d52524649zGSM-RRFIc                 |    t                                          dd ddd           t          d          | _        d S )N6f80zEF.NWzNetwork Namer   r9   r   )r?   r@   	GsmStringrB   rC   s    r#   r@   zEF_NW.__init__   s@    V$W,f 	 	> 	> 	>#A,,r%   r|   rH   s   @r#   r   r      sO          O' ' ' ' ' ' ' ' 'r%   r   c                        e Zd ZdZdd ed          dddfdd	 ed
          dddfdd ed          dddfgZd fd	Z xZS )EF_SwitchingzSection 8.4f26f87f0ff00rd   6f870fffr   )r   r   decision_valuestring_table_indexf06f8ff1ff01rb   6f8f1fffr2   f16f89f5ff05rc   6f895fffrP   1234	SwitchingNc           
          t                                          |d ||d           t          dt          z  dt	          d          z  dt          t	          d                    z  dt          z            | _        d S )N)rY   rY   r9   r   r   rN   r   r   )r?   r@   r   r   rA   r{   r   rB   r   r:   r<   r=   rD   s       r#   r@   zEF_Switching.__init__  sx    St"v 	 	? 	? 	? !2=!@!3E!HH!<!1*U1XX2F2F!F!5f!<> >r%   )r   r   Nr   rH   s   @r#   r   r      s        
/@VYVYZ`VaVa.4AP P 	R
zssSY{{.4AP P 	R
|QTQTU[Q\Q\.4AP P 	RO> > > > > > > > > >r%   r   c                        e Zd ZdZddd ed          dfddd	d
dfgZ edez  d ed          z            Z	 ed e
 ed                    z  dez            Zd fd	ZdededefdZdededefdZ xZS )EF_PredefinedzSection 8.5f26f85r2   rd   6f85)r   r   f0ffc8rN   r      )predefined_value1string_table_index1r   r   r   r   r   
PredefinedNc                 T    t                                          |d ||d           d S )N)rO   rO   r9   )r?   r@   r   s       r#   r@   zEF_Predefined.__init__  s9    St"v 	 	? 	? 	? 	? 	?r%   raw_bin_data	record_nrreturnc                 b    |dk    rt          | j        |          S t          | j        |          S Nr2   )parse_constructconstruct_firstconstruct_others)r   r   r   s      r#   _decode_record_binz EF_Predefined._decode_record_bin  s1    >>"4#7FFF"4#8,GGGr%   abstract_datac                     d }|dk    r| j                             |          }n| j                            |          }t          |          S r   )r   buildr   filter_dict)r   r   r   kwargsrs        r#   _encode_record_binz EF_Predefined._encode_record_bin%  sJ    >>$**=99AA%++M::A1~~r%   )r   r   N)r+   r,   r-   rE   r   r}   r   r   rA   r   r{   r   r   r@   bytesr   dictr   	bytearrayr   rG   rH   s   @r#   r   r     s5       
A,=SVSVW]S^S^``b
AfSRRTO
 f.}</a8: :Ov1**UU1XX2F2FF3F:< <? ? ? ? ? ?H H3 H4 H H H H 3 U^        r%   r   c                   h     e Zd ZdZdd ed          ddfdd ed	          d
dfgZd fd	Z xZS )EF_DialledValszSection 8.6ffffff22rf   r   22)r   r   dialed_digitsf16f8885rc   6f8858r   DialledValsNc           
          t                                          |d ||d           t          dt          z  dt	          d          z  dt          t	          d                    z            | _        d S )N)r   r   r   r   r   rN   r   r2   )r?   r@   r   r   rA   r{   rB   r   s       r#   r@   zEF_DialledVals.__init__3  si    St$TOOO !2=!@!3E!HH!<!0E!HH1E1E!EG Gr%   )r   r   Nr   rH   s   @r#   r   r   -  s        
7Ffjlln
<SSQW[[koqqrOG G G G G G G G G Gr%   r   c                         e Zd Zd fd	Z xZS )	DF_EIRENE7fe0	DF.EIRENEGSM-R EIRENEc                 T   t                                          |||           t                      t                      t	                      t                      t                      t                      t                      t          ddd          t          ddd          t          dd	d
          t          ddd          t          ddd          t          ddd          t          ddd          t          ddd          t          ddd          t          ddd          t          d d!d"          t          d#d$d%          t          d&d'd(          t          d)d*d+          t          d,d-d.          t          d/d0d1          g}|                     |           d S )2N)r:   r<   r=   r   zEF.CTz	Call Typer   zEF.SCz
Short Coder   zEF.FCzFunction Coder   z
EF.ServicezVGCS/VBS Service Code6f8azEF.CallzFirst digit of the group ID6f8bz
EF.FctTeamz,Call Type 6 Team Type + Team member function6f92zEF.Controllerz$Call Type 7 Controller function code6f8cz
EF.GatewayzAccess to external networks6f81zEF.5to8digitsz'Call Type 2 User Identity Number length6f82z
EF.2digitsz2 digits input6f83z
EF.8digitsz8 digits input6f84z
EF.9digitsz9 digits inputr   zEF.SSSSSzGroup call area input6f86zEF.LLLLLzLocation number Call Type 66f91zEF.LocationzLocation number Call Type 7r   zEF.FreeNumberzFree Number Call Type 0 and 8)r?   r@   r/   rh   r   r   r   r   r   r   r   r   	add_files)r   r:   r<   r=   filesrD   s        r#   r@   zDF_EIRENE.__init__;  s   St$777 GGNNNNMMMMGGGG V'DDDV'EEEf7IIIf<68 8 8f9<> > >f<MO O Of?EG G Gf<<> > >vO IK K KvL 02 2 2vL 02 2 2vL 02 2 2vJ 79 9 9vJ =? ? ?vM =? ? ?vO ?A A AM(
R 	ur%   )r  r  r  )r+   r,   r-   r@   rG   rH   s   @r#   r  r  :  s=        + + + + + + + + + +r%   r  c                   2     e Zd ZdZ fdZdddefdZ xZS )	AddonGSMRzQAn Addon that can be found on either classic GSM SIM or on UICC to support GSM-R.c                 n    t                      g}t                                          dd|           d S )NzGSM-RzRailway GSM)r=   files_in_mf)r  r?   r@   )r   r  rD   s     r#   r@   zAddonGSMR.__init__k  s8    KK
 	}%HHHHHr%   cardCardBaser   c                 L    |                     | j        d         j                  S )Nr   )file_existsr  r:   )r   r  s     r#   probezAddonGSMR.probeq  s!     0 3 7888r%   )r+   r,   r-   rE   r@   r   r  rG   rH   s   @r#   r  r  i  se        [[I I I I I9* 9 9 9 9 9 9 9 9 9r%   r  N)(rE   pySim.utilsstructr   r   	constructr   r   r   r	   r
   r   r   	COptionalosmocom.constructpySim.profiler   pySim.filesystemAdapterr   
LinFixedEFr/   rJ   rW   EnumByter   TransparentEFrh   r   r   r   r   r   r   r   r   CardDFr  r  r(   r%   r#   <module>r)     s]   4             J J J J J J J J J J J J J J J J + + + + + +     * * * * * *    	 	 	 	 	w 	 	 	7 7 7 7 7J 7 7 7    G   D& & & & &G & & &R TDT%)d$@ @ @> > > > >= > > >,= = = = =: = = = 	: 	: 	: 	: 	:- 	: 	: 	:: : : : :* : : :2G G G G GJ G G G"' ' ' ' 'J ' ' '> > > > >: > > >&    J   <
G 
G 
G 
G 
G] 
G 
G 
G, , , , , , , ,^	9 	9 	9 	9 	9  	9 	9 	9 	9 	9r%   