Files
controller-wisetopdataserver/python/biopro/devlib/__pycache__/instruction.cpython-37.opt-2.pyc
T

187 lines
29 KiB
Plaintext
Raw Normal View History

2021-12-20 14:52:55 +08:00
B
2021-12-22 14:29:56 +08:00
ñ0Àa˜–ã @sddlZddlmZddlmZddlmZmZddlm Z m
2021-12-20 14:52:55 +08:00
Z
ddl m Z ddl
mZmZdd lmZmZmZmZdd
2021-12-22 14:29:56 +08:00
lTGd d d eƒZGd
2021-12-20 14:52:55 +08:00
ddeƒZGdddeƒZGdddeƒZGdddeƒZGdddeƒZGdddeejdZ Gddde ejdZ!Gddde!ƒZ"Gddde!ƒZ#Gd d!„d!e e$e%e e&e'fƒZ(Gd"d#„d#ƒZ)Gd$d%„d%eƒZ*Gd&d'„d'e*ƒZ+Gd(d)„d)e+ƒZ,Gd*d+„d+e*ƒZ-Gd,d-„d-eƒZ.Gd.d/„d/eƒZ/Gd0d1„d1e!ƒZ0Gd2d3„d3e!ƒZ1Gd4d5„d5e2ƒZ3Gd6d7„d7e4dƒZ5Gd8d9„d9e2ƒZ6dS):éN)Úrandint)Úsleep)ÚSequenceÚTuple)Ú
append_bufferÚ parse_buffer)Úhex_line)Ú part_prefixÚ part_suffixé)ÚDeviceÚDeviceInstructionÚDeviceCommonInstructionÚ MasterDevice)Ú*cs8eZdZdZedœfdd ZeedœddƒZZS)ÚInstructionNotFound)Ú _instruction)Ú instructioncstƒ d|d¡||_dS)Nz instruction z
not found)ÚsuperÚ__init__r)Úselfr)Ú __class__©ú>/home/pi/wisetopdataserver/python/biopro/devlib/instruction.pyrszInstructionNotFound.__init__)ÚreturncCs|jS)N)r)rrrrrszInstructionNotFound.instruction) Ú__name__Ú
__module__Ú __qualname__Ú __slots__ÚstrrÚpropertyrÚ
__classcell__rr)rrr
srcsZeZdZdZd eeedœfdd
ZeeedœddƒZeeedœd d
ƒZ ‡Z
S) ÚDeviceInstructionError)rÚ_messageN)rÚmessagecsf|dkrd}nt|ƒdkr d}n d|d}|dk rB|d|}n|d}tƒ |¡||_||_dS)Nzinstruction unknownrrz
instruction "ú"z : z : fail)Úlenrrrr#)rrr$Úm)rrrr!s   zDeviceInstructionError.__init__)rcCs|jS)N)r)rrrrr5sz"DeviceInstructionError.instructioncCs|jS)N)r#)rrrrr$9szDeviceInstructionError.message)N) rrrrÚOptionalrrr rr$r!rr)rrr"s r"cs.eZdZdZdeeedœfdd
ZZS)ÚSendInstructionTimeoutErrorrN)rr$cstƒ ||¡dS)N)rr)rrr$)rrrrCsz$SendInstructionTimeoutError.__init__)N)rrrrr(rrr!rr)rrr)>sr)cs*eZdZdZeedœfdd ZZS)Ú SendInstructionNotConnectedErrorr)rcstƒ |¡dS)N)rr)rr)rrrrLsz)SendInstructionNotConnectedError.__init__)rrrrr(rrr!rr)rrr*Gsr*cs*eZdZdZdeedœfdd
ZZS)ÚBadInstructionContentErrorrN)rr$cstƒ ||¡dS)N)rr)rrr$)rrrrUsz#BadInstructionContentError.__init__)N)rrrrrrr!rr)rrr+Psr+cs.eZdZdZeeeedœfdd ZZS)ÚUnknownInstructionErrorr)Úins_typeÚins_operrcs tƒ dd||t|ƒf¡dS)Nzheader[%d]op[%d]value[%s])rrr)rr-r.r)rrrr^sz UnknownInstructionError.__init__)rrrrÚintrrr!rr)rrr,Ysr,c@s^eZdZdZdeedœddZeedœddƒZe j
e e d d
œd d ƒZ
d
dZddZdS)Ú Instruction)Ú_nameÚexportF)Únamer2cCs||_||_dS)N)r1r2)rr3r2rrrrszInstruction.__init__)rcCs|jS)N)r1)rrrrr3ŠszInstruction.nameÚSingleInstruction)ÚcontextrcCsdS)Nr)rr5rrrÚeval_instructionszInstruction.eval_instructioncCs|jS)N)r1)rrrrÚ__str__“szInstruction.__str__cCs|jS)N)r1)rrrrÚ__repr__szInstruction.__repr__N)F)rrrrrÚboolrr r3ÚabcÚabstractmethodÚScopeÚIterabler6r7r8rrrrr0bs r0)Ú metaclasscseZdZdZdeeeedœfdd
ZeedœddƒZ eedœd d
ƒZ
ee j e
edœd d ƒƒZeedd
œddZZS)r4)Ú _ins_typeÚ _ins_operF)r3r-r.r2cs(t |¡tƒ ||¡||_||_dS)N)r
Úvalid_ins_typerrr?r@)rr3r-r.r2)rrrrs
zSingleInstruction.__init__)rcCs|jS)N)r?)rrrrÚinstruction_type±sz"SingleInstruction.instruction_typecCs|jS)N)r@)rrrrÚinstruction_operµsz"SingleInstruction.instruction_opercCsdS)Nr)rrrrÚinstruction_content¹sz%SingleInstruction.instruction_content)r5rccs
|VdS)Nr)rr5rrrr6¾sz"SingleInstruction.eval_instruction)F)rrrrrr/r9rr rBrCr:r;ÚListrDr<r=r6r!rr)rrr4šsr4csJeZdZdZedœfdd ZeeedœddƒZ e
dœdd „Z Z S)
ÚBuiltinInstruction)r?)r3c
sytt|ƒ}Wn,tk
r:}zt|ƒ|Wdd}~XYnX| d¡rNtj}n,| d¡r`tj}n| d¡rrtj}nt|ƒtƒ  |||d¡dS)NZRIS_ÚVIS_ZCIS_T)
Úgetattrr
ÚAttributeErrorrÚ
startswithÚTYP_RISÚTYP_VISÚTYP_CISrr)rr3r.Úer-)rrrrÇs


zBuiltinInstruction.__init__)rcCsgS)Nr)rrrrrDÛsz&BuiltinInstruction.instruction_contentcCs|jS)N)r1)rrrrÚas_jsonßszBuiltinInstruction.as_json)
rrrrrrr rEr/rDÚJSONrOr!rr)rrrFÂs
rFc eZdZdZdZdZdZdZdZdZ dZ
d Z eeeeeee e
e f Z d
Z
ed œfd d
ZeeedœddƒZeedœddƒZedœddZeeeedœddZeedœddƒZeeeeedœddƒZed"eeeedœd d!„ƒZ ‡Z!S)#ÚInternalInstructionZ_sleepZ_notifyÚ _data_formatZ_data_format_caliZ_syncÚ_logZ_setZ_cdrZ_disable_cache)Ú_exprÚ_para)Úexprcsl| d¡st|ƒ| d¡}|dks.| d¡s6t|ƒtƒ |d|tjd¡||_t ||dƒ|_
dS)(rú)) rJrÚfindÚendswithrrr
ÚTYP_IISrTÚevalrU)rrVÚi)rrrr-s

zInternalInstruction.__init__)rcCsgS)Nr)rrrrrD<sz'InternalInstruction.instruction_contentcCs|jS)N)rU)rrrrÚinstruction_parameter@sz)InternalInstruction.instruction_parametercCs|jS)N)rT)rrrrrODszInternalInstruction.as_json)ÚmasterÚdevicer5rcCsX| ||j|j¡}|sT|j|jkr2| |j¡dS|j|jkrT| ||||j¡dS|S)NT)Úhandle_internal_instructionr3rUÚPREDEFINED_SLEEPrÚPREDEFINED_CDRÚcdr)rr`rar5ZconsumerrrrbGs   z/InternalInstruction.handle_internal_instruction)ÚmscCst|dƒdS)Niè)r)ÚclsrfrrrrUszInternalInstruction.sleep)r`rar5Ú data_formatcCs.| d|j|j|¡| ¡}| |||¡dS)Nra)Ú log_verboseÚ device_idrdÚread_command_return_dataÚ cdr_parse)rgr`rar5rhÚdatarrrreYszInternalInstruction.cdrN)r5rhrmcCsFt |¡}|dkr(Gdddƒ}|ƒ}ndd|Dƒ}| ||¡dS)Nc@seZdZddZdS)z/InternalInstruction.cdr_parse.<locals>.ListLikecSsdS)Nrr)rÚitemrrrÚ __getitem__nsz;InternalInstruction.cdr_parse.<locals>.ListLike.__getitem__N)rrrrorrrrÚListLikemsrpcSsg|]}|qSrr)Ú.0Úvrrrú
<listcomp>tsz1InternalInstruction.cdr_parse.<locals>.<listcomp>)ÚInstructionContentÚparseÚparse_instruction)rgr5rhrmÚparserrprrrrlhs 
zInternalInstruction.cdr_parse)N)"rrrrcÚPREDEFINED_NOTIFYÚPREDEFINED_DATA_FORMATÚPREDEFINED_DATA_FORMAT_CALIÚPREDEFINED_SYNCÚPREDEFINED_LOGÚPREDEFINED_SETrdÚPREDEFINED_DISABLE_CACHEZ
PREDEFINEDrrrr rEr/rDÚAnyr_rPrOrr r<r9rbÚ classmethodrrerlr!rr)rrrQãsF2
rQc@sPeZdZdZd
eeeeeefedœddZ e
eddœdd „Z d
d Z d S)ÚListInstructionrF)r3Úinsr2cCs"t |||¡t |t|ƒ¡dS)N)r0rÚImmutableListNodeÚlist)rr3rr2rrrrszListInstruction.__init__r4)r5rc cxÀ|D]¸}t|tƒr| |¡}|dkr*qnlt|tƒr| d¡r^d|kr^| d¡r^t|ƒVqntt|ƒrtt |ƒVqy ||}Wnt
k
r”YnXt|t ƒr²|  |¡EdHqt
t|ƒƒqWdS)NrWrXrY)Ú
isinstanceÚ
ExpressionÚvaluerrJr[rQÚhasattrr
rFÚKeyErrorr0r6r)rr5rrrrr6s&






 
z ListInstruction.eval_instructioncCs^g}xL|D]D}t|tƒr$| |¡q
t|tƒr>| | ¡¡q
tdt|ƒƒq
W|j|dœS)Nzunknown instruction : )r2Ú instructions)r…rÚappendÚComplexExpressionrOÚ RuntimeErrorr2)rrr^rrrrOs

 
zListInstruction.as_jsonN)F)
rrrrrr=ÚUnionr†r9rr<r6rOrrrrrys$"rc @eZdZdZdddddddddœZd!eeedœd d
Ze eed œd d
ƒZ
e e d œddƒZ e e d œddƒZ
e e d œddƒZe e d œddƒZe ed œddƒZe ed œddƒZddZe d¡ZeeedefdœddƒZd S)"ÚInstructionContentWidth)Ú_sizeÚ _bytes_typeÚ_signedÚ_little_endianééé
é)ÚXF)ÚsizeÚ
bytes_typecCs||_||_||_||_dS)N)rrrr“)rr Ú signed_valueÚ
little_endianrrrrsz InstructionContentWidth.__init__)rcCs|jS)N)r)rrrrr szInstructionContentWidth.sizecCs|jS)N)r“)rrrrsz%InstructionContentWidth.little_endiancCs|jS)N)r)rrrrÚsignedszInstructionContentWidth.signedcCs
|jdkS)BODX)r)rrrrÚ
bytes_unitsz"InstructionContentWidth.bytes_unitcCs
|jdkS)N)r)rrrrÚis_arraysz InstructionContentWidth.is_arraycCs|jdkr|jdS|jSdS)Nr¥r•)rr)rrrrÚwidth$s

