(g:ddlZddlZddlZddlmZddlZddlmZmZm Z m Z ddl m Z m Z ddlmZddlmZGddeZdS) N)Optional)h2bb2hi2hHexstr) NoCardError ProtocolError) LinkBaseTpdu)ResTupleceZdZdZdZejddddfded effd Z d Z dd e e defdZ dZdefdZdZdZdZdZdZdZdZdedefdZdefdZedejfdZxZS) SerialSimLinkzM pySim: Transport Link for serial (RS232) based readers included with simcardSerial /dev/ttyUSB0%)devicebaudratez-rtsFrstdebugc ltjdi|tj|jst d|jztj|jtj tj tj ddd|j |_ ||_||_d|_dS)Nz&device file %s does not exist -- abortr)portparitybytesizestopbitstimeoutxonxoffrtsctsr)super__init__ospathexistsr ValueErrorserialr PARITY_EVEN EIGHTBITS STOPBITS_TWOr_sl_rst_pin_debug_atr)selfoptsrrkwargs __class__s D/home/jenkins/workspace/simtester-sanitize/pySim/transport/serial.pyr zSerialSimLink.__init__#s""6"""w~~dk** UE STT T=%%(]       c\t|dr|jdSdS)Nr))hasattrr)closer-s r1__del__zSerialSimLink.__del__6s6 4    HNN       r2Nr newcardonlycd} ||sdSd}n#t$rYnwxYw|tj|znd}d}|tj|kru tjd||sdSn.#t$rd}Yn t$r|rd}n |dz }|dkrYnwxYw|^tj|kut)NFTrg?r) reset_cardrtimesleepr )r-rr8existingmtpes r1 wait_for_cardzSerialSimLink.wait_for_card:s;  OO    HH    D '.&9TY[[7 " "t zty{{R//  3!!!F ! ! !     $HH!GBAvv zty{{R//&mms( ,,%*B B= B=<B=c.|dSN)r;r6s r1connectzSerialSimLink.connect_s r2returnc*t|jSrC)rr,r6s r1get_atrzSerialSimLink.get_atrbs49~~r2cdSrCrr6s r1 disconnectzSerialSimLink.disconnectes r2c~|}|dkrt|dkrt|S)Nr)_SerialSimLink__reset_cardrr )r-rvs r1 _reset_cardzSerialSimLink._reset_cardhs>     77--  66// ! r2c d|_|jj|jjd}ddd} ||jdd}||jd}n*#t $r}t d|jz|d}~wwxYw||tjd|j ||dz | }|sdSt|dkrdS| d t|zt|dkr'| }t|dk'|sdSt|}| d |zdt|g|_td D]}|d |zzr| }|jt|| d ttd|zt|fztd|dzD]b}| }|jt|| dt|zc | } | snM|jt| | dt| zddS)N)rtsdtrrr)+-zInvalid reset pin %sg?;zTS: 0x%x Direct conventionzT0: 0x%xz T%si = %xAzHistorical = %xTz Extra: %x)r,r)setRTSsetDTRr* Exceptionr$r<r= flushInput_rx_byteord _dbg_printrangeappendchr) r- rst_meth_map rst_val_maprst_methrst_valexcbt0ixs r1 __reset_cardzSerialSimLink.__reset_cardps 8?8?  A&&  N#DM!""$56H!$-"23GG N N N3dmCDD# M N  3 1 MMOO 1 q66T>>2 4s1vv=>>>!ffnn A!ffnn 2 VV  R(((3q66N q I IATQY IMMOO   Q((( s3s88A:A.G GHHHq"s(## 8 8A A I  SVV $ $ $ OO-A6 7 7 7 7 2 A  I  SVV $ $ $ OOK#a&&0 1 1 1  2qs(A A7A22A7c6|jrt|dSdSrC)r+print)r-ss r1r_zSerialSimLink._dbg_prints% ;  !HHHHH  r2c|j||j}||kr5tdt ||rdt |zndfzdS)Nz&Bad echo value. Expected %02x, got %s)z%02xz(nil))r)writereadr r^)r-rhrs r1_tx_bytezSerialSimLink._tx_bytess q HMMOO 66 HA19Q'L;!;<< < 6r2c|j||jt|}||kr0t dt |dt |ddS)zqThis is only safe if it's guaranteed the card won't send any data during the time of tx of the string !!!zBad echo value (Expected: z, got )N)r)rqrrlenr r)r-rorss r1 _tx_stringzSerialSimLink._tx_stringst q HMM#a&& ! ! 66-;>q66663q6666JLL L 6r2c4|jSrC)r)rrr6s r1r]zSerialSimLink._rx_bytesx}}r2tpducPt|}|d}||dd |}t||dkrnW|dkrP|}|}|}|r|sdt ||zfSt t |dkr||dd|t |z dzdz}td}t ||kr<|}|dkr|dkr4|sn||z }t ||k'E " G G G!!$zU[ei'F " H H H H Hr2)NF)__name__ __module__ __qualname____doc__rargparse Namespacestrboolr r7rrrArDrrGrIrMrKr_rtrxr]r rr staticmethodArgumentParserr __classcell__)r0s@r1r r sWW D0h0QUVVVci$]`&##Xc]#####J   555n<<<LLL2"f2"2"2"2"2"h-----HX-DHHH\HHHHHr2r )r<r!rtypingrr% osmocom.utilsrrrrpySim.exceptionsrr pySim.transportr pySim.utilsr r rr2r1rs&  ////////////77777777(((((( ^H^H^H^H^HL^H^H^H^H^Hr2