From 331f2e71f8f7b663e15f6af7c27204e9aa910dfd Mon Sep 17 00:00:00 2001
From: Greg Quinn <greg.quinn@ssec.wisc.edu>
Date: Tue, 3 Oct 2017 13:27:43 +0000
Subject: [PATCH] Allow callables in pkted

---
 edosl0util/pkted.py | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/edosl0util/pkted.py b/edosl0util/pkted.py
index e6615d8..478c8a6 100644
--- a/edosl0util/pkted.py
+++ b/edosl0util/pkted.py
@@ -27,9 +27,14 @@ def edit_packets(file_path, specs):
                     ini = spec.start_bit
                     sz = spec.num_bits
                     fin = ini + sz
-                    new_arr = np.asarray(spec.new_value)
-                    new_arr = new_arr.astype(new_arr.dtype.newbyteorder('>'))
-                    bits[ini:fin] = np.unpackbits(new_arr[None].view(np.uint8))[-sz:]
+                    if callable(spec.new_value):
+                        old_value = bits[ini:fin].copy()
+                        new_value = spec.new_value(old_value)
+                    else:
+                        new_value = np.asarray(spec.new_value)
+                        new_value = new_value.astype(new_value.dtype.newbyteorder('>'))
+                        new_value = np.unpackbits(new_value[None].view(np.uint8))[-sz:]
+                    bits[ini:fin] = new_value
                 pkt.write(np.packbits(bits).tobytes())
 
 
-- 
GitLab