From 18095043f6084f1c70782da65d03c2e075e7432d Mon Sep 17 00:00:00 2001
From: Benjamin Koch <bbbsnowball@gmail.com>
Date: Sat, 27 May 2023 21:58:03 +0200
Subject: [PATCH] use to_be_bytes() instead of byteorder crate

---
 firmware/rust1/Cargo.lock           |  1 -
 firmware/rust1/Cargo.toml           |  1 -
 firmware/rust1/src/modbus_server.rs | 14 +++++++-------
 3 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/firmware/rust1/Cargo.lock b/firmware/rust1/Cargo.lock
index cad3501..1826c0d 100644
--- a/firmware/rust1/Cargo.lock
+++ b/firmware/rust1/Cargo.lock
@@ -1027,7 +1027,6 @@ name = "heizung"
 version = "0.1.0"
 dependencies = [
  "byte-slice-cast 1.2.2",
- "byteorder",
  "cortex-m",
  "cortex-m-rt",
  "crc",
diff --git a/firmware/rust1/Cargo.toml b/firmware/rust1/Cargo.toml
index 3ea67b9..d2db0ff 100644
--- a/firmware/rust1/Cargo.toml
+++ b/firmware/rust1/Cargo.toml
@@ -56,7 +56,6 @@ pio = "0.2.1"
 
 heapless = "0.7.16"
 crc = "3.0.1"
-byteorder = "1.4.3"
 
 [profile.release]
 debug = true
diff --git a/firmware/rust1/src/modbus_server.rs b/firmware/rust1/src/modbus_server.rs
index 14511a6..be277c4 100644
--- a/firmware/rust1/src/modbus_server.rs
+++ b/firmware/rust1/src/modbus_server.rs
@@ -4,8 +4,6 @@ use futures::Future;
 use heapless::Vec;
 use crc::{Crc, CRC_16_MODBUS, Digest};
 use embassy_rp::uart;
-use core::fmt::Write;
-use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
 
 use crate::rs485::{RS485Handler};
 
@@ -102,18 +100,20 @@ impl<REGS: ModbusRegisters> ModbusServer<REGS> {
         txbuf.clear();
         let capacity = txbuf.capacity();
 
-        let map_err = |x: Result<(), ()> | x.or(Err(ServerDeviceFailure));
+        fn map_err<T>(x: Result<(), T>) -> Result<(), ModbusErrorCode> {
+            x.or(Err(ServerDeviceFailure))
+        }
         fn push(txbuf: &mut Vec<u8, BUF_LENGTH>, x: u8) -> Result<(), ModbusErrorCode> {
-            map_err(txbuf.push(x));
+            map_err(txbuf.push(x))
         }
         fn push_many(txbuf: &mut Vec<u8, BUF_LENGTH>, xs: &[u8]) -> Result<(), ModbusErrorCode> {
             for x in xs {
-                push(txbuf, x)?;
+                push(txbuf, *x)?;
             }
             Ok(())
         }
         fn push_u16be(txbuf: &mut Vec<u8, BUF_LENGTH>, x: u16) -> Result<(), ModbusErrorCode> {
-            map_err(txbuf.write_u16::<BigEndian>(x));
+            push_many(txbuf, &x.to_be_bytes())
         }
     
         // see https://modbus.org/docs/Modbus_Application_Protocol_V1_1b3.pdf
@@ -210,7 +210,7 @@ impl<REGS: ModbusRegisters> ModbusServer<REGS> {
                 let actual_new_value = self.regs.write_register(rxbuf[0], start, value)?;
                 if should_reply {
                     push_many(txbuf, &rxbuf[0..4])?;
-                    push_u16be(txbuf, value)?;
+                    push_u16be(txbuf, actual_new_value)?;
                 }
                 Ok(())
             },
-- 
GitLab