Files
controller-wisetopdataserver/python/biopro/device/__pycache__/device_cc2650.cpython-37.opt-2.pyc
T

554 lines
59 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°ƒã @sddlZddlmZddlmZddlmmmZddlTddl Tddl
2021-12-20 14:52:55 +08:00
m Z ddl m
2021-12-22 14:29:56 +08:00
Z
ddlmZmZmZddlmZdd lmZmZdd
lmZdd lmZmZmZdd lmZdd
lmZddl Tddl!m"Z"m#Z#ddl$m%Z%m&Z&ddl'm(Z(m)Z)m*Z*m+Z+ddl,m-Z-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ej5e6e7dœddZ8e"dddddfe9e:e;e;e<e=e6e7dœddZ>Gddde%ƒZ?Gddde@eAjBdZCGd d!„d!eDƒZEGd"d#„d#eCe-ƒZFGd$d%„d%eCe-ƒZGGd&d'„d'e@eAjBdZHGd(d)„d)eCe-ƒZIGd*d+„d+eCe-ƒZJdS),éN)Úcast)Útime)Ú*)ÚCompletedDevice)ÚLowLevelHardwareInterface)ÚCC2650Ú
CC2650CentralÚGapEvt_LinkTerminated)Ú ErrorCode)Ú RecvTimeoutÚUnexpectedEvent)Ú
GapParameters)ÚP3PinÚ OutputPinÚGPIO)ÚSerialTimeoutException)ÚSelector)Ú
EMPTY_ADDRESSÚ address_str)Ú
CliOptionsÚ cli_flags)ÚYELLOWÚCYANÚhex_lineÚhex_str)Ú SynchronizedÚ synchronized)ÚTable)Ú ApiRequests)Ú DeviceAPI)ÚinfoÚreturnc Csjd}d}d}d}xv|jD]l}|jtjjkr2|j}q|jtjjkry.|jdd}|jdd}|jdd}Wqtk
rYqXqW|dks |dks |dkr¤dS|dkr,t|ƒdkr¾dS|dddkrèt  
d|dd¡d }nd}t |d |d
|d |d|d|dƒ}t | 
¡||j|d S|dd d
krbt d d d d d d ƒ}t | 
¡||jƒSdSdS)é
sBPHSéésBATz<Héréé)ÚbatterysHS)ÚdataZad_typeÚcc2650ZGapAdvertisingDataTypeZLOCAL_NAME_COMPLETEZad_dataZMANUFACTURER_SPECIFICÚ
IndexErrorÚlenÚstructÚunpackÚDeviceSerialNumberÚDeviceResponseInfoÚdecodeÚaddress)r Ú
local_nameÚ company_codeÚ version_infoÚ battery_infor*Úbattery_percentageÚ
2021-12-20 14:52:55 +08:00
serial_number©r:ú@/home/pi/wisetopdataserver/python/biopro/device/device_cc2650.pyÚis_headstage_device|sB 
2021-12-22 14:29:56 +08:00

 
r<)Ú
device_macÚlocal_addr_typer4r5r6r7r!cC|dks|dks|dkrdS|dkrŠ|dddkrJ|dd>|dB}nd}t|d|d|d|d|d|d ƒ}t|||||d
S|ddd kr¸tddddddƒ}t|||ƒSdSdS) N)ÚSr%)r?Úr"rr'r(r&)r)Ú addr_typesHS)r0r1)r=r>r4r5r6r7r8r9r:r:r;Ú#is_headstage_device_central_version´s*
 rGc@s*eZdZddZedƒedœddƒZdS)ÚCC2650DeviceOptionscCs
d|_dS)NF)Ú"flag_disable_data_length_extension)Úselfr:r:r;Ú__init__ßszCC2650DeviceOptions.__init__z--disable-data-length-extension)ÚoptcCs
2021-12-20 14:52:55 +08:00
d|_dS)NT)rI)rJrLr:r:r;Ú_disable_data_length_extensionâsz2CC2650DeviceOptions._disable_data_length_extensionN)Ú__name__Ú
2021-12-22 14:29:56 +08:00
__module__Ú __qualname__rKrÚstrrMr:r:r:r;rHÞsrHcs(eZdZUdZdZdZdZdZee d<dZ
2021-12-20 14:52:55 +08:00
ee d<de fe e
eeeeddœfd d
Zee d œd d
ƒZee
2021-12-22 14:29:56 +08:00
d œddƒZeed œddƒZd%ddZejeeeedœddƒZejeeedœddƒZeeedœddZeje eefe!dœdd „ƒZ"e#ed œd!d"„ƒZ$e#ed œd#d$„ƒZ%‡Z&S)&ÚCC2650MasterDeviceéé!é$é(CC2650_RESET_PINÚCC2650_UART_IRQ)ÚmasterÚ interfaceÚoptionsÚlog_nameÚlog_name_colorr!cs$tƒ ||¡||_||_||_dS)N)ÚsuperrKÚ_masterÚ
2021-12-20 14:52:55 +08:00
_interfaceÚ_options)rJrYrZr[r\r])Ú __class__r:r;rKùszCC2650MasterDevice.__init__)r!cCs|jS)N)r_)rJr:r:r;rYszCC2650MasterDevice.mastercCs|jS)N)r`)rJr:r:r;rZ szCC2650MasterDevice.interfacecCs|jS)N)ra)rJr:r:r;r[
2021-12-22 14:29:56 +08:00
szCC2650MasterDevice.optionsTcCs|j ¡d|_dS)N)r`Úclose)rJÚrelease_resourcer:r:r;Úshutdowns
2021-12-20 14:52:55 +08:00
zCC2650MasterDevice.shutdown)ÚdeviceÚhandler!cCsdS)Nr:)rJrfrgr:r:r;Úread_characteristics z&CC2650MasterDevice.read_characteristic)rfrgr*cCsdS)Nr:)rJrfrgr*r:r:r;Úwrite_characteristic"sz'CC2650MasterDevice.write_characteristic)rfÚfuncÚparacGs"|tjkr|j|f|žŽdSdS)NTF)ÚInternalInstructionÚPREDEFINED_NOTIFYÚ
2021-12-22 14:29:56 +08:00
set_notify)rJrfrjrkr:r:r;Úhandle_internal_instruction,s
z.CC2650MasterDevice.handle_internal_instruction)rfÚenablecCsdS)Nr:)rJrfrpr:r:r;rn3szCC2650MasterDevice.set_notifycCs"|jdkrtjtjdd|_|jS)NT)Úinitial)rWrÚget_usedrÚRESET)Úclsr:r:r;Ú
get_reset_pin7s
2021-12-20 14:52:55 +08:00
z CC2650MasterDevice.get_reset_pincCs"|jdkrtjtjdd|_|jS)NT)rq)rXrrrrÚMEM_RST)rtr:r:r;Úget_uart_irq_pin>s
z#CC2650MasterDevice.get_uart_irq_pin)T)'rNrOrPÚFEATURE_HANDLEÚ
RETURN_HANDLEÚCOMMAND_HANDLEÚ
NOTIFY_HANDLErWrÚ__annotations__rXÚWHITEÚ MasterDevicerrHÚOptionalrQÚintrKÚpropertyrYrZr[reÚabcÚabstractmethodÚbytesrhriÚDeviceÚAnyroÚUnionÚboolrnÚ classmethodrurwÚ
2021-12-22 14:29:56 +08:00
__classcell__r:r:)rbr;rRès4
  $
