From f104b5fb888c23007054fc074843cdad15520a37 Mon Sep 17 00:00:00 2001
From: Anton Tetov <anton@tetov.se>
Date: Sun, 12 Jun 2022 12:49:14 +0200
Subject: [PATCH] gripper commands over farmbot added

---
 src/client.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/src/client.py b/src/client.py
index fbb44f6..22f3460 100755
--- a/src/client.py
+++ b/src/client.py
@@ -13,6 +13,7 @@ MAX_X = 2400
 MAX_Y = 1200
 MAX_Z = 469  # TODO test this one!
 
+
 def coord(x, y, z):
   return {"kind": "coordinate", "args": {"x": x, "y": y, "z": z}} # 返回json 嵌套对象
 
@@ -24,6 +25,50 @@ def move_request(x, y, z):
                              "offset": coord(0, 0, 0),
                              "speed": 100}}]}
 
+def read_pin_request(pin_number, pin_mode="digital"):
+  modes = {"digital": 0, "analog": 1}
+
+  if pin_mode != "digital":
+    raise NotImplementedError()
+
+  return {"kind": "rpc_request",
+          "args": {"label": ""},
+          "body": [{"kind": "read_pin"
+                    "args": {
+                      "label": "pin" + str(pin_number),
+                      "pin_mode": modes[pin_mode] or (modes["digital"]),
+                      "pin_number": pin_number
+                    }
+
+def write_pin_request(pin_number, pin_value, pin_mode="digital"):
+  modes = {"digital": 0, "analog": 1}
+
+  if pin_mode != "digital":
+    raise NotImplementedError()
+
+  return {"kind": "rpc_request",
+          "args": {"label": ""},
+          "body": [{"kind": "write_pin",
+                    "args": {
+            "pin_mode": modes[pin_mode] or (modes["digital"]),
+            "pin_number": pin_number,
+            "pin_value": pin_value
+                            }
+                    }
+                  ]
+          }
+
+def toggle_pin_request(pin_number)
+  return {"kind": "rpc_request",
+          "args": {"label": ""},
+          "body": [{"kind": "toggle_pin",
+                    "args": {
+            "pin_number": pin_number,
+                            }
+                    }
+                  ]
+          }
+
 def take_photo_request():
   return {"kind": "rpc_request",
           "args": {"label": ""}, #label空着是为了在blocking_request中填上uuid,唯一识别码
@@ -75,6 +120,18 @@ class FarmbotClient(object):
     status_ok = self._blocking_request(take_photo_request())
     logging.info("TAKE_PHOTO [%s]", status_ok)
 
+  def read_pin(self, pin_number, pin_mode="digital"):
+    status_ok = self._blocking_request(read_pin_request(pin_number, pin_mode=pin_mode))
+    logging.info(f"READ PIN (pin_number: {pin_number}) [{status_ok}]")
+
+  def write_pin(self, pin_number, pin_value, pin_mode="digital"):
+    status_ok = self._blocking_request(write_pin_request(pin_number, pin_value, pin_mode=pin_mode))
+    logging.info(f"WRITE PIN (pin_number: {pin_number}, pin_value: {pin_value}) [{status_ok}]")
+
+  def toggle_pin(self, pin_number):
+    status_ok = self._blocking_request(toggle_pin_request(pin_number))
+    logging.info(f"TOGGLE PIN (pin_number: {pin_number}) [{status_ok}]")
+
   def _blocking_request(self, request, retries_remaining=3):
     if retries_remaining==0:
       logging.error("< blocking request [%s] OUT OF RETRIES", request) #尝试3次,然后在日志中记录错误
-- 
GitLab