o
    z!hr5                     @   s   d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
dadd ZG dd dZdd Zd	d d
ddZdd ZdddZdddZedkrYee  dS dS )    N)OrderedDictc              
   C   s  t | tr| S t | trd|  d S | du rdS t | tr#| r!dS dS t | tttjfr0t| S t | tj	r:| 
 S t | tjrD| 
 S t | tjrVt| j| jt| jdS t | tjjrmt| j| j| jj| jj| jdS t | tjjrt| j| j| j| jj| jd	S t | tjjrt| j| j| jr| jnd
| j| jdS t | tjr| jr| jnd}td| j j d| j!dd"dd | j#D  d dd"dd | j$D  d | j%|d| j&| j dS t | tj'rtd| j j d| jd| j(| j dS t | tj)r'td| j j d| j d| j* d| j+ d	| j t| j*| j,| j-d| j+| j.| j/| j0dS t | tj1rTtd| j j d| j d| j* d| j+ d	| j t| j*| j,| j-d| j+| j2dS 	 t3t|  J ) zr
    Convert a given *obj* to either a *str* or *PrintableObject* depending on
    which is the most suitable
    []Nz<none>yesno)indexoffsetsize)namedef_num	type_namebase_type_namer	   )r
   dev_data_indexr   r   r	    )r
   valueunitsr   	raw_valuer   zchunk#z - fit_header(, c                 S      g | ]}t |qS  str.0vr   r   J/var/www/html/gps/gps/lib/python3.10/site-packages/fitdecode/cmd/fittxt.py
<listcomp>Q       ztxt_encode.<locals>.<listcomp>)c                 S   r   r   r   r   r   r   r   r   R   r   z#06x)_labelheader_size	proto_verprofile_ver	body_sizecrccrc_matchedchunkz
 - fit_crc)r    r%   matchedr'   z - fit_definition - z (loc#z glob#)local_mesg_numtime_offsetis_developer_data)r    r'   headerglobal_mesg_numendian
field_defsdev_field_defsz - fit_data - )r    r'   r,   r-   fields)5
isinstancePrintableObjectr   boolintfloatdecimalDecimaldatetimetime	isoformat	fitdecodeFitChunkr   r   lenbytestypesFieldDefinitionr
   r   type	base_typer	   DevFieldDefinitionr   	FieldDatar   r   r   	FitHeaderr%   r'   r!   joinr"   r#   r$   r&   FitCRCr(   FitDefinitionMessager)   r-   r*   r+   r.   r/   r0   FitDataMessager1   printrepr)objr%   r   r   r   
txt_encode   s   



rN   c                       sD   e Zd ZdZdddddddZd	d
 Zdd Z fddZ  ZS )r3   )r    _dict_max_key_length_pad_key_prefix_key_suffixN r   z  )r    rQ   rR   rS   c                K   sn   || _ t | _d| _|| _|| _|| _| D ]\}}|d dks#J || j|< t|| jkr4t|| _qd S Nr   _)	r    r   rO   rP   rQ   rR   rS   itemsr>   )selfr    rQ   rR   rS   propskeyr   r   r   r   __init__   s   

zPrintableObject.__init__c                 c   sH    | j  D ]\}}| j}||| j| j7 }|| j7 }||fV  qd S N)rO   rW   rR   ljustrP   rQ   rS   )rX   rZ   r   r
   r   r   r   __iter__   s   