2021-12-20 14:52:55 +08:00
  rR)Ú metaclassc@seZdZdJeeeedœddZeedœddƒZ ee
2021-12-22 14:29:56 +08:00
dœdd „ƒZ ee j
dœd
2021-12-20 14:52:55 +08:00
d ƒZeedœd d
ƒZeedœddƒZeedœddƒZejedœddƒZeedœddƒZedœddZeedœddZeeedœddZeeeedœddZeeed œd!d"„Zee
dœd#d$„ƒZd%d&„Zeedœd'd(„ƒZeedœd)d*„ƒZ ee!dœd+d,„ƒZ"ee
dœd-d.„ƒZ#d/d0„Z$d1d2„Z%d3d4„Z&e
eed5œd6d7„Z'e
d8œd9d:„Z(edœd;d<„Z)edœd=d>„Z*edœd?d@„Z+eedAœdBdC„Z,ee-dœdDdE„Z.dFdG„Z/dHdI„Z0dS)KÚ CC2650DeviceN)Ú device_idrYÚ
2021-12-22 14:29:56 +08:00
response_infocCs˜|j}|dkrtdƒ||_||_tj|_||_t  ¡|_
t |_ |dk rj|j
|_|j|_ |jdk rj|j|_d|_d|_d|_i|_d|_d|_d|_dS)NzNoneType device nameFédZrecording_dataóÚ)Ú device_nameÚ TypeErrorÚ
_device_idÚ _device_namer0ÚUNKNOWNÚ_serial_numberr_r+Ú
2021-12-20 14:52:55 +08:00
LinkParameterÚ_linkrÚ_addressr9Ú mac_addressr)Ú_batteryÚ _start_flagÚ _notify_flagÚ_parentÚ_recording_file_nameÚ_coeffÚ_device_version)rJrrYrr:r:r;rKHs*

2021-12-22 14:29:56 +08:00
zCC2650Device.__init__)r!cCs|jS)N)r”)rJr:r:r;rjszCC2650Device.device_idcCs|jS)N)r•)rJr:r:r;rnszCC2650Device.device_namecCs|jS)N)r™)rJr:r:r;ÚlinkrszCC2650Device.linkcCs|jS)N)r—)rJr:r:r;r9wszCC2650Device.serial_numbercCs|jS)N))rJr:r:r;r{szCC2650Device.mac_addresscCs|jS)N)r)rJr:r:r;Ú
is_startedszCC2650Device.is_started)ÚvaluecCs*|r| tjtj¡n| tjtj¡dS)N)Úsend_instructionÚDeviceInstructionÚTYP_VISÚVIS_STIÚVIS_INT)rJr:r:r;ƒscCs|jS)N))rJr:r:r;Ú
2021-12-20 14:52:55 +08:00
notify_enableŠszCC2650Device.notify_enablecCs$|j |jtj¡}|dkr tƒ|S)N)r_rhr”rRrxÚ RuntimeError)rJÚretr:r:r;Úread_feature_maskŽszCC2650Device.read_feature_maskcCs@y|j |jtj¡Stk
r:|j d|jd¡YnXdS)Nrfzsend_command timeout)r_rhr”rRryÚSendInstructionTimeoutErrorÚlog_warnr)rJr:r:r;Úread_command_return_data—s
2021-12-22 14:29:56 +08:00
z%CC2650Device.read_command_return_data)Úins_typeÚins_operÚ instructionc
Gyt |¡Wn0tk
r>}zt|||ƒ|Wdd}~XYnX|j||f|žŽ}y|j |jtj |¡Wnt
k
r†d|_ YnVX|tj krÜ|tj
ks°|tjks°|tjkr¸d|_ n$|tjksÖ|tjksÖ|tjkrÜd|_ dS)NFT)Úvalid_ins_typeÚ
ValueErrorÚUnknownInstructionErrorÚ_encode_instructionr_rir”rRrzrÚ
VIS_STARTSÚ
VIS_STARTRrªÚ VIS_STOPSÚ VIS_STOPR)rJr´Úer*r:r:r;žs 
zCC2650Device.send_instruction)r´r!cGs€t|ƒ}|dkrJ|ddkrJtjd|d@|jd@B|d@|d@Bf|žŽStjd|d|d@|jd@B|d@|d@Bf|žŽS)Nr'rZ2B1béðéz%dBr()r-r.Úpackr)rJr´Úlengthr:r:r;r¸sz CC2650Device._encode_instruction)r*r!cCs|S)Nr:)rJr*r:r:r;Ú _decode_dataÃs zCC2650Device._decode_datacCs|jdkr| ¡|jS)Nr)Úupdate_device_version)rJr:r:r;Údevice_versionÎs
zCC2650Device.device_versionc
CyP| tjtj¡}|j |jtj|¡t dƒ|j 
|jtj ¡}|  tj|¡}WnNt
k
rx|j d|jd¡YnJtk
|j d|jd¡Yn$X|dk rÂt|ƒdkrÂt d|dd¡d}t d|dd¡d}t d|dd¡d}t d|dd …¡d}t d|d d
¡d}t d|d
d ¡d}t d|d d ¡d} d
|}d
| } t|ƒdt|ƒdt|ƒdt|ƒdt|ƒdt|ƒdt| ƒ|_dS)Ngš™™™™™¹?rfz!update_device_version no responserz<Br'r(r%r"r&r$éz%02Xú ú:z | )r¸ÚTYP_CISÚ CIS_VERSIONr_rirrRrzÚsleeprhryr-r.r/rQ)
rJÚcoder*ÚyearÚmonthÚdayÚhourÚminuteZmac1Zmac2r:r:r;Ôs*z"CC2650Device.update_device_versioncCs| ¡|jS)N)Úupdate_battery_inforœ)rJr:r:r;r)õszCC2650Device.batterycCs|jS)N))rJr:r:r;Ú calibrationúszCC2650Device.calibrationcCs|jS)N))rJr:r:r;ÚparentþszCC2650Device.parentcCs|jS)N)r )rJr:r:r;Úrecording_file_namesz CC2650Device.recording_file_namecCs
||_dS)N)r )rJr r:r:r;Úupdate_recording_file_name_infosz,CC2650Device.update_recording_file_name_infocCs
||_dS)N))rJr:r:r;Úupdate_parent_info szCC2650Device.update_parent_infocCyP| tjtj¡}|j |jtj|¡t dƒ|j 
|jtj ¡}|  tj|¡}WnJt
k
rv|j d|jd¡Yn`tk
|j d|jd¡Yn<X|dk rÖt|ƒdkrÖt d|dd¡d}|dk rÖ||_dS) Ngš™™™™™¹?rfzupdate_battery_info no responser"z<Hr'r%r)r¸ÚCIS_VOLTr_rirrRrzrhryr-r.r/)rJr*r)r:r:r; s
z CC2650Device.update_battery_info)Ú device_typer!cCs,|jdkrdSt|jƒdkr&| |¡|jS)Nr)r-Úupdate_calibration_info)rJr:r:r;Úcalibration_info(s


zCC2650Device.calibration_info)c
2021-12-20 14:52:55 +08:00
Csg}|dkrnx\tdƒD]P}| tjtj|¡}|j |jtj |¡|j 
2021-12-22 14:29:56 +08:00
|jtj ¡}|  | 
2021-12-20 14:52:55 +08:00
tj|¡¡qWnl|dkrÄd}d}xV|dkr¾yP| tjtj|¡}|j |jtj |¡|j 
2021-12-22 14:29:56 +08:00
|jtj ¡}|  | 
tj|¡¡Wtk
r"}z$t|ƒ|j d|jd|¡tWdd}~XYq„tk
2021-12-20 14:52:55 +08:00
r}zBt|ƒ|j d|jd|¡|d 7}|d
krr|j |j¡PWdd}~XYq„Xt|ƒdkrœ|d 7}q„|d 7}|d
kr„|j |j¡Pq„Wn|d krd}d}x|d kryP| tjtj|¡}|j |jtj |¡|j 
2021-12-22 14:29:56 +08:00
|jtj ¡}|  | 
2021-12-20 14:52:55 +08:00
tj|¡¡Wtk
rx}z$t|ƒ|j d|jd|¡tWdd}~XYtk
}zBt|ƒ|j d|jd|¡|d 7}|d
2021-12-22 14:29:56 +08:00
krÈ|j |j¡PWdd}~XYn<Xt|ƒdkrò|d 7}n"|d 7}|d
2021-12-20 14:52:55 +08:00
krÚ|j |j¡PqÚWn¼|d
krzd}d}x¦|dkrvyX| tjtj|¡}|j |jtj |¡tdƒ|j 
|jtj ¡}|  | 
2021-12-22 14:29:56 +08:00
tj|¡¡Wn tk
2021-12-20 14:52:55 +08:00
}z"t|ƒ|j d|jd¡tWdd}~XYtk
2021-12-22 14:29:56 +08:00
r6}z@t|ƒ|j d|jd¡|d 7}|d
2021-12-20 14:52:55 +08:00
kr&|j |j¡PWdd}~XYn<Xt|ƒdkrP|d 7}n"|d 7}|d
2021-12-22 14:29:56 +08:00
kr4|j |j¡Pq4Wn`x^td ƒD]R}| tjtj|¡}|j |jtj |¡|j 
|jtj ¡}|  | 
tj|¡¡q„Wd |¡|_|jdkr|j dd¡n|j dt|jƒ¡dS)TDC4VAF2éÚTDC4VCrr"rfz#update_calibration_info no responsez'update_calibration_info no response - 2r'r%ÚNeuliveThreeOnerEÚ
EISZeroOnerÅgš™™™™™¹?rÚ
cali_coeffz(None))Úranger¸ÚCIS_CALIr_rirrRrzrhryÚappendrÂÚprintr°Ú
BaseExceptionr¬Úresetr-Újoinr¡Ú log_verboser)rJZcoeffÚirÌr*Z
request_timesr½r:r:r;1









 





  z$CC2650Device.update_calibration_infocCs~y*| tjtj|¡}|j |jtj|¡WnJt k
