
    $Ui-                         d Z ddlZddlZddlmZ ddlmZmZ defdZ	defdZ
dd	d
ddZdefdZdefdZdZdefdZdefdZddZdS )uA   Device listing utilities — cameras, robot arms, and SpaceMouse.    N)Path)CAMERA_CONFIGSPACEMOUSE_CONFIGreturnc                  4   	 dd l } n# t          $ r g cY S w xY w|                                 }g }|                                D ]T}|                    |                    | j        j                  |                    | j        j                  d           U|S )Nr   )serialname)	pyrealsense2ImportErrorcontextquery_devicesappendget_infocamera_infoserial_numberr	   )rsctxresultsdevs       1/home/robot-lab/raiden_cmu/raiden/camera_utils.pylist_realsense_camerasr      s    !!!!!   			
**,,CG  "" 
 
,,r~'CDDR^%899 	
 	
 	
 	
 N    c                     	 dd l m}  n# t          $ r g cY S w xY wg }| j                                        D ]M}|j        | j        j        k    }|                    |j	        t          |j                  |j        |d           N|S )Nr   )r   modelid	available)pyzed.slslr   Cameraget_device_listcamera_stateCAMERA_STATE	AVAILABLEr   r   strcamera_modelr   )r   r   cam_infor   s       r   list_zed_camerasr'      s       			GI--// 	
 	
)R_-FF	"0X233k&	 	
 	
 	
 	
 Ns   	 zRight follower armzLeft follower armzRight leader armzLeft leader arm)can_follower_rcan_follower_lcan_leader_rcan_leader_lc                      g } t                                           D ]X\  }}t          j        ddd|gddd          }|j        dk    r-d|j        v pd	|j        v }|                     |||d
           Y| S )NiplinkshowTF)capture_outputtextcheckr   zstate UPzstate UNKNOWN)	interfacelabelup)_CAN_INTERFACESitems
subprocessrun
returncodestdoutr   )r   ifacer4   resultr5   s        r   	list_armsr>   >   s    G'--// 
G 
Gu665)	
 
 
 !!6=(LOv},LUU"EEFFFFN    c                     	 dd l } n# t          $ r g cY S w xY w|                                 }t                      }g }|                                D ]}d|                                vr|                                }|                    d          d                                         }||vr-|                    |           |	                    ||d           |S )Nr   3Dconnexion|)pathdescription)
easyhidr   EnumerationsetfindrD   splitstripaddr   )rE   hseenr   ddescrC   s          r   list_spacemicerP   S   s       			ADGVVXX @ @//}}zz#q!''))tHHTNNNNND>>???Nr   zPCsensor FootSwitch Keyboardc                     g } t          t          d                              d          d           D ]}|dz  dz  }|                                s	 |                                                                }n# t          $ r Y Sw xY wt                                          |                                v r | 	                    d|j
         |d           | S )	uu  Enumerate connected PCsensor FootSwitch devices.

    Reads /sys/class/input directly so this works without device-open
    permission — useful for verifying udev-rule install before opening
    the device for real.  Returns a list of ``{"path", "name"}`` dicts;
    empty list when no matching device is plugged in (or none of them
    advertise the expected name).
    z/sys/class/inputzevent*c                 :    t          | j        dd                    S )N   )intr	   )ps    r   <lambda>z!list_footpedals.<locals>.<lambda>y   s    c!&*oo r?   )keydevicer	   z/dev/input/)rC   r	   )sortedr   globexists	read_textrJ   OSError_FOOTPEDAL_DEVICE_NAMElowerr   r	   )found	event_dir	name_filer	   s       r   list_footpedalsrc   m   s     E  %%h//%%   Q Q	 (61	!! 		&&((..00DD 	 	 	H	!''))TZZ\\99LL"@	"@"@$OOPPPLs   &A<<
B	B	c                  x   	 ddl } n# t          $ r g cY S w xY w|                                 }	 	 |                                d         }n# t          t
          f$ r d}Y nw xY wg }t          |                                          D ]}	 |                    |          }n# t          t
          f$ r Y -w xY wt          |
                    dd                    dk    rY|                    t          |d                   t          |
                    dd                                                    t          |d                   t          |
                    dd                    t          |d                   |k    d           ||                                 S # |                                 w xY w)	u  Enumerate PyAudio input devices.

    Returns a list of ``{"index", "name", "channels", "default_rate",
    "is_default"}`` dicts.  Returns ``[]`` when PyAudio is not installed
    or no input devices are present — same convention as
    ``list_realsense_cameras`` / ``list_zed_cameras`` / ``list_spacemice``.

    Use the returned ``index`` with ``rd record --record-audio
    --audio-device-index <index>``.
    r   NindexmaxInputChannelsr	    defaultSampleRate)re   r	   channelsdefault_rate
is_default)pyaudior   PyAudioget_default_input_device_infor]   IOErrorrangeget_device_countget_device_info_by_indexrT   getr   r$   rJ   	terminate)rl   padefault_indexr   iinfos         r   list_microphonesry      s      						B	!<<>>wGMM! 	! 	! 	! MMM	!r**,,-- 	 	A22155W%   488.2233q88NN g// 4 455;;== #D);$< = =$'1Da(H(H$I$I"%d7m"4"4"E     
sZ    A
 	F# 