zInstructionContentWidth.widthcCs |j|jS)N)ÚBASEr)rrrrÚ
value_base+sz"InstructionContentWidth.value_basecCs:d|jdk rt|jƒnd|j|jr&dnd|jr2dndfS)Nz%s%s%s%srú)rrrr“r)rrrrr7/s zInstructionContentWidth.__str__zQ(?P<SIZE>(\*|\d+))?(?P<TYPE>[XxDdOoBb])(?P<ENDIAN>[<>])?(?P<SIGN>\+)?(?P<EXPR>.*))rVrcCs|j |¡}|dkr td|ƒ| d¡}| d¡}| d¡}| d¡}| d¡}|dkr`d}n|dkrnd}nt|ƒ}t|||dk |d kd
|fS) Nz$illegal instruction content width : ÚSIZEZTYPEZENDIANZSIGNZEXPRr r))ÚPATTERNÚmatchrÚgroupr/r)rgrVr'ÚtrNÚsržrrrru7s  




zInstructionContentWidth.parseN)FF)rrrrr(r/rrr r r9r7ÚreÚcompiler°r€rrurrrrrÉs:.
rc@s†eZdZdZdeedœddZdeee e e dœdd „Z
deee e e e e e fd
œd d Z d
dZ
ddZeeddœddƒZdS)rt)Ú_commentN)ÚcommentcCs
||_dS)N)r¸)rrrrr^szInstructionContent.__init__r)r5ÚbufferÚshiftrcCs|S)Nr)rr5rrrÚbuild_instructionas z$InstructionContent.build_instruction)r5Úoffsetr»rcCs||fS)Nr)rr5rrrrvlsz$InstructionContent.parse_instructioncCst|ƒS)N)r)rrrrrOvszInstructionContent.as_jsoncCs|jdkrdSd|jSdS)#)r¸)rrrrr7ys
zInstructionContent.__str__)rVrc
s|}|dkrtƒS| d¡r.t|dddSd|krRtfdd| d¡DƒƒSi}t|dƒ\}}t|dƒ\}}|dk rât}t|ƒdkrœd|d <d|d
<qæt|d ƒ\}}|dkrÀtd |ƒnt|ƒdkrÐd}||d <||d
<nt }t
  |¡\} }|| |f|d
