[hal] Add high level way of getting systemserver NT instance (#7683)

This commit is contained in:
Thad House
2025-01-16 09:49:40 -08:00
committed by GitHub
parent 58cb395d76
commit 1cad4f64a4
16 changed files with 169 additions and 5 deletions

View File

@@ -69,6 +69,8 @@ cc_library(
":generated_cc_headers",
":mrc_cc_headers",
":generated_mrc_cc_headers",
"//ntcore:ntcore.static",
"//wpinet:wpinet.static",
"//wpiutil:wpiutil.static",
] + HAL_DEPS,
)
@@ -78,6 +80,8 @@ java_library(
srcs = [":generated_java"] + glob(["src/main/java/**/*.java"]),
visibility = ["//visibility:public"],
deps = [
"//ntcore:networktables-java",
"//wpinet:wpinet-java",
"//wpiutil:wpiutil-java",
],
)

View File

@@ -22,7 +22,7 @@ target_include_directories(
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/generated/main/native/include>
$<INSTALL_INTERFACE:${include_dest}/hal>
)
target_link_libraries(hal PUBLIC wpiutil)
target_link_libraries(hal PUBLIC ntcore wpiutil)
set_property(TARGET hal PROPERTY FOLDER "libraries")

View File

@@ -0,0 +1,23 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.hal;
/**
* SystemServer JNI Functions.
*
* @see "SystemServer.h"
*/
public class SystemServerJNI extends JNIWrapper {
/**
* Gets the system server NT handle.
*
* @return The system server NT handle
* @see "HAL_GetSystemServerHandle"
*/
public static native int getSystemServerHandle();
/** Utility class. */
private SystemServerJNI() {}
}

View File

@@ -0,0 +1,24 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include <jni.h>
#include "edu_wpi_first_hal_SystemServerJNI.h"
#include "hal/SystemServer.h"
extern "C" {
/*
* Class: edu_wpi_first_hal_SystemServerJNI
* Method: getSystemServerHandle
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_edu_wpi_first_hal_SystemServerJNI_getSystemServerHandle
(JNIEnv*, jclass)
{
return HAL_GetSystemServerHandle();
}
} // extern "C"

View File

@@ -0,0 +1,17 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <ntcore_c.h>
#ifdef __cplusplus
extern "C" {
#endif
NT_Inst HAL_GetSystemServerHandle(void);
#ifdef __cplusplus
} // extern "C"
#endif

View File

@@ -0,0 +1,12 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "hal/SystemServer.h"
extern "C" {
NT_Inst HAL_GetSystemServerHandle(void) {
return 0;
}
} // extern "C"

View File

@@ -27,7 +27,7 @@
#include <wpi/timestamp.h>
#include "HALInitializer.h"
#include "SystemServer.h"
#include "SystemServerInternal.h"
#include "hal/DriverStation.h"
#include "hal/Errors.h"
#include "hal/proto/ControlData.h"

View File

@@ -27,7 +27,7 @@
#include "CANInternal.h"
#include "HALInitializer.h"
#include "HALInternal.h"
#include "SystemServer.h"
#include "SystemServerInternal.h"
#include "hal/DriverStation.h"
#include "hal/Errors.h"
#include "hal/Notifier.h"

View File

@@ -7,7 +7,7 @@
#include <atomic>
#include "HALInitializer.h"
#include "SystemServer.h"
#include "SystemServerInternal.h"
namespace hal {

View File

@@ -2,8 +2,9 @@
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "SystemServer.h"
#include "hal/SystemServer.h"
#include "SystemServerInternal.h"
#include "mrc/NtNetComm.h"
namespace hal {
@@ -33,3 +34,10 @@ nt::NetworkTableInstance GetSystemServer() {
}
} // namespace hal
extern "C" {
NT_Inst HAL_GetSystemServerHandle(void) {
return hal::ServerInstance.GetHandle();
}
} // extern "C"

View File

@@ -134,6 +134,16 @@ public final class NetworkTableInstance implements AutoCloseable {
return inst;
}
/**
* Create an instance from a native handle. This instance is not owned, closing will do nothing.
*
* @param handle Native instance handle
* @return Instance
*/
public static NetworkTableInstance fromNativeHandle(int handle) {
return new NetworkTableInstance(handle);
}
/**
* Gets the native handle for the instance.
*

View File

@@ -134,6 +134,16 @@ public final class NetworkTableInstance implements AutoCloseable {
return inst;
}
/**
* Create an instance from a native handle. This instance is not owned, closing will do nothing.
*
* @param handle Native instance handle
* @return Instance
*/
public static NetworkTableInstance fromNativeHandle(int handle) {
return new NetworkTableInstance(handle);
}
/**
* Gets the native handle for the instance.
*

View File

@@ -0,0 +1,15 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include "frc/SystemServer.h"
#include <hal/SystemServer.h>
namespace frc {
nt::NetworkTableInstance SystemServer::GetSystemServer() {
return nt::NetworkTableInstance{HAL_GetSystemServerHandle()};
}
} // namespace frc

View File

@@ -0,0 +1,18 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#pragma once
#include <networktables/NetworkTableInstance.h>
namespace frc {
class SystemServer {
public:
SystemServer() = delete;
static nt::NetworkTableInstance GetSystemServer();
};
} // namespace frc

View File

@@ -0,0 +1,23 @@
// Copyright (c) FIRST and other WPILib contributors.
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
package edu.wpi.first.wpilibj;
import edu.wpi.first.hal.SystemServerJNI;
import edu.wpi.first.networktables.NetworkTableInstance;
/** Class to get system server NT instance. */
public final class SystemServer {
/**
* Gets the system server NT Instance.
*
* @return NT Instance
*/
public static NetworkTableInstance getSystemServer() {
return NetworkTableInstance.fromNativeHandle(SystemServerJNI.getSystemServerHandle());
}
/** Utility Class. */
private SystemServer() {}
}