Files
controller-wisetopdataserver/python/biopro/server/__pycache__/data.cpython-37.opt-2.pyc
T

258 lines
31 KiB
Plaintext
Raw Normal View History

2021-12-20 14:52:55 +08:00
B
2021-12-22 14:29:56 +08:00
ò0ÀaÅ¿ã@ddlZddlmZddlmZmZddlmZddlmZddlZddl Z ddl
2021-12-20 14:52:55 +08:00
Tddl Tddl m
Z
ddlmZmZmZdd lmZdd
2021-12-22 14:29:56 +08:00
lmZmZdd lmZmZddlTdd lmZmZmZmZm Z m!Z!dd
2021-12-20 14:52:55 +08:00
l"m#Z#ddl$m%Z%ddl&m'Z'm(Z(ddl)m*Z*ddl+m,Z,ddl-m.Z.m/Z/ddl0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9Z9ddl:m;Z<m=Z>ddl:Z:e?dœddZ@dZAdZBdaCeAr¨ddl$mDZDeDƒZEn,eBrÂddl$mFZFeFƒZEnddl$mDZDeDƒZEGd d!„d!e/eGƒZHGd"d#„d#eIjJd$ZKGd%d&„d&eKƒZLGd'd(„d(eKƒZMGd)d*„d*e.ƒZNGd+d,„d,e.ƒZOGd-d.„d.e.ƒZPGd/d0„d0eQƒZRGd1d2„d2eSƒZTGd3d4„d4eSƒZUGd5d6„d6eSƒZVeWd7kržeRƒ dS)8éN)ÚCounter)ÚtimeÚsleep)ÚIterable)Údatetime)Ú*)ÚGeneratorOptions)ÚExtMemSpiInterfaceÚMultiExtMemSpiInterfaceÚ
ExtMemManager)ÚSelector)ÚRecordingMetaFileÚRecordingFileWriter)Ú
EMPTY_ADDRESSÚ address_str)ÚWHITEÚREDÚYELLOWÚMAGENTAÚGREENÚpc)Úcounter_product_sum)Ú LeakSection)Ú logging_infoÚLogger)Úprint_exceptioné)Ú CacheClient)Ú ServerThreadÚ SocketServer)ÚMqttDataMessageHandlerÚ
MqttThread)ÚDataBaseProcess)ÚRecordingProcess)ÚQueue)ÚloadsÚdumps)ÚreturncCs t|ddS)N)ú:)Ú
separators)Ú_json_stringify)Úr-ú7/home/pi/wisetopdataserver/python/biopro/server/data.pyÚjson_stringify#sr/FT)Ú
NoLeakSection)ÚObjGraphLeakSectioncseZdZfddZeddƒZeedœddƒZedIee d œd
d ƒZ
ee d œd d
ƒZ eddƒZ eddƒZ
e dœddZdJeedœddZeedœddƒZee ee eefeeefdœddƒZeddƒZedKeeed œd!d"„ƒZeedœd#d$„ƒZeeeefdœd%d&„ƒZeeeefdœd'd(„ƒZed)d*„ƒZ e!dœd+d,„Z"d-d.„Z#d/d0„Z$d1d2„Z%ee&dœd3d4„Z'd5d6„Z(edœd7d8„Z)edœd9d:„Z*eed;œd<d=„Z+edœd>d?„Z,edœd@dA„Z-eee.dBœdCdD„Z/eee.d œdEdF„Z0eed œdGdH„Z1‡Z2S)LÚ
DataServercstƒjtd|jddtj|Ž}t|jjdd|_d|j_ i|_
d|_ |j |_
d|_d|_g|_d|_|j a| |j¡td|j|jd|jdƒ|_t ¡|_i|_tƒ|_tƒ|_ t!|jƒdkròtƒ|jd <tƒ|jd
<tƒ|jd <tƒ|jd <t"d|j|j|j|j ƒ|_#|j# dS)
Nr2é)Ú
socket_listenT)Úno_system_defaultÚ data_serverzMQTT-data-serverréééé)%ÚsuperÚ__init__ÚDataAPIÚADDRÚDataServerOptionsÚ get_optionsÚDeviceLibraryRepositoryÚ
repositoryÚ library_pathÚ recursiveÚ_configurationsÚ _spi_threadÚ MODE_DISABLEÚ _spi_modeÚ_spiÚ _rec_threadÚ_available_channelÚ
_cache_clientZflag_disable_data_statisticsÚ_FLAG_DATA_LOST_STATS_Ú setup_spiZ
flag_spi_moder!Úsocket_mqtt_ipÚsocket_mqtt_portÚ log_verboseÚ mqtt_threadÚqueuer$Ú
_queue_spiÚ_queue_ds_dictZ _queue_dbÚ_queue_db_errorÚlenr"Údatabase_processÚstart)ÚselfÚoptionsZ data_options)Ú __class__r-r.r<:s<

 
     zDataServer.__init__cCs<|j ¡|jdk r0| d¡|j ¡| ¡t ¡dS)Nz spi flush)rKÚclearrIrQZ flush_allÚreset_available_channelÚLEAKÚreset)rZr-r-r.Úsetups



