From 761fcdd19d71cd270c89bc716fc0072deb068c78 Mon Sep 17 00:00:00 2001
From: DAsamhan <23522019@std.stei.itb.ac.id>
Date: Wed, 19 Jun 2024 23:36:08 +0700
Subject: [PATCH] stash online

---
 debug-app/app/prj.conf                        |  3 +
 debug-app/include/main-handler.h              |  7 +++
 debug-app/include/utilities.h                 |  3 +-
 .../module/driver-hook/src/driver-hook.cpp    |  4 +-
 .../device-parser/src/device-parser.cpp       |  1 +
 .../handler/main-handler/src/main-handler.cpp | 56 +++++++++++--------
 6 files changed, 50 insertions(+), 24 deletions(-)

diff --git a/debug-app/app/prj.conf b/debug-app/app/prj.conf
index 52583b6..589d0ce 100644
--- a/debug-app/app/prj.conf
+++ b/debug-app/app/prj.conf
@@ -63,3 +63,6 @@ CONFIG_NET_L2_ETHERNET=y
 
 # Log
 CONFIG_LOG=y
+CONFIG_LOG_PROCESS_THREAD=y
+CONFIG_LOG_BUFFER_SIZE=2048
+CONFIG_LOG_MODE_DEFERRED=y
\ No newline at end of file
diff --git a/debug-app/include/main-handler.h b/debug-app/include/main-handler.h
index 1c4bc03..f47cb19 100644
--- a/debug-app/include/main-handler.h
+++ b/debug-app/include/main-handler.h
@@ -1,6 +1,13 @@
 #include <zephyr/kernel.h>
 #include "utilities.h"
 
