B
    ȑ^                 @   sL   d dl mZ d dlmZ dd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )    )warn)	csafe_dicc             C   sZ   d|  krdd|   ks&n t dg }x*t| D ]}|d| ? d@ }|| q4W |S )Nr         z&Integer is outside the allowable range   )
ValueErrorrangeappend)numbytesintegerZbytekZcalcbyte r   '/var/underergo/pyrow/csafe/csafe_cmd.py__int2bytes   s    r   c             C   s6   t | }d}x$t|D ]}| | d| > |B }qW |S )Nr   r   )lenr   )	raw_bytesZ	num_bytesr   r   r   r   r   __bytes2int   s
    r   c             C   s"   d}x| D ]}|t |7 }q
W |S )N )chr)r   ZwordZletterr   r   r   __bytes2ascii   s    
r   c             C   sH  d}g }d}g }d}xh|t | k r~| | }tj| }g }t |d dkrx4|d D ](}	|d7 }| | }
t|	|
}|| qVW t |}|d| |d|d  t |dkrt |dk s|d |kr|dt | |d| || g }d}t |dkr8||d kr || n|}|d }|d7 }g }|d |d> B }|tttj| d d d 7 }|| |d7 }qW t |dkr|dt | |d| || d}d}xn|t |k r*||| A }d||   krdkrn n&||tj	 |d7 }|| d@ ||< |d7 }qW |
| |dtj |
tj t |dkrntd	t |  tt |d |}|d
kr|dd |dgd
t |  7 }n|dkr|dd |dgdt |  7 }nht |d dkr,|dd |dgdt |  7 }|dkrDtdt|  ntdtt |  g }|S )Nr         r   r         `   zMessage is too long:    ?      y   z:Response may be too long to recieve.  Max possible length z"Message too long.  Message length )r   r   Zcmdsr   extendinsertabssumrespByte_Stuffing_Flagr	   Standard_Frame_Start_FlagStop_Frame_Flagr   maxstr)Z	argumentsimessagewrapperwrappedZmaxresponseargZcmdpropcommandZvarbytesZintvaluevalueZcmdbytesZcmdidchecksumjZ
maxmessager   r   r   write'   s    

$
"

 



r2   c             C   st   d}d}xL|t | k rT| | tjkr>| |d }d|B | |< || | A }|d }q
W |dkrjtd g S | d= | S )Nr   r   r   zChecksum error)r   r   r$   popr   )r*   r)   r0   Z
stuffvaluer   r   r   __check_message   s    r5   c             C   s4  g }d}| d }|t jkr d}n|t jkr0d}ntd g S x:|t| k rv| | t jkr^d}P || |  |d7 }q>W |std g S t|}|d}d	|gi}d}d
}d}	x||t|k r.g }
|| }||kr|	|B }t j	| }|d }|| }|d }|d dkr^||d  d> }	|| d }|r^|	|| B }t j	| }|d }|| }|d }|d dkrzdg| |d< |d dkr| g|d< t
t|d dkr|t
t|d krtd xV|d D ]J}|||t
|  }|dkrt|nt|}|
| |t
| }qW |
||d < qW |S )NFr   r   r   zNo Start Flag found.TzNo Stop Flag found.r   CSAFE_GETSTATUS_CMDr3   ZCSAFE_SETUSERCFG1_CMDr   CSAFE_GETCAPS_CMDCSAFE_GETID_CMDz*Warning: bytecount is an unexpected length)r   ZExtended_Frame_Start_Flagr%   r   r   r&   r	   r5   r4   r#   r!   r"   r   r   )transmissionr*   Z	stopfoundZ	startflagr1   statusresponser   Zwrapendr+   resultZmsgcmdZmsgpropZ	bytecountr
   r   r/   r   r   r   read   sn    





,
r=   N)
warningsr   pyrow.csafer   r   r   r   r2   r5   r=   r   r   r   r   <module>   s   	s