zDataServer.setup)Úexternal_interruptc Csndaz | ¡| ¡|jj ¡Wd|j ¡|jdk rJ|j ¡d|_t rht
  ¡t
  t
ttfd¡XdS)NFzdump_leak_object.txt)rMÚ
_stop_runtimeÚ stop_syncrTrSr]rErIÚcloseÚ_FLAG_MEMORY_LEAK_TEST_r_Z check_pointÚdumpÚtupleÚlistÚdict)rZrbr-r-r.reŽs


zDataServer.closeN)Úspi_modec Cs&| d¡|jdk r$|j ¡d|_|jdk r>|j ¡d|_|jdk rR|j ¡|jdk rf|j ¡x*|jD] }|j|dk rn|j| ¡qnW|j ¡tƒ}| ¡WdQRX|dkrÄ|j }|j
|_ |  |¡|  ¡|jdk rò|j 
¡|jdks|jjr"| d¡| t|ƒ¡|_dS)NFzstart rec runtime thread)rerFrJrRÚshutdownrXrEr]rrHrGrNrarYÚ is_closedrQÚ
run_threadÚRecRuntimeThread)rZrkÚclientr-r-r.r`¥s8








 




zDataServer.resetc
C||jkrdS||jkrd}n:||jkr0tƒ}n(||jkrLtt tj¡ƒ}n t d|ƒ|j
dk rl|j
  ¡||_||_
|dk rÊ|  d|j
j¡y | ¡Wn,tk
}ztdƒ|Wdd}~XYnXdS)Nzillegal spi mode : z reset spizspi reset fail)rHrGÚ MODE_SINGLEr Ú
MODE_SELECTORr
r ÚgetÚ MEM_SELECTORÚ
ValueErrorrIrerQr\Ú__name__r`ÚIOErrorÚ RuntimeError)rZrkÚspiÚer-r-r.rNÝs(



 

 zDataServer.setup_spicC|j}||jkrg}n^||jkr(dg}nL||jkrdt|jtƒrRt|jƒ}| ¡}qt|  d|¡g}n|  d|¡g}||_
|  d|j
¡dS)Nrz unexpected spi interface in modezunknown spi modezavailable channel) rHrGrrrsÚ
isinstancerIr
r Zget_available_channelÚlog_warnrKrQ)rZrkÚavailable_channelÚmr-r-r.r^øs 


 

  z"DataServer.reset_available_channelcCx*|jD] }|j|dk r|j| ¡qW|jdk rl|j ¡|jjrf| d¡|j ¡|j ¡d|_|jdk r†|j ¡d|_|j dk r |j  ¡d|_ |j
dk rº|j
 ¡d|_
|  ¡dS)NzDatabase-Process shutdown) rErlrXÚis_aliverQÚ terminateÚjoinrFrerJrRÚshutdown_server)rZÚrr-r-r.rls* 










zDataServer.shutdown)r'cCs|jS)N)rH)rZr-r-r.rk/szDataServer.spi_modeFcCs|r | ¡|jS)N)r^rK)rZr`r-r-r.r~2szDataServer.available_channel)ÚdevicecCsr|dkrtdt|ƒƒ| d|¡xt|jƒ|krB|j d¡q&W|j|}|dk rd|jrdtdƒd|j|<dS)Nrzillegal device ID : z unset devicez'illegal state, unset device during sync)rvÚstrrQrWrEÚappendÚ sync_startedry)rZr…rpr-r-r.Ú unset_device8s 

