From e8f14985b88b2900d348bd3799fe05c9c7b554a0 Mon Sep 17 00:00:00 2001
From: "david.maul" <david.maul@informatik.hs-fulda.de>
Date: Thu, 13 Feb 2025 19:46:02 +0100
Subject: [PATCH] fix: fix invalid timings and wrong byte order in send_byte
 function

---
 kernel/kmod.c | 45 +++++++++++++++++++++++++++------------------
 1 file changed, 27 insertions(+), 18 deletions(-)

diff --git a/kernel/kmod.c b/kernel/kmod.c
index 75443bc..4775d1c 100644
--- a/kernel/kmod.c
+++ b/kernel/kmod.c
@@ -16,10 +16,12 @@
 #define CLASS_NAME "amogus_class"
 
 #define SLOTS 4
-#define SLOT_INTERVAL_NS 1000000
+#define SLOT_INTERVAL_NS 10000000
 
 #define MAX_VALUES 16
 
+#define BAUD_RATE 9600
+#define BIT_TIME_US (1000000 / BAUD_RATE)
 #define GPIO_PIN 575
 
 static int major_number;
@@ -101,37 +103,44 @@ static enum hrtimer_restart timer_callback(struct hrtimer *timer) {
   return HRTIMER_RESTART;
 }
 
-static void send_bit(uint8_t bit) {
+static inline void send_bit(uint8_t bit) {
   gpio_set_value(GPIO_PIN, bit);
-  udelay(1);
+  udelay(BIT_TIME_US);
 }
 
-static void send_byte(uint8_t byte) {
+static inline void send_byte(uint8_t byte) {
   send_bit(0);
 
-  for (int i = 0; i < 8; i++) {
-    int bit = (byte >> (7 - i)) & 1;
-    send_bit(bit);
-  }
+  send_bit((byte >> 0) & 1);
+  send_bit((byte >> 1) & 1);
+  send_bit((byte >> 2) & 1);
+  send_bit((byte >> 3) & 1);
+  send_bit((byte >> 4) & 1);
+  send_bit((byte >> 5) & 1);
+  send_bit((byte >> 6) & 1);
+  send_bit((byte >> 7) & 1);
 
   send_bit(1);
 }
 
 static void send_data(const packet_t *packet) {
-  send_byte(packet->data.sensor_id);
-  send_byte(packet->data.count);
+  send_byte(0xAA);
+  /*
+send_byte(packet->data.sensor_id);
+send_byte(packet->data.count);
 
-  uint8_t *bytes = (uint8_t *)packet->data.values;
+uint8_t *bytes = (uint8_t *)packet->data.values;
 
-  for (size_t i = 0; i < sizeof(message_t) * packet->data.count; i++) {
-    send_byte(bytes[i]);
-  }
+for (size_t i = 0; i < sizeof(message_t) * packet->data.count; i++) {
+  send_byte(bytes[i]);
+}
 
-  bytes = (uint8_t *)&packet->crc;
+bytes = (uint8_t *)&packet->crc;
 
-  for (size_t i = 0; i < sizeof(uint32_t); i++) {
-    send_byte(bytes[i]);
-  }
+for (size_t i = 0; i < sizeof(uint32_t); i++) {
+  send_byte(bytes[i]);
+}
+*/
 }
 
 static int timed_thread_fn(void *args) {
-- 
GitLab