+
   JO                   R   ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H	t	 ^ RI
HtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RI H!t" Rt#^t$^ t%^t&^t'^t(^t)^!t*^t+^t,^"t-^t.^t/Rt0Rt1Rt2R	t3^t4^t5R
t6^
t7Rt8 ! R R]4      t9 ! R R]4      t: ! R R4      t;R# )    N)Enum)Tuple)glob)QMI	ValueTypeMessageTypei  l   +WW.]]
 i   i   i  i  c                   :    ] tR t^@tRt^ t^t]P                  t	Rt
R# )
ReportTypez
SSC report type enum.
 N)__name__
__module____qualname____firstlineno____doc__SMALLLARGEsysmaxsizeUNKNOWN__static_attributes__r       3/usr/lib/python3.14/site-packages/ssc_server/ssc.pyr
   r
   @   s     EEkkGr   r
   c                   .    ] tR t^ItRtRtRtRtRtRt	Rt
R# )	DataTypez
SSC sensor data types.
	proximityaccelmagambient_lightrotvr   N)r   r   r   r   r   	PROXIMITYACCELEROMETERMAGNETOMETERLIGHTROTATIONVECTORr   r   r   r   r   r   I   s"     IMLENr   r   c                   <  a  ] tR t^Tt o Rt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t	]V 3R
 lR l4       t
]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV tR# )SSCz1
Qualcomm's Snapdragon Sensor Core QMI messages.
c                    < V ^8  d   QhRS[ /# )   return)dict)format__classdict__s   "r   __annotate__SSC.__annotate__Z   s       r   c                 p   . p \        \        P                  P                  \        P                  P	                  \
        4      RR4      4       FD  p\        V4      ;_uu_ 4       pV P                  \        P                  ! V4      4       RRR4       KF  	  \        RV 4       V #   + '       g   i     Kg  ; i)z
Read JSON data with sensor configuration and fake measurements.

Returns
-------
data : dict
    Sensor configuration and fake measurements.
datazsensor-*.jsonNzSSC DATA)r   ospathjoindirname__file__openappendjsonloadprint)r0   sensorfs      r   
_read_dataSSC._read_dataY   sx     277<<(A6?[\FfDIIaL)  ] 	j$ s   $&B$$B5c                @   < V ^8  d   QhRS[ RS[S[S[ S[3,          /# r(   messager)   )bytesr   r
   int)r+   r,   s   "r   r-   r.   n   s(     -1 -1U -1uZPS=S7T -1r   c                   \         P                  ! V 4      w  rr4V\        P                  8X  g   Q hV\        8X  g   Q h\         P
                  ! V \        \        P                  4      w  rVpV\        P                  P                  8X  d   \        P                  pM>V\        P                  P                  8X  d   \        P                  pM\        RV 24      h\         P
                  ! V \        \        P                  4      w  rVpTp	WV3# )a  
Parse a raw QMI SSC Control Message Input from a client.

Parameters
----------
message : bytes
    Raw QMI message to parse.

Returns
-------
report_type : ReportType
    Report type requested by client.
data : bytes
    Protobuf data passed by client.
transaction_id : int
    Transaction ID to use for replies.

Raises
------
NotImplementedError
    If the QMI report type is not supported.
zUnknown report type: )r   parse_headerr   REQUESTSSC_CONTROL_MSG_ID	parse_tlvSSC_CONTROL_MSG_REPORT_TYPE_IDr   INTr
   r   valuer   NotImplementedErrorSSC_CONTROL_MSG_DATA_IDARRAY)
rA   message_typetransaction_id
message_idmessage_lengthtlv_type
tlv_length	tlv_valuereport_typer0   s
   &         r   parse_message_control_inputSSC.parse_message_control_inputm   s    2 DGCSCST[C\@j{22222//// +.--8V8A+G'i 
((...$**K***000$**K%(=i[&IJJ +.--8O8A+I'i .00r   c                @   < V ^8  d   QhRS[ RS[S[S[S[3,          /# r@   )rB   r   rC   )r+   r,   s   "r   r-   r.      s&     - -u -sC}9M -r   c                    \         P                  ! 4       pVP                  V 4       VP                  P                  pVP                  P
                  pVP                  pWBV3# )a  
Parse a Protobuf client request to extract sensor UID.

Parameters
----------
message : bytes
    Protobuf message to parse.

Returns
-------
message_id : int
    ID of the Protobuf message
uid_high : int
    UID 64 bits high.
uid_low : int
    UID 64 bits low.
)	SscCommonSscClientRequestParseFromStringuidhighlowmsg_id)rA   client_requestuid_highuid_lowrQ   s   &    r   parse_protobuf_client_request!SSC.parse_protobuf_client_request   sX    ( #335&&w/!%%** $$((#**
W,,r   c                &   < V ^8  d   QhRS[ RS[/# r@   )rB   str)r+   r,   s   "r   r-   r.      s      % C r   c                    \         P                  ! 4       pVP                  V 4       \        P                  ! 4       pVP                  VP
                  P                  4       VP                  pV# )z
Parse a Protobuf discovery request to extract the sensor data type to discover.

Parameters
----------
message : bytes
    Protobuf message to parse.

Returns
-------
data_type : str
    Sensor data type.
)r[   r\   r]   
SensorSuidSscSuidRequestrequestmsg	data_type)rA   rb   suid_requestrn   s   &   r    parse_protobuf_discovery_request$SSC.parse_protobuf_discovery_request   sY      #335&&w/!002$$^%;%;%?%?@ **	r   c                &   < V ^8  d   QhRS[ RS[/# )r(   rP   r)   rC   rB   )r+   r,   s   "r   r-   r.      s        r   c                   \         P                  ! \        P                  V \        4      p\        4       pV\        ^ 4      P                  ^RR7      ,          pV\        ^ 4      P                  ^RR7      ,          p\         P                  ! V\        V\        P                  4      p\        4       pV\        \        4      P                  ^RR7      ,          p\         P                  ! V\        V\        P                  4      pV# )z
Generate a QMI SSC Control Message Output as a reply.

Parameters
----------
transaction_id : int
    QMI transaction ID to use for replies.

Returns
-------
message : bytes
    Generated QMI message as raw bytes.
little	byteorder)r   generate_headerr   RESPONSErG   rB   rC   to_bytesgenerate_tlvSSC_CONTROL_MSG_SUCCESS_IDr   SEQUENCESSC_CLIENT_IDSSC_CONTROL_MSG_CLIENT_IDrJ   )rP   rA   rK   s   &  r   generate_message_control_output#SSC.generate_message_control_output   s     %%k&:&:&4&8:
 U$$Q($;;U$$Q($;;""7,FyOaOab ]#,,Q(,CC""7,Euimm\ r   c                &   < V ^8  d   QhRS[ RS[/# )r(   rn   r)   )rh   rB   )r+   r,   s   "r   r-   r.      s     6 6 6 6r   c                    \         P                  4       pRpRpRpV FD  pVR,          pVR,          V 8X  g   K  \        VR,          ^4      p\        VR,          ^4      pRp M	  \        P                  ! 4       pWn        V'       dE   VeA   Ve=   \        P                  ! 4       pW(n        W8n	        VP                  P                  V4       \        P                  ! 4       p	VP                  4       V	n        \        V	n        \        \"        P"                  ! 4       4      V	n        \        P&                  ! 4       p
V
P(                  P                  V	4       \*        V
P                  n        \,        V
P                  n	        V
P                  4       pV# )a<  
Generates a Protobuf message to discovery a sensor for a given data type.

Parameters
----------
data_type : str
    Sensor to discover for data type.

Returns
-------
protobuf : bytes
    Protobuf message in bytes.

Raises
------
NotImplementedError
    If no sensor implementation can be found for the data type.
NFr;   rn   rc   rd   T)r&   r=   rC   rj   SscSuidResponsern   r[   SscUidr_   r`   r^   r7   SscClientResponseBodySerializeToStringrm   SSC_PROTOBUF_DISCOVERY_MSG_IDra   time	timestampSscClientResponseresponseSSC_SUID_SENSOR_UID_HIGHSSC_SUID_SENSOR_UID_LOW)rn   r0   rc   rd   	supportedentryr;   suid_response
sensor_uidclient_response_bodyclient_responseprotobufs   &           r   $generate_protobuf_discovery_response(SSC.generate_protobuf_discovery_response   sJ   * ~~	E8_Fk"i/vj126fY/4 	  #224"+-'2E"))+J&O$N$$Z0  )>>@#0#B#B#D &C#),TYY[)9&#557  ''(<=#; "9"446r   c                ,   < V ^8  d   QhRS[ RS[ RS[/# )r(   rc   rd   r)   rs   )r+   r,   s   "r   r-   r.   /  s'     Z Z Zc Ze Zr   c                P	   \         P                  4       p. pV EF  pVR,          p\        VR,          ^4      V 8X  g   K'  \        VR,          ^4      V8X  g   KA  VR,           EFy  pVR,          V,          R,          pVR,          V,          R,          p\        V4      \        J d+   VP	                  V\
        P                  ! VR7      34       Ko  \        V4      \        J d+   VP	                  V\
        P                  ! VR7      34       K  \        V4      \        J d+   VP	                  V\
        P                  ! VR	7      34       K  \        V4      \        J d,   VP	                  V\
        P                  ! VR
7      34       EK'  \        V4      \        J Ed'   . p	V EF  p
\        V
4      \        J d)   V	P	                  \
        P                  ! V
R7      4       K?  \        V
4      \        J d)   V	P	                  \
        P                  ! V
R7      4       Kz  \        V
4      \        J d)   V	P	                  \
        P                  ! V
R	7      4       K  \        V
4      \        J d)   V	P	                  \
        P                  ! V
R
7      4       K  \        RV
 R\        V
4       R24      h	  VP	                  Wy34       EKa  \        RV R\        V4       R24      h	   M	  V'       g   \        RV  RV R24      h\
        P                  ! 4       pV F  p\
        P                  ! 4       p\
        P                  ! 4       pV^ ,          Vn        \        V^,          4      \        J d7   V^,           F(  pVP                   P"                  P	                  V4       K*  	  M,VP                   P"                  P	                  V^,          4       VP$                  P	                  V4       K  	  \
        P&                  ! 4       pVP)                  4       Vn        \,        Vn        \        \0        P0                  ! 4       4      Vn        \
        P4                  ! 4       pVP6                  P	                  V4       V VP8                  n        VVP8                  n        VP)                  4       pV# )a7  
Generate a Protobuf message with all attributes of a sensor.

Parameters
----------
uid_high : int
    UID 64 bits high.
uid_low : int
    UID 64 bits low.

Returns
-------
protobuf : bytes
    Protobuf message in bytes.

Raises
------
NotImplementedError
    If no attributes can be found for the sensor UID.
r;   rc   rd   
attributesidrK   )i)r<   )s)bz*Attribute value type in list unsupported: z ()z"Attribute value type unsupported: zUnable to match sensor ,z with attributes)r&   r=   rC   typer7   r[   SscAttrValuefloatrh   boollistrL   SscAttrResponseSscAttrSscAttrArrayValuer   value_arrayvattrr   r   rm   +SSC_PROTOBUF_RESPONSE_GET_ATTRIBUTES_MSG_IDra   r   r   r   r   r^   r_   r`   )rc   rd   r0   r   r   r;   aattr_id
attr_valuevaluesr   attr_responser   attr_array_valueelementr   r   r   s   &&                r   %generate_protobuf_attributes_response)SSC.generate_protobuf_attributes_response.  s   . ~~
E8_F6*%r*h63vi?PRT;UY`;`|,,A#L1!4T:G!&|!4Q!7!@JJ'3."))7I4J4JZ4X*YZj)U2"))7I4J4JZ4X*YZj)S0"))7I4J4JZ4X*YZj)T1"))7I4J4JZ4X*YZj)T1!#!+A#Aw#~ &i.D.Dq.I J!%aE!1 &i.D.Dq.I J!%aC &i.D.Dq.I J!%aD &i.D.Dq.I J&9<fghfiiklpqrlskttu:v&w w ", #))7*;<14VWaVbbdeijteudvvw2xyy7 -8 ? B %(?z7)Sc&dee "113A$$&D(::<dDG AaDzT! ttG$$&&--g6  $   ""))!A$/%%d+    )>>@#0#B#B#D &Q#),TYY[)9&#557  ''(<=#+ ")"446r   c                2   < V ^8  d   QhRS[ RS[ RS[ RS[/# )r(   rc   rd   indexr)   rs   )r+   r,   s   "r   r-   r.     s1     L Ls LS LQT LY^ Lr   c                   \         P                  4       pRp. pV F  pVR,          pVR,          p\        VR,          ^4      V 8X  g   K/  \        VR,          ^4      V8X  g   KI  \        VR,          4      V8:  d   V\        VR,          4      ,
          pK2  VR,          V,          p M	  X'       g   \	        R4      hV\
        P                  P                  8X  d4   \        P                  ! 4       p	VR,          V	n
        VR	,          V	n        EMV\
        P                  P                  8X  dC   \        P                  ! 4       p	VR
,           F  p
V	P                  P!                  V
4       K   	  EM2V\
        P"                  P                  8X  dB   \$        P&                  ! 4       p	VR,           F  p
V	P(                  P!                  V
4       K   	  MV\
        P*                  P                  8X  dB   \,        P.                  ! 4       p	VR,           F  p
V	P0                  P!                  V
4       K   	  MrV\
        P2                  P                  8X  dB   \4        P6                  ! 4       p	VR,           F  p
V	P8                  P!                  V
4       K   	  M\	        RV  RV R24      hVR,          V	n        \<        P>                  ! 4       pV	PA                  4       Vn!        VR,          Vn"        \        \F        PF                  ! 4       4      Vn$        \<        PJ                  ! 4       pVPL                  P!                  V4       WPN                  n(        WPN                  n)        VPA                  4       pV# )a7  
Instantiates a Protobuf sensor measurement message.

Parameters
----------
uid_high : int
    UID 64 bits high.
uid_low : int
    UID 64 bits low.

Returns
-------
protobuf : bytes
    Protobuf message in bytes.

Raises
------
NotImplementedError
    If no sensor measurements can be found for the sensor UID.
 r;   rn   rc   rd   measurementsz=Unable to match sensor {uid_high},{uid_low} with measurementsneardistanceaccelerationmagnetic_field	intensityrotationzUnsupported sensor r   z for measurement generationaccuracyr   )*r&   r=   rC   lenrL   r   r    rK   SensorProximitySscProximityResponser   r   r!   SensorAccelerometerSscAccelerometerResponser   r7   r"   SensorMagnetometerSscMagnetometerResponser   r#   SensorLightSscLightResponser   r$   SensorCompassSscRotationvectorResponser   r   r[   r   r   rm   ra   r   r   r   r   r^   r_   r`   )rc   rd   r   r0   rn   r   r   r;   measurementmeasurement_responsemr   r   r   s   &&&           r   $generate_protobuf_sensor_measurement(SSC.generate_protobuf_sensor_measurement  s   . ~~	E8_F{+I6*%r*h63vi?PRT;UY`;`%/0E9!Cn(=$>>E#N3E:  %&eff **000#2#G#G#I (3F(; %,7
,C )(00666#6#O#O#Q  00$1188; 1(//555#5#M#M#O  !122$33::1= 3(.....#.#?#?#A  --$..55a8 .(11777#0#J#J#L  ,,$--44Q7 - &(;H:QwiOj&kll(3J(?%  )>>@#7#I#I#K &1$&7#),TYY[)9&#557  ''(<=#+ ")"446r   c                ,   < V ^8  d   QhRS[ RS[RS[ /# r(   r0   rP   r)   rB   rC   )r+   r,   s   "r   r-   r.     "      u c e r   c                h   \         P                  ! \        P                  V\        4      p\        4       pV\        \        4      P                  ^RR7      ,          p\         P                  ! V\        V\        P                  4      p\         P                  ! V\        V \        P                  4      pV# )a  
Instantiates a QMI SSC Report Large as a QMI indication.

Parameters
----------
data : bytes
    Protobuf binary data to pass along.
transaction_id : int
    QMI transaction ID to use for replies.

Returns
-------
msg : bytes
    The indication message as bytes.
ru   rv   )r   rx   r   
INDICATIONSSC_REPORT_LARGE_MSG_IDrB   rC   r~   rz   r{   SSC_REPORT_LARGE_CLIENT_IDr   rJ   SSC_REPORT_LARGE_DATArN   r0   rP   rA   rK   s   &&  r    generate_report_large_indication$SSC.generate_report_large_indication      " %%k&<&<&4&=?
 ]#,,Q(,CC""7,Fy}}] ""7,A4Yr   c                ,   < V ^8  d   QhRS[ RS[RS[ /# r   r   )r+   r,   s   "r   r-   r.     r   r   c                h   \         P                  ! \        P                  V\        4      p\        4       pV\        \        4      P                  ^RR7      ,          p\         P                  ! V\        V\        P                  4      p\         P                  ! V\        V \        P                  4      pV# )a  
Instantiates a QMI SSC Small Large as a QMI indication.

Parameters
----------
data : bytes
    Protobuf binary data to pass along.
transaction_id : int
    QMI transaction ID to use for replies.

Returns
-------
msg : bytes
    The indication message as bytes.
ru   rv   )r   rx   r   r   SSC_REPORT_SMALL_MSG_IDrB   rC   r~   rz   r{   SSC_REPORT_SMALL_CLIENT_IDr   rJ   SSC_REPORT_SMALL_DATArN   r   s   &&  r    generate_report_small_indication$SSC.generate_report_small_indication  r   r   r   N)r   r   r   r   r   staticmethodr=   rW   re   rp   r   r   r   r   r   r   r   __classdictcell__)r,   s   @r   r&   r&   T   s       & -1 -1^ - -6  2  B 6 6p Z Zx L L\  <  r   r&   )<r1   r   r   r8   randomenumr   typingr   r   ssc_server.qmir   r   r   ssc_server.ssc_sensor_suid_pb2ssc_sensor_suid_pb2rj   ssc_server.ssc_common_pb2ssc_common_pb2r[   #ssc_server.ssc_sensor_proximity_pb2ssc_sensor_proximity_pb2r   'ssc_server.ssc_sensor_accelerometer_pb2ssc_sensor_accelerometer_pb2r   &ssc_server.ssc_sensor_magnetometer_pb2ssc_sensor_magnetometer_pb2r   ssc_server.ssc_sensor_light_pb2ssc_sensor_light_pb2r   (ssc_server.ssc_sensor_rotationvector_pb2ssc_sensor_rotationvector_pb2r   SSC_SERVICE_IDr~   rG   r|   rI   r   rM   r   r   r   r   r   r   r   r   r   SSC_PROTOBUF_DISCOVER_MSG_ID!SSC_PROTOBUF_GET_ATTRIBUTE_MSG_IDr   !SSC_PROTOBUF_ENABLE_REPORT_MSG_ID"SSC_PROTOBUF_DISABLE_REPORT_MSG_ID%SSC_PROTOBUF_ENABLE_CONTINUOUS_MSG_IDr
   r   r&   r   r   r   <module>r      s   & 
 
       6 6 3 - = E C 5 @   !%      !    !  - ,  # " $% !.1 +$' !%' "(+ % t B Br   