rP|j 
d|jd¡dSt k
rt|j 
d|jd¡dSXdSdS)Nrfz$update radio frequency timeout errorFz$update radio frequency runtime errorT) r¸ÚCIS_RFr_rirrRrz)rJÚradio_frequencyrÌr:r:r;Úupdate_radio_frequency×sz#CC2650Device.update_radio_frequencycCs~y*| tjtj|¡}|j |jtj|¡WnJt k
rP|j 
d|jd¡dSt k
rt|j 
d|jd¡dSXdSdS)Nrfz#update led brightness timeout errorFz#update led brightness runtime errorT) r¸ÚCIS_LEDr_rirrRrz)rJÚled_brightnessrÌr:r:r;Úupdate_led_brightnessäsz"CC2650Device.update_led_brightnesscCs~y*| tjtj|¡}|j |jtj|¡WnJt k
rP|j 
d|jd¡dSt k
rt|j 
d|jd¡dSXdSdS)Nrfz,update accelerator sensitivity timeout errorFz,update accelerator sensitivity runtime errorT) r¸ÚCIS_ASr_rirrRrz)rJÚaccelerator_sensitivityrÌr:r:r;Úupdate_accelerator_sensitivityñsz+CC2650Device.update_accelerator_sensitivity)Úrf_powerr!cCs|j |j|¡S)N)r_Úcentral_rf_setr)rJr:r:r;þszCC2650Device.central_rf_setcCs|j |j¡S)N)r_Úcentral_version_getr”)rJr:r:r;sz CC2650Device.central_version_getcCs
d|jS)Nz
device[%d])r”)rJr:r:r;Ú__str__szCC2650Device.__str__cCs
d|jS)Nz
device[%d])r”)rJr:r:r;Ú__repr__szCC2650Device.__repr__)N)1rNrOrPr€rRrr1rKrrrQrr+r˜r0r9ÚADDRESSrrˆÚsetterr«r„r)ÚdictrÔr×Úliströr:r:r:r;Fs\ 
 ! '


cseZdZdZdZdZdZdZee e
dœfdd Z e d œfd
d Z
e eed œd
dZejdœddZejdœddZee ejefdœddZedHeee dœddƒZedIddƒZddZedd „ƒZed!d"„ƒZedJd$d%„ƒZ ee d&œd'd(„Z!edKe"e#gdfe$d+œd,d-„ƒZ%ee#d&œd.d/„Z&ee#eed0œd1d2„ƒZ'eedœd3d4„ƒZ(eedœd5d4„ƒZ(edLe e$d œd6d7„ƒZ)ee e ee*d8œd9d:„ƒZ+ee e e*d;œd<d=„ƒZ,ee e-fe$d>œd?d@„Z.ee e/e0e/e/fe1dAœdBdC„Z2edDdE„ƒZ3e0e/e4fd&œdFdG„Z5‡Z6S)MÚCC2650SingleMasterDeviceéô)rErSr)rYrZr[ctƒj|||tdt |¡tdƒ|j|_t|ƒ|_d|_ t
  ¡|_ g|_
d|_d|_d|_t
 t