zDataServer.unset_device)r…Ú meta_fileÚ data_formatc Cd}t|tƒrt|ƒ}t |¡}t|dƒ}t|dƒ}|d}t |¡d} |d=|d=|d=|d=|d=tt |¡dƒ}|dkrtd t|ƒƒ| d
|¡t|tt fƒr¾t
  |¡j }n|j }| d |¡| d t
| ƒ¡| tkrô| d
¡n¸| d¡yx|jt|ƒ ¡qWWn YnX||jkrp|j|dk rp|j|}
|
 ¡|
 ¡|j |
jd¡td|j|tƒ|jt|ƒ|t|ƒ|||||j|j|jd} t| tƒrÎ||jkrÎtd|ƒ| |j|<dS)NéÿÿÿÿÚ
configurationÚparentÚrecording_file_nameÚdevice_addressÚbatteryÚ device_idrzillegal device ID : z device IDzdevice meta filezdevice mac addresszuse GeneratorDataRuntimezuse DeviceDataRuntimeTr6)Údatabasez0set device configuration on un-available channel)r|r†ÚPathÚjsonr%r/ÚintrvrQÚbytesÚDataDecodeFormatÚparseÚnamerrrUÚ
get_nowaitrErlrrIÚ
set_wait_flagÚ_devicer#r$rOrPrXrKry) rZr…rrrÚ
_parameterÚ_parentÚ_recording_file_nameÚ mac_addressrpZdata_runtime_processr-r-r.Úupdate_device_configurationKsX

     


 



z&DataServer.update_device_configurationcCs tdƒdS)NzD********************************************************************)Úprint)rZr-r-r.Ú command_test¸szDataServer.command_test)r…r'c
CsH|dkr|jSy||jkr&|j|jSWntttfk
rBdSXdS)NF)rˆrEÚ
IndexErrorÚ TypeErrorÚAttributeError)rZr…r-r-r.Úis_sync¼s
zDataServer.is_synccCsttdd|jƒƒS)NcSs|dk S)Nr-)r„r-r-r.Ú<lambda>Éóz)DataServer.sync_started.<locals>.<lambda>)ÚanyÚmaprE)rZr-r-r.rˆÇszDataServer.sync_startedcGs"t|ƒdkr4| d¡|j d¡tdd|jƒ}n^g}xX|D]P}t|tƒrR|j}d}||jkrj|j|}|dkr„t dt
|ƒƒq>|  |¡q>Wt|ƒdkr¢dSd}zlxf|D]^}|dk r®|j s®y6| 
¡| d|jd|j¡|j d t
|jƒ¡Wt|ƒYq®Xq®WWd| ¡XdS)
Nrzstart_sync allz start:allcSs|dk S)Nr-)Úitr-r-r.Ðz'DataServer.start_sync.<locals>.<lambda>zdevice no meta : Ú
start_syncz->zstart:)rWÚlog_inforRÚbroadcast_commandÚfilterrEr|ÚDevicerryr†r‡rˆrYr…ÚfilepathrÚ_start_runtime)rZr…r„ÚdrprqÚruntimer-r-r.Ës8 
 



 

zDataServer.start_synccGt|ƒdkr>|jdk r>| d¡|j d¡tdd|jƒ}ng}xŠ|D]}t|tƒr\|j}d}||jkrt|j|}|dk rH|  ¡| 
¡|j   |j
d¡d|j|<| d|j
¡|j dt|j
ƒ¡qHW|jsÜ| ¡dS) Nrz
stop_sync allzstop:allcSs|dk S)Nr-)r­r-r-r.z&DataServer.stop_sync.<locals>.<lambda>Trdzstop:)rWrRrEr|rrlrrIrr†rˆrc)rZr…r„rpr-r-r.rds*
 