|iŽSdS)Nr¾r )ú;csg|]}t|ƒrˆ |¡qSr)r&ru)rqrr)rgrrrsŠsz,InstructionContent.parse.<locals>.<listcomp>ú?rÚif_trueÚif_falseú:z illegal condition instruction : r¹) rtrJÚCompactInstructionContentÚsplitr
ÚInstructionConditionContentr&r rÚInstructionDataContentrru)
rgrVZ origin_exprZins_argvr¹Z conditionr-r´Úfr¨r)rgrrus2
 
 
zInstructionContent.parse)N)r)rr)rrrrr(rrr<rEr/rrvrOr7r€rurrrrrtNs $
rtceZdZdZdeeeefeedœfdd
Z e
eee efdœddZ de
e eeed
œd d Z
de
e eeeeeefd
œddZddZZS))Ú_widthÚ_valueÚ_indexN)r‡csbtƒ |¡||_t|tƒrRd|krR| d¡rRt|dddƒ\}}||_||_n ||_d|_dS)]éÿÿÿÿ) rrr…rr[r
)rr‡Úindex)rrrr¾s zInstructionDataContent.__init__)r5rc C|j}t|tƒr|Syt||jjƒStk
r†||}|j}|dkrL|Sy t|ƒ}Wn tk
rxt||ƒ}YnX||SYnXdS)N)r…r/Ú
ValueErrorrË)rr5r‡ÚretrÏrrrr‡Ïs
 zInstructionDataContent.valuer)r5rcC|jjrtƒ| |¡dkr"d}n"| |¡dkr6d}nt| |¡ƒ}|jjrÀ|jjdkrd| |¡nXg}x*t|jjƒD]}| |d@¡|dL}qvW|jj r¨| 
