
    iT(                     J    d dl Z d dlZd dlmZmZ dej                  e   fdZy)    N)MonitorScreenInfoErrorreturnc               #   |  K   dd l dd lddlm}   | d       G d dj                        } G fdd|      } G fdd	|       G fd
d|       G fdd|      } G fdd|      }j
                  gj                  _        j                  |      j                  _	        j                  |      gj                  _        d j                  _	        j
                  j                  gj                  _        j                        j                  _	        j                        gj                  _        d j                  _	        j
                  j                  gj                  _        j                  |      j                  _	        j                  |      gj                  _        d j                  _	        j
                  j                  gj                   _        j                  |      j                   _	        j                  |      gj"                  _        d j"                  _	        d}d}d}dddt$        ffd}t'        |      D ]  }	|||	fz  }
	 t)        j*                  |
t(        j,                        }|dk  r6	 j                  |      }|st1        d      |j2                  }||_        d|_        |j8                  D ]  }|j:                  j<                  k(  s|j>                  j@                  }tC        |jD                  |jF                  |jH                  |jJ                  |jL                  |jN                   ||              	 t)        jP                  |        y # t.        $ r Y ,w xY w# t)        jP                  |       w xY ww)Nr   )load_librarydrmc                       e Zd ZdZdZy)#enumerate_monitors.<locals>.DrmBaseNF)__name__
__module____qualname__fd
needs_free     d/mnt/e/genesis-system/.venvs/browser-army/lib/python3.12/site-packages/screeninfo/enumerators/drm.pyDrmBaser
      s    
r   r   c                   X   e Zd ZdW  j                  fdW  j	                  W  j
                        fdW  j                  fdW  j	                  W  j
                        fdW  j                  fdW  j	                  W  j
                        fdW  j                  fdW  j	                  W  j
                        fd	W  j
                  fd
W  j
                  fdW  j
                  fdW  j
                  fgZd fdZede	j                  d   ffd       Zede	j                  d   ffd       Zy)&enumerate_monitors.<locals>.DrmModeRes	count_fbs_fbscount_crtcs_crtcscount_connectors_connectorscount_encoders	_encoders	min_width	max_width
min_height
max_heightr   Nc                 `    | j                   r!j                  j                  |              y y N)r   drmModeFreeResourcesbyrefselfctypeslibdrms    r   __del__z.enumerate_monitors.<locals>.DrmModeRes.__del__#   &    ++FLL,>? r   DrmModeCrtcc                     g }t        | j                        D ]^  }j                  | j                  | j                  |         j
                  }| j                  |_        d|_        |j                  |       ` |S NT)ranger   drmModeGetCrtcr   r   contents	need_freeappend)r'   reticrtcr)   s       r   crtcsz,enumerate_monitors.<locals>.DrmModeRes.crtcs'   sk    C4++, !,,TWWdkk!nENN''!%

4 	!
 Jr   DrmModeConnectorc                    g }t        | j                        D ]c  }j                  | j                  | j                  |         }|s/|j
                  }| j                  |_        d|_        |j                  |       e |S r.   )r/   r   drmModeGetConnectorr   r   r1   r2   r3   )r'   r4   r5   pconnconnr)   s        r   
connectorsz1enumerate_monitors.<locals>.DrmModeRes.connectors1   s|    C4001 	!22GGT--a0 ~~''!%

4 	! Jr   r   N)r   r   r   c_intPOINTERc_uint32_fields_r*   propertyTListr7   r=   r(   r)   s   r   
DrmModeResr      s   &,,'V^^FOO45FLL)v~~foo67.FNN6??;<v||,&..9:&//*&//*6??+6??+
	@ 
	166-0 	 
	 
	'9 : 	 
	r   rG   c                      e Zd ZdZdW  j                  fdW  j
                  fdW  j
                  fdW  j
                  fdW  j
                  fdW  j
                  fdW  j
                  fd	W  j
                  fd
