From b7839ae1c62efd01e25e5624d22d39c22e44a961 Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Fri, 22 Feb 2019 17:07:32 +0100
Subject: [PATCH] Channel installer infrastructure defined

---
 moberg.c        |  5 ++++-
 moberg.h        |  4 +++-
 moberg_config.c | 15 +++++++++++++++
 moberg_config.h | 10 ++++++----
 moberg_device.c |  9 ++++++++-
 moberg_device.h | 14 ++++++++++++++
 6 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/moberg.c b/moberg.c
index 0f4972e..59de337 100644
--- a/moberg.c
+++ b/moberg.c
@@ -90,7 +90,10 @@ static void parse_config_dir_at(
 
 static int install_config(struct moberg *moberg)
 {
-  return 1;
+  struct moberg_install_channels install = {
+    .context=moberg
+  };
+  return moberg_config_install_channels(moberg->config, &install);
 }
 
 struct moberg *moberg_new(
diff --git a/moberg.h b/moberg.h
index d2cb9d6..23e49c4 100644
--- a/moberg.h
+++ b/moberg.h
@@ -2,12 +2,14 @@
 #define __MOBERG_H__
 
 #include <stdio.h>
-#include <moberg_config.h>
 
 struct moberg;
+struct moberg_config;
+
 enum moberg_status { moberg_OK };
 
 struct moberg *moberg_new(struct moberg_config *config);
+
 void moberg_free(struct moberg *moberg);
 
 /* Input/output functions */
diff --git a/moberg_config.c b/moberg_config.c
index 9a98854..98491e0 100644
--- a/moberg_config.c
+++ b/moberg_config.c
@@ -30,6 +30,7 @@ struct moberg_config
     struct device_entry *next;
     struct moberg_device *device;
   } *device;
+#if 0
   struct  {
     int capacity;
     struct analog_in_entry {
@@ -65,6 +66,7 @@ struct moberg_config
       struct moberg_device_encoder_in *channel;
     } *value;
   } encoder_in;
+#endif
 };
 
 struct moberg_config *moberg_config_new()
@@ -73,6 +75,7 @@ struct moberg_config *moberg_config_new()
 
   if (result) {
     result->device = NULL;
+#if 0
     result->analog_in.capacity = 0;
     result->analog_in.value = NULL;
     result->analog_out.capacity = 0;
@@ -83,6 +86,7 @@ struct moberg_config *moberg_config_new()
     result->digital_out.value = NULL;
     result->encoder_in.capacity = 0;
     result->encoder_in.value = NULL;
+#endif
   }
   
   return result;
@@ -97,11 +101,13 @@ void moberg_config_free(struct moberg_config *config)
     moberg_device_free(tmp->device);
     free(tmp);
   }
+#if 0
   free(config->analog_in.value);
   free(config->analog_out.value);
   free(config->digital_in.value);
   free(config->digital_out.value);
   free(config->encoder_in.value);
+#endif
   free(config);
 }
 
@@ -130,6 +136,14 @@ int moberg_config_add_device(struct moberg_config *config,
   return 1;
 }
 
+int moberg_config_install_channels(struct moberg_config *config,
+                                   struct moberg_install_channels *install)
+{
+  return moberg_device_install_channels(config->device->device, install);
+}
+
+
+#if 0
 int moberg_config_add_analog_in(struct moberg_config *config,
                                 int index,
                                 struct moberg_device* device,
@@ -190,3 +204,4 @@ err:
   return 0;
 }
                             
+#endif
diff --git a/moberg_config.h b/moberg_config.h
index d8a9ef2..25401c3 100644
--- a/moberg_config.h
+++ b/moberg_config.h
@@ -1,10 +1,9 @@
 #ifndef __MOBERG_CONFIG_H__
 #define __MOBERG_CONFIG_H__
 
+#include <moberg.h>
 #include <moberg_device.h>
 
-struct moberg_config;
-
 struct moberg_config *moberg_config_new();
 
 void moberg_config_free(struct moberg_config *config);
@@ -15,6 +14,10 @@ int moberg_config_join(struct moberg_config *dest,
 int moberg_config_add_device(struct moberg_config *config,
                              struct moberg_device *device);
 
+int moberg_config_install_channels(struct moberg_config *config,
+                                   struct moberg_install_channels *install);
+
+#if 0
 int moberg_config_add_analog_in(struct moberg_config *config,
                                 int index,
                                 struct moberg_device* device,
@@ -39,7 +42,6 @@ int moberg_config_add_encoder_in(struct moberg_config *config,
                                  int index,
                                  struct moberg_device* device,
                                  struct moberg_device_encoder_in *channel);
-
-
+# endif
 
 #endif
diff --git a/moberg_device.c b/moberg_device.c
index 1ead539..0d7226e 100644
--- a/moberg_device.c
+++ b/moberg_device.c
@@ -214,4 +214,11 @@ int moberg_device_add_encoder_in(struct moberg_device* device,
   }
   return result;
 }
-                            
+
+int moberg_device_install_channels(struct moberg_device *device,
+                                   struct moberg_install_channels *install)
+{
+  printf("INSTALL\n");
+  return 1;
+}
+
diff --git a/moberg_device.h b/moberg_device.h
index 5fd0710..275c540 100644
--- a/moberg_device.h
+++ b/moberg_device.h
@@ -1,6 +1,7 @@
 #ifndef __MOBERG_DEVICE_H__
 #define __MOBERG_DEVICE_H__
 
+#include <moberg.h>
 #include <moberg_config.h>
 #include <moberg_parser.h>
 
@@ -47,6 +48,15 @@ struct moberg_device_encoder_in {
   int (*read)(struct moberg_device_encoder_in_context *, long *value);
 };
   
+struct moberg_install_channels {
+  struct moberg *context;
+  int (*analog_in)(int index, struct moberg_device_analog_in *channel);
+  int (*analog_out)(int index, struct moberg_device_analog_out *channel);
+  int (*digital_in)(int index, struct moberg_device_digital_in *channel);
+  int (*digital_out)(int index, struct moberg_device_digital_in *channel);
+  int (*encoder_in)(int index, struct moberg_device_encoder_in *channel);
+};
+
 struct moberg_parser_context;
 struct moberg_device;
 struct moberg_device_config;
@@ -97,4 +107,8 @@ int moberg_device_add_digital_out(struct moberg_device* device,
 int moberg_device_add_encoder_in(struct moberg_device* device,
                                  struct moberg_device_encoder_in *channel);
 
+int moberg_device_install_channels(struct moberg_device *device,
+                                   struct moberg_install_channels *install);
+
+
 #endif
-- 
GitLab