diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index 563625b688cdb63c59257141df9311fb63478eca..83dd5ad0bf190d3bdf2c1bf0889d3950957aac69 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -19,5 +19,10 @@
         </list>
       </option>
     </inspection_tool>
+    <inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
+      <option name="processCode" value="true" />
+      <option name="processLiterals" value="true" />
+      <option name="processComments" value="true" />
+    </inspection_tool>
   </profile>
 </component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 65531ca992813bbfedbe43dfae5a5f4337168ed8..a2e120dcc86d18fdcb6ccfbe56c5d0b0dcd7c04a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
 </project>
\ No newline at end of file
diff --git a/.idea/viscaoverip.iml b/.idea/viscaoverip.iml
index c8efcbb45e273465fff1280c9526af4d0f275163..f3d7bc9c9d036a32dfe9c30113dafdf14174715b 100644
--- a/.idea/viscaoverip.iml
+++ b/.idea/viscaoverip.iml
@@ -2,7 +2,7 @@
 <module type="PYTHON_MODULE" version="4">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$" />
-    <orderEntry type="jdk" jdkName="Python 3.6" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="Python 3.7" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
   <component name="TestRunnerService">
diff --git a/viscaoveriplib/commands_library.py b/viscaoveriplib/commands_library.py
index 36b190c1039aebce6cc14d1205c28d6e18e47766..4cba9dc7874e370942d3e3c8f1c8111f0c4c3591 100644
--- a/viscaoveriplib/commands_library.py
+++ b/viscaoveriplib/commands_library.py
@@ -5,6 +5,18 @@ class Camera:
     ####
     ####### FONCTIONS COMMANDES D'EXECUTIONS
     ####
+    @staticmethod
+    def hex_2_message(x: hex):
+        """
+        :param x: hex of 2 or 4 bits like "0x1234"
+        :return: string like "0p 0q 0r 0s"
+        """
+        message = ""
+        for p in x[2:]:
+            message = message + "0" + p + " "
+        message.pop()
+        return message
+
 
     #CAM_POWER : Power ON/OFF
     def power_on(self):
@@ -17,28 +29,53 @@ class Camera:
         self.send_payload(payloadtype,payload)
 
     #CAM_ZOOM : Zoom Control
-
-    #TODO
+    #x from 1 : "0x0000" to 30 : "0x4000"
+    def zoom_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 6:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 47 " + message + " FF"
+        self.send_payload(payloadtype, payload)
 
     #CAM_DZOOM
     def digital_zoom_off(self):
         payloadtype='01 00'
         payload='81 01 04 06 02 FF'
         self.send_payload(payloadtype,payload)
+
     def digital_zoom_on(self):
         payloadtype='01 00'
         payload="81 01 04 06 03 FF"
         self.send_payload(payloadtype,payload)
 
     #CAM_Focus : Focus Control
+    # inf = "0x1000" to 1cm = "0xF000"
+    def focus_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 6:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 48 " + message + " FF"
+        self.send_payload(payloadtype, payload)
+
+    def autofocus_on(self):
+        payloadtype = '01 00'
+        payload = '81 01 04 38 02 FF'
+        self.send_payload(payloadtype, payload)
+
+    def autofocus_off(self):
+        payloadtype = '01 00'
+        payload = '81 01 04 38 03 FF'
+        self.send_payload(payloadtype, payload)
 
-    #TODO
 
     #AF Sensitivity : Auto Focus sensitivity high/low
     def autofocus_sensivity_normal(self):
         payloadtype='01 00'
         payload='81 01 04 58 02 FF'
         self.send_payload(payloadtype,payload)
+
     def autofocus_sensivity_low(self):
         payloadtype='01 00'
         payload='81 01 04 58 03 FF'
@@ -53,6 +90,7 @@ class Camera:
         payloadtype='01 00'
         payload='81 01 04 11 00 FF'
         self.send_payload(payloadtype,payload)
+        
     def focus_ir_correction_on(self):
         payloadtype='01 00'
         payload='81 01 04 11 00 FF'
@@ -60,17 +98,26 @@ class Camera:
 
     #CAM_ZoomFocus
 
-    #TODO
+    def zoom_focus_direct(self, x: hex, y: hex):
+        payloadtype = '01 00'
+        if len(x) != 6:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        if len(y) != 6:     # x n'est pas bon a voir si on check avant
+            y = "0x0000"
+        message_x = self.hex_2_message(x)
+        message_y = self.hex_2_message(y)
+        payload = "81 01 04 47 " + message_x + " " + message_y + " FF"
+        self.send_payload(payloadtype, payload)
 
 
     #CAM_WB : White Balance
     def wb_auto(self): #Normal Auto
         payloadtype='01 00'
