
\c        
   @   sQ  d  d l  Z  d  d l Z d  d l m Z m Z m Z m Z m Z m Z d  d l	 m
 Z
 d  d l m Z m Z m Z m Z m Z m Z m Z d  d l m Z e j e  Z d Z d Z d Z d	   Z d
   Z d   Z d   Z d   Z d Z  d d g Z! d g Z" d d d d g Z# d d d d d g Z$ d d d d g Z% e j& d d d e j& d d d e j& d d d e j& d  d d! g Z' d" d# d$ d% d& d' d( g Z( d d) g Z) d* Z* d+ Z+ d, d- d. d/ d0 d1 g Z, d2 d3 d4 d5 d6 d7 d8 d9 d: d; g
 Z- d<   Z. e j/ d= e
 f d>     Y Z0 d? e0 f d@     YZ1 dA e0 f dB     YZ2 d S(C   iN(   t   utilt   memmapt   chirp_commont   bitwiset	   directoryt   errors(   t   YaesuCloneModeRadio(   t   RadioSettingt   RadioSettingGroupt   RadioSettingValueListt   RadioSettingValueStringt   RadioSettingst   RadioSettingValueIntegert   RadioSettingValueBoolean(   t   dedents   i   i    c         C   s   t  j d  x( | D]  } |  j |  t  j d  q W|  j t |   } | d k rh t d   n  | | k r t j d t j	 |   t j d t j	 |   t d j
 | |    n  d  S(   NgQ?ga2U0*S?t    sk   Failed to read echo. Maybe serial hardware not connected. Maybe radio not powered or not in receiving mode.s   expecting echo
%s
s   got echo
%s
s*   Got false echo. Expected: '{}', got: '{}'.(   t   timet   sleept   writet   readt   lent	   Exceptiont   LOGt   debugR    t   hexprintt   format(   t   pipet   datat   cht   echo(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   _send&   s    	c         C   s   t  j d  t |  t  d  S(   Ng{Gz?(   R   R   R   t   ACK(   R   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt	   _send_ack9   s    c         C   sg   |  j  d  } | d k r* t d   n  | t k rc t d j t j t  t j |     n  d  S(   Ni   R   s+   Failed to read ACK. No response from radio.s/   Failed to read ACK.  Expected: '{}', got: '{}'.(   R   R   R   R   R    R   (   R   R   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   _wait_for_ack@   s    	c         C   s  t  j d  d } xk t d d  D]Z } |  j j t  } t  j d t j |   t  j d t |   | |  j	 k r# Pq# q# W| d k r t
 d   n  | |  j	 k r t
 d j |  j	 |    n  t |  j  |  j j d	  } t |  j  d } x t t  D] } |  j j t  } t |  t k rt  j d
 |  t  j d t |  t j |   t  j d t |   t
 d   n
 | | 7} t |  j  |  j rt j   } t t | _ t |  | _ d | _ |  j |  qqWt  j d t |   t |  j  x^ t d t t d  D]E } d d | } | | | d !} t  j d | d t j |   q)Wt j |  S(   Ns   in _download
R   i    i<   s
   Header:
%ss   len(header) = %s
s   Got no data from radio.s,   Got false header. Expected: '{}', got: '{}'.i   s	   Block %i s   Got: %i:
%ss   len chunk is %i
s   Failed to get full data blocks   Cloning from radios	   Total: %ii   i   s   channel %i:
%si   (   R   R   t   rangeR   R   t	   BLOCK_LENR    R   R   t   IDBLOCKR   R   R    t   NB_OF_BLOCKSt	   status_fnR   t   Statust   maxt   curt   msgR   t	   MemoryMap(   t   radioR   t   _it   block_nrt   chunkt   statust   _start_data(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt	   _downloadI   sN    	"
		$c         C   s  |  j  j d  } t |  j  |  j  t |  j   t |  j  d  t |  j   x t t  D] } |  j   | t | d t !} t	 j
 d | t j |   t |  j  |  t |  j   |  j rt j   } t t | _ | t | _ d | _ |  j |  n  | d 7} q\ Wd  S(   Ni   s   w        i   s   Writing block_nr %i:
%ss   Cloning to radio(   R   R   R   R$   R!   R"   R%   t   get_mmapR#   R   R   R    R   R&   R   R'   R(   R)   R*   (   R,   R   R.   R0   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   _upload   s$    		s  
struct mem {
  u8   is_used:1,
       is_masked:1,
       is_skip:1,
       unknown11:3,
       show_name:1,
       is_split:1;
  u8   unknown2;
  ul32 freq_rx_Hz;
  ul32 freq_tx_Hz;
  ul16 offset_10khz;
  u8   unknown_dependent_of_band_144_b0000_430_b0101:4,
       tuning_step_index_1_2:4;
  u8   unknown51:2,
       is_offset_minus:1,
       is_offset_plus:1,
       unknown52:1,
       tone_mode_index:3;
  u8   tone_index;
  u8   dtcs_index;
  u8   is_mode_am:1,
       unknown71:2,
       is_packet96:1
       unknown72:2,
       power_index:2;
  u8   unknown81:2,
       tuning_step_index_2_2:4,
       unknown82:2;
  char name[6];
  u8   unknown9;
  u8   unknownA;
};

// Settings are often present multiple times.
// The memories which is written to are mapped here
struct
{
#seekto 0x41;
  u8        current_band;
#seekto 0xa1;
  u8        apo;
#seekto 0xa2;
  u8        ars_vhf;
#seekto 0xe2;
  u8        ars_uhf;
#seekto 0xa3;
  u8        arts_vhf;
#seekto 0xa3;
  u8        arts_uhf;
#seekto 0xa4;
  u8        beep;
#seekto 0xa5;
  u8        cwid;
#seekto 0x80;
  char        cwidw[6];
#seekto 0xa7;
  u8        dim;
#seekto 0xaa;
  u8        dcsnr_vhf;
#seekto 0xea;
  u8        dcsnr_uhf;
#seekto 0xab;
  u8        disp;
#seekto 0xac;
  u8        dtmfd;
#seekto 0xad;
  u8        dtmfs;
#seekto 0xae;
  u8        dtmfw;
#seekto 0xb0;
  u8        lockt;
#seekto 0xb1;
  u8        mic;
#seekto 0xb2;
  u8        mute;
#seekto 0xb4;
  u8        button[4];
#seekto 0xb8;
  u8        rf_sql_vhf;
#seekto 0xf8;
  u8        rf_sql_uhf;
#seekto 0xb9;
  u8        scan_vhf;
#seekto 0xf9;
  u8        scan_uhf;
#seekto 0xbc;
  u8        speaker_cnt;
#seekto 0xff;
  u8        tot;
#seekto 0xc0;
  u8        txnar_vhf;
#seekto 0x100;
  u8        txnar_uhf;
#seekto 0xc1;
  u8        vfotr;
#seekto 0xc2;
  u8        am;
} overlay;

// All known memories
#seekto 0x20;
  u8        nb_mem_used_vhf;
#seekto 0x22;
  u8        nb_mem_used_vhf_and_limits;
#seekto 0x24;
  u8        nb_mem_used_uhf;
#seekto 0x26;
  u8        nb_mem_used_uhf_and_limits;

#seekto 0x41;
  u8        current_band;

#seekto 0x42;
  u8        current_nb_mem_used_vhf_maybe_not;

#seekto 0x4c;
  u8        priority_channel_maybe_1;   // not_implemented
  u8        priority_channel_maybe_2;   // not_implemented
  u8        priority_channel;           // not_implemented

#seekto 0x87;
  u8        opt_01_apo_1_4;
#seekto 0xa1;
  u8        opt_01_apo_2_4;
#seekto 0xc5;
  u8        opt_01_apo_3_4;
#seekto 0xe1;
  u8        opt_01_apo_4_4;

#seekto 0x88;
  u8        opt_02_ars_vhf_1_2;
#seekto 0xa2;
  u8        opt_02_ars_vhf_2_2;
#seekto 0xc6;
  u8        opt_02_ars_uhf_1_2;
#seekto 0xe2;
  u8        opt_02_ars_uhf_2_2;

#seekto 0x89;
  u8        opt_03_arts_mode_vhf_1_2;
#seekto 0xa3;
  u8        opt_03_arts_mode_vhf_2_2;
#seekto 0xc7;
  u8        opt_03_arts_mode_uhf_1_2;
#seekto 0xa3;
  u8        opt_03_arts_mode_vhf_2_2;

#seekto 0x8a;
  u8        opt_04_beep_1_2;
#seekto 0xa4;
  u8        opt_04_beep_2_2;

#seekto 0x8b;
  u8        opt_05_cwid_on_1_4;
#seekto 0xa5;
  u8        opt_05_cwid_on_2_4;
#seekto 0xc9;
  u8        opt_05_cwid_on_3_4;
#seekto 0xe5;
  u8        opt_05_cwid_on_4_4;

#seekto 0x80;
  char        opt_06_cwidw[6];

#seekto 0x8d;
  u8        opt_07_dim_1_4;
#seekto 0xa7;
  u8        opt_07_dim_2_4;
#seekto 0xcb;
  u8        opt_07_dim_3_4;
#seekto 0xe7;
  u8        opt_07_dim_4_4;

#seekto 0x90;
  u8        opt_10_dcsnr_vhf_1_2;
#seekto 0xaa;
  u8        opt_10_dcsnr_vhf_2_2;
#seekto 0xce;
  u8        opt_10_dcsnr_uhf_1_2;
#seekto 0xea;
  u8        opt_10_dcsnr_uhf_2_2;

#seekto 0x91;
  u8        opt_11_disp_1_4;
#seekto 0xab;
  u8        opt_11_disp_2_4;
#seekto 0xcf;
  u8        opt_11_disp_3_4;
#seekto 0xeb;
  u8        opt_11_disp_4_4;

#seekto 0x92;
  u8        opt_12_dtmf_delay_1_4;
#seekto 0xac;
  u8        opt_12_dtmf_delay_2_4;
#seekto 0xd0;
  u8        opt_12_dtmf_delay_3_4;
#seekto 0xec;
  u8        opt_12_dtmf_delay_4_4;

#seekto 0x93;
  u8        opt_13_dtmf_speed_1_4;
#seekto 0xad;
  u8        opt_13_dtmf_speed_2_4;
#seekto 0xd1;
  u8        opt_13_dtmf_speed_3_4;
#seekto 0xed;
  u8        opt_13_dtmf_speed_4_4;

#seekto 0x94;
  u8        opt_14_dtmfw_index_1_4;
#seekto 0xae;
  u8        opt_14_dtmfw_index_2_4;
#seekto 0xd2;
  u8        opt_14_dtmfw_index_3_4;
#seekto 0xee;
  u8        opt_14_dtmfw_index_4_4;

#seekto 0x96;
  u8        opt_16_lockt_1_4;
#seekto 0xb0;
  u8        opt_16_lockt_2_4;
#seekto 0xd4;
  u8        opt_16_lockt_3_4;
#seekto 0xf0;
  u8        opt_16_lockt_4_4;

#seekto 0x97;
  u8        opt_17_mic_MH48_1_4;
#seekto 0xb1;
  u8        opt_17_mic_MH48_2_4;
#seekto 0xd5;
  u8        opt_17_mic_MH48_3_4;
#seekto 0xf1;
  u8        opt_17_mic_MH48_4_4;

#seekto 0x98;
  u8        opt_18_mute_1_4;
#seekto 0xb2;
  u8        opt_18_mute_2_4;
#seekto 0xd6;
  u8        opt_18_mute_3_4;
#seekto 0xf2;
  u8        opt_18_mute_4_4;

#seekto 0x9a;
  u8        opt_20_pg_p_1_4[4];
#seekto 0xb4;
  u8        opt_20_pg_p_2_4[4];
#seekto 0xd8;
  u8        opt_20_pg_p_3_4[4];
#seekto 0xf4;
  u8        opt_20_pg_p_4_4[4];

#seekto 0x9e;
  u8        opt_24_rf_sql_vhf_1_2;
#seekto 0xb8;
  u8        opt_24_rf_sql_vhf_2_2;
#seekto 0xdc;
  u8        opt_24_rf_sql_uhf_1_2;
#seekto 0xf8;
  u8        opt_24_rf_sql_uhf_2_2;

#seekto 0x9f;
  u8        opt_25_scan_resume_vhf_1_2;
#seekto 0xb9;
  u8        opt_25_scan_resume_vhf_2_2;
#seekto 0xdd;
  u8        opt_25_scan_resume_uhf_1_2;
#seekto 0xf9;
  u8        opt_25_scan_resume_uhf_2_2;

#seekto 0xbc;
  u8        opt_28_speaker_cnt_1_2;
#seekto 0xfc;
  u8        opt_28_speaker_cnt_2_2;

#seekto 0xbf;
  u8        opt_31_tot_1_2;
#seekto 0xff;
  u8        opt_31_tot_2_2;

#seekto 0xc0;
  u8        opt_32_tx_nar_vhf;
#seekto 0x100;
  u8        opt_32_tx_nar_uhf;

#seekto 0xc1;
  u8        opt_33_vfo_tr;

#seekto 0xc2;
  u8        opt_34_am_1_2;
#seekto 0x102;
  u8        opt_34_am_2_2;

#seekto 260;
struct {
  struct mem mem_struct;
  char        fill_ff[2];
} unknown00;

struct {
  struct mem mem_struct;
  char        fill_00[6];
} current_vfo_vhf_uhf[2];

struct {
  struct mem mem_struct;
  char        fill_ff[6];
} current_mem_vhf_uhf[2];

struct {
  struct mem mem_struct;
  char        fill_ff[6];
} home_vhf_uhf[2];

struct {
  struct mem mem_struct;
  char        fill_010003000000[6];
} vhome;

struct {
  struct mem mem_struct;
  char        fill_010001000000[6];
} unknown01;

struct {
  char name[32];
} Vertex_Standard_AH003M_Backup_DT;

struct mem
  memory[260];

struct {
  char name[24];
} Vertex_Standard_AH003M;

struct {
  u8 dtmf[16];
} dtmf_mem[16];
t   FMt   AMR   t   -t   +t   splitt   Tonet   TSQLs
   CTCSS Bellt   DTCSt   Lowt   wattsi   t   Low2i
   t   Low3i   t   Highi#   g      @g      $@g      )@g      .@g      4@g      9@g      I@t   SsA   !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^ _s   0123456789*# s   VFO-VHFs   VFO-UHFs   Home-VHFs   Home-UHFt   VFOt   Homet   L1t   U1t   L2t   U2t   L3t   U3t   L4t   U4t   L5t   U5c         C   s
   t  |   S(   s   This is your download function(   R2   (   R,   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   do_download  s    t   FT7100Radioc           B   s   e  Z d  Z d Z d Z d Z d Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z e d    Z e d    Z d   Z RS(   s   Yaesu FT-7100Ms   FT-7100MR   s    Vartex Standard AH003M M-Map V04i%  c         C   s   t  j d  t j   } t | _ d	 | _ d
 d g | _ t | _	 t | _
 t | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _ t | _ d | _ t | _ t  | _! | S(   Nt   get_featuresi    i  i oi 
i i;i   (   i    i  (   i oi 
(   i i;("   R   R   R   t   RadioFeaturest   Falset   has_bankt   memory_boundst   valid_bandst   Truet   can_odd_splitt	   has_ctonet   has_rx_dtcst	   has_crosst   has_dtcs_polarityt   has_bank_namest   has_settingst   has_sub_devicest   TUNING_STEPSt   valid_tuning_stepst	   MODES_VHFt   valid_modest
   TONE_MODESt   valid_tmodest   POWER_LEVELSt   valid_power_levelst   DUPLEXt   valid_duplexest   SKIP_VALUESt   valid_skipst   valid_name_lengtht   CHARSETt   valid_characterst   SPECIAL_CHANSt   valid_special_chans(   t   selft   rf(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyRQ     s2    																				c         C   s   t  j    } y t |   |  _ Wn< t j k
 r8   n& t k
 r] } t j d |   n Xt j d t  j    |  |  j   d  S(   Ns$   Failed to communicate with radio: %ss   Downloaded in %.2f sec(	   R   R2   t   _mmapR   t
   RadioErrorR   R   t   infot   process_mmap(   Rq   t   startt   e(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   sync_in5  s    c         C   s   d |  j  _ t j   } y t |   Wn< t j k
 r?   n& t k
 rd } t j d |   n Xt j d t j   |  d  S(   Ni   s$   Failed to communicate with radio: %ss   Uploaded in %.2f sec(	   R   t   timeoutR   R4   R   Rt   R   R   Ru   (   Rq   Rw   Rx   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   sync_out@  s    c         C   s   t  j t |  j  |  _ d  S(   N(   R   t   parset
   MEM_FORMATRs   t   _memobj(   Rq   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyRv   K  s    c         C   s   t  |  j j |  S(   N(   t   reprR~   t   memory(   Rq   t   number(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   get_raw_memoryN  s    c         C   s@  t  j d j |   t j   } | d k  r? t | d } n  t | t  rid t j |  | _	 | | _
 d } |  j j j d k r d } n  | d k r |  j j d j } n | d k r |  j j d j } n | d k r |  j j d j } nf | d	 k r|  j j d j } nD | d
 k r;|  j j | j } n" | d k r]|  j j | j } n  t | _ n | | _	 |  j j | } |  j j } |  j j } | | k r| | k  r| | } t | | _
 n  | d  k r| d! } t | | _
 n  t | j  | _ t | j  j   | _ t j | j | _ t j | j | _ t j  | j! | _" t j  | j! | _# t$ | j% } | d k }	 |	 rd | _& n	 | | _& d | _' | j( rd | _' n* | j) rd | _' n | j* rd | _' n  | j* rt | j+  | _, n t | j-  d | _, | j. r-d | _/ n	 d | _/ t0 | j1 | _2 t3 | j4 | _5 | j6 rkd | _7 n	 d | _7 | j | _8 t9 d d  | _: t; d d t< | j=   }
 | j: j> |
  t; d d t< | j?   }
 | j: j> |
  t; d d t< | j@   }
 | j: j> |
  t; d d t< |	   }
 | j: j> |
  | S("   Ns   get_memory Number: {}i    i
   ii   s   VFO-VHFs   VFO-UHFs   Home-VHFs   Home-UHFRC   RD   i  s
   CTCSS BellR;   R   R8   R7   R9   i'  R6   R5   RB   t   Extrat   extrat	   show_names	   Show Namet	   is_maskeds	   Is Maskedt   is_packet96s   Packet 9600t   is_ctcss_belli   i   (A   R   R   R   R   t   MemoryRo   t
   isinstancet   strt   indexR   t   extd_numberR~   t   overlayt   current_bandt   current_vfo_vhf_uhft
   mem_structt   home_vhf_uhfRW   t   is_usedR   t   nb_mem_used_vhft   nb_mem_used_vhf_and_limitst   SCAN_LIMITSt   intt
   freq_rx_Hzt   freqt   namet   rstript   TONESt
   tone_indext   rtonet   ctonet
   DTCS_CODESt
   dtcs_indext   dtcst   rx_dtcst   TONE_MODES_RADIOt   tone_mode_indext   tmodet   duplext   is_offset_plust   is_offset_minust   is_splitt
   freq_tx_Hzt   offsett   offset_10khzt
   is_mode_amt   modeRf   t   power_indext   powerR`   t   tuning_step_index_1_2t   tuning_stept   is_skipt   skipt   emptyR   R   R   R   R   t   appendR   R   (   Rq   R   t   memt   bandt   _memt   upper_channelt   upper_limitt   it   tmode_radioR   t   rs(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt
   get_memoryQ  s    			

														c         C   s  t  j d j | j   | j d k  r t | j d } | d k r[ |  j j d j } q | d k r} |  j j d j } q | d k r |  j j d j } q | d k r |  j j d j } q t	 j
 d	 j | j    n |  j j | j } | j j d
  | _ t j j | j  | _ t j j | j  | _ | j d k rat j j | j  | _ n  | j d k rt j j | j  | _ n  d | _ d | _ d | _ | j | _ | j | _ | j d k rd | _ | j | j  | _ t! | j  d  | _" nk | j d k rFd | _ | j | j  | _ t! | j  d  | _" n' | j d k rmd | _ | j  | _ n  | j# d k | _$ | j% rt& j | j%  | _' n  t( j | j)  | _* | j+ d k | _, | j- | _. | j j/   d k | _0 t1 j | j  | _2 xl | j3 D]a } | j4   d k rS| j d k rl| j5 rlt1 j d  | _2 qlqt6 | | j4   | j5  qWt  j d t7 j8 | j9   d d !  t  j t: |   d  S(   Ns   set_memory Number: {}i    i
   s   VFO-VHFs   VFO-UHFi   s   Home-VHFs   Home-UHFs   Unexpected Memory Number: {}i   R;   s   DTSC-RR8   i'  R7   R9   R6   RB   R   R   s
   CTCSS Bells   encoded mem
%s
i   (;   R   R   R   R   Ro   R~   R   R   R   R   Rt   R   R   t   ljustR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Rf   R   R`   R   R   R   R   R   R   t   stripR   R   R   R   t   get_namet   valuet   setattrR    R   t   get_rawR   (   Rq   R   R   R   t   setting(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt
   set_memory  sh    							&c            s5	  t  d d  } t  d d  } t  d d  } t  d d  } t  d	 d
  } t | | | | |  }  j j   d d d d d d d d d d d d d d d d d d d d d d  d! d" d# g } | j t d$ d% t | |   j    d d& g } | j t d' d( t | |   j    | j t d) d* t | |   j	    d d& g } | j t d+ d, t | |   j
    d d& g } | j t d- d. t | |   j      j j   } | j d/  } t d0 d1 |  }	 |	 j t  t d2 d3 |	  }
   f d4   } |
 j |  | j |
  d5 d6 d7 d8 d9 d: d; d< g } | j t d= d> t | |   j    d? d@ dA dB g } | j t dC dD t | |   j    | j t dE dF t | |   j    dG dH dI dJ g } | j t dK dL t | |   j    dM dN dO dP dQ g } | j t dR dS t | |   j    dM dT dU g } | j t dV dW t | |   j    t dX dY t dZ d[   j dZ   }
   f d\   } |
 j |  | j |
  x't d[  D]} d] } x t d[  D] } d] } t  j j | j |  } | d^ k  r=t |  } n: | d_ k rRd` } n% | da k rgdb } n | dc k rwPn  | | 7} qWt d0 d[ |  } | j t   t dd j! |  de t | dZ  |  }
  f df   } |
 j | |  | j |
  qWd dg dh di g } | j t dj dk t | |   j"    dl dm g } | j t dn do t | |   j#    d d& g } | j t dp dq t | |   j$    dr ds dt du g } dv dw dx dy dz d{ d| d} d~ d d g  xy t% |  D]k \ } } t d t |  | t     j& |   }
    f d   } |
 j | |  | j |
  qWd d d d d g } | j t d d t | |   j'    | j t d d t | |   j(    d d g } | j t d d t | |   j)    | j t d d t | |   j*    d dg dh di g } | j t d d t | |   j+    d dg dh di g } | j t d d t d0 d   j,    d d& g } | j t d d t | |   j-    | j t d d t | |   j.    d d& g } | j t d d t | |   j/    d d d g } | j t d d t | |   j0    d d g } | j t d d t | |   j1    t d0 d t t  j j2    }	 |	 j3 t4  t d d |	  }
 | j |
  t d0 d t t  j j5    }	 |	 j3 t4  t d d |	  }
 | j |
  | S(   Nt   commons   Common SettingsR   s   Band dependent Settingst   artss$   Auto Range Transponder System (ARTS)t   dtmfs   DTMF Settingst
   mic_buttons   Microphone Buttonst   Offs   30 Mins   1 Hours	   1.5 Hourss   2 Hourss	   2.5 Hourss   3 Hourss	   3.5 Hourss   4 Hourss	   4.5 Hourss   5 Hourss	   5.5 Hourss   6 Hourss	   6.5 Hourss   7 Hourss	   7.5 Hourss   8 Hourss	   8.5 Hourss   9 Hourss	   9.5 Hourss   10 Hourss
   10.5 Hourss   11 Hourss
   11.5 Hourss   12 Hourst   apos   Automatic Power Offt   Ont   ars_vhfs   Automatic Repeater Shift VHFt   ars_uhfs   Automatic Repeater Shift UHFt   beeps   Key/Button Beept   cwids   Enables/Disables the CW IDs    i    i   t   cwidws   CW Identifier Callsignc            s#   |  j  j   }   j j |  d  S(   N(   R   t	   get_valueR   t	   set_value(   R   t   value_string(   t   _overlay(    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt
   apply_cwidL  s    s   0: Offs   1: Maxt   2t   3t   4t   5t   6s   7: Mint   dims   Display Illuminations
   TRX Normals   RX Reverseds   TX Reverseds   TRX Reversedt	   dcsnr_vhfs   DCS coding VHFt	   dcsnr_uhfs   DCS coding UHFt	   Frequencys   Off / Sub Band disableds   DC Input Voltages   CW IDt   disps   Sub Band Display Formats   50 mss   250 mss   450 mss   750 mss   1 st   dtmfds   Autodialer delay times   75 mss   100 mst   dtmfss   Autodialer sending speedt   dtmfws   Current Autodialer memoryi   i   c            s   |  j  j   d   _ d  S(   Ni   (   R   R   R   (   R   (   R   (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   apply_dtmfw  s    R   i
   i   t   *i   t   #i   s   dtmf_{0:02d}s	   DTMF Mem c            s   |  j  j   j   } d } x | D] } d } | d k rI t |  } n* | d k r^ d } n | d k rs d } n  | d k  r" |   j j | j | <| d 7} q" q" W| d	 k  r d   j j | j | <n  d  S(
   Ni    i   t
   0123456789R   i   R   i   i   i   (   R   R   R   R   R~   t   dtmf_memR   (   R   R   t   radio_setting_value_stringt   jt	   dtmf_chart   dtmf_int(   Rq   (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt
   apply_dtmf  s    		s   Band As   Band Bt   Botht   lockts   PTT switch locks   MH-42s   MH-48t   mics   Microphone typet   mutes   Mute Sub Receivers   ACC / P1s   P / P2s   P1 / P3s   P2 / P4R=   R:   t   MHzt   RevRD   t   Bands   VFO / Memorys   Sql Offs   1750 Hz Tone Callt   Repeatert   Priorityt   buttonc            s/   |  j  j   }  j |  } |   j | <d  S(   N(   R   R   R   R   (   R   R   R   t	   value_int(   R   t   opts_button(    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   apply_button  s    s   S-1s   S-5s   S-9s   S-FULLt
   rf_sql_vhfs
   RF Sql VHFt
   rf_sql_uhfs
   RF Sql UHFt   Busyt   Timet   scan_vhfs   Scan-Resume VHFt   scan_uhfs   Scan-Resume UHFt   speaker_cnts   External Speakert   tots   TX Time-Out [Min.] (0 = Off)i   t	   txnar_vhfs   TX Narrowband VHFt	   txnar_uhfs   TX Narrowband UHFt   vfotrs   VFO Trackings   Inhibit (only FM)R6   t   Autot   ams   AM Modet   VHFt   UHFR   s   Current Bandi   t   num_chan_vhfs   Number of VHF channelst   num_chan_uhfs   Number of UHF channels(6   R   R   R~   R   R   R   R	   R   R   R   R   R   R   R   R   R
   t   set_charsetRm   t   set_apply_callbackR   R   R   R   R   R   R   R   R"   R   R   R   R   t   DTMF_CHARSETR   R   R   R   t	   enumerateR   R   R   R  R  R  R  R  R  R  R
  R   R   t   set_mutableRS   t   nb_mem_used_uhf(   Rq   R   R   R   R   R   t   setmodet   optsR   t   valR   R   R   R   t   dtmf_stringR   R   R   R   R   t   buttonsR   R   (    (   R   R   Rq   s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   get_settings  s   		
										c         C   s   |  j  j } x | D] } t | t  s; |  j |  q n  | j   sM q n  yb | j   } | j } | j   r t	 j
 d  | j   n t | | |  t	 j
 d | |  Wq t k
 r } t	 j
 | j      q Xq Wd  S(   Ns   Using apply callbacks   Setting %s: %s(   R~   R   R   R   t   set_settingst   changedR   R   t   has_apply_callbackR   R   t   run_apply_callbackR   R   (   Rq   t
   uisettingsR   t   elementR   R   Rx   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR  2  s$    	c         C   s.   |  j  d  k r d } n t |  j  j  } | S(   Ni   (   R~   t   NoneR   R   (   Rq   t   upper_vhf_limit(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   _get_upper_vhf_limitJ  s    	c         C   s.   |  j  d  k r d } n t |  j  j  } | S(   Ni   (   R~   R!  R   t   nb_mem_used_uhf_and_limits(   Rq   t   upper_uhf_limit(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   _get_upper_uhf_limitR  s    	c         C   s!   | d d t  |  j  !|  j k S(   Ni  (   R   R$   (   t   clst   filedatat   filename(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   match_modelZ  s    c         C   s:   t  j   } t t d   | _ t t d   | _ | S(   Ns               1. Turn Radio off.
            2. Connect data cable.
            3. While holding "TONE" and "REV" buttons, turn radio on.
            4. <b>After clicking OK</b>, press "TONE" to send image.s*              1. Turn Radio off.
            2. Connect data cable.
            3. While holding "TONE" and "REV" buttons, turn radio on.
            4. Press "REV" to receive image.
            5. Make sure display says "CLONE RX" and green led is blinking
            6. Click OK to start transfer.(   R   t   RadioPromptst   _R   t   pre_downloadt
   pre_upload(   R'  t   rp(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   get_prompts^  s    c         C   s-   |  j  s% t |  j  t |  j  g Sg  Sd  S(   N(   t   VARIANTt   FT7100RadioVHFRs   t   FT7100RadioUHF(   Rq   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   get_sub_deviceso  s    	(   t   __name__t
   __module__t   __doc__t   MODELR1  R$   t	   BAUD_RATERQ   Ry   R{   Rv   R   R   R   R  R  R#  R&  t   classmethodR*  R0  R4  (    (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyRP   
  s(   	 					j	J	 .			R2  c           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s   VHF Bandc         C   sh   t  j d  |  j   } t j |   } d | f | _ d g | _ t | _ d d g | _	 t
 | _ | S(   Ns   VHF get_featuresi   i oi 
RC   RD   (   i oi 
(   R   R   R#  RP   RQ   RU   RV   Rb   Rc   Rp   RS   R_   (   Rq   R"  Rr   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyRQ   z  s    		c         C   s   t  j d j |   t | t  rl | d k rN t j |  | d d  } n t j |  |  } | | _ n1 t j |  | d  } | | _ d d d g | _	 | S(   Ns   get_memory VHF Number: {}i    i   s   -VHFR   R   R   (
   R   R   R   R   R   RP   R   R   R   t	   immutable(   Rq   R   R   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR     s    	c         C   s   t  j d j | j   | j } t | j t  rX | j d k rg | j d 7_ qg n | j d 7_ t t |   j |  | | _ d  S(   Ns   set_memory VHF Number: {}i    is   -VHF(	   R   R   R   R   R   R   t   superR2  R   (   Rq   R   t   _number(    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR     s    		(   R5  R6  R1  RQ   R   R   (    (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR2  w  s   		R3  c           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s   UHF Bandc         C   sh   t  j d  |  j   } t j |   } d | f | _ d g | _ t | _ d d g | _	 t
 | _ | S(   Ns   UHF get_featuresi   i i;RC   RD   (   i i;(   R   R   R&  RP   RQ   RU   RV   t	   MODES_UHFRc   Rp   RS   R_   (   Rq   R%  Rr   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyRQ     s    		c         C   s   t  j d j |   |  j   } t | t  rx | d k rZ t j |  | | d  } n t j |  |  } | | _ n1 t j |  | d  } | | _	 d d d g | _
 | S(   Ns   get_memory UHF Number: {}i    i   s   -UHFR   R   R   (   R   R   R   R#  R   R   RP   R   R   R   R;  (   Rq   R   R"  R   (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR     s    		c         C   s   t  j d j | j   | j } |  j   } t | j t  rh | j d k rw | j | d 7_ qw n | j d 7_ t t |   j	 |  | | _ d  S(   Ns   set_memory UHF Number: {}i    i   s   -UHF(
   R   R   R   R   R#  R   R   R<  R3  R   (   Rq   R   R=  R"  (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR     s    		(   R5  R6  R1  RQ   R   R   (    (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyR3    s   		(3   R   t   loggingt   chirpR    R   R   R   R   R   t   chirp.drivers.yaesu_cloneR   t   chirp.settingsR   R   R	   R
   R   R   R   t   textwrapR   t	   getLoggerR5  R   R   R%   R#   R   R    R!   R2   R4   R}   Rb   R>  Rh   R   Rd   t
   PowerLevelRf   R`   Rj   Rm   R  Ro   R   RO   t   registerRP   R2  R3  (    (    (    s+   /home/me/code/chirp/chirp/drivers/ft7100.pyt   <module>   sL   .4					8	 p	$		  n,