2021-12-22 14:29:56 +08:00
zDataServer.stop_synccCsJxD|jD]:}|j|dk r|j|jr4d|j|_q|j| ¡qWdS)NT)rErˆÚsync_file_requestÚ sync_file)rZrpr-r-r.r¸Qs   zDataServer.sync_filecCs„i}xZ|jD]P}|j|dk r |jjt|jƒdœ||j|j<}t|tƒr | d|j i¡q Wt
2021-12-20 14:52:55 +08:00
t dd|j j
ƒƒ|j|j|dœS)N)rÚ file_pathÚlibrarycSst|ƒS)N)r†)Úpathr-r-r.lz*DataServer.hardware_test.<locals>.<lambda>)rkÚchannelr¶)rErr†r…r|ÚGeneratorDataRuntimeÚupdaterºrirBrCrHrK)rZr„Úrcr-r-r.Ú
hardware_test[s 
zDataServer.hardware_testcCsR|jdks|jjr"| t|ƒ¡|_|jdks4|jjrN| d¡| t|ƒ¡|_dS)Nzstart rec runtime thread)rFrmrnÚSpiRuntimeThreadrJrQro)rZr-r-r.r´rs 
zDataServer._start_runtimecCs|jdk r|j ¡d|_dS)N)rFre)rZr-r-r.rc~s

zDataServer._stop_runtimecCs
d|_dS)N)rL)rZr-r-r.Úopen_cache_client„szDataServer.open_cache_clientcCs*|jdkr| ¡|jjs$|j ¡|jS)N)rLÚ
socket_openedÚ open_socket)rZr-r-r.Ú_ensure_cache_clientˆs

2021-12-22 14:29:56 +08:00

zDataServer._ensure_cache_clientcCs2|j}d|_|dk r.| d¡| ¡| ¡dS)Nzclose cache client)rLrQr]Ú close_socket)rZrqr-r-r.Úclose_cache_clients 
zDataServer.close_cache_clientc Cs.tƒ}d}|j ¡}ddddg}x|D]ü}|j}||_d}xtdƒD] }|d}qHW||j ¡kr(|j|dk r(| |¡}tƒ|d kržtd
2021-12-20 14:52:55 +08:00
|tƒ|ƒtƒ}|dk r(yj|j|jrÜd|j|_td |j|j  
2021-12-22 14:29:56 +08:00
¡ƒ|j|  |¡tƒ|d krtd
2021-12-20 14:52:55 +08:00
|tƒ|ƒtƒ}Wn
2021-12-22 14:29:56 +08:00
dSd}q(W|S)NFr7r8r:r9ri,rgš™™™™™¹?ztime, spi_recvzq size= gš™™™™™©?z time, queueT) rrEÚkeysrIÚselectÚrangeÚspi_recvr£Z
queue_flagZ
_queue_recÚqsizeZ
2021-12-20 14:52:55 +08:00
put_rec_queue) rZÚ current_timeÚretZ
devicelistrpÚsyncÚcountÚdatar-r-r.Úrecv_data_form_spišs8
2021-12-22 14:29:56 +08:00
  
2021-12-20 14:52:55 +08:00
  
zDataServer.recv_data_form_spicCsD|j ¡}|j dt|ƒ¡d|ddœ}|jjdt|ƒdddS)Nzruntime error: zdevice_instruction/0Ú interrupt)Úheaderr…Ú instructionÚdevice_instructionT)Zinter)rVrtrRr†Zpublishr/)rZrÚcontentr-r-r.Ú
rec_updateÈs
2021-12-22 14:29:56 +08:00
zDataServer.rec_update)rr'cCsdS)Nr-)rZrr-r-r.Úrecv_data_foreach_runtimeÕs=z$DataServer.recv_data_foreach_runtimecCs |jdk r||j_|j ¡dS)N)rIÚflush)rZr…r-r-r.Ú spi_flushs