-        payload="8x 01 04 35 00 FF"
+        payload="81 01 04 35 00 FF"
 
     def wb_indoor(self): #Indoor Mode
         payloadtype='01 00'
-        payload="8x 01 04 35 01 FF"
+        payload="81 01 04 35 01 FF"
         self.send_payload(payloadtype,payload)
 
     def wb_outdoor(self): #Outdoor Mode
@@ -101,8 +148,51 @@ class Camera:
     #TOTERMINER
 
     #CAM_RGain and BGain
+    def rgain_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 03 00 FF"
+        self.send_payload(payloadtype, payload)
 
-    #TODO
+    def rgain_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 03 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def rgain_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 03 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def rgain_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 43 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
+
+    def bgain_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 04 00 FF"
+        self.send_payload(payloadtype, payload)
+
+    def bgain_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 04 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def bgain_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 04 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def bgain_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 44 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
 
     #CAM_AE : Exposure settings
 
@@ -126,7 +216,7 @@ class Camera:
         payload="81 01 04 39 0B FF"
         self.send_payload(payloadtype,payload)
 
-    def ae_bright(self): # Bright mode (manual control)
+    def ae_bright(self):  # Bright mode (manual control)
         payloadtype='01 00'
         payload="81 01 04 39 0D FF"
         self.send_payload(payloadtype,payload)
@@ -143,24 +233,131 @@ class Camera:
         self.send_payload(payloadtype,payload)
 
     #CAM_shutter
