a
    Ni,                     @   s.   d dl Z d dlZd dlmZ G dd dZdS )    N)loggerc                   @   s>   e Zd ZdZdZed
eeedddZeeddd	Z	dS )I2CGuard   g?N)i2c_busmax_attemptsdelayc           
         sp  |d u rt j}|d u rt j}d }t|D ]}z| |i |W   S  ty }	 zR|	}td| d|d  d| d|	  t | t	||d   W Y d }	~	q(d }	~	0  t
y> }	 zzt|	  t fdddD r(|	}td| d	|d  d| d|	  t | t	||d   n W Y d }	~	q(d }	~	0 0 q(td| d
| d|  td| d S )Ni2c #u   : OSError (попытка    /z): c                 3   s   | ]}| v V  qd S )N ).0kwerr_msgr   &/var/aqua_controller/core/i2c_guard.py	<genexpr>-       z#I2CGuard.execute.<locals>.<genexpr>)	Zi2csmbusreadwritetimeoutZsensorZwakeZremoteZnaku   : Exception (попытка u4   : не удалось выполнить после u    попыток. Ошибка: u.   i2c операция не выполнена: )r   DEFAULT_MAX_ATTEMPTSDEFAULT_DELAYrangeOSErrorr   warningrecover_bustimesleep	ExceptionstrloweranyerrorRuntimeError)
funci2c_objr   r   r   argskwargsZ
last_errorattempter   r   r   execute   s.    &
&&
zI2CGuard.execute)bus_idc              
   C   s   zvt | F}tdD ],}z|dd W n   Y n0 td qW d    n1 sX0    Y  td|  d W n: ty } z"t	d|  d|  W Y d }~n
d }~0 0 d S )N	   r   gMbP?r   u1   : восстановление выполненоu0   : не удалось восстановить: )
smbus2SMBusr   
write_byter   r   r   infor   r   )r,   Ztmp_bus_r*   r   r   r   r   :   s    *zI2CGuard.recover_bus)NN)
__name__
__module____qualname__r   r   staticmethodintfloatr+   r   r   r   r   r   r      s   	"r   )r.   r   core.loggerr   r   r   r   r   r   <module>   s   