j|jt
j|jt
j|jt
jdt
jdt
jdt
jdt
jdi¡|_dS)N)r]zcreate single host test 2650r&)r^rKrrrIrMrÚ_cc2650Ú_infor+r˜r™Ú_foundÚ_handleÚ_deviceÚ_scan_max_timeZRecvCondÚGapEvt_DeviceInitDoneÚ_device_init_doneÚGapEvt_LinkParamUpdateÚ_device_link_updater Ú_device_link_terminatedZAttEvt_MtuUpdatedÚ AttEvt_WriteÚGapEvt_LinkEstablishedÚGapEvt_DeviceDiscoveryÚGapEvt_DeviceInformationÚ_cond)rJrYrZr[)rbr:r;rKs(


z!CC2650SingleMasterDevice.__init__)Úlevelcstƒ |¡|j |¡dS)N)r^Ú
set_log_levelrÿ)rJr)rbr:r;r1s z&CC2650SingleMasterDevice.set_log_level)rfr!cCs|jS)N)r)rJrfr:r:r;Ú
get_device5sz#CC2650SingleMasterDevice.get_device)ÚeventcCs||_| ¡dS)N)rÚconsume)rJrr:r:r;r8sz*CC2650SingleMasterDevice._device_init_donecCs,| |j¡}|dk r | |j¡| ¡dS)N)rrgÚupdater£r)rJrrfr:r:r;r=s  z,CC2650SingleMasterDevice._device_link_updatecCst|tƒr|}nft|tƒr"|j}nTt|tjƒr>|j}| ¡n8t|dƒrXtt |dƒƒ}nt|dƒrrtt |dƒƒ}ndS| 
d|¡| ¡t  ¡dS)NrgrÚdevice_link_terminated) Ú
isinstancer€rr+r rgrÚhasattrÚgetattrréÚ
RecvReturn)rJrÚhr:r:r;r Is

 


 z0CC2650SingleMasterDevice._device_link_terminatedNT)rfc CsB| d¡| ¡|"| ¡|r4| ¡| ¡WdQRXdS)Nrç)Úlog_infoÚreset_internalÚreset_hardwareÚreset_softwareÚ
init_hardware)rJrfÚsoftware_resetr:r:r;cs
zCC2650SingleMasterDevice.resetcCsT| d¡d|_d|_d|_| ¡|r2|j ¡d|_d|_d|_d|_d|_ dS)Nre)
rrrrrr`rcrÿr™r)rJrdr:r:r;revs

z!CC2650SingleMasterDevice.shutdowncCs |j ¡d|_d|_d|_dS)N)rÚclearrrr)rJr:r:r;rŒs
z'CC2650SingleMasterDevice.reset_internalcCs:| ¡}| d¡| d¡tdƒ| d¡tdƒdS)Nzreset (hardware)Fgš™™™™™¹?T)ruÚoutputrË)rJÚpinr:r:r;rs 


z'CC2650SingleMasterDevice.reset_hardwarec
CsX| d¡y|j ¡|j tj¡Wn,tk
rR}ztdƒ|Wdd}~XYnXdS)Nzreset (software)zdevice CC2650 reset fail)rÿZ hci_resetÚ recv_utilr+ZHciEvt_CommandCompleterr )rJr:r:r;rŸs 

z'CC2650SingleMasterDevice.reset_softwarer'cC|j ¡|jjd|jdd|j tj|jd¡|j tj|jd¡|j tj |j
¡|j tj |j ¡|j tj
|j¡|j tj|jd¡|jjd|j|ddS)N.r')ÚwhenÚtimeoutr)rÿZgap_device_initr$rÚgap_set_parameterr
ZTGAP_CONN_EST_INT_MINÚESTABLISH_LINK_INTERVALZTGAP_CONN_EST_INT_MAXZTGAP_CONN_EST_LATENCYÚESTABLISH_LINK_LATENCYZTGAP_CONN_EST_SUPERV_TIMEOUTÚESTABLISH_LINK_TIMEOUTZTGAP_GEN_DISC_SCANÚSCAN_DISCOVER_TIME_MINÚTGAP_LIM_DISC_SCANr)rJr&r:r:r;r«s
z&CC2650SingleMasterDevice.init_hardware)r!cCsdgS)Nrr:)rJr:r:r;Úavailable_device¾sz)CC2650SingleMasterDevice.available_devicer&F)Úcallbackr!cˆj|kr8|ˆ_ˆj tjd|¡ˆjjdˆjddgˆ_tj dœfdd }ˆj 
¡ˆj  tj |i¡}y&ˆjjtj ||dd}|j
tjjkStk
dSXdS) Niè.r')r%r&)r csD| ¡t|ƒ}|dk r@ˆ dt|jƒ|j¡ˆ |¡ˆ|ƒdS)found)rr<rrrr9)r Úresponse)r.r/rJr:r;rËs 
z7CC2650SingleMasterDevice.scan_callback.<locals>._handleF)rrÿr'r
r,r$rrr+r
Zgap_device_discoveryÚcoverr Ú event_statusr
ÚSUCCESSr )rJr.r&Ú
all_devicerÚcondrr:)r.r/rJr;Ú
scan_callbackÁs


 z&CC2650SingleMasterDevice.scan_callbackcCs|jS)N)r)rJr:r:r;r/ãszCC2650SingleMasterDevice.found)r0r!c
Cs*|jdk rtdƒ|j}t |¡}| t|¡|j |¡y|jj tj
|j dd}Wn.t k
r}ztt
|ƒ|Wdd}~XYn¤X|jtjkrštt
|ƒt|ƒtkr"|j|_t|j||ƒ|_}| |j¡| t|¡y| |¡Wn2t k
r}zt|ƒd|_Wdd}~XYnX|SdSdS)Nzcannot connect any morer&)r%r&)rrr+rrÚDEVICE_CONNECTINGrÿZgap_establish_linkr$r rr ÚDEVICE_CONNECT_FAILr2r
r3Útyper rgrrÚDEVICE_CONNECTEDÚ
_connect_postrå)rJr0r3Ú address_srr­r:r:r;Úconnectæs0

   
  z CC2650SingleMasterDevice.connectcCs2|js.|j |j|j¡|jjtj|jdddS)Nr')r%r&) rMrÿÚatt_exchange_mturÚMTU_SIZEr$r+ÚAttEvt_ExchangeMTUr)rJrfr:r:r;r;sz&CC2650SingleMasterDevice._connect_postcCs2|js.|j |j|j¡|jjtj|jdddS)Nr')r%r&) rMrÿr>rr?r$r+r@r)rJrfr:r:r;r;sc
C| t|¡|j |j¡|j tjdi¡}zŒy|jj tj
|ddWnjt k
r€|  d¡| 
¡| ¡|jdddStk
}z|  dt|ƒ¡dSd}~XYnXdSWd| t|¡d|_d|_XdS)Nr')r%r&zdisconnect time out)r&Fzsuppressed errorT)rÚDEVICE_DISCONNECTINGrÿZgap_terminate_linkrrr1r+ÚEvt_CommandStatusr$r r rrrrQÚDEVICE_DISCONNECTEDr)rJrfÚforcer5r:r:r;Ú
disconnects&  
  z#CC2650SingleMasterDevice.disconnect)rfrgr!c
Ctjdœdd}|j tj|i¡}|j |j|¡y|jjtj|dd}Wn,t k
rv}zt
dƒ|Wdd}~XYn.X|j t j
krŽtdƒn|j t jkrždS|jSdS)N)ÚstatuscSsX|jtjkr| ¡n>|jtjkr6| ¡t |¡n|jtjkrT| ¡t |¡dS)N)r2r
r3rÚPendingr+rÚ NotConnected)rFr:r:r;rBs 
   z=CC2650SingleMasterDevice.read_characteristic.<locals>._handler%)r&)r+rBrr1rÿZatt_readrr$Ú AttEvt_Readr r2r
rHÚ SendInstructionNotConnectedErrorrGr*)rJrfrgrr5rr:r:r;rh@s   
 z,CC2650SingleMasterDevice.read_characteristic)rfrgr*c
Ctjdœdd}|j tj|i¡}d}xž|dkrº|j |j||¡y|jjtj|dd}Wn,t k
r†}zt
dƒ|Wdd}~XYq(X|j t j
kržtdƒq(|j t jkr¶|d7}q(q(Pq(Wt
ddƒdS) N)rFcSsX|jtjkr| ¡n>|jtjkr6| ¡t |¡n|jtjkrT| ¡t |¡dS)N)r2r
r3rrGr+rrH)rFr:r:r;rgs 
   z>CC2650SingleMasterDevice.write_characteristic.<locals>._handlerr%)r&r'Úpending)r+rBrr1rÿÚ att_writerr$r
r r2r
rHrJrG) rJrfrgr*rr5Úcounterrr:r:r;rics"  
 
 z-CC2650SingleMasterDevice.write_characteristic)rfrpcCt|tƒr|jj}nt|tƒr$|j}|r>| |d¡d}d}n| |d¡d}d}||j_y| |j |j
|¡Wn$t k
r”|  d|d¡YnXdS) Nz
notify enablerpsznotify disableÚdisablesz
set notifyr&)
rrrfrrrirr{)rJrfrpÚmessager¥r:r:r;rns"


  z#CC2650SingleMasterDevice.set_notify)rfÚcommandr[r!cCs*|dk r|dkr| ¡tjS| ||¡S)att_find_information)Ú$_handle_command_att_find_informationÚDeviceCommandActionÚNOTHINGÚ_raise_command_not_found)rJrfrPr[r:r:r;Úhandle_command©sz'CC2650SingleMasterDevice.handle_commandc tj}ttdœfdd }ˆj ˆj¡yˆjjtjˆj dd}Wnt
k
r`ˆ  d¡dSXi}t ddd d
d ƒ}xÖ|D]Ì}xÄ|j
D]¸\}}d } d
}
|jdkrØ| tt|ƒ¡} | dkrî|dkrîd|d} nttttdf|ƒƒ} y>||kr"||\} }
| tjj@dkr*||ƒ} n||ƒ} Wn0tk
r\| d|d|| |
d¡YqŽX||j|jfkrzt| ƒ}
n°||jkr d| dd>| dB}
nŠ||jkr| d} | dd>| dB}| dd>| dB}
| |
f||<tj | ¡} d|}d|
}
d| ||
f}
nt| ƒdkr*t| ƒ}
| d|d|| |
t| ƒ¡qŽWq~W|jddd
d|jddd|jddd|jddd|jddd|  ¡dS)N)rr!cs,ˆj ˆj|¡ˆjjtjˆjdd}|jS)Nr')r%r&)rÿZgatt_read_characteristic_valuerr$r+rIrr*)rÚ_read)rJr:r;Ú_gatt_read_characteristic_value´szfCC2650SingleMasterDevice._handle_command_att_find_information.<locals>._gatt_read_characteristic_valuer&)r%r&z,_handle_command_att_find_information timeoutÚHandleÚUUIDZDespr¥Úcontentrrr'iðÿzCharacteristic %d.rz0x%04Xz(error)rEr(r"r%z%s %s %sT)Ú align_rightÚsplitF)r\)!r+ZGattUUIDr€r„rÿrQrZ recv_collectZAttEvt_FindInformationrr rr ÚformatZatt_strrrÚTupleZGattValuePermissionÚREADr Ú DEVICE_NAMEZGATT_CHAR_USER_DESCrZGATT_PRIMARY_SERVICEZGATT_CHARACTERZpermission_strr-rÚ
set_formatrå)rJÚGrXZ info_listZall_char_handleÚtr rgÚuuidr*ZgattZ permissionsZ char_uuidZ char_handler:)rJr;rR°sb


 
  
    &z=CC2650SingleMasterDevice._handle_command_att_find_informationcCs,d|jdkrdn|j ¡dd|jDƒdœS)Nz
