
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
À<×eX  ã               @   s>   d dl mZ ddljZddlZejjƒ ZG dd„ dej	ƒZ	dS )é   )Úbaseé    Nc                   sŒ   e Zd ZdZ‡ fdd„Z‡ f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‡  ZS )ÚPluginz:
	Base class for plugins with device hotpluging support.
	c                s   t t| ƒj||Ž d S )N)Úsuperr   Ú__init__)ÚselfÚargsÚkwargs)Ú	__class__© ú/usr/lib/python3.6/hotplug.pyr      s    zPlugin.__init__c                s   t t| ƒjƒ  | jƒ  d S )N)r   r   ÚcleanupÚ_hardware_events_cleanup)r   )r
   r   r   r      s    zPlugin.cleanupc             C   s   d S )Nr   )r   r   r   r   Ú_hardware_events_init   s    zPlugin._hardware_events_initc             C   s   d S )Nr   )r   r   r   r   r      s    zPlugin._hardware_events_cleanupc             C   s   | j ƒ  d S )N)r   )r   r   r   r   Ú_init_devices   s    zPlugin._init_devicesc             C   sN   |dkr&t jd|j ƒ | j|jƒ n$|dkrJt jd|j ƒ | j|jƒ d S )NÚaddzdevice '%s' addedÚremovezdevice '%s' removed)ÚlogÚinfoZsys_nameÚ_add_deviceÚ_remove_device)r   ZeventZdevicer   r   r   Ú_hardware_events_callback   s    z Plugin._hardware_events_callbackc             C   sd   t jd|j|f ƒ | jj|ƒ | j||jd|gƒ | j||ƒ | j||jd|gƒ |j	j|ƒ d S )Nz!instance %s: adding new device %sZapply)
r   r   ÚnameÚ_assigned_devicesr   Ú_call_device_scriptÚ
script_preÚ_added_device_apply_tuningÚscript_postÚprocessed_devices)r   ÚinstanceÚdevice_namer   r   r   Ú_add_device_process$   s    zPlugin._add_device_processc             C   sr   || j | jB krd S xXt| jjƒ ƒD ],\}}t| j||gƒƒdkr$| j||ƒ P q$W tj	d| ƒ | jj
|ƒ d S )Nr   zno instance wants %s)r   Ú_free_devicesÚlistÚ
_instancesÚitemsÚlenZ_get_matching_devicesr!   r   Údebugr   )r   r    Zinstance_namer   r   r   r   r   ,   s    zPlugin._add_devicec             C   s8   x|D ]}| j ||ƒ qW t|jƒt|jƒ dk|_dS )zN
		Add devices specified by the set to the instance, no check is performed.
		r   N)r!   r&   r   Úassigned_devicesÚactive)r   r   Údevice_namesÚdevr   r   r   Ú_add_devices_nocheck8   s    
zPlugin._add_devices_nocheckc             C   sx   ||j krt| j||jd|gƒ | j||ƒ | j||jd|gƒ |j j|ƒ t|j ƒt|jƒ dk|_| j	j|ƒ dS dS )NZunapplyr   TF)
r   r   r   Ú_removed_device_unapply_tuningr   r   r&   r(   r)   r   )r   r   r    r   r   r   Ú_remove_device_processC   s    
zPlugin._remove_device_processc             C   sJ   || j | jB krdS x0t| jjƒ ƒD ]}| j||ƒr$P q$W | jj|ƒ dS )zVRemove device from the instance

		Parameters:
		device_name -- name of the device

		N)r   r"   r#   r$   Úvaluesr.   r   )r   r    r   r   r   r   r   Q   s    zPlugin._remove_devicec             C   s   x|D ]}| j ||ƒ qW dS )zS
		Remove devices specified by the set from the instance, no check is performed.
		N)r.   )r   r   r*   r+   r   r   r   Ú_remove_devices_nochecka   s    
zPlugin._remove_devices_nocheckc             C   s6   | j ||gƒ |jr2| jjtjtjƒr2| j||ƒ d S )N)Z_execute_all_device_commandsÚhas_dynamic_tuningÚ_global_cfgÚgetÚconstsÚCFG_DYNAMIC_TUNINGÚCFG_DEF_DYNAMIC_TUNINGZ_instance_apply_dynamic)r   r   r    r   r   r   r   h   s    z!Plugin._added_device_apply_tuningc             C   s:   |j r$| jjtjtjƒr$| j||ƒ | j||gdd� d S )NT)r   )r1   r2   r3   r4   r5   r6   Z_instance_unapply_dynamicZ_cleanup_all_device_commands)r   r   r    r   r   r   r-   m   s    z%Plugin._removed_device_unapply_tuning)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r!   r   r,   r.   r   r0   r   r-   Ú__classcell__r   r   )r
   r   r      s   r   )
Ú r   Ztuned.constsr4   Z
tuned.logsZtunedZlogsr3   r   r   r   r   r   r   Ú<module>   s   