+    def shutter_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0A 00 FF"
+        self.send_payload(payloadtype, payload)
+
+    def shutter_on(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0A 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def shutter_off(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0A 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def shutter_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 4A 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
 
-    #TODO
 
     #CAM_Iris
+    def iris_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0B 00 FF"
+        self.send_payload(payloadtype, payload)
 
-    #TODO
+    def iris_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0B 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def iris_down(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0B 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def iris_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 4B 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
 
     #CAM_GAIN
+    def gain_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0C 00 FF"
+        self.send_payload(payloadtype, payload)
 
-    #TODO
+    def gain_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0C 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def gain_down(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0C 03 FF"
+        self.send_payload(payloadtype, payload)
 
-    #CAM_Bright
+    def gain_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 4C 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
 
-    #TODO
+    # CAM_Bright
 
-    #CAM_ExpComp
+    def brigth_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0D 02 FF"
+        self.send_payload(payloadtype, payload)
 
-    #TODO
+    def brigth_down(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 0D 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def brigth_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 4D 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
+
+    # CAM_ExpComp
+    def expcomp_reset(self):
+        payloadtype='01 00'
+        payload="81 01 04 0E 00 FF"
+        self.send_payload(payloadtype, payload)
+
+    def expcomp_on(self):
+        payloadtype = '01 00'
+        payload="81 01 04 3E 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def expcomp_off(self):
+        payloadtype = '01 00'
+        payload="81 01 04 3E 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def expcomp_up(self):
+        payloadtype = '01 00'
+        payload="81 01 04 0E 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def expcomp_down(self):
+        payloadtype = '01 00'
+        payload="81 01 04 0E 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def expcomp_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 4E 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
 
     #CAM_Backlight : Back Light Comp ON/OFF
     def backlight_on(self):
@@ -199,6 +396,7 @@ class Camera:
         payloadtype='01 00'
         payload="81 01 04 37 02 00 FF"
         self.send_payload(payloadtype,payload)
+
     def defog_off(self):
         payloadtype='01 00'
         payload="81 01 04 37 03 00 FF"
@@ -206,7 +404,28 @@ class Camera:
 
     #CAM_Aperture
 
-    #TODO
+    def aperture_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def aperture_direct(self, x: hex):
+        payloadtype = '01 00'
+        if len(x) != 4:     # x n'est pas bon a voir si on check avant
+            x = "0x0000"
+        message = self.hex_2_message(x)
+        payload = "81 01 04 42 00 00 " + message + " FF"
+        self.send_payload(payloadtype, payload)
+
+    def aperture_up(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 42 02 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def aperture_down(self):
+        payloadtype = '01 00'
+        payload = "81 01 04 42 02 03 FF"
+        self.send_payload(payloadtype, payload)
 
     #CAM_HR : High resolution mode
 
@@ -217,70 +436,76 @@ class Camera:
         self.send_payload(payloadtype,payload)
 
 
+    #Pan-tiltDrive
+
+    def pan_tiltDrive_reset(self):
+        payloadtype = '01 00'
+        payload = "81 01 06 05 FF"
+        self.send_payload(payloadtype, payload)
 
-    #PAS RELU A PARTIR D'ICI :
-    def move_to_absolute_position(self, YCoordinates, ZCoordinates, VV=None, WW=None):
+    def pan_tiltDrive_home(self):
+        payloadtype = '01 00'
+        payload = "81 01 06 04 FF"
+        self.send_payload(payloadtype, payload)
+
+    def pan_tiltDrive_up(self):
+        VV = self.VV
+        WW = self.WW
+        payloadtype = '01 00'
+        payload = "81 01 06 01 " + VV + WW + " 03 01 FF"
+        self.send_payload(payloadtype, payload)
+
+    def pan_tiltDrive_down(self):
+        VV = self.VV
+        WW = self.WW
+        payloadtype = '01 00'
+        payload = "81 01 06 01 " + VV + WW + " 03 02 FF"
+        self.send_payload(payloadtype, payload)
+
+    def pan_tiltDrive_left(self):
+        VV = self.VV
+        WW = self.WW
+        payloadtype = '01 00'
+        payload = "81 01 06 01 " + VV + WW + " 01 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def pan_tiltDrive_right(self):
+        VV = self.VV
+        WW = self.WW
+        payloadtype = '01 00'
+        payload = "81 01 06 01 " + VV + WW + " 02 03 FF"
+        self.send_payload(payloadtype, payload)
+
+    def pan_tiltDrive_absolute(self, y: hex, z: hex):
         """
         command of absolute position mouvement
-        :param YCoordinates: YYYY from to
-        :param ZCoordinates: ZZZZ from to
-        :param VV:
-        :param WW:
+        :param y: from DE00 to 2200
+        :param z: from EE00 to 0400
         :return:
         """
-        if(VV==None):
-            VV=self.VV
-        if(WW==None):
-            WW=self.WW
+        VV=self.VV
+        WW=self.WW
         payloadtype = '01 00'
         payload = "81 01 06 02"  # Absolute position moove
         payload = payload + VV + WW  # add move speed
-        for i in [YCoordinates, ZCoordinates]:  # add position
-            for j in i:
-                payload = payload + " 0" + j
-        payload = payload + "FF"  # end byte #ce code était dans le première boucle, ça me semblait faux.
-        self.send_payload(payloadtype,payload)
-
-    def zqsd(self, x: str) -> str:  # hex
-        payload = "FF"  # message d'erreur à refaire
-        if x == 'd':
-            # payload = "81 01 06 03 VV WW 0Y 0Y 0Y 0Y 00 00 00 00 FF     YYYY de DE00 à 2200 center 0000
-            payload = "81 01 06 03 09 09 00 01 02 02 00 00 00 00 FF"
-        if x == 'q':
-            payload = "81 01 06 03 09 09 0F 0E 0D 0E 00 00 00 00 FF"
-        if x == 'z':
-            payload = "81 01 06 03 09 09 0F 0E 0D 0E 00 00 09 0A FF"
-        if x == 's':
-            payload = "81 01 06 03 09 09 0F 0E 0D 0E 0F 0F 06 06 FF"
-        header = self.payload2header(self, payload)
-        payloadtype = '01 00'
-        message = payloadtype + header + payload
-        return message
-
-    def zoom(self, n: int) -> str:  # hex      #faire une version zoom + / zoom -
-        if n == 0:
-            payload = "81 01 04 47 00 00 00 00 FF"
-
-        if n == 2:
-            payload = "81 01 04 47 01 06 0A 01 FF"
-        payloadtype = "01 00"
-        header = self.payload2header(self, payload)
-        message = payloadtype + header + payload
-        return message
+        messagey = self.hex_2_message(y)
+        messagez = self.hex_2_message(z)
+        payload = payload + messagey + " " + messagez + " FF"
+        self.send_payload(payloadtype, payload)
 
-    def focus(self, b: bool) -> str:
+    def pan_tiltDrive_relavtive(self, y: hex, z: hex):
         """
-        Command the focus auto or manual
-        :param b: bool = 1 : autofocus ; bool = 0 : manualfocus
-        :return: commande
+        command of relative position mouvement
+        :param y: from DE00 to 2200
+        :param z: from EE00 to 0400
+        :return:
         """
-        # hex        #focus2payload(0) = autofocus
-        if b:
-            payload = "81 01 04 38 02 FF"  # autofocus
-        else:
-            payload = "81 01 04 38 03 FF"
-        header = self.payload2header(self, payload)
-        payloadtype = "01 00"
-        message = payloadtype + header + payload
-        return message
-
+        VV = self.VV
+        WW = self.WW
+        payloadtype = '01 00'
+        payload = "81 01 06 03"  # Absolute position moove
+        payload = payload + VV + WW  # add move speed
+        messagey = self.hex_2_message(y)
+        messagez = self.hex_2_message(z)
+        payload = payload + messagey + " " + messagez + " FF"
+        self.send_payload(payloadtype, payload)