|¡n| 
|ddd¡dSt |||jj ||jj dSdS) NÚtruer Úfalseréÿr•))
ÚNotImplementedErrorr‡r/r rÚranger£Úextendr)rr5r‡ÚtmprWrrrçs(    z(InstructionDataContent.build_instruction)r5rc
Csp|jjrtƒy| tj¡Wtk
r|jjrØ|dkrJ|d7}d}|jjdkrl||}|d7}nLxJt |jjƒD]:}|jj
rœ|||d|>O}n|d>||B}|d7}qzWt |j ƒdkrÐ|||j <|dfSt
||||jj|jj
d\}}}t |j ƒdkr|||j <||fSYnNX|jjrL|dkr<|d7}||jjdfS||jj7}||d|dfSdS)Nrr r•))r‡Ú
ConstantScopeÚEMPTYr‰r r&r)rr5r‡r^rrrrvs> 
 



 z(InstructionDataContent.parse_instructioncCstt|jtƒr t|jƒdd}n&|jdk r@d|jt|jƒf}n|j}|jdkr^d|j|fSd|j||jfSdS)Nr”z%s[%s]z%s%sz%s%s#%s)r…r/ÚbinrËrr¸)rr‡rrrr7=s 

zInstructionDataContent.__str__)N)r)rr)rrrrrr/rr(rr<rEr‡rrvr7r!rr)rr¬s $ $6rÇcsleZdZdZd eeedeefedeefeedœfdd
Z e
eee efdœddZ d d
Z
ZS) )Ú_trueÚ_falseN)r‡cs8|dk r|dkrtdƒtƒ |||¡||_||_dS)Nz lost if_true)rrr)rr‡)rrrr^s
z$InstructionConditionContent.__init__)r5rcCs||j}|dk }|jdkr2|jdkr2|r.dSdS|jdkrL|rD|S|j}n|rV|jn|j}t|tƒrj|Syt||jjƒStk
r||SXdS)Nr r)r…r/)rr5r‡ÚtestÚbranchrrrr‡ms
 

