This commit is contained in:
Christen
2026-03-10 17:04:13 -04:00
3 changed files with 23 additions and 6 deletions

View File

@@ -17,7 +17,7 @@ public class ControlLibrary : MonoBehaviour
public static extern int send_angle_control(int module_id, int angle); public static extern int send_angle_control(int module_id, int angle);
[DllImport("libc_control")] [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")] [DllImport("libc_control")]
public static extern int send_string_control(int module_id, string s); public static extern int send_string_control(int module_id, string s);
@@ -41,11 +41,27 @@ public class ControlLibrary : MonoBehaviour
[DllImport("libc_control")] [DllImport("libc_control")]
public static extern void control_sentry_shutdown(); 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; int size;
IntPtr ptr = get_configuration(out size); IntPtr ptr = get_configuration(out size, leader_id);
byte[] buffer = new byte[size]; byte[] buffer = new byte[size];
Marshal.Copy(ptr, buffer, 0, size); Marshal.Copy(ptr, buffer, 0, size);

View File

@@ -62,7 +62,7 @@ public class TopologyBuilder : MonoBehaviour
} }
else else
{ {
RobotConfiguration config = ControlLibrary.getRobotConfiguration(); RobotConfiguration config = ControlLibrary.getRobotConfiguration(100); // todo: change to actual leader id
int moduleCount = config.ModulesLength; int moduleCount = config.ModulesLength;
for (int i = 0; i < moduleCount; i++) for (int i = 0; i < moduleCount; i++)
{ {
@@ -73,7 +73,7 @@ public class TopologyBuilder : MonoBehaviour
Debug.Log("Adding module " + module.Id); Debug.Log("Adding module " + module.Id);
ModuleType moduleType = Enum.Parse<ModuleType>(module.ModuleType.ToString()); ModuleType moduleType = Enum.Parse<ModuleType>(module.ModuleType.ToString());
float degree = module.ConfigurationAsMotorState().Angle; float degree = module.ConfigurationAsMotorState().Angle;
if (moduleType == ModuleType.SERVO_1 || moduleType == moduleType.SERVO_2) if (moduleType == ModuleType.SERVO_1 || moduleType == ModuleType.SERVO_2)
{ {
degree = 90; degree = 90;
} }
@@ -93,7 +93,8 @@ public class TopologyBuilder : MonoBehaviour
if (n_connection != null) if (n_connection != null)
{ {
var connection = n_connection.Value; var connection = n_connection.Value;
Debug.Log("orientation: " + connection.Orientation); if (connection.FromSocket == 0) { continue; }
Debug.Log("Connection: from (socket): " + connection.FromModuleId + " (" + connection.FromSocket + ")" + " to " + connection.ToModuleId + " ("+ connection.ToSocket + ")" + " orientation: " + connection.Orientation);
graph.Connections.Add(new Connection graph.Connections.Add(new Connection
{ {
FromModuleId = connection.FromModuleId, FromModuleId = connection.FromModuleId,