B
    wa'                 @   s   d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ dd Zdd ZG dd deZG d	d
 d
eZedkrdS )    N)Threadc                sD   t  }| }dd |D i f fdd	} |_t|| S )Nc             S   s    g | ]}|d  dkr|d  qS )   ) mode ).0entryr   r   /home/cbp/keithley/keithley.py
<listcomp>   s    zauto_method.<locals>.<listcomp>c                s^   t |tr| j| n,tdkr4|| jd < ntdt | j j	f | j d S )Nr   r   z&Command needs the following values: %s)

isinstancedictsettingsupdatelen
ValueErrorstrhandlewriteformat)selfkeys)commandfieldsr   r	   meth   s    
zauto_method.<locals>.meth)string	Formatterparse__doc__types
MethodType)r   r   fgr   r   )r   r   r	   auto_method   s    
r"   c                s    fdd}t || S )Nc                s
   | j   S )N)r   )r   )namer   r	   r       s    zauto_getter.<locals>.meth)r   r   )r   r#   r   r   )r#   r	   auto_getter   s    r$   c            	   @   sZ   e Zd Zddddddddd	ZdddZdd ZdddZdddZdddZdd Z	dS )Keithley6514z*RSTzSYST:ZCH ONzSYST:ZCH OFFzTRIG:COUN {nsamples:d}z:SENS:{mode}:NPLC {nplc:d}z{mode}:RANG {range}zFUNC '{mode}:DC'z:DISP:ENAB OFF)resetzch_onzch_offset_nsamplesset_rate	set_rangeset_funcdisp_off%  c             C   s   || _ tj||d }| _||_|  |d | | _|	  ddddddd| _
x&| jD ]}t| |t| | j|  q`W x$| j
D ]}t| d| t| | qW d S )	N)baudratez*IDN?CURRr   z2e-6OFF)r   nplcrangeZmedian_filterZdigital_filternsamplesZget_)devmultiZ
Multimeterr   EOLopenr   readidr&   r   commandssetattrr"   r$   )r   r6   r0   r8   kr#   r   r   r	   __init__/   s"    


zKeithley6514.__init__c             C   s   | j S )N)r   )r   r   r   r	   get_settingsD   s    zKeithley6514.get_settingsr   H׊>c             C   sf   |    td |   | ddi | d|i | d|i | ddi |   | 	  d S )Nr   r   r1   r4   r5   r3   )
r&   timesleepr'   r,   r+   r)   r*   r-   r(   )r   r5   Zkranger   r   r	   setupG   s    
zKeithley6514.setupc             C   s   g }g }g }| j }xt|D ]}td |d | }|d}t| t|d| j	d  krvtdt
jd d S |dd d }	|d	d
 |	D  |dd d }
|dd
 |
D  |dd d }|dd
 |D  qW |||f| _| jS )Ng?zREAD?   ,   r5   zIncorrect data length. stop.)filer   c             S   s   g | ]}t |qS r   )float)r   vr   r   r	   r
   c   s    z%Keithley6514.read.<locals>.<listcomp>r   c             S   s   g | ]}t |qS r   )rH   )r   rI   r   r   r	   r
   h   s       c             S   s   g | ]}t t|qS r   )intrH   )r   rI   r   r   r	   r
   m   s    )r   r4   rB   rC   r   r:   splitprintr   r   sysstderrextendresult)r   repeats	allvalues	allKtimes	allKflagsKidata_strparts
values_str
Ktimes_str
Kflags_strr   r   r	   r:   R   s*    


zKeithley6514.readc             C   s    t | j|fd| _| j  d S )N)targetargs)r   r:   pstart)r   rR   r   r   r	   non_blocking_readt   s    zKeithley6514.non_blocking_readc             C   s   | j   d | _ | jS )N)r_   joinrQ   )r   r   r   r	   rb   {   s    
zKeithley6514.joinN)r.   r/   )r   rA   )r   )r   )
__name__
__module____qualname__r<   r?   r@   rD   r:   ra   rb   r   r   r   r	   r%   $   s   


"
r%   c               @   s   e Zd ZdddZdS )Keithley6485r   c             C   s   g }g }g }| j }xt|D ]}td |d | }|d}t| t|d| j	d  krvtdt
jd d S |dd d }	|d	d
 |	D  |dd d }
|dd
 |
D  |dd d }|dd
 |D  qW |||f| _| jS )Ng?zREAD?rE   rF   r5   zIncorrect data length. stop.)rG   r   c             S   s   g | ]}t |d d qS )N)rH   )r   rI   r   r   r	   r
      s    z%Keithley6485.read.<locals>.<listcomp>r   c             S   s   g | ]}t |qS r   )rH   )r   rI   r   r   r	   r
      s    rJ   c             S   s   g | ]}t t|qS r   )rK   rH   )r   rI   r   r   r	   r
      s    )r   r4   rB   rC   r   r:   rL   rM   r   r   rN   rO   rP   rQ   )r   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r   r   r	   r:      s*    


zKeithley6485.readN)r   )rc   rd   re   r:   r   r   r   r	   rf      s   rf   __main__)osZos.pathrN   numpynpZkeithley6514r7   rB   r   r   	threadingr   r"   r$   objectr%   rf   rc   r   r   r   r	   <module>   s   ]'