+typedef enum DeviceState{
+    STANDBY,
+    SCANNING,
+    USER_1,
+    USER_2
+} DeviceState_e;
+
 class MainHandler {
 public:
     /** Constructor.
diff --git a/debug-app/include/utilities.h b/debug-app/include/utilities.h
index 9c34753..9fcaaac 100644
--- a/debug-app/include/utilities.h
+++ b/debug-app/include/utilities.h
@@ -8,7 +8,8 @@ typedef enum DriverNumb{
     SENSOR_2,
     SENSOR_3,
     BLUETOOTH,
-    ACTUATOR_1,
+    WINDOW,
+    LAMP
 } DriverNumb_e;
 
 typedef enum StateFlag{
diff --git a/debug-app/module/driver-hook/src/driver-hook.cpp b/debug-app/module/driver-hook/src/driver-hook.cpp
index 2fe05b4..d05bb67 100644
--- a/debug-app/module/driver-hook/src/driver-hook.cpp
+++ b/debug-app/module/driver-hook/src/driver-hook.cpp
@@ -47,7 +47,7 @@ void DriverHook::DriverRequestListener(const struct zbus_channel *chan){
 
     DriverMessage_t sentMessage = {
         .number = msg->number,
-        .value = data
+        .value = msg->value
     };
 
     switch (msg->number)
@@ -69,6 +69,8 @@ void DriverHook::DriverRequestListener(const struct zbus_channel *chan){
         break;
     }
 
+    LOG_INF("Sensor data %d", msg->value[0]);
+
     int status = zbus_chan_pub(&driverResponseChannel, &sentMessage, K_MSEC(200));
     LOG_INF("Status pub %d", status);
 }
\ No newline at end of file
diff --git a/debug-app/module/handler/device-parser/src/device-parser.cpp b/debug-app/module/handler/device-parser/src/device-parser.cpp
index 1a13531..11145e8 100644
--- a/debug-app/module/handler/device-parser/src/device-parser.cpp
+++ b/debug-app/module/handler/device-parser/src/device-parser.cpp
@@ -22,6 +22,7 @@ void DeviceParser::BleScanListener(const struct zbus_channel *chan){
 			if(context->BleDeviceParser(msg, &parsedData)){
                 LOG_INF("Device %s has data %d", msg->address.c_str(), parsedData.tempSensor);
             }
+            LOG_HEXDUMP_INF(msg->data.data(), msg->data.size(), "data raw");
 	}
     else{
         return;
diff --git a/debug-app/module/handler/main-handler/src/main-handler.cpp b/debug-app/module/handler/main-handler/src/main-handler.cpp
index 9032059..21cdaf1 100644
--- a/debug-app/module/handler/main-handler/src/main-handler.cpp
+++ b/debug-app/module/handler/main-handler/src/main-handler.cpp
@@ -40,7 +40,7 @@ MainHandler::MainHandler(){
 	k_sem_init(&responseWait, 0, 1);
 
 	// zbus_chan_add_obs(&driverResponseChannel, &sensorSubs, K_MSEC(200));
-	// zbus_chan_add_obs(&driverResponseChannel, &driverListener, K_NO_WAIT);
+	zbus_chan_add_obs(&driverResponseChannel, &driverListener, K_NO_WAIT);
 }
 
 void MainHandler::Init(){
@@ -54,6 +54,7 @@ int MainHandler::Deinit(){
 void MainHandler::MainThread(MainHandler *context){
 	// const struct zbus_channel *chan;
 	uint8_t currentState = 1;
+	uint8_t stateCounter = 0;
 	// while (!zbus_sub_wait(&stateSubs, &chan, K_MSEC(200))) {
 	// 		StateMessage_t state;
 
@@ -77,26 +78,44 @@ void MainHandler::MainThread(MainHandler *context){
 
 		switch (currentState)
 		{
-		case 1:{
-			LOG_INF("entering state 1. get data from sensor 1");
+		case STANDBY:{
+			LOG_INF("entering state 1");
 			DriverMessage_t configVector, responseVector;
 			configVector.number = SENSOR_1;
-			configVector.value.push_back(SENSOR_1);
+			configVector.value.push_back(stateCounter);
 			if(context->DriverRequest(&configVector, &responseVector, K_MSEC(200))){
-				LOG_INF("get sensor data %d", responseVector.number);
+				if(responseVector.value.size() > 0){
+					LOG_INF("get sensor data %d", responseVector.value[0]);
+				}
 
 			}
 			else{
 				LOG_INF("fail");
 			}
+			k_msleep(500);
+			stateCounter++;
+			if(stateCounter > 10){
+				stateCounter = 0;
+				currentState = SCANNING;
+			}
 			break;
 		}
 
-		case 2:
-			/* code */
+		case SCANNING:
+			LOG_INF("entering state 2");
+			k_msleep(500);
+			stateCounter++;
+			if(stateCounter > 10){
+				stateCounter = 0;
+				currentState = 1;
+			}
 			break;
 		
-		case 3:
+		case USER_1:
+			/* code */
+			break;
+
+		case USER_2:
 			/* code */
 			break;		
 		default:
@@ -110,25 +129,18 @@ void MainHandler::DriverResponseListener(const struct zbus_channel *chan){
 	const DriverMessage_t *driver;
 	if (&driverResponseChannel == chan) {
 			driver = (DriverMessage_t *)zbus_chan_const_msg(chan); // Direct message access
-			if(driver->number == context->requestedResponse){
-				// k_sem_give(&responseWait);
-				context->driverResponse_g = *driver;
-			}
+			context->driverResponse_g = *driver;
 	}
 }
 
 bool MainHandler::DriverRequest(DriverMessage_t *sentMessage, DriverMessage_t *driverResponse, k_timeout_t timeout){
 	zbus_chan_pub(&driverRequestChannel, sentMessage, K_MSEC(200));
 
-	requestedResponse =  sentMessage->number;
-
-	if (k_sem_take(&responseWait, timeout) == 0) {
-		*driverResponse = driverResponse_g;
-        LOG_INF("data available!");
-
-    } else {
-        LOG_ERR("timeout");
-		return false;
-    }	
+	// if(&driverResponse_g == NULL){
+	// 	return false;
+	// }
+	*driverResponse = driverResponse_g;
+	// *driverResponse_g = NULL;
+    LOG_INF("data available!");
 	return true;
 }
\ No newline at end of file
-- 
GitLab