B
    g^S                 @   s   d dl Z d dlmZ d dlmZ dZdZdZdZdZd	Z	g a
i ai ai ai ad
d Zeeeef dddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zedkree	Zeed kred ed  x&e D ]\Z Zee  de  qW dS )     N)glob)Dictzconfig/ip_addresses.jsonzconfig/camera_settings.jsonzconfig/camera_ranges.jsonzconfig/button_mapping.jsonzconfig/nolenszconfig/focus*.jsonc           	   C   s   t td} t| aW d Q R X t td} t| aW d Q R X t td} t| aW d Q R X t t	d} t| a
W d Q R X ttad S )Nr)openCAMERA_LIST_FILEjsonload
camera_ipsCAMERA_SETTINGS_FILEcamera_settingsCAMERA_RANGES_FILEcamera_rangesBUTTON_MAPPING_FILE
button_mapload_focus_configFOCUS_FILE_PATTERNcamera_focus)fp r   +/home/pi/sexton-multicamera/e2/E2Configs.pyr   1   s    r   )patternreturnc          	   C   s@   t | }t|dkri S t|d d}t|}W d Q R X |S )Nr   r   )r   lenr   r   r   )r   filesr   Z
focus_dictr   r   r   r   N   s    r   c          	   C   s>   t d| |f  |t| < ttd}tt| W dQ R X dS )zUpdate camera_settings and write to file.

    keyword -- from E2Protocol.KEY_xxx
    value -- new value

    TODO: Need to figure out error handling.
    z%s -> %swN)printr   r   r
   r   dump)keywordvaluer   r   r   r   update_settingsW   s    r   c             C   s   | t kr,d|  }d}t| tt  ||fS t |  }| tkr`d|  }d}t| tt ||fS t|  }y||}W n( tk
r   d}td||f  Y nX |dfS )a  Look up index of current setting value in the range for that setting.

    keyword -- from E2Protocol.KEY_xxx
    returns -- (index,errmsg) index if successful
                              -1 keyword not in settings
                              -2 keyword not in ranges

    Notes:
    If the current value from settings is not in camera_ranges, default
    to using the first (index 0) value in the range.
    zkeyword %s not in settingszkeyword %s not in camera_rangesr   z current value %s not in range %s )r   r   r   index
ValueError)r   errmsgstatusr   rangeidxr   r   r   get_index_of_current_valuee   s(    r)   c             C   sT   t | \}}|dk rd|fS t|  }t|d t|d }|| }t| | |dfS )a  Increase setting, up to top (end) of list.

    Saves new setting value in camera_settings, and persists to the file.

    keyword -- from E2Protocol.KEY_xxx
    returns -- (value,errmsg) value as string if ok
                              None and errmsg if failed
    r   N   r"   )r)   r   minr   r   )r   r(   r%   r'   new_idx	new_valuer   r   r   
setting_up   s    	
r.   c             C   sL   t | \}}|dk rd|fS t|  }t|d d}|| }t| | |dfS )a  Decrease setting, down to bottom (beginning) of list.

    Saves new setting value in camera_settings, and persists to the file.

    keyword -- from E2Protocol.KEY_xxx
    returns -- (value,errmsg) value as string if ok
                              None and errmsg if failed
    r   Nr*   r"   )r)   r   maxr   )r   r(   r%   r'   r,   r-   r   r   r   
setting_dn   s    	
r0   c             C   sV   t | \}}|dk rd|fS t|  }|d }|t|kr<d}|| }t| | |dfS )a  Increase setting, wrap from end of list back to beginning.

    Saves new setting value in camera_settings, and persists to the file.

    keyword -- from E2Protocol.KEY_xxx
    returns -- (value,errmsg) value as string if ok
                              None and errmsg if failed
    r   Nr*   r"   )r)   r   r   r   )r   r(   r%   r'   r,   r-   r   r   r   setting_wrap   s    	
r1   c              C   s*   x$t  D ]\} }td| |f  q
W dS )zPrint current camera settings.z%s -> %sN)r   itemsr   )kvr   r   r   print_settings   s    r5   c              C   sF   d} d}z*yt t}W n tk
r.   d} Y nX W d|r@|  X | S )a  Check if no lens is configured (testing only).

    Existence of CAMERA_NOLENS_FILE flags that the camera has no lens.
    This is just for Mark Z who at the time of this writing has no lens
    on his test camera.

    returns -- if configured for no lens
    TNF)r   CAMERA_NOLENS_FILEFileNotFoundErrorclose)Znolensr   r   r   r   check_no_lens_config   s    	 
r9   __main__zno focus*.jsonz -> )!r   r   typingr   r   r
   r   r   r6   r   r	   r   r   r   r   r   strintr   r   r)   r.   r0   r1   r5   r9   __name__Zfocr   r   exitr2   Zipr   r   r   r   <module>   s:   	'