
    j                         d Z ddlZddlZddlZddlmZ  G d d          Z G d de          Z G d d	e          ZdS )
z pySim: card handler utilities.  A 'card handler' is some method
by which cards can be inserted/removed into the card reader.  For
normal smart card readers, this has to be done manually.  However,
there are also automatic card feeders.
    N)LinkBasec                   R    e Zd ZdZdefdZddefdZd Zd Z	ddefd	Z
d
 Zd ZdS )CardHandlerBasezHAbstract base class representing a mechanism for card insertion/removal.slc                     || _         d S N)r   )selfr   s     H/home/jenkins/jenkins/workspace/simtester-sanitize/pySim/card_handler.py__init__zCardHandlerBase.__init__$   s        Ffirstc                 R    t          dd           |                     |           dS )a  Method called when pySim needs a new card to be inserted.

        Args:
                first : set to true when the get method is called the
                        first time. This is required to prevent blocking
                        when a card is already inserted into the reader.
                        The reader API would not recognize that card as
                        "new card" until it would be removed and re-inserted
                        again.
        zReady for Programming:  endN)print_getr	   r   s     r
   getzCardHandlerBase.get'   s0     	'R0000		%r   c                 P    t          dd           |                                  dS )zLMethod called when pySim failed to program a card. Move card to 'bad' batch.zProgramming failed: r   r   N)r   _errorr	   s    r
   errorzCardHandlerBase.error5   s'    $"----r   c                 P    t          dd           |                                  dS )zMMethod called when pySim failed to program a card. Move card to 'good' batch.zProgramming successful: r   r   N)r   _doner   s    r
   donezCardHandlerBase.done:   s'    (b1111

r   c                     d S r    r   s     r
   r   zCardHandlerBase._get?       r   c                     d S r   r   r   s    r
   r   zCardHandlerBase._errorB   r   r   c                     d S r   r   r   s    r
   r   zCardHandlerBase._doneE   r   r   NF)__name__
__module____qualname____doc__r   r   boolr   r   r   r   r   r   r   r   r
   r   r   !   s        RR8           
  
 $          r   r   c                   ,    e Zd ZdZddefdZd Zd ZdS )	CardHandlerzLManual card handler: User is prompted to insert/remove card from the reader.Fr   c                 \    t          d           | j                            |            d S )Nz%Insert card now (or CTRL-C to cancel))newcardonly)r   r   wait_for_cardr   s     r
   r   zCardHandler._getL   s2    5666e)44444r   c                 B    t          d           t          d           d S NzRemove card from readerr   r   r   s    r
   r   zCardHandler._errorP        '(((b					r   c                 B    t          d           t          d           d S r.   r/   r   s    r
   r   zCardHandler._doneT   r0   r   Nr"   )r#   r$   r%   r&   r'   r   r   r   r   r   r
   r)   r)   I   sX        VV5 5$ 5 5 5 5      r   r)   c                   V     e Zd ZdZdZdedef fdZd Zd Z	dd	e
fd
Zd Zd Z xZS )CardHandlerAutoz>Automatic card handler: A machine is used to handle the cards.Tr   config_filec                 b   t                                          |           t          dt          |          z              t	          |          5 }t          j        |t
          j                  | _        d d d            n# 1 swxY w Y   | j        	                    d          du | _
        d S )NzCard handler Config-file: )LoaderverboseT)superr   r   stropenyamlload
FullLoadercmdsr   r7   )r	   r   r4   cfg	__class__s       r
   r   zCardHandlerAuto.__init__^   s    *S-=-==>>>+ 	?#	#do>>>DI	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?y}}Y//47s   &BB
Bc                    t          d           t          d           t          d           |d                                         }t          |          dk    rt          d           t          |           |d                                         }t          |          dk    rt          d           t          |           t          d           t          d           d S )Nr   zCard handler output:z,---------------------8<---------------------r   zstdout:   zstderr:)r   striplen)r	   outstdoutstderrs       r
   __print_outoutzCardHandlerAuto.__print_outoute   s    b			$%%%<===Qv;;??)&MMMQv;;??)&MMM<===b					r   c                    t          dt          |          z              t          j        |gt          j        t          j        d          }|                                }|j        }|dk    s| j        r|                     |           |dk    rGt          d           t          dt          |          z   dz              t          j
        |           d S d S )NzCard handler Commandline: T)rF   rG   shellr   r   z!Error: Card handler failure! (rc=))r   r9   
subprocessPopenPIPEcommunicate
returncoder7   _CardHandlerAuto__print_outoutsysexit)r	   commandprocrE   rcs        r
   
__exec_cmdzCardHandlerAuto.__exec_cmdt   s    *S\\9:::IjojoTS S S  _77dl7$$$77"III5B?#EFFFHRLLLLL 7r   Fr   c                     t          d           |                     | j        d                    | j        r| j                                         d S d S )Nz(Transporting card into the reader-bay...r   )r   _CardHandlerAuto__exec_cmdr>   r   connectr   s     r
   r   zCardHandlerAuto._get   sV    8999	%()))7 	GOO	 	r   c                     t          d           |                     | j        d                    t          d           d S )Nz%Transporting card to the error-bin...r   r   r   rY   r>   r   s    r
   r   zCardHandlerAuto._error   s9    5666	'*+++b					r   c                     t          d           |                     | j        d                    t          d           d S )Nz+Transporting card into the collector bin...r   r   r\   r   s    r
   r   zCardHandlerAuto._done   s9    ;<<<	&)***b					r   r"   )r#   r$   r%   r&   r7   r   r9   r   rQ   rY   r'   r   r   r   __classcell__)r@   s   @r
   r3   r3   Y   s        HHG88 8# 8 8 8 8 8 8      $      
      r   r3   )	r&   rL   rR   r;   pySim.transportr   r   r)   r3   r   r   r
   <module>r`      s    0     



  $ $ $ $ $ $% % % % % % % %P    /    9 9 9 9 9o 9 9 9 9 9r   