cc2650:singlecSsg|] }| ¡qSr:)Úas_json)Ú.0Úfr:r:r;ú
<listcomp>sz:CC2650SingleMasterDevice.hardware_test.<locals>.<listcomp>)Úhardwarerfr/)rrfr)rJr:r:r;Ú
hardware_testsz&CC2650SingleMasterDevice.hardware_test)NT)T)r')r&F)F)7rNrOrPr?r(r)r*r+r~rrHrKr€rrrr+rrrrr‡r r rÚListrçrerrrrr-ÚCallabler1rˆr6r/r=r;rEr„rhrir…rnrQÚDictrSrVrRr†rkr:r:)rbr; sT  
 !'$"+  Srýcs˜eZdZeeeedœfdd ZedœddZ e
d5e e ed œd
d ƒZ
eed œd
dZe
d6‡fdd„ ƒZe edœddZee ed œddZd7e ee edœddZeedœddZd8eegdfedœddZe edœd d!„Zeed"œd#d$„Zd9eed œd%d&„Ze
eee ed'œd(d)„ƒZe
eeed*œd+d,„ƒZe
e eefed-œd.d/„ƒZ!e ee"e#e"e"fe$d0œd1d2„Z%e#e"e&fdœd3d4„Z'‡Z(S):ÚCC2650MultiMasterDevice)rYrZÚselectorr[cs^tƒj|||tdt |¡||_|j}ddt|ƒDƒ|_ddt|ƒDƒ|_|j |_
dS)N)r]cSsg|]}dqS)Nr:)rgÚ_r:r:r;risz4CC2650MultiMasterDevice.__init__.<locals>.<listcomp>cSsg|]}dqS)Nr:)rgrqr:r:r;ris) r^rKrrÚ _selectorÚSIZErârÿrÚ log_levelÚ_cc2650_log_level)rJrYrZrpr[Úsz)rbr:r;rK s
z CC2650MultiMasterDevice.__init__)rcCs,||_x |jD]}|dk r| |¡qWdS)N)rurÿr)rJrÚdr:r:r;r s z%CC2650MultiMasterDevice.set_log_levelNT)rfc
Cs| d¡xêtt|jƒƒD]Ø}|dks.||krd|j|<|j|}|dkrht|j|j|jƒ}|  |j
¡|j  ¡|j  
|¡yF| d|¡|,| ¡| ¡|r¸| ¡||j|<WdQRXWqtk
| d|d¡d|j|<YqXqW|sþdSttddtddt|jƒƒƒƒ}t|ƒdkr6tdƒ| d d
 tt|ƒ¡¡xŽtt|jƒƒD]|}|j|}|dk r^|j  ¡|j  
|¡y| d |¡|jd d
Wn.tk
| d |d¡d|j|<YnXq^Wttddtddt|jƒƒƒƒ}t|ƒdkrtdƒdS)Nrçz reset deviceÚfailcSs|dS)Nrr:)Úitr:r:r;Ú<lambda>Mrz/CC2650MultiMasterDevice.reset.<locals>.<lambda>cSs |ddk S)Nr'r:)ryr:r:r;rzNrrzreset fail, no device foundzavailable devicerÇz init devicer')r&cSs|dS)Nrr:)ryr:r:r;rzgrcSs |ddk S)Nr'r:)ryr:r:r;rzhrzinit fail, no device success)r-rÿrr_r`rarruÚflushrrÚselectrrrrr ÚmapÚfilterÚ enumerater¬rQr)rJrfr Úavailable_device_idr:r:r;(sZ


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



2021-12-22 14:29:56 +08:00
  
