§
     ïÞf !  ã                   ó  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dl	mZ d dlmZ d dlZd dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlmZ  G d	„ d
e j        ¦  «        Z G d„ d¦  «        Zedk    rdS dS )é    N)Ú	Picamera2ÚPreview)ÚJpegEncoder)Ú
FileOutput)ÚQuality)Ú	Condition)Ú*)ÚCOMMANDc                   ó   — e Zd Zd„ Zd„ ZdS )ÚStreamingOutputc                 ó:   — d | _         t          ¦   «         | _        d S ©N)Úframer   Ú	condition©Úselfs    ú1/home/digit/Desktop/robocat/Code/Server/Server.pyÚ__init__zStreamingOutput.__init__   s   € ØˆŒ
Ý"™œˆŒˆˆó    c                 ó†   — | j         5  || _        | j                              ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S r   )r   r   Ú
notify_all)r   Úbufs     r   ÚwritezStreamingOutput.write   s‰   € ØŒ^ð 	(ð 	(ØˆDŒJØŒN×%Ò%Ñ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(ð 	(ð 	(s   ˆ!6¶:½:N)Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r   r      s2   € € € € € ð%ð %ð %ð(ð (ð (ð (ð (r   r   c                   óP   — 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S )ÚServerc                 óF  — d| _         t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _
        t          ¦   «         | _        | j
        j                             ¦   «          g d¢| _        d S )NF)çÍÌÌÌÌÌ @r!   r!   r!   r!   )Útcp_flagÚLedÚledÚServoÚservoÚADS7830ÚadcÚBuzzerÚbuzzerÚControlÚcontrolÚ
UltrasonicÚsonicÚThread_conditionaÚstartÚbattery_voltager   s    r   r   zServer.__init__"   sv   € àˆŒÝ‘”ˆŒÝ‘7”7ˆŒ
Ý‘”ˆŒÝ‘H”HˆŒÝ‘Y”YˆŒÝ‘<”<ˆŒ
ØŒÔ&×,Ò,Ñ.Ô.Ð.Ø2Ð2Ð2ˆÔÐÐr   c                 ó  — t          j         t           j        t           j        ¦  «        }t          j        t	          j        |                     ¦   «         dt          j        ddd d…         ¦  «        ¦  «        dd…         ¦  «        S )Ni‰  Ú256ss   wlan0é   é   é   )	ÚsocketÚAF_INETÚ
SOCK_DGRAMÚ	inet_ntoaÚfcntlÚioctlÚfilenoÚstructÚpack)r   Úss     r   Úget_interface_ipzServer.get_interface_ip-   sm   € ÝŒM�&œ.­&Ô*;Ñ<Ô<ˆÝÔ¥¤¨A¯HªH©J¬JØ,2Ý,2¬K¸¸xÈÈÈ¼}Ñ,MÔ,Mñ!.ô !.ð /1°¨eô!5ñ 6ô 6ð 	6r   c                 óJ  — |                       ¦   «         }t          j        ¦   «         | _        | j                             t          j        t          j        d¦  «         | j                             |df¦  «         | j                             d¦  «         t          j        ¦   «         | _        | j                             t          j        t          j        d¦  «         | j                             |df¦  «         | j                             d¦  «         t          d|z   ¦  «         d S )Né   iA  i‰  zServer address: )
rA   r7   Úserver_socketÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEPORTÚbindÚlistenÚserver_socket1Úprint)r   ÚHOSTs     r   Úturn_on_serverzServer.turn_on_server3   sñ   € à×"Ò"Ñ$Ô$ˆå#œ]™_œ_ˆÔØÔ×%Ò%¥fÔ&7½Ô8KÈAÑNÔNÐNØÔ×Ò  t Ñ-Ô-Ð-ØÔ×!Ò! !Ñ$Ô$Ð$õ %œm™oœoˆÔØÔ×&Ò&¥vÔ'8½Ô9LÈQÑOÔOÐOØÔ× Ò  $¨ Ñ.Ô.Ð.ØÔ×"Ò" 1Ñ%Ô%Ð%ÝÐ  Ñ%Ñ&Ô&Ð&Ð&Ð&r   c                 óš   — 	 | j                              ¦   «          | j                             ¦   «          d S #  t          d¦  «         Y d S xY w)Nz
No client connection)Ú
connectionÚcloseÚconnection1rK   r   s    r   Úturn_off_serverzServer.turn_off_serverC   sW   € ð	0ØŒO×!Ò!Ñ#Ô#Ð#ØÔ×"Ò"Ñ$Ô$Ð$Ð$Ð$øð	0ÝÐ.Ñ/Ô/Ð/Ð/Ð/Ð/øøøs	   ‚26 ¶A
c                 ó6  — |                       ¦   «          |                      ¦   «          t          j        | j        ¬¦  «        | _        t          j        | j        ¬¦  «        | _        | j                             ¦   «          | j                             ¦   «          d S )N)Útarget)	rR   rM   Ú	threadingÚThreadÚtransmission_videoÚvideoÚreceive_instructionÚinstructionr0   r   s    r   Úreset_serverzServer.reset_serverJ   s†   € Ø×ÒÑÔÐØ×ÒÑÔÐÝÔ#¨4Ô+BÐCÑCÔCˆŒ
Ý"Ô)°Ô1IÐJÑJÔJˆÔØŒ
×ÒÑÔÐØÔ×ÒÑ Ô Ð Ð Ð r   c                 ó¦   — 	 |                      |                     d¦  «        ¦  «         d S # t          $ r}t          |¦  «         Y d }~d S d }~ww xY w)Núutf-8)ÚsendÚencodeÚ	ExceptionrK   )r   ÚconnectÚdataÚes       r   Ú	send_datazServer.send_dataQ   sa   € ð	Ø�LŠL˜Ÿš WÑ-Ô-Ñ.Ô.Ð.Ð.Ð.øåð 	ð 	ð 	Ý�!‰HŒHˆHˆHˆHˆHˆHˆHˆHøøøøð	øøøs   ‚(, ¬
A¶AÁAc                 óØ  — 	 | j                              ¦   «         \  | _        | _        | j                             d¦  «        | _        n#  Y nxY w| j                              ¦   «          t          d¦  «         t          ¦   «         }|                     | 	                    ddi¬¦  «        ¦  «         t          ¦   «         }t          d¬¦  «        }|                     |t          |¦  «        t          j        ¬¦  «         	 |j        5  |j                             ¦   «          |j        }d d d ¦  «         n# 1 swxY w Y   	 t'          |j        ¦  «        }t)          j        d
|¦  «        }| j                             |¦  «         | j                             |¦  «         nO# t.          $ rB}|                     ¦   «          |                     ¦   «          t          d¦  «         Y d }~d S d }~ww xY wŒî)NÚwbzsocket video connected ... Úsize)i�  i,  )Úmainé_   )Úq)ÚqualityTz<IzEnd transmit ... )rD   ÚacceptrO   Úclient_addressÚmakefilerP   rK   r   Ú	configureÚcreate_video_configurationr   r   Ústart_recordingr   r   Ú	VERY_HIGHr   Úwaitr   Úlenr>   r?   r   r`   Ústop_recording)r   ÚcameraÚoutputÚencoderr   ÚlenFrameÚ	lengthBinrc   s           r   rW   zServer.transmission_videoW   s  € ð	Ø26Ô2D×2KÒ2KÑ2MÔ2MÑ/ˆDŒO˜DÔ/Ø œO×4Ò4°TÑ:Ô:ˆDŒOˆOøð	ØˆDøøøØÔ× Ò Ñ"Ô"Ð"ÝÐ,Ñ-Ô-Ð-Ý‘”ˆØ×Ò˜×:Ò:ÀÈÐ@TÐ:ÑUÔUÑVÔVÐVÝ Ñ"Ô"ˆÝ Ð#Ñ#Ô#ˆØ×Ò˜w­
°6Ñ(:Ô(:Å7ÔCTÐÑUÔUÐUð	ØÔ!ð %ð %ØÔ ×%Ò%Ñ'Ô'Ð'Øœ�ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %ð
Ý˜vœ|Ñ,Ô,�å"œK¨¨hÑ7Ô7�	Ø”×%Ò% iÑ0Ô0Ð0Ø”×%Ò% eÑ,Ô,Ð,Ð,øÝð ð ð Ø×%Ò%Ñ'Ô'Ð'Ø—’‘”�ÝÐ*Ñ,Ô,Ð,Ø�����øøøøð	øøøð	s7   ‚AA ÁAÄ!D2Ä2D6Ä9D6Ä>AF Æ
G(Æ&7G#Ç#G(c                 ó¾  — 	 t          d¦  «        D ]2}t          | j                             d¦  «        d¦  «        | j        |<   Œ3t
          j        dz   t          t          | j        ¦  «        ¦  «        z   dz   }|  	                    ||¦  «         |  
                    ¦   «          |                      ¦   «          d S # t          $ r}t          |¦  «         Y d }~d S d }~ww xY w)Né   r   é   ú#ú
)ÚrangeÚroundr(   Úpowerr1   ÚcmdÚ	CMD_POWERÚstrÚmaxrd   ÚsednRelaxFlagÚbattery_reminderr`   rK   )r   ra   ÚiÚcommandrc   s        r   Úmeasuring_voltagezServer.measuring_voltaget   sã   € ð	Ý˜1‘X”Xð Cð C�Ý(-¨d¬h¯nªn¸QÑ.?Ô.?ÀÑ(BÔ(B�Ô$ QÑ'Ð'Ý”M #Ñ%¥c­#¨dÔ.BÑ*CÔ*CÑ&DÔ&DÑDÀTÑIˆGØ�NŠN˜7 7Ñ+Ô+Ð+Ø×ÒÑ Ô Ð Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#øÝð 	ð 	ð 	Ý�!‰HŒHˆHˆHˆHˆHˆHˆHˆHøøøøð	øøøs   ‚B4B8 Â8
CÃCÃCc                 óú   — t          | j        ¦  «        dk     rb|                      ¦   «          | j                             d¦  «         t          d¦  «         t          d¦  «         t          j        d¦  «         d S d S )Nçš™™™™™@TzTThe batteries power are too low. Please recharge the batteries or replace batteries.zClose the serverr   )r†   r1   rR   r,   ÚrelaxrK   ÚosÚ_exitr   s    r   rˆ   zServer.battery_reminder~   sw   € ÝˆtÔ#Ñ$Ô$ sÒ*Ð*Ø× Ò Ñ"Ô"Ð"ØŒL×Ò˜tÑ$Ô$Ð$ÝÐhÑiÔiÐiÝÐ$Ñ%Ô%Ð%ÝŒH�Q‰KŒKˆKˆKˆKð +Ð*r   c                 óÐ   — | j         j        dk    rUt          j        dz   t	          | j         j        ¦  «        z   dz   }|                      | j        |¦  «         d| j         _        d S d S )Nr}   r~   r   )r,   Ú	move_flagrƒ   Ú	CMD_RELAXr…   rd   rQ   )r   rŠ   s     r   r‡   zServer.sednRelaxFlag…   sd   € ØŒ<Ô! 1Ò$Ð$Ý”M #Ñ%¥c¨$¬,Ô*@Ñ&AÔ&AÑAÀ$ÑFˆGØ�NŠN˜4Ô+¨GÑ4Ô4Ð4Ø$%ˆDŒLÔ"Ð"Ð"ð %Ð$r   c                 ó<  — 	 | j                              ¦   «         \  | _        | _        t	          d¦  «         n#  t	          d¦  «         Y nxY w| j                              ¦   «          	 	 | j                             d¦  «                             d¦  «        }n>#  | j        r/t          | j
        ¦  «        dk    r|                      ¦   «          Y �ndY �naxY w|dk    r| j        r|                      ¦   «          �n;|                     d¦  «        }|d	         dk    r||d d	…         k     |D �]}|                     d
¦  «        }|d k    s|d         dk    rŒ+t          j        |v r!| j                             |d         ¦  «         ŒZt          j        |v rN	 t%          |¦  «         n#  Y nxY wt'          j        | j        j        |f¬¦  «        }|                     ¦   «          Œ¶t          j        |v rO	 t%          |¦  «         n#  Y nxY wt'          j        | j        j        |f¬¦  «        }|                     ¦   «          �Œt          j        |v r0| j                             dt9          |d         ¦  «        ¦  «         �ŒQt          j        |v rVt          j        d
z   t=          | j                              ¦   «         ¦  «        z   dz   }|  !                    | j        |¦  «         �Œµt          j"        |v r|  #                    | j        ¦  «         �Œßt          j$        |v �rï| j%        j&        dk    �ru| j%        j'        dk    �rd| j%        j(        dk    rQt          j$        d
z   t=          d¦  «        z   d
z   t=          tS          | j%        j(        dz
  ¦  «        ¦  «        z   dz   }�nO| j%        j(        dk    r{t          j$        d
z   t=          tS          | j%        j(        ¦  «        ¦  «        z   d
z   t=          tS          tU          j*        ¦   «         | j%        j&        z
  dz   ¦  «        ¦  «        z   dz   }nÄt          j$        d
z   t=          tS          | j%        j(        ¦  «        ¦  «        z   d
z   t=          tS          tU          j*        ¦   «         | j%        j&        z
  ¦  «        ¦  «        z   dz   }nLt          j$        d
z   t=          tS          | j%        j(        ¦  «        ¦  «        z   d
z   t=          d¦  «        z   dz   }|  !                    | j        |¦  «         �ŒÝ|| j%        _+        tU          j*        ¦   «         | j%        _,        �Œ�ŒË	 t%          tZ          ¦  «         n#  Y nxY w	 t%          |¦  «         n#  Y nxY wt	          d¦  «         d| j%        _'        t          j.        | j%        j+        d<   d S )NzClient connection successful !zClient connect failedTi   r]   r�   Ú r   éÿÿÿÿr~   r   rC   )rT   Úargsr4   é´   é<   Ú
close_recvF)/rJ   rl   rQ   Úclient_address1rK   rP   ÚrecvÚdecoder"   r†   r1   r[   Úsplitrƒ   Ú
CMD_BUZZERr*   ÚrunÚCMD_LEDÚstop_threadrU   rV   r$   Úlightr0   ÚCMD_LED_MODÚCMD_HEADr&   ÚsetServoAngleÚintÚ	CMD_SONICr…   r.   ÚgetDistancerd   r„   r‹   ÚCMD_WORKING_TIMEr,   Úmove_timeoutÚ
relax_flagÚ
move_countr�   ÚtimeÚorderÚtimeoutÚthread_powerr“   )r   ÚallDataÚcmdArrayÚoneCmdrb   Ú
thread_ledrŠ   s          r   rY   zServer.receive_instruction‹   s·  € ð	,Ø48Ô4G×4NÒ4NÑ4PÔ4PÑ1ˆDÔ˜TÔ1ÝÐ3Ñ4Ô4Ð4Ð4øð	,ÝÐ*Ñ+Ô+Ð+Ð+Ð+øøøØÔ×!Ò!Ñ#Ô#Ð#ð>	5ð	ØÔ(×-Ò-¨dÑ3Ô3×:Ò:¸7ÑCÔC��øðØ”=ð Ý˜4Ô/Ñ0Ô0°3Ò6Ð6Ø×)Ò)Ñ+Ô+Ð+Ø‘Eà‘Eøøøà˜Š{ˆ{˜tœ}ˆ{Ø×!Ò!Ñ#Ô#Ð#Ùà Ÿš tÑ,Ô,�à˜B”< "Ò$Ð$Ø˜h s¨ sœmÒ+Ð+à"ð )5ñ )5�Ø—\’\ #Ñ&Ô&�Ø˜’:�:  a¤¨"¢ ØÝ”^ tÐ+Ð+Ø”K—O’O D¨¤GÑ,Ô,Ð,Ð,Ý”[ DÐ(Ð(ðÝ# JÑ/Ô/Ð/Ð/øðØ˜øøøÝ(Ô/°t´x´~ÈDÈ7ÐSÑSÔS�JØ×$Ò$Ñ&Ô&Ð&Ð&Ý”_¨Ð,Ð,ðÝ# JÑ/Ô/Ð/Ð/øðØ˜øøøÝ(Ô/°t´x´~ÈDÈ7ÐSÑSÔS�JØ×$Ò$Ñ&Ô&Ð&Ñ&Ý”\ TÐ)Ð)Ø”J×,Ò,¨Rµ°D¸´G±´Ñ=Ô=Ð=Ñ=Ý”] dÐ*Ð*ÝœM¨#Ñ-­c°$´*×2HÒ2HÑ2JÔ2JÑ.KÔ.KÑKÈDÑP�GØ—N’N 4Ô#3°GÑ<Ô<Ð<Ñ<Ý”] dÐ*Ð*Ø×*Ò*¨4Ô+;Ñ<Ô<Ð<Ñ<ÝÔ)¨TÐ1Ñ1Ø”|Ô0°!Ò3Ñ3¸¼Ô8OÐQUÒ8UÑ8UØœ<Ô2°CÒ7Ð7Ý$'Ô$8¸Ñ$<½SÀ¹X¼XÑ$EÀcÑ$IÍ#ÍeÐTXÔT`ÔTkÐloÑToÑNpÔNpÑJqÔJqÑ$qÐrvÑ$v˜G™Gà#œ|Ô6¸Ò9Ð9Ý(+Ô(<¸SÑ(@ÅÅUÈ4Ì<ÔKbÑEcÔEcÑAdÔAdÑ(dÐehÑ(hÕilÕmrÕtxÔt}ÑtÔtð  AEô  AMô  AZñ  uZð  \^ñ  t^ñ  n_ô  n_ñ  j`ô  j`ñ  )`ð  aeñ  )e  å(+Ô(<¸SÑ(@ÅÅUÈ4Ì<ÔKbÑEcÔEcÑAdÔAdÑ(dÐehÑ(hÕilÕmrÕswÔs|Ñs~Ôs~ð  @Dô  @Lô  @Yñ  tYñ  nZô  nZñ  j[ô  j[ñ  )[ð  \`ñ  )`  å #Ô 4°SÑ 8½½UÀ4Ä<ÔCZÑ=[Ô=[Ñ9\Ô9\Ñ \Ð]`Ñ `ÕadÐefÑagÔagÑ gÐhlÑ l˜Ø—N’N 4Ô#3°GÑ<Ô<Ð<Ñ<à'+�D”LÔ&Ý)-¬©¬�D”LÔ(Ñ(ñ}>	5ð@	Ý�Ñ%Ô%Ð%Ð%øð	ØˆDøøøð	Ý˜
Ñ#Ô#Ð#Ð#øð	ØˆDøøøÝˆlÑÔÐØ %ˆŒÔÝ!œmˆŒÔ˜1ÑÐÐsE   ‚58 ¸AÁ)-B Â5CÆF"Æ"F&Ç.G>Ç>HÔ4U	 Õ	UÕU! Õ!U%N)r   r   r   r   rA   rM   rR   r[   rd   rW   r‹   rˆ   r‡   rY   r   r   r   r   r   !   s¾   € € € € € ð
3ð 
3ð 
3ð6ð 6ð 6ð'ð 'ð 'ð 0ð 0ð 0ð!ð !ð !ðð ð ðð ð ð:	ð 	ð 	ðð ð ð&ð &ð &ðQ,ð Q,ð Q,ð Q,ð Q,r   r   Ú__main__)Úior�   r®   r;   r7   r>   Ú	picamera2r   r   Úpicamera2.encodersr   Úpicamera2.outputsr   r   rU   r   r#   r%   rV   r)   r+   r'   r-   ÚCommandr
   rƒ   ÚBufferedIOBaser   r   r   r   r   r   ú<module>r½      s…  ðà 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø *Ð *Ð *Ð *Ð *Ð *Ø (Ð (Ð (Ð (Ð (Ð (Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "ð(ð (ð (ð (ð (�bÔ'ñ (ô (ð (ð{,ð {,ð {,ð {,ð {,ñ {,ô {,ð {,ð| ˆzÒÐØ€Dð Ðr   