z!InstructionConditionContent.valuecCs~|jdkrd}n
d|j}|jdkr@|jdkr@d|j|j|fS|jdkr`d|j|j|j|fSd|j|j|j|j|fSdS)Nr®z%s%s?%sz
%s%s?:%s%sz %s%s?%s:%s%s)r¸)rÚcrrrr7s


z#InstructionConditionContent.__str__)NNN)rrrrrrr/r(rr<rEr‡r7r!rr)rrLs 4
csveZdZdZeedœfdd ZdeeeeedœddZ deeeeee
eefd œd
d Z e d œd
dZ
ZS))r)rcstƒ ¡||_dS)N)rrr)rr)rrrr¦s
z"CompactInstructionContent.__init__r)r5rcCs"x|jD]}| |||¡}qW|S)N)r)rr5rrrrªs z+CompactInstructionContent.build_instruction)r5rcCs<x2|jD](}| ||||¡\}}||7}||7}qW||fS)N)rrv)rr5rrrrrv°s
  z+CompactInstructionContent.parse_instruction)rcCsd tt|jƒ¡S)Nr¿)ÚjoinÚmaprr)rrrrr7ºsz!CompactInstructionContent.__str__)r)rr)rrrrrErtrr<r/rrvrr7r!rr)rrs
 $
c@sReZdZdZd eeeeeeeedœddZ e
e e
dœddZ d d
Z
dS) ÚSendInstructionForeachParameter)Ú
_parameterÚ _expressionÚ _variableÚ_defaultN)ÚvariableÚ parameterÚ
expressionÚdefaultcCsD|dkr|dks |dk r(|dk r(tdƒ||_||_||_||_dS)Nz9foreach parameter required either parameter or expression)r)rrrrrÑs  z(SendInstructionForeachParameter.__init__)r5rc
c|jdk rtt||jƒƒ}n|jdk r:t|j |¡ƒ}nxˆtdt|ƒt|jƒƒD]n}i}xVtt|jƒƒD]D}y|||||j|<Wqjtk
|j ||j|<YqjXqjW|j
f|ŽVqRWdS)Nr) r„Úsortedrår‡r&Ú
IndexErrorrçÚchild)rr5Úitr^ÚlocalÚjrrrÚ for_scopeßs

z)SendInstructionForeachParameter.for_scopecCs|j|j|jdœS)N)))rrrrrOôsz'SendInstructionForeachParameter.as_json)NNN)rrrrrErr(r†r/rr<r=rOrrrr¾s &
c@sBeZdZdZeeeefdœddZe e dœddZ
dd „Z d
S) ÚSendInstructionKeywordParameter))cCs
||_dS)N))rrrrr sz(SendInstructionKeywordParameter.__init__)r5rcCsL| ¡}x>|j ¡D]0\}}| |¡}t|tƒr8||}| ||¡qW|S)N)Úitemsr‡r…rÚ set_local)rr5ÚscopeÚkrrr‡rrrÚ set_scope s

z)SendInstructionKeywordParameter.set_scopecCsdd|j ¡DƒS)NcSsi|]\}}| ¡|qSr)rO)rqrrrrrú
<dictcomp>sz;SendInstructionKeywordParameter.as_json.<locals>.<dictcomp>))rrrrrOsz'SendInstructionKeywordParameter.as_jsonN) rrrrÚDictrr†r/rr<rOrrrrüs 
c