a
    ºMe¸/  ã                   @   s8   d dl Z ddlmZ dZdZe  e¡ZG dd„ dƒZdS )é    Né   )Ú	epdconfigéz   éú   c                   @   s¶   e Zd Zdd„ Zg d¢Zg d¢Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd+d&d'„Zd(d)„ Zd*S ),ÚEPDc                 C   s0   t j| _t j| _t j| _t j| _t	| _
t| _d S )N)r   ZRST_PINÚ	reset_pinZDC_PINÚdc_pinZBUSY_PINÚbusy_pinZCS_PINÚcs_pinÚ	EPD_WIDTHÚwidthÚ
EPD_HEIGHTÚheight©Úself© r   úO/home/pi/e-Paper/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd2in13_V3.pyÚ__init__)   s    zEPD.__init__)Ÿr   é@   r   r   r   r   r   r   r   r   r   r   é€   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   é   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   é"   r   r   r   r   r   r   r   r   r   é   éA   r   é2   é6   )Ÿr   éJ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   é   r   r   r   r   r   r   r   r   r   r   r   r   é   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   c                 C   sL   t  | jd¡ t  d¡ t  | jd¡ t  d¡ t  | jd¡ t  d¡ d S )Nr   r   r   r   )r   Údigital_writer   Údelay_msr   r   r   r   Úreseta   s    

z	EPD.resetc                 C   s:   t  | jd¡ t  | jd¡ t  |g¡ t  | jd¡ d S )Nr   r   ©r   r   r   r
   Zspi_writebyte)r   Zcommandr   r   r   Úsend_commandn   s    zEPD.send_commandc                 C   s:   t  | jd¡ t  | jd¡ t  |g¡ t  | jd¡ d S ©Nr   r   r"   ©r   Údatar   r   r   Ú	send_datay   s    zEPD.send_datac                 C   s8   t  | jd¡ t  | jd¡ t  |¡ t  | jd¡ d S r$   )r   r   r   r
   Zspi_writebyte2r%   r   r   r   Ú
send_data2€   s    
zEPD.send_data2c                 C   s4   t  d¡ t | j¡dkr&t d¡ q
t  d¡ d S )Nze-Paper busyr   é
   ze-Paper busy release)ÚloggerÚdebugr   Zdigital_readr	   r    r   r   r   r   ÚReadBusyŠ   s    
zEPD.ReadBusyc                 C   s*   |   d¡ |  d¡ |   d¡ |  ¡  d S )Nr   éÇ   é    ©r#   r'   r,   r   r   r   r   ÚTurnOnDisplay”   s    


zEPD.TurnOnDisplayc                 C   s*   |   d¡ |  d¡ |   d¡ |  ¡  d S )Nr   r   r.   r/   r   r   r   r   ÚTurnOnDisplayPartž   s    


zEPD.TurnOnDisplayPartc                 C   s4   |   d¡ tddƒD ]}|  || ¡ q|  ¡  d S )Nr   r   é™   )r#   Úranger'   r,   )r   ÚlutÚir   r   r   ÚLut©   s    
zEPD.Lutc                 C   sŠ   |   |¡ |  d¡ |  |d ¡ |  d¡ |  |d ¡ |  d¡ |  |d ¡ |  |d ¡ |  |d ¡ |  d	¡ |  |d
 ¡ d S )Né?   r2   é   éš   é   é›   éœ   é   é,   éž   )r6   r#   r'   )r   r4   r   r   r   ÚSetLut´   s    




z
EPD.SetLutc                 C   s|   |   d¡ |  |d? d@ ¡ |  |d? d@ ¡ |   d¡ |  |d@ ¡ |  |d? d@ ¡ |  |d@ ¡ |  |d? d@ ¡ d S )NéD   r8   éÿ   éE   é   ©r#   r'   )r   Zx_startZy_startZx_endZy_endr   r   r   Ú	SetWindowÉ   s    

zEPD.SetWindowc                 C   sF   |   d¡ |  |d@ ¡ |   d¡ |  |d@ ¡ |  |d? d@ ¡ d S )NéN   rB   éO   rD   rE   )r   ÚxÚyr   r   r   Ú	SetCursorÛ   s
    

zEPD.SetCursorc                 C   sô   t  ¡ dkrdS |  ¡  |  ¡  |  d¡ |  ¡  |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  dd| jd | jd ¡ |  	dd¡ |  d¡ |  d	¡ |  d
¡ |  d¡ |  d¡ |  d¡ |  d¡ |  ¡  |  
| j¡ dS )Nr   éÿÿÿÿé   r   éù   é   r8   é<   é   é!   r   é   )r   Zmodule_initr!   r,   r#   r'   rF   r   r   rK   r@   Úlut_full_updater   r   r   r   Úinitè   s0    













zEPD.initc                 C   s¦   |}|j \}}|| jkr.|| jkr.| d¡}nf|| jkrX|| jkrX|jddd d¡}n<t dt| jƒ d t| jƒ ¡ dgt| jd ƒ| j  S t	| 
d	¡ƒ}|S )
NÚ1éZ   T)Úexpandz Wrong image dimensions: must be rI   r   rD   Úraw)Úsizer   r   ÚconvertÚrotater*   ÚwarningÚstrÚintÚ	bytearrayÚtobytes)r   ÚimageZimgZimwidthZimheightZbufr   r   r   Ú	getbuffer  s    
"zEPD.getbufferc                 C   s~   | j d dkrt| j d ƒ}nt| j d ƒd }|  d¡ td| jƒD ]*}td|ƒD ]}|  ||||   ¡ qTqF|  ¡  d S ©NrD   r   r   é$   )r   r_   r#   r3   r   r'   r0   )r   rb   Ú	linewidthÚjr5   r   r   r   Údisplay&  s    
zEPD.displayc                 C   s"  t  | jd¡ t  d¡ t  | jd¡ |  | j¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d	¡ |  ¡  |  	dd| j
d | jd ¡ |  dd¡ |  d
¡ |  |¡ |  ¡  d S )Nr   r   é7   r   rP   r   r   éÀ   r.   re   )r   r   r   r    r@   Úlut_partial_updater#   r'   r,   rF   r   r   rK   r(   r1   ©r   rb   r   r   r   ÚdisplayPartial7  s4    


















zEPD.displayPartialc                 C   s4   |   d¡ |  |¡ |   d¡ |  |¡ |  ¡  d S )Nre   é&   )r#   r(   r0   rl   r   r   r   ÚdisplayPartBaseImage`  s
    



zEPD.displayPartBaseImagerB   c                 C   s`   | j d dkrt| j d ƒ}nt| j d ƒd }|  d¡ |  |gt| j| ƒ ¡ |  ¡  d S rd   )r   r_   r#   r(   r   r0   )r   Zcolorrf   r   r   r   ÚClearl  s    
z	EPD.Clearc                 C   s*   |   d¡ |  d¡ t d¡ t ¡  d S )Né   r   iÐ  )r#   r'   r   r    Úmodule_exitr   r   r   r   Úsleep{  s    


z	EPD.sleepN)rB   )Ú__name__Ú
__module__Ú__qualname__r   rk   rT   r!   r#   r'   r(   r,   r0   r1   r6   r@   rF   rK   rU   rc   rh   rm   ro   rp   rs   r   r   r   r   r   (   s*   


))
r   )	ÚloggingÚ r   r   r   Ú	getLoggerrt   r*   r   r   r   r   r   Ú<module>   s
   