A F# A  )F# 
B F#  B41F# 3B44CF# #F9c                     t                      } t                      }t          dt          |            d           t          d           | r@| D ]<}|d         rdnd}t          d|d          d|d	          d
|d          d| d	           =nt          d           t          dt          |           d           t          d           |r'|D ]#}t          d|d	          d|d                     $nt          d           t	                      }t          dt          |           d           t          d           |r9|D ]5}|d         rdnd}t          d|d         dd|d         dd| d           6nt          d           t                      }t          dt          |           d           t          d           |r(|D ]$}t          d|d         dd|d                     %nt          d           t                      }t          d t          |           d           t          d           |r(|D ]$}	t          d|	d         dd|	d                     %nt          d!           t                      }
t          d"t          |
           d#           t          d           |
rJ|
D ]F}|d$         rd%nd&}t          d'|d(         d)d*|d+         d,d-|d.         d/d|d          | 	           Gnt          d0           t          d1           t          d           | s|rOt          t                    
                                s(g d2}d3 | D             d4 |D             z   }i }t          |          D ]B\  }}|t          |          k     r||         n	d5|d6z    d7f\  }}|d	         |d8         |d9||<   Ct          t                    j                            d:d:;           t          t          d<          5 }t          j        ||d=>           d?d?d?           n# 1 swxY w Y   t          d@           t          dAt          j        |d=>                      t          dB           n<t          t                    
                                rdCndD}t          dE|            |r;t          t$                    
                                si }t          |          d6k    r|dF         d         |dG<   t          |          d=k    r|d6         d         |dH<   t          t$                    j                            d:d:;           t          t$          d<          5 }t          j        ||d=>           d?d?d?           n# 1 swxY w Y   t          dI           t          dAt          j        |d=>                      t          |          d=k    rt          dJ           n<t          t$                    
                                rdCndK}t          dL|            t                       d?S )Mz^Print all connected cameras, robot arms, SpaceMouse devices, foot
    pedals, and microphones.z
ZED cameras: z foundz(----------------------------------------r   zin usez  id=r   z	  serial=r   z  model=r   z  []z  (none)z
RealSense cameras: z  name=r	   z
Robot arms: z CAN interface(s) foundr5   UPDOWNz  r3   z<20r4   z<22uE     (none)  — run scripts/reset_all_can.sh to bring up CAN interfacesz
SpaceMouse devices: rC   rD   z
Foot pedals: u     (none)  — if plugged in but not listed, install the udev rule with:
         sudo bash scripts/install_footpedal_udev.sh
         (then unplug and replug the pedal)z
Microphones: z input device(s) foundrk   z  [default]rg   z  index=re   z<3z  channels=ri   z<2z  rate=rj   z>6u9     (none)  — install PyAudio with: uv sync --extra audioz*
Config files stored in: ~/.config/raiden/))scene_camerascene)right_wrist_cameraright_wrist)left_wrist_camera
left_wristc                 $    g | ]}|d          ddS )r   zedr   type .0cs     r   
<listcomp>z list_devices.<locals>.<listcomp>  s$    PPP!!H+u==PPPr?   c                 $    g | ]}|d          ddS )r   	realsenser   r   r   s     r   r   z list_devices.<locals>.<listcomp>  s7     T
 T
 T
=>q{K88T
 T
 T
r?   scene_   r   r   )r   r   roleT)parentsexist_okw   )indentNu     ✓ Generated camera.json:z    u     WARNING: left/right wrist assignment is based on detection order and may be swapped — verify and edit camera.json if needed.zalready existszno cameras foundz  camera.json: r   path_rpath_lu      ✓ Generated spacemouse.json:u     WARNING: left/right SpaceMouse assignment is based on detection order and may be swapped — verify and edit spacemouse.json if needed.zno SpaceMouse foundz  spacemouse.json: )r'   r   printlenr>   rP   rc   ry   r   r   r[   	enumerateparentmkdiropenjsondumpdumpsr   )zed_camsrs_camscamstatearmsarmmicempedalsrU   micsdefault_tag_ROLE_ASSIGNMENTSall_camerasconfigrw   rW   r   fstatus	sm_configs                        r   list_devicesr      s&   
  !!H$&&G	
1CMM
1
1
1222	(OOO  	 	C#&{#3AKKE\D	\\CM\\3w<\\TY\\\   	 	j	
6#g,,
6
6
6777	(OOO  	C 	CCAc(mAACKAABBBB	C 	j ;;D	
=3t99
=
=
=>>>	(OOO W 	N 	NCI1DD6ELs;'LLLs7|LLLELLLMMMM	N 	UVVV D	
43t99
4
4
4555	(OOO  	< 	<A:qy:::-(8::;;;;	< 	j F	
/CKK
/
/
/000	(OOO 	
 	5 	5A3qy333&	334444	5 	:	
 	
 	
 D	
=CII
=
=
=>>>	(OOO 
K 	 	A+,\?B--K,1W:, , ,jM0, ,.)0, , V9, *, ,   	 	IJJJ 

7888	(OOO *G *T-%8%8%?%?%A%A *
 
 

 QPxPPP T
 T
BIT
 T
 T
 
 ,, 	W 	WFAs s,---- "!$$&q1u&&0 C
 &)]CKQUVVF3KK]"(((EEE-%% 	+Ifa****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+,---3TZq11133444I	
 	
 	
 	
 !%] 3 3 : : < <TBT 	 	((()))  .D*++2244 .	t99>>"&q'&/Iht99>>"&q'&/Ih&,,TD,III#S)) 	.QIi1----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.01116TZ	!44466777t99>>[   %&&--//'& 	
 	,F,,---	GGGGGs$   P11P58P54VVV)r   N)__doc__r   r8   pathlibr   raiden._configr   r   listr   r'   r6   r>   rP   r^   rc   ry   r   r   r?   r   <module>r      s3   G G            ; ; ; ; ; ; ; ;    "$    0 +)&%	 4    *    . 8     >($ ( ( ( (`K K K K K Kr?   