2021-12-20 14:52:55 +08:00
zDataServer.spi_flushcCs<|jdk r8||j_|j ¡tdƒ|j ¡|j ¡dS)Ng{®Gáz„?)rIÚ request_datarr`)rZr…r-r-r.Úspi_reset_ram_headers
2021-12-22 14:29:56 +08:00

2021-12-20 14:52:55 +08:00

2021-12-22 14:29:56 +08:00

2021-12-20 14:52:55 +08:00
zDataServer.spi_reset_ram_header)r…ÚaddressrÒcCs(|j}|dkrdS||_| ||¡dS)N)rIZ write_memory)rZr…r-r-r.Úspi_send%s  zDataServer.spi_sendc C|j}|dkrdS| |¡rt|j}|dkr.dS| ¡}|dkrBdSt|ƒd}d}d}||||g}| |¡t|ƒS|j}|dkr†dS|jddr | |¡}|S| ¡dSdS)NréÿrT)Úflip) rIÚ _is_usb_portZ_usbÚ recv_memoryrWÚextendr—ÚchangedrÝ) rZr…Ú data_lengthrÕÚ data_counterÚ data_headerZspi_datar-r-r./s0
2021-12-22 14:29:56 +08:00
  
2021-12-20 14:52:55 +08:00
 
 zDataServer.spi_recvcCs:d}||krdSdS|t_tjddr.t ¡St ¡SdS)TF)))rZr…Zmax_spi_port_numberr-r-r.bs zDataServer._is_usb_port)N)F)N)3rwÚ
2021-12-22 14:29:56 +08:00
__module__Ú __qualname__r<rraÚboolreÚOptionalr†r`rNr^rlrkÚListrr~r‰ÚUnionr”r
2021-12-20 14:52:55 +08:00
ÚAnyStrr˜Úpropertyrˆrdr¸Ú JSON_OBJECTrÀr´rcrr—Ú
2021-12-22 14:29:56 +08:00
__classcell__r-r-)r\r.r29sT G
2021-12-20 14:52:55 +08:00
7   i 
2021-12-22 14:29:56 +08:00
L8
   .
? 
3r2c@s0eZdZdZeeeedœddZe edœddƒZ
e edœdd „ƒZ e e dœd
d ƒZ
e
je d œd
d ƒZ
e edœddƒZe eedœddƒZejeed œddƒZeedœddZejd$eeedœddƒZddZe edœddƒZe edœddƒZe eedœddƒZ d d!„Z!d"d#„Z"dS)%Ú DataRuntime)Ú_serverrÚ
_meta_fileÚ _data_formatÚ
_sync_startedr·Ú_writer)Úserverr…rcCs>||_||_||_||_t|tƒr(||_d|_d|_d|_ dS)NF)
2021-12-20 14:52:55 +08:00
rr|ÚRecDataDecoderr…)rZr…rr-r-r.r<xs
zDataRuntime.__init__)r'cCs|jS)N))rZr-r-r.ŠszDataRuntime.servercCs|jS)N)r)rZr-r-r.r…ŽszDataRuntime.devicecCs|jS)N))rZr-r-r.rˆszDataRuntime.sync_started)ÚvaluecCs ||_|r| ¡n| ¡dS)N)Ú_openÚ_close)rZr-r-r.rˆs
cCs:t|jttfƒr4t |j¡|_t|jtƒr4|j|j_|jS)N)r|r†r—r˜r™r…)rZr-r-r.rŸs
 
zDataRuntime.data_formatcCs|j}t|tƒr|jSdSdS)N)rr|Útimer)rZrr-r-r.Ú
data_timerªs
zDataRuntime.data_timercCs"|j}t|tƒr|dk r||_dS)N)rr|r)rZrr-r-r.r´scCs
2021-12-22 14:29:56 +08:00
|j ¡S)N)rÚmessage)rZr-r-r.Úget_data_message»szDataRuntime.get_data_messageNcCsdS)Nr-)rZr-r-r.Ú sync_data¾szDataRuntime.sync_datacCs<|j}|jr|j|jjd|j}|dk r2| ¡d|_dS)N)r“F)Úis_dirtyÚwriterörX)rZÚmetaÚwr-r-r.r¸ÃszDataRuntime.sync_filecCs|jjS)N))rZr-r-r.ÐszDataRuntime.filepathcCs|jS)N))rZr-r-r.ÔszDataRuntime.meta_filecCs|jS)N))rZr-r-r.Ú file_writerØszDataRuntime.file_writercCsj| ¡t|jtƒr|jj|_|j}|j}|dk r:| ¡| |j ¡|_|j 
2021-12-20 14:52:55 +08:00
¡t |jd|j j
ƒ|_dS)NrŒ)rÿr|r˜rÚ remove_fileÚreopenÚformatrrrX)rZrrr-r-r.Üs 

zDataRuntime._opencCsX|jdk r|j ¡|jdk r8|jjr8|jj|jjdd|_t|jt ƒrT|j
j |_dS)N)r“) rerrrXr|r˜r)rZr-r-r.rÿòs
2021-12-22 14:29:56 +08:00

2021-12-20 14:52:55 +08:00

2021-12-22 14:29:56 +08:00
 
