From 4d06b6021d015bf273fd1974946a317430094569 Mon Sep 17 00:00:00 2001
From: Byeongdulee <blee@anl.gov>
Date: Tue, 25 Jul 2023 09:43:55 -0500
Subject: [PATCH] tool functions are added.

---
 .gitignore      |  2 +-
 urx/urrobot.py  | 21 +++++++++++++++++++++
 urx/urscript.py | 24 ++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index 7536d70..ff7ce8d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@ build
 .idea/
 .history/
 *.pyc
-dist/urx-0.11.0-py3.10.egg
+dist/*.egg
 urx.egg-info/dependency_links.txt
 urx.egg-info/PKG-INFO
 urx.egg-info/requires.txt
diff --git a/urx/urrobot.py b/urx/urrobot.py
index 3086fe7..56d124a 100644
--- a/urx/urrobot.py
+++ b/urx/urrobot.py
@@ -254,6 +254,27 @@ class URRobot(object):
         prog = "set_tool_voltage(%s)" % (val)
         self.send_program(prog)
 
+    def set_tool_digital_in(self, input_id):
+        """
+        set voltage to be delivered to the tool, val is 0, 12 or 24
+        """
+        prog = "set_tool_digital_in(%s)" % (input_id)
+        self.send_program(prog)
+
+    def set_tool_digital_out(self, input_id, signal_level):
+        """
+        set voltage to be delivered to the tool, val is 0, 12 or 24
+        """
+        prog = "set_tool_digital_out(%s, %s)" % (input_id, signal_level)
+        self.send_program(prog)
+
+    def set_tool_communication(self, enabled=True, baud_rate=9600, parity=0, stop_bits=1, rx_idle_chars=1.0, tx_idle_chars=3.5):
+        """
+        set voltage to be delivered to the tool, val is 0, 12 or 24
+        """
+        prog = "set_tool_communication(%s, %s, %s, %s, %s, %s)" % (enabled, baud_rate, parity, stop_bits, rx_idle_chars, tx_idle_chars)
+        self.send_program(prog)
+
     def _wait_for_move(self, target, threshold=None, timeout=5, joints=False):
         """
         wait for a move to complete. Unfortunately there is no good way to know when a move has finished
diff --git a/urx/urscript.py b/urx/urscript.py
index 2382cb3..40b40ad 100755
--- a/urx/urscript.py
+++ b/urx/urscript.py
@@ -150,6 +150,30 @@ class URScript(object):
         msg = "socket_send_byte(\"{}\",\"{}\")".format(str(byte), socket_name)  # noqa
         self.add_line_to_program(msg)
         self._sync()
+
+    def _get_tool_digital_in(self, input_id):
+        assert(input_id in [0, 1])
+        msg = "get_standard_digital_in({})".format(input_id)
+        self.add_line_to_program(msg)
+
+    def _set_tool_digital_out(self, input_id, signal_level):
+        assert(input_id in [0, 1])
+        assert(signal_level in [True, False])        
+        msg = "set_standard_digital_out({}, {})".format(input_id, signal_level)
+        self.add_line_to_program(msg)
+
+    def _set_tool_communication(self, enabled=True, baud_rate=9600, parity=0, stop_bits=1, rx_idle_chars=1.5, tx_idle_chars=3.5):
+        # stop_bits:Thenumberofstopbits(int).Validvalues:1,2. 
+        # rx_idle_chars:AmountofcharstheRXunitinthetoolshouldwaitbeforemarkingamessage asover/sendingittothePC(float).Validvalues:min=1.0max=40.0. 
+        # tx_idle_chars:
+        # set_tool_communication(True,115200,1,2,1.0,3.5)
+        # :9600,19200,38400,57600,115200, 1000000,2000000,5000000
+        assert(baud_rate in [9600,19200,38400,57600,115200, 1000000,2000000,5000000])
+        assert(parity in [0, 1, 2])
+        assert(stop_bits in [1, 2])
+        assert(enabled in [True, False])      
+        msg = "set_tool_communication({}, {}, {}, {}, {}, {})".format(enabled, baud_rate, parity, stop_bits, rx_idle_chars, tx_idle_chars)
+        self.add_line_to_program(msg)
         
     def _sync(self):
         msg = "sync()"