diff --git a/Assets/ControlLibrary/ControlLibrary.cs b/Assets/ControlLibrary/ControlLibrary.cs index 749e36e..84b3c4d 100644 --- a/Assets/ControlLibrary/ControlLibrary.cs +++ b/Assets/ControlLibrary/ControlLibrary.cs @@ -17,7 +17,7 @@ public class ControlLibrary : MonoBehaviour public static extern int send_angle_control(int module_id, int angle); [DllImport("libc_control")] - private static extern IntPtr get_configuration(out int module_id); // the data this points to will be invalidated when called again + private static extern IntPtr get_configuration(out int module_id, int leader_id); // the data this points to will be invalidated when called again [DllImport("libc_control")] public static extern int send_string_control(int module_id, string s); @@ -41,11 +41,27 @@ public class ControlLibrary : MonoBehaviour [DllImport("libc_control")] public static extern void control_sentry_shutdown(); + [DllImport("libc_control")] + private static extern IntPtr get_leaders(out int length); - public static Frontend.RobotConfiguration getRobotConfiguration() // this is not thread safe + public static int[] getRobotLeaders() { + int length; + IntPtr ptr = get_leaders(out length); + + byte[] bytes = new byte[length]; + Marshal.Copy(ptr, bytes, 0, length); + + int[] ints = new int[length]; + for (int i = 0; i < length; i++) { + ints[i] = bytes[i]; + } + return ints; + } + + public static Frontend.RobotConfiguration getRobotConfiguration(int leader_id) // this is not thread safe { int size; - IntPtr ptr = get_configuration(out size); + IntPtr ptr = get_configuration(out size, leader_id); byte[] buffer = new byte[size]; Marshal.Copy(ptr, buffer, 0, size); diff --git a/Assets/ControlLibrary/libc_control.dylib b/Assets/ControlLibrary/libc_control.dylib index f40311a..0037e2d 100755 Binary files a/Assets/ControlLibrary/libc_control.dylib and b/Assets/ControlLibrary/libc_control.dylib differ diff --git a/Assets/Module/TopologyBuilder.cs b/Assets/Module/TopologyBuilder.cs index 22ae220..fa13008 100644 --- a/Assets/Module/TopologyBuilder.cs +++ b/Assets/Module/TopologyBuilder.cs @@ -62,7 +62,7 @@ public class TopologyBuilder : MonoBehaviour } else { - RobotConfiguration config = ControlLibrary.getRobotConfiguration(); + RobotConfiguration config = ControlLibrary.getRobotConfiguration(100); // todo: change to actual leader id int moduleCount = config.ModulesLength; for (int i = 0; i < moduleCount; i++) {