zCC2650MultiMasterDevice.reset)rfr!c
Cs|j|}|dk rô|Ø|jj|kr:|j ¡|j |¡y8| d|¡|| ¡| ¡|  ¡WdQRXWn,t
k
2021-12-20 14:52:55 +08:00
|  d|d¡d|j|<YnXy| d|¡|j ddWn,t
2021-12-22 14:29:56 +08:00
k
2021-12-20 14:52:55 +08:00
|  d|d¡d|j|<YnXWdQRX|j|dk S)Nz reset devicerxz init devicer')r&)
2021-12-22 14:29:56 +08:00
rÿrrÚchannelr`r{r|rrrrr r)rJrfrYr:r:r;Ú_resetns,
 
2021-12-20 14:52:55 +08:00
   zCC2650MultiMasterDevice._resetc| d¡xjtt|jƒƒD]X}|j|}d|j|<d|j|<|dk r| d|¡|j ¡|j |¡|j ddqWt
ƒ  ¡|j  ¡dS)NreF)rd) r-rÿrr`r{rrr|rer^rc)rJrdr€)rbr:r;reŽs
2021-12-22 14:29:56 +08:00


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

 
 
z CC2650MultiMasterDevice.shutdown)r!cCs"ttddtddt|jƒƒƒƒS)NcSs|dS)Nrr:)ryr:r:r;rz¦rz:CC2650MultiMasterDevice.available_device.<locals>.<lambda>cSs |ddk S)Nr'r:)ryr:r:r;rz§r)r}r~rrÿ)rJr:r:r;r-¥s
2021-12-22 14:29:56 +08:00
z(CC2650MultiMasterDevice.available_devicecCs
|j|S)N)r)rJrfr:r:r;rªsz"CC2650MultiMasterDevice.get_device)Ú skip_channelr!cCsjxdtt|jƒƒD]R}|dk r:|dkr(qn||t|jƒ}|j|}|j|}|dk r|dkr|SqWdS)Nr)r-rÿr)rJr„r€rwr:r:r;Ú_get_empty_master­s

2021-12-20 14:52:55 +08:00
z)CC2650MultiMasterDevice._get_empty_masterccsFx@tt|jƒƒD].}|j|}|j|}|dk r|dkr|VqWdS)N)r-rÿr)rJr€rwr:r:r;Ú_foreach_empty_master½s
2021-12-22 14:29:56 +08:00


2021-12-20 14:52:55 +08:00
z-CC2650MultiMasterDevice._foreach_empty_masterr&F)r.r!c C| d¡d}xÜ| ¡D]Ð}| d|¡|j|}|j|}|dk r|dkrd}|j|j ¡|j |¡y|j||d} Wn&t k
}
z|
}Wdd}
2021-12-22 14:29:56 +08:00
~
XYnX|p¬| }| rº|sºdSWdQRX|dk r| 
2021-12-20 14:52:55 +08:00
dt |ƒ¡|  |¡qW|S)scanFÚuse)r&Tzsuppressed error : )
2021-12-22 14:29:56 +08:00
r†rÿrr`r{rrr|r6rQ) rJr.r&r4Ú
all_resultrfr€rwÚerrorÚresultr½r:r:r;r6Ås,
 


 z%CC2650MultiMasterDevice.scan_callbackcsVgtdœfdd }x:|jD]0}|dk rx"| ¡D]}||ƒs4ˆ |¡q4WqWˆS)N)rcs xˆD]}| |¡rdSqWdS)NTF)Úmatch)rÚ _response)r­r:r;Ú_containës

z/CC2650MultiMasterDevice.found.<locals>._contain)r1rÿr/)rJrfr/r:)r­r;r/ès zCC2650MultiMasterDevice.found)r0r!c C| d¡d}xT| ¡D].}|j|}|j|}|| ¡kr|dkrPqW|dkr\tdƒntdƒ| d|¡|j|}|j|}|dk r”tdƒ|<|j ¡|j  |¡| 
2021-12-20 14:52:55 +08:00
|¡}||_ ||_ ||j|<WdQRX|S)Nr=zcannot connect any more devicez
rescan pleaserˆzcc2650 has connected a device)
r†rÿrr/r`r{rrr|r=r”r_)rJr0rfr€rwr: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

2021-12-20 14:52:55 +08:00
 
zCC2650MultiMasterDevice.connectc
Csn| d¡|j|}|j|}|dks.|dkr2dS| d|¡|"z|j||dSd|j|<XWdQRXdS)NrEF)rD)rÿrrE)rJrfrDr€rwr:r:r;rE"s


 z"CC2650MultiMasterDevice.disconnect)rfrgr!cCsp| d|d|¡|j|}|dk rl|j ¡|j |¡y | ||¡Stk
rj| d|d¡YnXdS)Nrhz0x%02Xrfzsend_instruction timeout) rérÿr`r{rrr|rh)rJrfrgrYr:r:r;rh3s

  z+CC2650MultiMasterDevice.read_characteristic)rfrgr*cCs˜| d|d|¡|j|}|dk r”|j ¡|j |¡y| |||¡WnFtk
rp| d|d¡Yn$t k
r| d|d¡YnXdS)Nriz0x%02Xrfzsend_instruction timeoutzdevice is not connected)
rÿr`r{rrr|rirJ)rJrfrgr*rYr:r:r;riCs

 z,CC2650MultiMasterDevice.write_characteristic)rfrpcCt|tƒr|jj}nt|tƒr&|j}n|}|j|}|j|}| d||¡|rf| |d¡d}d}n| |d¡d}d}|dk rÚ|j  ¡|j
  |¡||_ y| 
||j|¡Wtk
| d|d ¡YqðXn| d
||jjf¡dS) Nrnz
notify enablerpsznotify disablerNsz
set notifyr&z cannot %s notify for device : %s)rrrfrrÿrr`r{rrr|rir{rbrN)rJrfrprrYrOr:r:r;rnVs2



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

2021-12-20 14:52:55 +08:00
  
 
z"CC2650MultiMasterDevice.set_notify)rfrPr[r!c Cs^|dk rR|dkrR|j|}|dk rR|&|j ¡|j |¡| d||¡SQRX| ||¡S)NrQr)rÿr`r{rrr|rVrU)rJrfrPr[r€r:r:r;rVs

 z&CC2650MultiMasterDevice.handle_commandcCs:dttddtddt|jƒƒƒƒddt|jƒDƒdœS)Nzcc2650:multiplecSs|dS)Nrr:)ryr:r:r;rzrz7CC2650MultiMasterDevice.hardware_test.<locals>.<lambda>cSs |ddk S)Nr'r:)ryr:r:r;rzrcSs"i|]\}}|dk r| ¡|qS)N)rk)rgr€r:r:r;ú
<dictcomp>•sz9CC2650MultiMasterDevice.hardware_test.<locals>.<dictcomp>)rjZ availableÚsingle)r}r~rrÿ)rJr:r:r;rks