zDataRuntime._close)N)#rwÚ __slots__r2rr
2021-12-20 14:52:55 +08:00
r<r…rˆÚsetterr˜rÚTimerrr†rÚabcÚabstractmethodrïr—rr¸r”rr rÿr-r-r-r.ts>
 
2021-12-22 14:29:56 +08:00
)Ú metaclasscsxeZdZdZeeedœfdd Zee dœddƒZ
ee dœdd „ƒZ de
eedœd d Ze
e dœd
dZZS))Ú
_generatorÚ_libraryÚ _start_time)r…ctƒ |||tj¡|j}|j|_}tƒ}|j|_|dkrH|  d¡n
|  |¡|j
|_ |j |_ |j
|_
|j|_||_| ¡|_| d|jjj¡d|_dS)NÚ GENERATORÚsinz
use generator)r;r<ÚNulDataDecoderÚNAMErrrrBZ
set_generatorrr…Ú sample_rateÚamp_gainZ amplitudeZ
2021-12-20 14:52:55 +08:00
get_generatorrrQr\rwr)rZr…rr[)r\r-r.r<s"  
2021-12-22 14:29:56 +08:00

zGeneratorDataRuntime.__init__)r'cCs|jS)N)r)rZr-r-r.!szGeneratorDataRuntime.librarycCs(tƒ}|jdkr||_dS||jSdS)Ng)rr)rZÚtr-r-r.Ú time_pass%s

zGeneratorDataRuntime.time_passNcCsR|j |j¡}~|dks$t|ƒdkr(dS|j}|dk r@| |¡dd|DƒSdS)NrcSsg|] }| ¡qSr-)Úencode)Ú.0rµr-r-r.ú
<listcomp>;sz2GeneratorDataRuntime.sync_data.<locals>.<listcomp>)rÚget_datarrWr r)rZr„rr-r-r.r.s
zGeneratorDataRuntime.sync_datacCs
|j ¡S)N)rr)rZr-r-r.r=sz%GeneratorDataRuntime.get_data_message)N)rwr
r2rr
r<r†Úfloatrr—rrr-r-)r\r.scs†eZdZdZeeeedœfdd Ze e
2021-12-20 14:52:55 +08:00
dœfdd ƒZ de e
edœd d
2021-12-22 14:29:56 +08:00
Zeeeeeefd œd d
2021-12-20 14:52:55 +08:00
ZedœddZZS)ÚDeviceDataRuntime)rÚ
2021-12-22 14:29:56 +08:00
_data_counterÚ_last_data_counterZ_data_chZ
_data_ch_timeÚ_mqtt_send_data_ch_levelÚ_timerÚ_timer_of_not_sendÚ
2021-12-20 14:52:55 +08:00
_get_rec_dataÚ_cycle_start_timeÚ_time_stamp_listÚ
2021-12-22 14:29:56 +08:00
_prev_dataÚ_prev_delta_timeÚ_prev_time_stampÚ
2021-12-20 14:52:55 +08:00
_task_fininsh)r…rcs`tƒ ||||¡d|_tƒ|_d|_i|_d|_d|_d|_ g|_
2021-12-22 14:29:56 +08:00
g|_ g|_ g|_
2021-12-20 14:52:55 +08:00
d|_dS)NF)r;r<rrr$r%r&r'r(r)r*r,r-r.r/)rZr…r)r\r-r.r<UszDeviceDataRuntime.__init__)r'ctƒj}t|tƒr |jjj|_n¶t|tƒr||jjj|_|jjj|_ |jj 
d¡|_ |jj 
d¡|_ |j
|_
|j|_|j|_nZt|tƒrÖ|jjj|_|jjj|_ |jj 
2021-12-22 14:29:56 +08:00
d¡|_ |jj 
2021-12-20 14:52:55 +08:00
d¡|_ |j
2021-12-22 14:29:56 +08:00
|_
2021-12-20 14:52:55 +08:00
|j|_|j|_|S)NZ ADC_CLOCKZAXIS_CH)r;rr|ÚTDC4VAF2DataDecoderrŠrrÚTDC4VCDataDecoderr¼Ú_channelÚ
2021-12-22 14:29:56 +08:00
get_parameterÚ
2021-12-20 14:52:55 +08:00
_adc_clockÚ_axis_chr,r-r.ÚNeuliveThreeOneDataDecoder)rZÚdecoder)r\r-r.rns(