zPrintableObject.__iter__c                 C   s    z| j | W S  ty   tw r\   )rO   KeyErrorAttributeError)rX   r
   r   r   r   __getattr__   s
   zPrintableObject.__getattr__c                    s:   |d dkrt  || d S || jvrt|| j|< d S rU   )super__setattr__rO   r`   )rX   r
   r   	__class__r   r   rc      s
   
zPrintableObject.__setattr__)	__name__
__module____qualname__	__slots__r[   r^   ra   rc   __classcell__r   r   rd   r   r3      s    r3   c           
   
   C   sj  |j r2g }|j  D ]\}}|sdnd}tj|j}|| | d|  q
dd| d }nd}tdt	j
|jj|t| d	d	g d
}d}| D ]^}| jt|jj7  _t|tjrod}|jtd	d	d|jdd qK|sy| jd7  _qK|jd }	t|tjrd}d|	_|j|	_qKt|tjr|	 jd7  _qKt|tjr|	 jd7  _qK|jrt|j|_|S )N-+#r   r   r   z[]TXTr   )r    r
   filterframesr	   missing_headers	fit_filesFT)definition_messagesdata_messages
has_footerheader_crc_matchedfooter_crc_matched   )ro   rW   r<   utilsget_mesg_typer
   appendrG   r3   ospathbasenameinfiler>   r	   r'   r?   r2   rF   rr   r&   rq   rH   ru   r(   rw   rI   rs   rJ   rt   strip)
rp   options
filter_strmsg_numincludemsg_namestatsstats_got_headerframe	curr_filer   r   r   global_stats   s\   	

r   	indentlevelc          	         s  f fdd	}dd fdd
}t | tr||  d S t | ttfrgd}| D ]}|d ur<t |ttttjfs<d} nq(|rQ|d	d
	dd | D  d  d S d}| D ]}|r\d}n|d || qUd S t | t
r| jr|| j d | _|| d d d S | D ]J\}}t |tr||| qt |ttfr||  dt| d ||d d qt|}t |tr||| q||  ||d d qd S |t|  d S )Nc                    s   t |  |d d S )Nr   )	txt_print)subobjsublevel)r   r   r   _recurse   s   ztxt_print.<locals>._recurse
)endc                    s    t   g|R d| d d S )Nr   )sepr   )echo)r   valuesr   r   r   _p   s    ztxt_print.<locals>._pTFr   r   c                 S   r   r   )rN   r   r   r   r   r      r   ztxt_print.<locals>.<listcomp>r   rk   rx   )r   z (r   )r2   r   tuplelistr4   r5   r6   r7   r8   rG   r3   r    rstripr>   rN   )	rM   r   r   r   r   one_liner   firstrZ   r   r   r   r      sP   

$




r   c           	      C   s   t dt j}|s|d fS i }d}|D ]_}d }||}|r\|d r*|d dkr*dnd}|d  }|s6d}ztj|}W n ty[   zt	t
dd}W n tyX   d }Y nw Y nw |d u rn| d	| d
 td |||< q||fS )Nz^\s*([\+\-]?)\s*([^\s]+)\s*$Frx   rk   T   r   )basezmalformed filter: "")recompileA	fullmatchlowerr<   rz   get_mesg_num
ValueErrorr5   r   errorsysexit)	
arg_parser
filter_optFILTER_DESCfiltrdefault_include_policydescmsgremr   r   r   r   parse_filter_args   s8   


r   c                 C   s   t jddtj dd}|jddt jddd	d
dd |jddtjjtjjdd |jdddd |jdddd |jdddd |jddddd |jddt jdd d!d" |	| }t
||j\|_|_|S )#Nz1Dump a FIT file to TXT format that ease debuggingzfitdecode version F)descriptionepilogallow_abbrevz--outputz-owtzutf-8)modeencodingrk   z-File to output data into (defaults to stdout))rB   defaulthelpz--nocrcstore_constz6Some devices seem to write invalid CRC's, ignore these)actionconstr   r   z--nodef
store_truez+Do not output FIT local message definitions)r   r   z--nounkz7Do not output unknown FIT messages (e.g. "unknown_140")z--stripz1Do not output the extended global stats in headerz--filterz-fr|   zMessage name(s) (or global numbers) to filter-in or out, depending on sign prefix.  Examples: "-record" to exclude record messages; "+file_id" or "file_id" to include file_id messages.r   FITFILErb)r   z!Input .FIT file (use - for stdin))metavarrB   r   )argparseArgumentParserr<   __version__add_argumentFileTypeCrcCheckDISABLEDWARN
parse_argsr   ro   default_filter)argsparserr   r   r   r   r   D  sP   



r   c           	   
      s  t | }dd|jdddd  fdd} ag }d }zitj|jt |jd	d
R}|D ]G}|jr8|j	tj
kr8q,|jrJ|j	tj
tjfv rJ|jd u rJq,|jrn|j	tj
tjfv rnz|j|j }W n tyj   |j}Y nw |snq,|| q,W d    n1 s~w   Y  W n ty   tdtjd t }Y nw |stt|| td ntd|jj td t| td d}|D ]}|rt|tjr|  d	}t| td qdS )NrT   r   Fr   r   fileflushc                 W   s   t || |||d d S )Nr   )rK   )r   r   r   r   objectsr   r   r   _echov  s   zmain.<locals>._echoc                      s$    d  d  d  d d S )Nr   zP********************************************************************************r   r   r   r   r   _echo_separatory  s   zmain.<locals>._echo_separatorT)	processor	check_crckeep_raw_chunkszQWARNING: error(s) occurred while parsing FIT file. See output file for more info.)r   r   zERROR OCCURRED WHILE PARSINGr   )r   outputr   r<   	FitReaderr   StandardUnitsDataProcessornocrcnodef
frame_typeFIT_FRAME_DEFINITIONnounkFIT_FRAME_DATA	mesg_typero   r-   r_   r   r|   	ExceptionrK   r   stderr	traceback
format_excr   r   r
   r2   rF   )	r   r   r   rp   exception_msgfitr   r   
had_framesr   r   r   mains  s~   



r   __main__r\   )r   collectionsr   r9   r7   os.pathr}   r   r   r   r<   r   rN   r3   r   r   r   r   r   rf   r   r   r   r   r   <module>   s(   o.97
$
/N