z%CC2650MultiMasterDevice.hardware_test)NT)T)N)r&F)F))rNrOrPr~rrrHrKr€rrrrlrˆrer-r…rr…ÚIterabler†rmr1r6r/r=rEr„rhrir‡rnrQrnrSrVr†rkr:r:)rbr;ro s4E #(* rocs
eZdZUdZdZdZdZdZee d<de
fe e e
eeeddœfdd „
Zee d
œd d ƒZee d
œd
dƒZee
d
œddƒZd"ddZejeeeedœddƒZejeeedœddƒZeeedœddZejeeefe dœddƒZ!e"ed
œd d!„ƒZ#‡Z$S)#ÚCC2650MasterCentralDevicerSrTrUrVNrW)rYrZr[r\r]r!cs$tƒ ||¡||_||_||_dS)N)r^rKr_r`ra)rJrYrZr[r\r])rbr:r;rK¨sz"CC2650MasterCentralDevice.__init__)r!cCs|jS)N)r_)rJr:r:r;rY´sz CC2650MasterCentralDevice.mastercCs|jS)N)r`)rJr:r:r;rZ¸sz#CC2650MasterCentralDevice.interfacecCs|jS)N)ra)rJr:r:r;r[¼sz!CC2650MasterCentralDevice.optionsTcCs|j ¡d|_dS)N)r`rc)rJrdr:r:r;reÀs
z"CC2650MasterCentralDevice.shutdown)rfrgr!cCsdS)Nr:)rJrfrgr:r:r;rhÄs z-CC2650MasterCentralDevice.read_characteristic)rfrgr*cCsdS)Nr:)rJrfrgr*r:r:r;riÑsz.CC2650MasterCentralDevice.write_characteristic)rfrjrkcGs"|tjkr|j|f|žŽdSdS)NTF)rlrmrn)rJrfrjrkr:r:r;roÛs
z5CC2650MasterCentralDevice.handle_internal_instruction)rfrpcCsdS)Nr:)rJrfrpr:r:r;rnâsz$CC2650MasterCentralDevice.set_notifycCs"|jdkrtjtjdd|_|jS)NT)rq)rWrrrrrs)rtr:r:r;ruæs
z'CC2650MasterCentralDevice.get_reset_pin)T)%rNrOrPrxryrzr{rWrr|r}r~rrHrrQr€rKrrYrZr[rerr„rhrir…r†ror‡rˆrnr‰rur:r:)rbr;rs.
 $
  rcs*eZdZdZdZdZdZdZdZdZ dZ
2021-12-22 14:29:56 +08:00
d Z e e
2021-12-20 14:52:55 +08:00
ed
œfd d Zed
œfdd ZeeedœddZejdœddZejdœddZeeejefdœddZedQeeedœddƒZedRdd „ƒZ d!d"„Z!ed#d$„ƒZ"ed%d&„ƒZ#edSd(d)„ƒZ$eed*œd+d,„Z%d-d.„Z&d/d0„Z'edTe(e)gdfe*d3œd4d5„ƒZ+dUe,eee-d6œd7d8„Z.ee)d*œd9d:„Z/edVe)e*eed;œd<d=„ƒZ0edWee*dœd>d?„ƒZ1eeeee2d@œdAdB„ƒZ3eeee2dCœdDdE„ƒZ4eee5fe*dFœdGdH„Z6ee*dIœdJdK„Z7ee-d*œdLdM„Z8eee9e:e9e9fe;dNœdOdP„Z<‡Z=S)XÚCC2650SingleMasterCentralDevicerþ)rEérZ3BÚ20Bé£é))rYrZr[cshtƒj|||tdt |¡|j|_t|ƒ|_d|_t  
2021-12-22 14:29:56 +08:00
¡|_ g|_ g|_
2021-12-20 14:52:55 +08:00
d|_d|_d|_d|_dS)N)r]r&F)r^rKrrrIrMrrÿrr+r˜r™rÚ_found_with_idrrrZ_notify_enable_status)rJrYrZr[)rbr:r;rKs


2021-12-22 14:29:56 +08:00
z(CC2650SingleMasterCentralDevice.__init__)rcstƒ |¡|j |¡dS)N)r^rrÿ)rJr)rbr:r;r/s z-CC2650SingleMasterCentralDevice.set_log_level)rfr!cCs|jS)N)r)rJrfr:r:r;r3sz*CC2650SingleMasterCentralDevice.get_device)rcCs||_| ¡dS)N)rr)rJrr:r:r;r6sz1CC2650SingleMasterCentralDevice._device_init_donecCs,| |j¡}|dk r | |j¡| ¡dS)N)rrgrr)rJrrfr:r:r;r;s  z3CC2650SingleMasterCentralDevice._device_link_updatecCst|tƒr|}nft|tƒr"|j}nTt|tjƒr>|j}| ¡n8t|dƒrXtt |dƒƒ}nt|dƒrrtt |dƒƒ}ndS| 
2021-12-20 14:52:55 +08:00
d|¡| ¡t  ¡dS)Nrgrr) rr€rr+r rgrrrr)rJrrr:r:r;r Gs

 

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

2021-12-20 14:52:55 +08:00
 z7CC2650SingleMasterCentralDevice._device_link_terminatedNT)rfc CsB| d¡| ¡|"| ¡|r4| ¡| ¡WdQRXdS)Nrç)rrrrr)rJrfr r:r:r;as
z%CC2650SingleMasterCentralDevice.resetcCsT| d¡d|_d|_d|_| ¡|r2|j ¡d|_d|_d|_d|_d|_ dS)Nre)
rrrrrr`rcrÿr™r)rJrdr:r:r;rets
2021-12-22 14:29:56 +08:00

z(CC2650SingleMasterCentralDevice.shutdowncCs |j ¡d|_d|_d|_dS)N)rr!rrr)rJr:r:r;rŠs
2021-12-20 14:52:55 +08:00
z.CC2650SingleMasterCentralDevice.reset_internalcCs:| ¡}| d¡| d¡tdƒ| d¡tdƒdS)Nzreset (hardware)Fgš™™™™™¹?T)rur")rJr#r:r:r;rs 


z.CC2650SingleMasterCentralDevice.reset_hardwarec
2021-12-22 14:29:56 +08:00
CsP| d¡z6yWn,tk
2021-12-20 14:52:55 +08:00
r<}ztdƒ|Wdd}~XYnXWdtdƒXdS)Nzreset (software)zdevice CC2650 reset failgš™™™™™¹?)rr )rJr:r:r;ržs 
2021-12-22 14:29:56 +08:00
 z.CC2650SingleMasterCentralDevice.reset_softwarer'cCsdS)Nr:)rJr&r:r:r;r®sz-CC2650SingleMasterCentralDevice.init_hardware)r!cCsdgS)Nrr:)rJr:r:r;r-³sz0CC2650SingleMasterCentralDevice.available_devicec
Csvy*td|jdddƒ|j |jddd¡Wn,tk
2021-12-20 14:52:55 +08:00
rV}ztdƒ|Wdd}~XYnX|jjddd}td|ƒdS)Nz:: scan_send_ins ::r%rzsend scan failr•)r&z clean_buf = )ÚCC2650_COMMAND_LENrÿÚsendrr Zreceive_timeout)rJZ clean_bufr:r:r;Ú
scan_send_ins¶sz-CC2650SingleMasterCentralDevice.scan_send_inscCs(| ¡}| d¡tdƒ| d¡dS)NFgü©ñÒMbP?T)rwr")rJZuart_irqr:r:r;Úcc2650_uart_irqÅs
2021-12-22 14:29:56 +08:00
z/CC2650SingleMasterCentralDevice.cc2650_uart_irqr&F)r.r!cCsg|_}g|_d}ddddg}d}tƒ}| d¡| d¡| d¡|j d t|ƒ¡y|j d
2021-12-20 14:52:55 +08:00
¡}Wn.tk
2021-12-22 14:29:56 +08:00
r˜|  ¡| 
¡|j   ¡d SXd} d}
2021-12-20 14:52:55 +08:00
d} d} d}
d}d d
d ddg}d}t
|||d ƒ} |d }t|||d
ƒ}
2021-12-22 14:29:56 +08:00
|d
}|||d } |d }t|||dƒ} |d}tt|||dƒƒ}
2021-12-20 14:52:55 +08:00
|d}t|||ddƒ}|d}t| ||
2021-12-22 14:29:56 +08:00
|
2021-12-20 14:52:55 +08:00
| | ƒ}|dk r | dt|jƒ|j¡|j  ¡t t|jƒ¡}|dk rêt|ƒdkrêt |j| t|jƒ¡| |¡|j |df¡||ƒd S)NréBéPéHéSr%r'éñr„gš™™™™™É?Tr$r"r&ér/)rr˜Ú bytearrayrärÿr„Ú recv_uartr rrr`r{Ú get_device_mac_in_address_formatÚget_device_company_codeÚget_device_battery_infoÚ get_device_name_in_string_formatrür€rGrrrr9Ú flush_inputrZgetByMacr-Úcreater)rJr.r&r4r/Znumber_of_deviceZhdr_BPHSZ
scan_responseZscan_insZ local_macZlocal_ccZ local_verZ local_batr4r>Z attr_lengthÚindexr0Z devicesListr:r:r;r6Ësl
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

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