W  j
                  fdW  j
                  fdW  j
                  fdW  j                  fdW  j                  fdW  j                  fdW  j                  ez  fgZd fdZy)+enumerate_monitors.<locals>.DrmModeModeInfo    clockhdisplayhsync_start	hsync_endhtotalhskewvdisplayvsync_start	vsync_endvtotalvscanvrefreshflagstypenameNc                 `    | j                   r!j                  j                  |              y y r#   )r   drmModeFreeModeInfor%   r&   s    r   r*   z3enumerate_monitors.<locals>.DrmModeModeInfo.__del__U   s&    **6<<+=> r   r>   )	r   r   r   DRM_DISPLAY_MODE_LENrA   c_uint16c_charrB   r*   rF   s   r   DrmModeModeInforI   @   s    ! foo&)FOO,&//*v'foo&)FOO,&//*v'foo&)foo&V__%V]]%99:
$	?r   r_   c                      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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W j@                  fdW j@                  fdW j@                  fdW j@                  fdW jB                  fdW j@                  fdW j@                  fdW jB                  fdW jD                  fdW jG                  W        fdW jD                  fd W jG                  W j@                        fd!W jG                  W jH                        fd"W jD                  fd#W jG                  W j@                        fgZ%d)fd&Z&e'd$e(jR                  d'   ffd(       Z*y%)*,enumerate_monitors.<locals>.DrmModeConnector                  r         	   
                              connector_id
encoder_idconnector_typeconnector_type_id
connectionmmWidthmmHeightsubpixelcount_modesmodescount_propspropsprop_valuesr   encodersr   Nc                 `    | j                   r!j                  j                  |              y y r#   )r   drmModeFreeConnectorr%   r&   s    r   r*   z4enumerate_monitors.<locals>.DrmModeConnector.__del__   r+   r   DrmModeEncoderc                     j                  | j                  | j                        }|r:|j                  }| j                  |_        d|_        t        j                  d|      S y )NTr   )drmModeGetEncoderr   rv   r1   r2   rD   cast)r'   encoder_ptrencoderr)   s      r   r   z4enumerate_monitors.<locals>.DrmModeConnector.encoder   sS     22477DOOLK%..!WW
$(!vv.88r   r>   )+r   r   r   DRM_MODE_CONNECTEDDRM_MODE_DISCONNECTEDDRM_MODE_UNKNOWNCONNECTIONDRM_MODE_SUBPIXEL_UNKNOWN DRM_MODE_SUBPIXEL_HORIZONTAL_RGB DRM_MODE_SUBPIXEL_HORIZONTAL_BGRDRM_MODE_SUBPIXEL_VERTICAL_RGBDRM_MODE_SUBPIXEL_VERTICAL_BGRDRM_MODE_SUBPIXEL_NONEDRM_MODE_CONNECTOR_UnknownDRM_MODE_CONNECTOR_VGADRM_MODE_CONNECTOR_DVIIDRM_MODE_CONNECTOR_DVIDDRM_MODE_CONNECTOR_DVIADRM_MODE_CONNECTOR_CompositeDRM_MODE_CONNECTOR_SVIDEODRM_MODE_CONNECTOR_LVDSDRM_MODE_CONNECTOR_ComponentDRM_MODE_CONNECTOR_9PinDINDRM_MODE_CONNECTOR_DisplayPortDRM_MODE_CONNECTOR_HDMIADRM_MODE_CONNECTOR_HDMIBDRM_MODE_CONNECTOR_TVDRM_MODE_CONNECTOR_eDPDRM_MODE_CONNECTOR_VIRTUALDRM_MODE_CONNECTOR_DSIDRM_MODE_CONNECTOR_DPIDRM_MODE_CONNECTOR_WRITEBACKDRM_MODE_CONNECTOR_SPIrA   c_uintr?   r@   c_uint64rB   r*   rC   rD   Optionalr   r_   r(   r)   s   r   r8   ra   Y   s    !%&"$%!+,(+,()*&)*&!"%&"!""#"#"#'($$%!"#'($%&")+&#% #%  "!#%'"!#!#')$!# V__-6??+v/ &//26==)()'FLL)fnn_56FLL)fnnV__56FNN6??;<v||,89
$	@ 
	QZZ(89 	 
	r   r8   c                       e Zd ZdW  j                  fdW  j                  fdW  j                  fdW  j                  fdW  j                  fgZd	 fdZed
fd       Zy)*enumerate_monitors.<locals>.DrmModeEncoderrv   encoder_typecrtc_idpossible_crtcspossible_clonesNc                 `    | j                   r!j                  j                  |              y y r#   )r2   drmModeFreeEncoderr%   r&   s    r   r*   z2enumerate_monitors.<locals>.DrmModeEncoder.__del__   s&    ~~))&,,t*<= r   c                     j                  | j                  | j                        j                  }| j                  |_        d|_        t        j                  d|      S )NTr,   )r0   r   r   r1   r2   rD   r   )r'   r6   r)   s     r   r6   z/enumerate_monitors.<locals>.DrmModeEncoder.crtc   sF    (($,,?HHDggDG!DN66-..r   r>   )r   r,   )r   r   r   rA   rB   r*   rC   r6   rF   s   r   r   r      s_    6??+V__-(v/0
	> 
	/ 
	/r   r   c            
          e Zd ZdW j                  fdW j                  fdW j                  fdW j                  fdW j                  fdW j                  fdW j                  fdW  fd	W j                  fg	ZdfdZy
)'enumerate_monitors.<locals>.DrmModeCrtcr   	buffer_idxywidthheight
mode_validmode
gamma_sizeNc                 `    | j                   r!j                  j                  |              y y r#   )r2   drmModeFreeCrtcr%   r&   s    r   r*   z/enumerate_monitors.<locals>.DrmModeCrtc.__del__   s&    ~~&&v||D'9: r   r>   )r   r   r   rA   r?   rB   r*   r   s   r   r,   r      sw    (&//*&//"&//"foo&v'6<<(_%6<<(

	;r   r,   rq   z/dev/driz	%s/card%d	connectorr   c                 n   	 i j                   dj                  dj                  dj                  dj                  dj
                  dj                  dj                  dj                  d	j                  d