2021-12-20 14:52:55 +08:00
z-CC2650SingleMasterCentralDevice.scan_callback)Úraw_uartÚexpect_ret_lenr!cC|dkr dSt|ƒ}|dkrlx”t|ƒD]@}|||jkr&||d|jkr&t||d|d|ƒSq&WnFxDtdƒD]8}|||jkrv||d|jkrvt||d|ƒSqvWdS)Nrr'r()r-ÚPREAMBLE_16_BIT_M_SEQ1ÚPREAMBLE_16_BIT_M_SEQ2rü)rJr­Z raw_uart_lenr«r:r:r;Údecode_uart_preambleFs"z4CC2650SingleMasterCentralDevice.decode_uart_preamblecCs|jS)N)r)rJr:r:r;r/\sz%CC2650SingleMasterCentralDevice.found)r0Údirect_connectr!c Cs@|jdk rtdƒ|j}|j}t |¡}| t|¡tƒ}|  d¡|  d¡|  |¡|  |d¡|  |d¡|  |d¡|  |d¡|  |d¡|  |d¡|  d ¡d
}|d kr¨y|j
2021-12-22 14:29:56 +08:00
  d t |ƒ¡Wn.t
k
2021-12-20 14:52:55 +08:00
r}ztd
ƒ|dSd}~XYnXx˜tdƒD]Œ} y|j
jdd}
Wn$tk
rN| d¡wYnX|
dkr`qn>|
2021-12-22 14:29:56 +08:00
ddkr|
2021-12-20 14:52:55 +08:00
ddkr|
ddkr|
ddkrd }PqWn"x|jD]} | j|kr²y|j
  d t |ƒ¡Wn.t
k
r}ztd
2021-12-22 14:29:56 +08:00
ƒ|Wdd}~XYn
Xtdƒx°tdƒD]¤} |j
  d t dƒ¡y|j
jdd}
Wn$tk
2021-12-20 14:52:55 +08:00
rh| d¡wYnX|
dkrzqnD|
ddkr|
ddkr|
ddkr|
ddkrd }PnqqWq²W|j ¡|d
kr|d krð| ¡| ¡|j ¡dSd} t| ||d|_}
| t|¡tdƒtd|
ƒ|
S)Nzcannot connect any morer&rErr'r(r%r"FTr„zdevice CC2650 connect failr#gà?)r&z"recv connection timeout, retry... é.é0)rrrrgš™™™™™¹?)rrYr­)rrrFr+rrr7rÿr„rr rr`rrr{rr:)rJr0r3rFr<Z connect_insÚ connectedr½Zretry_recv_ackZcon_doneÚdevZ dont_carer­r: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





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


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

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



 
z'CC2650SingleMasterCentralDevice.connectc
2021-12-22 14:29:56 +08:00
C| t|¡tƒ}| d¡| d¡| d¡zvy|j dt|ƒ¡WnNtk
rf| d¡dSt k
2021-12-20 14:52:55 +08:00
r}z| dt
|ƒ¡dSd}~XYnXt dƒd SWd| t |¡| 
¡| ¡|j ¡XdS)
2021-12-22 14:29:56 +08:00
NrEr'r„zdisconnect time outFzsuppressed errorg{®Gáz„?T)rrArÿr„r rQrCrrr`r{)rJrfrDÚinsr½r:r:r;rEÒs& 

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

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

 z*CC2650SingleMasterCentralDevice.disconnect)rfrgr!c Cd}tƒ}| d¡| d¡| |¡| d¡xŠtdƒD]~}y|j dt|ƒ¡Wntk
rrtdƒYnXy|jjdd}Wn(t k
}z
2021-12-20 14:52:55 +08:00
tƒWdd}~XYq<X|j
  ¡q<W|dkrÊdSt|ƒS)NrÅr(r„z+device CC2650 send read_characteristic fail)r&) rÿr„rr Ú Exceptionr`)rJrfrgr­rqÚe2r:r:r;rhós&




2021-12-22 14:29:56 +08:00
z3CC2650SingleMasterCentralDevice.read_characteristic)rfrgr*c
C| d||¡| ddt | ¡¡¡d}d}tƒ}| d¡| t|ƒd¡| |¡| |¡| d¡y|j  dt
|ƒ¡Wn,t k
2021-12-20 14:52:55 +08:00
}zt dƒ|Wdd}~XYnXy|j 
¡}Wn"tk
2021-12-22 14:29:56 +08:00
}zWdd}~XYnX|j ¡|j ¡dS) Nriz[CC2650]rLr$r(r„z#device CC2650 send instruction fail)rQÚupperÚhexr£r-Úextendrÿr„rr r`Ú flush_output) rJrfrgr*Zackr­Z
data_arrayr½r¸r:r:r;ri s(



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

z4CC2650SingleMasterCentralDevice.write_characteristic)rfrpcCst|tƒr|jj}nt|tƒr$|j}|r>| |d¡d}d}n| |d¡d}d}y| |j|j|¡Wn$t k
| 
2021-12-22 14:29:56 +08:00
d|d¡YnXdS) Nz
notify enablerpsznotify disablerNsz
2021-12-20 14:52:55 +08:00
set notifyr&) rrrfrrirr{)rJrfrprOr:r:r;rnD s 

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

  z*CC2650SingleMasterCentralDevice.set_notify)r!c
Cs†d}tƒ}| |¡| |¡xt|ƒdkr8| d¡q Wy|j dt|ƒ¡Wn,tk