j                  dj                  dj                  dj                  dj                  dj                  dj                   dj"                  dj$                  dj&                  di| j(                     }| d| j,                   S # t*        $ r d}Y w xY w)NUnknownVGAzDVI-IzDVI-DzDVI-A	CompositeSVIDEOLVDS	ComponentDINDPzHDMI-AzHDMI-BTVeDPVirtualDSIDPI	WritebackSPI-)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rw   KeyErrorrx   )r   prefixr8   s     r   get_connector_namez.enumerate_monitors.<locals>.get_connector_name   s   	 ;;Y 77 !88' !88'	
 !88' !=={ !::H !88& !=={ !;;U !?? !998 !998 !66 !77  !;;Y!" !77#$ !77 =={ 77)* &&+(F0 966788  	F	s   DD& &D43D4zFailed to get drm resourcesT)r   r   r   r   width_mm	height_mmrY   ))r(   ctypes.utilscreeninfo.utilr   	Structurer?   drmModeGetResourcesargtypesr@   restyper$   rA   r:   r   r   r   r0   r   strr/   osopenO_RDONLYOSErrorr   r1   r   r   r=   ry   r   r   r6   r   r   r   r   r   rz   r{   close)r   r   rG   r   r,   DRM_MAX_MINORDRM_DIR_NAMEDRM_DEV_NAMEr   card_no	card_pathr   resr   r6   r8   r_   r(   r)   s                  @@@@r   enumerate_monitorsr      s,    ,% F&"" +W +Z?' ?2? ?7 ?B/ /(; ;g ;" ,2<<.F')/
)CF&,2NN:,F+GF(*.F'+1<<*IF')/8H)IF&,2NN;K,L+MF(*.F')/v(GF%'-~~n'EF$*0..*H)IF&(,F%&,llFOO%DF"$*NN;$?F!'-~~k'B&CF#%)F"MLL9&8 9S 98 '   L'#::		BKK0B 6	,,R0C%&CDD,,CCF!CN ^^ 	''+;+N+NN$,,11D!&&&&"jj#{{!*!2!2"+"4"4/	:  HHRLA   		8 HHRLsJ   I7N<>$N"N<)A N"
A.N"9N<	NN<NN<"N99N<)r   typingrD   screeninfo.commonr   r   Iterabler   r   r   r   <module>r      s%    	  6IAJJw/ Ir   