first commit
This commit is contained in:
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
*.a
|
||||||
|
*.class
|
||||||
|
hs_err_pid*.log
|
||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "NeoNucleus"]
|
||||||
|
path = NeoNucleus
|
||||||
|
url = https://gitea.codersquack.nl/NeoFlock/NeoNucleus.git
|
||||||
18
.vscode/c_cpp_properties.json
vendored
Normal file
18
.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Linux",
|
||||||
|
"includePath": [
|
||||||
|
"${workspaceFolder}/**",
|
||||||
|
"/usr/lib/jvm/java-25-openjdk/include",
|
||||||
|
"/usr/lib/jvm/java-25-openjdk/include/linux"
|
||||||
|
],
|
||||||
|
"defines": [],
|
||||||
|
"compilerPath": "/usr/lib64/ccache/clang",
|
||||||
|
"cStandard": "c17",
|
||||||
|
"cppStandard": "c++17",
|
||||||
|
"intelliSenseMode": "linux-clang-x64"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
||||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"makefile.configureOnOpen": false
|
||||||
|
}
|
||||||
35
Makefile
Normal file
35
Makefile
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
CC=gcc
|
||||||
|
CXX=g++
|
||||||
|
CFLAGS=-Wall -Wextra
|
||||||
|
TARGET=libneonucleusjni.so
|
||||||
|
|
||||||
|
BASE_PATH=./src/main/org/neoflock/NeoNucleus
|
||||||
|
JAVA_HOME=/usr/lib/jvm/java-25-openjdk/
|
||||||
|
BASE_NPATH=./src/native/
|
||||||
|
JAVA_SRCS = $(wildcard ./src/main/org/neoflock/NeoNucleus/*.java)
|
||||||
|
JAVA_CLASSES = $(wildcard ./src/main/org/neoflock/NeoNucleus/*.class)
|
||||||
|
|
||||||
|
CPP_SRCS = $(wildcard ${BASE_NPATH}/*.cpp)
|
||||||
|
OBJS = $(CPP_SRCS:.cpp=.o)
|
||||||
|
NATIVE_NAME=main
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
$(TARGET): $(OBJS)
|
||||||
|
g++ -shared -o ${BASE_NPATH}/$(TARGET) \
|
||||||
|
$(OBJS) ${BASE_NPATH}/libneonucleus.a -lc
|
||||||
|
%.o: %.cpp
|
||||||
|
$(CXX) -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux $(CFLAGS) \
|
||||||
|
$< -o $@
|
||||||
|
|
||||||
|
java: ${JAVA_CLASSES}
|
||||||
|
javac -h ./src/native/ ${JAVA_SRCS}
|
||||||
|
|
||||||
|
run: all
|
||||||
|
cd src/main && java -cp . -Djava.library.path=${PWD}/${BASE_NPATH} -Xcheck:jni org.neoflock.NeoNucleus.NativeBindings
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm ${JAVA_CLASSES}
|
||||||
|
rm $(OBJS) $(TARGET)
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
1
NeoNucleus
Submodule
1
NeoNucleus
Submodule
Submodule NeoNucleus added at 3b04fd45c7
4
README.md
Normal file
4
README.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# Carbon Hydrogen
|
||||||
|
NeoNucleus JNI bindings.
|
||||||
|
### Dev Setup Notes
|
||||||
|
Java expects libneonucleusjni.so on the src/native directory. This is the default unless you're not using the Makefile.
|
||||||
14
build.sh
Executable file
14
build.sh
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
# deprecated, use Makefile instead
|
||||||
|
BASE_PATH=./src/main/org/neoflock/NeoNucleus
|
||||||
|
JAVA_HOME=/usr/lib/jvm/java-21-openjdk/
|
||||||
|
BASE_NPATH=./src/native/
|
||||||
|
#NATIVE_NAME=org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
NATIVE_NAME=main
|
||||||
|
echo ":: Building java class"
|
||||||
|
javac -h ./src/native/ $BASE_PATH/NativeBindings.java $BASE_PATH/Context.java $BASE_PATH/Universe.java $BASE_PATH/PointerBackedClass.java $BASE_PATH/ExitCode.java $BASE_PATH/Architecture.java $BASE_PATH/ManuallyAllocated.java
|
||||||
|
echo ":: Compiling"
|
||||||
|
g++ -c -fPIC -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux ${BASE_NPATH}/${NATIVE_NAME}.cpp -o ${BASE_NPATH}/${NATIVE_NAME}.o
|
||||||
|
echo ":: Linking"
|
||||||
|
g++ -shared -o ${BASE_NPATH}/libneonucleusjni.so ${BASE_NPATH}/${NATIVE_NAME}.o ${BASE_NPATH}/libneonucleus.a -lc
|
||||||
|
|
||||||
5
run.sh
Executable file
5
run.sh
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/bash
|
||||||
|
# deprecated, use Makefile instead
|
||||||
|
NLIB_PATH=$PWD/src/native/
|
||||||
|
cd src/main && java -cp . -Djava.library.path=${NLIB_PATH} org.neoflock.NeoNucleus.NativeBindings
|
||||||
|
cd ../..
|
||||||
5
src/main/org/neoflock/NeoNucleus/ComponentHandler.java
Normal file
5
src/main/org/neoflock/NeoNucleus/ComponentHandler.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public interface ComponentHandler {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
7
src/main/org/neoflock/NeoNucleus/ComponentState.java
Normal file
7
src/main/org/neoflock/NeoNucleus/ComponentState.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public sealed class ComponentState extends PointerBackedClass permits ncl_ScreenState {
|
||||||
|
// TODO
|
||||||
|
// opaque class, you'll need to cast it to do anything
|
||||||
|
protected ComponentState() {}
|
||||||
|
}
|
||||||
6
src/main/org/neoflock/NeoNucleus/ManuallyAllocated.java
Normal file
6
src/main/org/neoflock/NeoNucleus/ManuallyAllocated.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public interface ManuallyAllocated {
|
||||||
|
boolean allocate();
|
||||||
|
boolean free();
|
||||||
|
}
|
||||||
135
src/main/org/neoflock/NeoNucleus/NativeBindings.java
Normal file
135
src/main/org/neoflock/NeoNucleus/NativeBindings.java
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class NativeBindings {
|
||||||
|
static {
|
||||||
|
System.loadLibrary("neonucleusjni");
|
||||||
|
}
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//nn_Context ctx = nn_initContext();
|
||||||
|
nn_EEPROM eeprom = new nn_EEPROM(100, 200, 300, 400, 0, 0, 0, 0);
|
||||||
|
eeprom.allocate();
|
||||||
|
System.out.println("we live");
|
||||||
|
eeprom.free();
|
||||||
|
System.out.println("about to double free");
|
||||||
|
eeprom.free();
|
||||||
|
//System.out.println(ctx.ptr);
|
||||||
|
}
|
||||||
|
public static native nn_Context nn_initContext();
|
||||||
|
public static native void nn_initPalettes();
|
||||||
|
// nn_Universe *nn_createUniverse(nn_Context *ctx, void *userdata)
|
||||||
|
public static native nn_Universe nn_createUniverse(nn_Context ctx);
|
||||||
|
// nn_Component *nn_createComponent(nn_Universe *universe, const char *address, const char *type)
|
||||||
|
public static native nn_Component nn_createComponent(nn_Universe universe, String address, String type);
|
||||||
|
public static native nn_Exit nn_setComponentMethods(nn_Component component, nn_Method[] methods);
|
||||||
|
// void nn_setComponentHandler(nn_Component *c, nn_ComponentHandler *handler)
|
||||||
|
public static native void nn_setComponentHandler(nn_Component component, ComponentHandler handler);
|
||||||
|
// nn_Exit nn_mountComponent(nn_Computer *c, nn_Component *comp, int slot, bool silent)
|
||||||
|
public static native nn_Exit nn_mountComponent(nn_Computer c, nn_Component comp, int slot, boolean silent);
|
||||||
|
// nn_Component *ncl_createEEPROM(nn_Universe *universe, const char *address, const nn_EEPROM *eeprom, const char *code, size_t codelen, bool isReadonly)
|
||||||
|
public static native nn_Component ncl_createEEPROM(nn_Universe universe, String address, nn_EEPROM eeprom, String code, boolean isReadonly);
|
||||||
|
// nn_Computer *nn_createComputer(nn_Universe *universe, void *userdata, const char *address, size_t totalMemory, size_t maxComponents, size_t maxDevices)
|
||||||
|
public static native nn_Computer nn_createComputer(nn_Universe universe, String address, long totalMemory, long maxComponents, long maxDevices);
|
||||||
|
// void nn_setComputerEnvironment(nn_Computer *computer, nn_Environment env)
|
||||||
|
public static native void nn_setComputerEnvironment(nn_Computer computer, nn_Environment env);
|
||||||
|
// void nn_setCallBudget(nn_Computer *computer, double budget)
|
||||||
|
public static native void nn_setCallBudget(nn_Computer computer, double budget);
|
||||||
|
// void nn_setTotalEnergy(nn_Computer *computer, double maxEnergy)
|
||||||
|
public static native void nn_setTotalEnergy(nn_Computer computer, double maxEnergy);
|
||||||
|
// void nn_setArchitecture(nn_Computer *computer, const nn_Architecture *arch)
|
||||||
|
public static native void nn_setArchitecture(nn_Computer computer, nn_Architecture arch);
|
||||||
|
// nn_Exit nn_addSupportedArchitecture(nn_Computer *computer, const nn_Architecture *arch)
|
||||||
|
public static native nn_Exit nn_addSupportedArchitecture(nn_Computer computer, nn_Architecture arch);
|
||||||
|
// nn_Exit nn_setTmpAddress(nn_Computer *computer, const char *address)
|
||||||
|
/**
|
||||||
|
* address is copied.
|
||||||
|
* It can be NULL if you wish to have no tmp address.
|
||||||
|
* It can fail due to out-of-memory errors.
|
||||||
|
*/
|
||||||
|
public static native nn_Exit nn_setTmpAddress(nn_Computer computer, String address);
|
||||||
|
// const char *nn_getComponentAddress(nn_Component *c)
|
||||||
|
public static native String nn_getComponentAddress(nn_Component c);
|
||||||
|
// nn_Exit nn_addCommonDeviceInfo(nn_Computer *computer, const char *addr, nn_CommonDeviceInfo info)
|
||||||
|
public static native nn_Exit nn_addCommonDeviceInfo(nn_Computer computer, String addr, nn_CommonDeviceInfo info);
|
||||||
|
// it doesn't really make sense to implement nn_clearCommonDeviceInfo, so it wont be.
|
||||||
|
// void *nn_getComponentState(nn_Component *c)
|
||||||
|
public static native ComponentState nn_getComponentState(nn_Component c);
|
||||||
|
// void ncl_lockScreen(ncl_ScreenState *state)
|
||||||
|
public static native void ncl_lockScreen(ncl_ScreenState state);
|
||||||
|
// void ncl_getScreenViewport(const ncl_ScreenState *state, size_t *width, size_t *height)
|
||||||
|
public static native Resolution ncl_getScreenViewport(ncl_ScreenState state);
|
||||||
|
// void ncl_setScreenViewport(ncl_ScreenState *state, size_t width, size_t height)
|
||||||
|
public static native void ncl_setScreenViewport(ncl_ScreenState state, long width, long height);
|
||||||
|
// ncl_ScreenFlags ncl_getScreenFlags(const ncl_ScreenState *state)
|
||||||
|
public static native ncl_ScreenFlags ncl_getScreenFlags(ncl_ScreenState state);
|
||||||
|
// int ncl_cellHeight(ncl_GlyphCache *gc)
|
||||||
|
//public static native int ncl_cellHeight(ncl_GlyphCache gc);
|
||||||
|
// void ncl_destroyGlyphCache(ncl_GlyphCache *gc)
|
||||||
|
//public static native void ncl_destroyGlyphCache(ncl_GlyphCache gc);
|
||||||
|
// ncl_GlyphCache *ncl_createGlyphCache(const char *fontPath, int fontSize)
|
||||||
|
//public static native ncl_GlyphCache ncl_createGlyphCache(String fontPath, int fontSize);
|
||||||
|
// int ncl_cellWidth(ncl_GlyphCache *gc)
|
||||||
|
//public static native int ncl_cellWidth(ncl_GlyphCache gc);
|
||||||
|
// double ncl_getScreenBrightness(ncl_ScreenState *state)
|
||||||
|
public static native double ncl_getScreenBrightness(ncl_ScreenState state);
|
||||||
|
// ncl_Pixel ncl_getScreenPixel(const ncl_ScreenState *state, int x, int y)
|
||||||
|
public static native ncl_Pixel ncl_getScreenPixel(ncl_ScreenState state, int x, int y);
|
||||||
|
// void ncl_needGlyph(ncl_GlyphCache *gc, nn_codepoint cp)
|
||||||
|
/**
|
||||||
|
* @param gc
|
||||||
|
* @param cp an nn_codepoint
|
||||||
|
*/
|
||||||
|
//public static native void ncl_needGlyph(ncl_GlyphCache gc, int cp);
|
||||||
|
// void ncl_drawGlyph(ncl_GlyphCache *gc, nn_codepoint cp, Vector2 pos, float size, Color tint)
|
||||||
|
//public static native void ncl_drawGlyph(ncl_GlyphCache gc, int cp, Vector2 pos, float size, Color tint);
|
||||||
|
// void ncl_unlockScreen(ncl_ScreenState *state)
|
||||||
|
public static native void ncl_unlockScreen(ncl_ScreenState state);
|
||||||
|
// nn_Exit nn_pushTouch(nn_Computer *computer, const char *screenAddress, double x, double y, int button, const char *player)
|
||||||
|
public static native nn_Exit nn_pushTouch(nn_Computer computer, String screenAddress, double x, double y, int button, String player);
|
||||||
|
// nn_Exit nn_pushDrop(nn_Computer *computer, const char *screenAddress, double x, double y, int button, const char *player)
|
||||||
|
public static native nn_Exit nn_pushDrop(nn_Computer computer, String screenAddress, double x, double y, int button, String player);
|
||||||
|
// nn_Exit nn_pushDrag(nn_Computer *computer, const char *screenAddress, double x, double y, int button, const char *player)
|
||||||
|
public static native nn_Exit nn_pushDrag(nn_Computer computer, String screenAddress, double x, double y, int button, String player);
|
||||||
|
// nn_Exit nn_pushScroll(nn_Computer *computer, const char *screenAddress, double x, double y, double direction, const char *player)
|
||||||
|
public static native nn_Exit nn_pushScroll(nn_Computer computer, String screenAddress, double x, double y, double direction, String player);
|
||||||
|
// size_t nn_getUsedMemory(nn_Computer *computer)
|
||||||
|
public static native long nn_getUsedMemory(nn_Computer computer);
|
||||||
|
// size_t nn_getTotalMemory(nn_Computer *computer)
|
||||||
|
public static native long nn_getTotalMemory(nn_Computer computer);
|
||||||
|
// nn_Exit nn_pushClipboard(nn_Computer *computer, const char *keyboardAddress, const char *clipboard, const char *player)
|
||||||
|
public static native nn_Exit nn_pushClipboard(nn_Computer computer, String keyboardAddress, String clipboard, String player);
|
||||||
|
// nn_Exit nn_pushKeyDown(nn_Computer *computer, const char *keyboardAddress, nn_codepoint charcode, int keycode, const char *player)
|
||||||
|
public static native nn_Exit nn_pushKeyDown(nn_Computer computer, String keyboardAddress, int charcode, int keycode, String player);
|
||||||
|
// nn_Exit nn_pushKeyUp(nn_Computer *computer, const char *keyboardAddress, nn_codepoint charcode, int keycode, const char *player)
|
||||||
|
public static native nn_Exit nn_pushKeyUp(nn_Computer computer, String keyboardAddress, int charcode, int keycode, String player);
|
||||||
|
// void nn_clearstack(nn_Computer *computer)
|
||||||
|
public static native nn_Exit nn_clearstack(nn_Computer computer);
|
||||||
|
// bool nn_removeEnergy(nn_Computer *computer, double energy)
|
||||||
|
public static native boolean nn_removeEnergy(nn_Computer computer, double energy);
|
||||||
|
// nn_Exit nn_tickSynchronized(nn_Computer *computer)
|
||||||
|
public static native nn_Exit nn_tickSynchronized(nn_Computer computer);
|
||||||
|
// double ncl_getScreenEnergyUsage(ncl_ScreenState *state)
|
||||||
|
public static native double ncl_getScreenEnergyUsage(ncl_ScreenState state);
|
||||||
|
// void nn_resetIdleTime(nn_Computer *computer)
|
||||||
|
public static native void nn_resetIdleTime(nn_Computer computer);
|
||||||
|
// nn_Exit nn_tick(nn_Computer *computer)
|
||||||
|
public static native nn_Exit nn_tick(nn_Computer computer);
|
||||||
|
// nn_ComputerState nn_getComputerState(nn_Computer *computer)
|
||||||
|
public static native nn_ComputerState nn_getComputerState(nn_Computer computer);
|
||||||
|
// const char *nn_getError(nn_Computer *computer)
|
||||||
|
public static native String nn_getError(nn_Computer computer);
|
||||||
|
// nn_Architecture nn_getDesiredArchitecture(nn_Computer *computer)
|
||||||
|
public static native nn_Architecture nn_getDesiredArchitecture(nn_Computer computer);
|
||||||
|
// void nn_stopComputer(nn_Computer *computer)
|
||||||
|
public static native void nn_stopComputer(nn_Computer computer);
|
||||||
|
// void ncl_resetScreen(ncl_ScreenState *state)
|
||||||
|
public static native void ncl_resetScreen(ncl_ScreenState state);
|
||||||
|
// void nn_addIdleTime(nn_Computer *computer, double time)
|
||||||
|
public static native void nn_addIdleTime(nn_Computer computer, double time);
|
||||||
|
// void nn_destroyComputer(nn_Computer *computer)
|
||||||
|
public static native void nn_destroyComputer(nn_Computer computer);
|
||||||
|
// void nn_dropComponent(nn_Component *c)
|
||||||
|
public static native void nn_dropComponent(nn_Component c);
|
||||||
|
// void nn_destroyUniverse(nn_Universe *universe)
|
||||||
|
public static native void nn_destroyUniverse(nn_Universe universe);
|
||||||
|
|
||||||
|
}
|
||||||
10
src/main/org/neoflock/NeoNucleus/PointerBackedClass.java
Normal file
10
src/main/org/neoflock/NeoNucleus/PointerBackedClass.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class PointerBackedClass {
|
||||||
|
private long ptr;
|
||||||
|
/*public static PointerBackedClass createFromPointer(long ptr) {
|
||||||
|
PointerBackedClass clazz = new PointerBackedClass();
|
||||||
|
clazz.ptr = ptr;
|
||||||
|
return clazz;
|
||||||
|
}*/
|
||||||
|
}
|
||||||
3
src/main/org/neoflock/NeoNucleus/Resolution.java
Normal file
3
src/main/org/neoflock/NeoNucleus/Resolution.java
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public record Resolution(long width, long height) {}
|
||||||
5
src/main/org/neoflock/NeoNucleus/ncl_GlyphCache.java
Normal file
5
src/main/org/neoflock/NeoNucleus/ncl_GlyphCache.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
/*public class ncl_GlyphCache {
|
||||||
|
|
||||||
|
}*/
|
||||||
21
src/main/org/neoflock/NeoNucleus/ncl_Pixel.java
Normal file
21
src/main/org/neoflock/NeoNucleus/ncl_Pixel.java
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
/*
|
||||||
|
typedef struct ncl_Pixel {
|
||||||
|
// 0xRRGGBB format
|
||||||
|
unsigned int fgColor;
|
||||||
|
// 0xRRGGBB format
|
||||||
|
unsigned int bgColor;
|
||||||
|
// the codepoint
|
||||||
|
nn_codepoint codepoint;
|
||||||
|
} ncl_Pixel;
|
||||||
|
*/
|
||||||
|
public class ncl_Pixel {
|
||||||
|
public final int fgColor;
|
||||||
|
public final int bgColor;
|
||||||
|
public final int codepoint;
|
||||||
|
public ncl_Pixel(int fgColor, int bgColor, int codepoint) {
|
||||||
|
this.fgColor = fgColor;
|
||||||
|
this.bgColor = bgColor;
|
||||||
|
this.codepoint = codepoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
17
src/main/org/neoflock/NeoNucleus/ncl_ScreenFlags.java
Normal file
17
src/main/org/neoflock/NeoNucleus/ncl_ScreenFlags.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
/*public enum ncl_ScreenFlags {
|
||||||
|
NCL_SCREEN_ON(1<<0),
|
||||||
|
NCL_SCREEN_PRECISE(1<<1),
|
||||||
|
NCL_SCREEN_TOUCHINVERTED(1<<2);
|
||||||
|
public final int value;
|
||||||
|
private ncl_ScreenFlags(int flag) {
|
||||||
|
this.value = flag;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
public class ncl_ScreenFlags {
|
||||||
|
public static final int NCL_SCREEN_ON = 1<<0;
|
||||||
|
public static final int NCL_SCREEN_PRECISE = 1<<1;
|
||||||
|
public static final int NCL_SCREEN_TOUCHINVERTED = 1<<2;
|
||||||
|
|
||||||
|
}
|
||||||
4
src/main/org/neoflock/NeoNucleus/ncl_ScreenState.java
Normal file
4
src/main/org/neoflock/NeoNucleus/ncl_ScreenState.java
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
// opaque type, not much to do here
|
||||||
|
public final class ncl_ScreenState extends ComponentState {}
|
||||||
21
src/main/org/neoflock/NeoNucleus/nn_Architecture.java
Normal file
21
src/main/org/neoflock/NeoNucleus/nn_Architecture.java
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
public final class nn_Architecture extends PointerBackedClass implements ManuallyAllocated {
|
||||||
|
public final String name;
|
||||||
|
public final Function<String, Integer> handler;
|
||||||
|
|
||||||
|
public nn_Architecture(String name, Function<String, Integer> handler) { // string is a placeholder; please fix
|
||||||
|
this.name = name;
|
||||||
|
this.handler = handler;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private int handleNative() { // i aint gonna be trying to call that Function from jni man
|
||||||
|
return handler.apply("placeholder");
|
||||||
|
}
|
||||||
|
|
||||||
|
public native boolean allocate();
|
||||||
|
public native boolean free();
|
||||||
|
}
|
||||||
48
src/main/org/neoflock/NeoNucleus/nn_CommonDeviceInfo.java
Normal file
48
src/main/org/neoflock/NeoNucleus/nn_CommonDeviceInfo.java
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
/* const char *CLASS;
|
||||||
|
const char *DESC;
|
||||||
|
const char *VENDOR;
|
||||||
|
const char *PRODUCT;
|
||||||
|
const char *VERSION;
|
||||||
|
const char *SERIAL;
|
||||||
|
const char *CAPACITY;
|
||||||
|
const char *SIZE;
|
||||||
|
const char *CLOCK;
|
||||||
|
const char *WIDTH; */
|
||||||
|
|
||||||
|
public class nn_CommonDeviceInfo {
|
||||||
|
public final String CLASS;
|
||||||
|
public final String DESC;
|
||||||
|
public final String VENDOR;
|
||||||
|
public final String PRODUCT;
|
||||||
|
public final String VERSION;
|
||||||
|
public final String SERIAL;
|
||||||
|
public final String CAPACITY;
|
||||||
|
public final String SIZE;
|
||||||
|
public final String CLOCK;
|
||||||
|
public final String WIDTH;
|
||||||
|
public nn_CommonDeviceInfo(
|
||||||
|
String CLASS,
|
||||||
|
String DESC,
|
||||||
|
String VENDOR,
|
||||||
|
String PRODUCT,
|
||||||
|
String VERSION,
|
||||||
|
String SERIAL,
|
||||||
|
String CAPACITY,
|
||||||
|
String SIZE,
|
||||||
|
String CLOCK,
|
||||||
|
String WIDTH
|
||||||
|
) {
|
||||||
|
this.CLASS = CLASS;
|
||||||
|
this.DESC = DESC;
|
||||||
|
this.VENDOR = VENDOR;
|
||||||
|
this.PRODUCT = PRODUCT;
|
||||||
|
this.VERSION = VERSION;
|
||||||
|
this.SERIAL = SERIAL;
|
||||||
|
this.CAPACITY = CAPACITY;
|
||||||
|
this.SIZE = SIZE;
|
||||||
|
this.CLOCK = CLOCK;
|
||||||
|
this.WIDTH = WIDTH;
|
||||||
|
}
|
||||||
|
}
|
||||||
5
src/main/org/neoflock/NeoNucleus/nn_Component.java
Normal file
5
src/main/org/neoflock/NeoNucleus/nn_Component.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public final class nn_Component extends PointerBackedClass {
|
||||||
|
private nn_Component() {}
|
||||||
|
}
|
||||||
5
src/main/org/neoflock/NeoNucleus/nn_Computer.java
Normal file
5
src/main/org/neoflock/NeoNucleus/nn_Computer.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class nn_Computer {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
5
src/main/org/neoflock/NeoNucleus/nn_ComputerState.java
Normal file
5
src/main/org/neoflock/NeoNucleus/nn_ComputerState.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class nn_ComputerState {
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
5
src/main/org/neoflock/NeoNucleus/nn_Context.java
Normal file
5
src/main/org/neoflock/NeoNucleus/nn_Context.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class nn_Context extends PointerBackedClass {
|
||||||
|
public native void free();
|
||||||
|
}
|
||||||
54
src/main/org/neoflock/NeoNucleus/nn_EEPROM.java
Normal file
54
src/main/org/neoflock/NeoNucleus/nn_EEPROM.java
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
/*
|
||||||
|
typedef struct nn_EEPROM {
|
||||||
|
// the maximum capacity of the EEPROM
|
||||||
|
size_t size;
|
||||||
|
// the maximum capacity of the EEPROM's associated data
|
||||||
|
size_t dataSize;
|
||||||
|
// the energy cost of reading an EEPROM
|
||||||
|
double readEnergyCost;
|
||||||
|
// the energy cost of reading an EEPROM's associated data
|
||||||
|
double readDataEnergyCost;
|
||||||
|
// the energy cost of writing to an EEPROM
|
||||||
|
double writeEnergyCost;
|
||||||
|
// the energy cost of writing to an EEPROM's associated data
|
||||||
|
double writeDataEnergyCost;
|
||||||
|
// idle time added when writing code
|
||||||
|
double writeDelay;
|
||||||
|
// idle time added when writing data
|
||||||
|
double writeDataDelay;
|
||||||
|
} nn_EEPROM;
|
||||||
|
*/
|
||||||
|
public class nn_EEPROM extends PointerBackedClass implements ManuallyAllocated {
|
||||||
|
public final long size;
|
||||||
|
public final long dataSize;
|
||||||
|
public final double readEnergyCost;
|
||||||
|
public final double readDataEnergyCost;
|
||||||
|
public final double writeEnergyCost;
|
||||||
|
public final double writeDataEnergyCost;
|
||||||
|
public final double writeDelay;
|
||||||
|
public final double writeDataDelay;
|
||||||
|
public nn_EEPROM(
|
||||||
|
long size,
|
||||||
|
long dataSize,
|
||||||
|
double readEnergyCost,
|
||||||
|
double readDataEnergyCost,
|
||||||
|
double writeEnergyCost,
|
||||||
|
double writeDataEnergyCost,
|
||||||
|
double writeDelay,
|
||||||
|
double writeDataDelay
|
||||||
|
) {
|
||||||
|
this.size = size;
|
||||||
|
this.dataSize = dataSize;
|
||||||
|
this.readEnergyCost = readEnergyCost;
|
||||||
|
this.readDataEnergyCost = readDataEnergyCost;
|
||||||
|
this.writeEnergyCost = writeEnergyCost;
|
||||||
|
this.writeDataEnergyCost = writeDataEnergyCost;
|
||||||
|
this.writeDelay = writeDelay;
|
||||||
|
this.writeDataDelay = writeDataDelay;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public native boolean allocate();
|
||||||
|
@Override
|
||||||
|
public native boolean free();
|
||||||
|
}
|
||||||
6
src/main/org/neoflock/NeoNucleus/nn_Environment.java
Normal file
6
src/main/org/neoflock/NeoNucleus/nn_Environment.java
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class nn_Environment {
|
||||||
|
public String a;
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
18
src/main/org/neoflock/NeoNucleus/nn_Exit.java
Normal file
18
src/main/org/neoflock/NeoNucleus/nn_Exit.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public enum nn_Exit {
|
||||||
|
// no error
|
||||||
|
NN_OK,
|
||||||
|
// out of memory.
|
||||||
|
NN_ENOMEM,
|
||||||
|
// over the limit. For example, adding too many architectures to a machine.
|
||||||
|
NN_ELIMIT,
|
||||||
|
// internal stack underflow when managing the stack.
|
||||||
|
NN_EBELOWSTACK,
|
||||||
|
// internal stack overflow when carrying values.
|
||||||
|
NN_ENOSTACK,
|
||||||
|
// bad invocation, error message stored in computer state
|
||||||
|
NN_EBADCALL,
|
||||||
|
// bad state, the function was called at the wrong time
|
||||||
|
NN_EBADSTATE,
|
||||||
|
}
|
||||||
16
src/main/org/neoflock/NeoNucleus/nn_Method.java
Normal file
16
src/main/org/neoflock/NeoNucleus/nn_Method.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class nn_Method {
|
||||||
|
public final String name;
|
||||||
|
public final String doc;
|
||||||
|
public final byte flags;
|
||||||
|
public nn_Method(
|
||||||
|
String name,
|
||||||
|
String doc,
|
||||||
|
byte flags
|
||||||
|
) {
|
||||||
|
this.name = name;
|
||||||
|
this.doc = doc;
|
||||||
|
this.flags = flags;
|
||||||
|
}
|
||||||
|
}
|
||||||
5
src/main/org/neoflock/NeoNucleus/nn_Universe.java
Normal file
5
src/main/org/neoflock/NeoNucleus/nn_Universe.java
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package org.neoflock.NeoNucleus;
|
||||||
|
|
||||||
|
public class nn_Universe extends PointerBackedClass {
|
||||||
|
|
||||||
|
}
|
||||||
82
src/native/carbon.cpp
Normal file
82
src/native/carbon.cpp
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
#include "carbon.hpp"
|
||||||
|
// redefine it here with the impl
|
||||||
|
// theres probably a better way to do this
|
||||||
|
#define CARBON_EXCEPTION_FUNC(fname, classpath) jint fname(JNIEnv* env, const char* message) { return THROW_EXCEPTION(classpath, message); }
|
||||||
|
#define CARBON_MAP_TO_NN_EXIT(enumcase) case enumcase:\
|
||||||
|
jfieldID id = env->GetFieldID(clazz, #enumcase, "Lorg.neoflock.NeoNucleus.nn_Exit;");\
|
||||||
|
return env->GetStaticObjectField(clazz, id);
|
||||||
|
// codename for NN JNI is Carbon because i needed something better than NN JNI
|
||||||
|
bool Carbon::PointerBacked::SetPointer(JNIEnv * env, jobject obj, void* ptr) {
|
||||||
|
jfieldID id = env->GetFieldID(env->GetObjectClass(obj), "ptr", "J");
|
||||||
|
if (id == NULL) return false;
|
||||||
|
env->SetLongField(obj, id, (jlong) ptr);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
void* Carbon::PointerBacked::GetPointer(JNIEnv * env, jobject obj) {
|
||||||
|
jfieldID id = env->GetFieldID(env->GetObjectClass(obj), "ptr", "J");
|
||||||
|
IF_NULL_RET(id);
|
||||||
|
jlong ptr = env->GetLongField(obj, id);
|
||||||
|
|
||||||
|
return (void*) ptr;
|
||||||
|
}
|
||||||
|
bool Carbon::PointerBacked::ResetPointer(JNIEnv * env, jobject obj) {
|
||||||
|
jfieldID id = env->GetFieldID(env->GetObjectClass(obj), "ptr", "J");
|
||||||
|
if (id == NULL) return false;
|
||||||
|
env->SetLongField(obj, id, (jlong) NULL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
nn_Exit Carbon::archRequestHandler(nn_ArchitectureRequest *req) {
|
||||||
|
GlobalArchState* gstate = (GlobalArchState*)req->globalState;
|
||||||
|
JNIEnv* env = gstate->target.env;
|
||||||
|
jmethodID mid = env->GetMethodID(
|
||||||
|
env->GetObjectClass(gstate->target.obj), "handleNative", "()V");
|
||||||
|
// TODO: null check mid
|
||||||
|
jbyte ret = env->CallByteMethod(gstate->target.obj, mid);
|
||||||
|
return (nn_Exit) ret; // todo: finish the args; probably an unnecessary cast
|
||||||
|
}
|
||||||
|
|
||||||
|
jobject Carbon::InstantiateOpaqueClass(JNIEnv* env, const char* classpath) {
|
||||||
|
jclass cls = env->FindClass(classpath);
|
||||||
|
IF_NULL_RET(cls);
|
||||||
|
jmethodID methodID = env->GetMethodID(cls, "<init>", "()V");
|
||||||
|
IF_NULL_RET(methodID);
|
||||||
|
jobject obj = env->NewObject(cls, methodID);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
// pbc = pointer backed class
|
||||||
|
jobject Carbon::InstantiateDefaultPBC(JNIEnv* env, const char* classpath, void* ptr) {
|
||||||
|
jobject clazz = InstantiateOpaqueClass(env, classpath);
|
||||||
|
IF_NULL_RET(clazz);
|
||||||
|
Carbon::PointerBacked::SetPointer(env, clazz, ptr); // FIXME: this can silently fail
|
||||||
|
return clazz;
|
||||||
|
}
|
||||||
|
nn_Exit Carbon::JNIComponentHandler(nn_ComponentRequest* request) {
|
||||||
|
Carbon::JavaObjectTarget* ot = (Carbon::JavaObjectTarget*) request->state; // todo: make this a proper struct with a target for the component handler specifically
|
||||||
|
if (ot == NULL) return NN_EBADSTATE; // welp
|
||||||
|
//ud->target.env->
|
||||||
|
jmethodID callMethod = ot->env->GetMethodID(ot->env->GetObjectClass(ot->obj), "handleRequest", "(Lorg/neoflock/NeoNucleus/nn_ComponentRequest;)Lorg/neoflock/NeoNucleus/nn_Exit;");
|
||||||
|
jobject retex = ot->env->CallObjectMethod(ot->obj, callMethod, NULL); // todo: args
|
||||||
|
return Carbon::Map::From_nn_Exit(ot->env, retex);
|
||||||
|
}
|
||||||
|
jobject Carbon::Map::To_nn_Exit(JNIEnv* env, nn_Exit a) {
|
||||||
|
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Exit");
|
||||||
|
switch (a) {
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_OK)
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_ENOMEM)
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_ELIMIT)
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_EBELOWSTACK)
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_ENOSTACK)
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_EBADCALL)
|
||||||
|
CARBON_MAP_TO_NN_EXIT(NN_EBADSTATE)
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
nn_Exit From_nn_Exit(JNIEnv* env, jobject a) {
|
||||||
|
jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Exit");
|
||||||
|
jmethodID ordMID = env->GetMethodID(clazz, "ordinal", "()I");
|
||||||
|
jint value = env->CallIntMethod(a, ordMID);
|
||||||
|
return (nn_Exit) value; // this should be fine as long as the header and java side don't desync
|
||||||
|
}
|
||||||
|
namespace Carbon::Exceptions {
|
||||||
|
CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException");
|
||||||
|
}
|
||||||
54
src/native/carbon.hpp
Normal file
54
src/native/carbon.hpp
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "neonucleus.h"
|
||||||
|
#include "org_neoflock_NeoNucleus_NativeBindings.h"
|
||||||
|
#define IF_NULL_RET(param) if (param == NULL) return NULL;
|
||||||
|
#define THROW_EXCEPTION(classpath, msg) env->ThrowNew(env->FindClass(classpath), msg);
|
||||||
|
#define CARBON_EXCEPTION_FUNC(fname, classpath) jint fname(JNIEnv* env, const char* message);
|
||||||
|
|
||||||
|
#define NULLPTR_THROW(cname) Carbon::Exceptions::ThrowNullPtr(env, "Received null pointer for " #cname);
|
||||||
|
#define NULLPTR_CHECK(var, cname) if (var == NULL) {\
|
||||||
|
NULLPTR_THROW(cname);\
|
||||||
|
return NULL;\
|
||||||
|
}
|
||||||
|
#define NULLPTR_CHECKNR(var, cname) if (var == NULL) {\
|
||||||
|
NULLPTR_THROW(cname);\
|
||||||
|
return;\
|
||||||
|
}
|
||||||
|
|
||||||
|
// codename for NN JNI is Carbon because i needed something better than NN JNI
|
||||||
|
|
||||||
|
namespace Carbon {
|
||||||
|
namespace PointerBacked {
|
||||||
|
bool SetPointer(JNIEnv * env, jobject obj, void* ptr);
|
||||||
|
void* GetPointer(JNIEnv * env, jobject obj);
|
||||||
|
bool ResetPointer(JNIEnv * env, jobject obj);
|
||||||
|
}
|
||||||
|
namespace Map {
|
||||||
|
jobject To_nn_Exit(JNIEnv* env, nn_Exit a);
|
||||||
|
nn_Exit From_nn_Exit(JNIEnv* env, jobject a);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct JavaObjectTarget { // i might lowkey drop this struct
|
||||||
|
JNIEnv * env;
|
||||||
|
jobject obj;
|
||||||
|
} JavaObjectTarget;
|
||||||
|
typedef struct ComputerUserdata {
|
||||||
|
JavaObjectTarget target;
|
||||||
|
} ComputerUserdata;
|
||||||
|
typedef struct GlobalArchState {
|
||||||
|
JavaObjectTarget target;
|
||||||
|
} GlobalArchState;
|
||||||
|
nn_Exit archRequestHandler(nn_ArchitectureRequest *req);
|
||||||
|
jobject InstantiateOpaqueClass(JNIEnv* env, const char* classpath);
|
||||||
|
// pbc = pointer backed class
|
||||||
|
jobject InstantiateDefaultPBC(JNIEnv* env, const char* classpath, void* ptr);
|
||||||
|
// typedef nn_Exit (nn_ComponentHandler)(nn_ComponentRequest *request);
|
||||||
|
nn_Exit JNIComponentHandler(nn_ComponentRequest* request);
|
||||||
|
bool CallGC(JNIEnv* env);
|
||||||
|
}
|
||||||
|
namespace Carbon::Exceptions {
|
||||||
|
CARBON_EXCEPTION_FUNC(ThrowNullPtr, "java/lang/NullPointerException");
|
||||||
|
|
||||||
|
}
|
||||||
|
#undef CARBON_EXCEPTION_FUNC
|
||||||
170
src/native/main.cpp
Normal file
170
src/native/main.cpp
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
#include "org_neoflock_NeoNucleus_NativeBindings.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include "neonucleus.h"
|
||||||
|
#include "ncomplib.h"
|
||||||
|
|
||||||
|
#include "carbon.hpp"
|
||||||
|
|
||||||
|
// TODO: null checks fucking everywhere (thanks java)
|
||||||
|
// NOTE: almost NOTHING of this has been tested yet
|
||||||
|
// WARN: **apparently** GetFieldID can error out on OOM, this will not be an issue for now (i think),
|
||||||
|
// but we need to account for it before or after MVP (modded minecraft is famously known for being memory hungry)
|
||||||
|
// NOTE: not sure if i should use nn_alloc over malloc where possible
|
||||||
|
|
||||||
|
/*nn_Architecture readArch(JNIEnv * env, jobject obj) {
|
||||||
|
jclass clazz = env->GetObjectClass(obj);
|
||||||
|
jfieldID nid = env->GetFieldID(clazz, "name", "Ljava.lang.String;");
|
||||||
|
jstring jstr = (jstring)env->GetObjectField(obj, nid);
|
||||||
|
const char * name = env->GetStringUTFChars(jstr, (jboolean) false);// this shit will so become invalid after the func
|
||||||
|
|
||||||
|
Carbon::GlobalArchState* statePtr = (Carbon::GlobalArchState*)Carbon::PointerBacked::GetPointer(env, obj);
|
||||||
|
if (statePtr == NULL) {
|
||||||
|
// we cant just store this on the stack since nn_Architecture wants a *pointer*,
|
||||||
|
// if i do a pointer to a variable on the stack its just gonna vanish as soon as the function ends
|
||||||
|
Carbon::GlobalArchState* state = (Carbon::GlobalArchState*)malloc(sizeof(Carbon::GlobalArchState));
|
||||||
|
*state = {
|
||||||
|
.target = {
|
||||||
|
.env = env,
|
||||||
|
.obj = env->NewGlobalRef(obj)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return (nn_Architecture) {
|
||||||
|
.name = name,
|
||||||
|
.state = (void*) statePtr,
|
||||||
|
.handler = Carbon::archRequestHandler
|
||||||
|
};
|
||||||
|
}*/
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1initContext
|
||||||
|
(JNIEnv * env, jclass ogClazz) {
|
||||||
|
//jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Context");
|
||||||
|
//jmethodID creator = env->GetStaticMethodID(clazz, "createFromPointer", "(J)Lorg/neoflock/NeoNucleus/Context;");
|
||||||
|
jobject obj = Carbon::InstantiateOpaqueClass(env, "org/neoflock/NeoNucleus/nn_Context");
|
||||||
|
nn_Context * ctx = (nn_Context*)malloc(sizeof(nn_Context));
|
||||||
|
nn_initContext(ctx);
|
||||||
|
//jobject result = env->CallStaticObjectMethod(clazz, creator, (jlong) ctx);
|
||||||
|
Carbon::PointerBacked::SetPointer(env, obj, ctx);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1initPalettes
|
||||||
|
(JNIEnv *, jclass) { // fucking cakewalk compared to the horrors that'll unfold within this cpp file
|
||||||
|
nn_initPalettes();
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1createUniverse
|
||||||
|
(JNIEnv * env, jclass, jobject ctx) {
|
||||||
|
nn_Context* nnCtx = (nn_Context*) Carbon::PointerBacked::GetPointer(env, ctx);
|
||||||
|
// TODO: check if this is error handled properly
|
||||||
|
NULLPTR_CHECK(nnCtx, nn_Context);
|
||||||
|
|
||||||
|
nn_Universe* universe = nn_createUniverse(nnCtx, NULL);
|
||||||
|
/*jclass clazz = env->FindClass("org/neoflock/NeoNucleus/nn_Universe");
|
||||||
|
jmethodID creator = env->GetStaticMethodID(clazz, "createFromPointer", "(J)Lorg/neoflock/NeoNucleus/Universe;");
|
||||||
|
return env->CallStaticObjectMethod(clazz, creator, (jlong) universe);*/
|
||||||
|
return Carbon::InstantiateDefaultPBC(env, "org/neoflock/NeoNucleus/nn_Universe", universe);
|
||||||
|
}
|
||||||
|
// public static native nn_Component nn_createComponent(nn_Universe universe, String address, String type);
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1createComponent
|
||||||
|
(JNIEnv * env, jclass, jobject universe, jstring address, jstring type) {
|
||||||
|
nn_Universe* nnUni = (nn_Universe*) Carbon::PointerBacked::GetPointer(env, universe);
|
||||||
|
NULLPTR_CHECK(nnUni, nn_Universe);
|
||||||
|
|
||||||
|
const char* addressChars = env->GetStringUTFChars(address, NULL);
|
||||||
|
const char* typeChars = env->GetStringUTFChars(type, NULL);
|
||||||
|
|
||||||
|
nn_Component* component = nn_createComponent(nnUni, addressChars, typeChars);
|
||||||
|
|
||||||
|
env->ReleaseStringUTFChars(address, addressChars);
|
||||||
|
env->ReleaseStringUTFChars(type, typeChars);
|
||||||
|
|
||||||
|
return Carbon::InstantiateDefaultPBC(env, "org/neoflock/NeoNucleus/nn_Component", component);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setComponentMethods
|
||||||
|
(JNIEnv * env, jclass, jobject component, jobjectArray methods) {
|
||||||
|
NULLPTR_CHECK(methods, methods);
|
||||||
|
nn_Component* nnComp = (nn_Component*) Carbon::PointerBacked::GetPointer(env, component);
|
||||||
|
NULLPTR_CHECK(nnComp, nn_Component);
|
||||||
|
jclass methodClass = env->FindClass("org/neoflock/NeoNucleus/nn_Method");
|
||||||
|
jfieldID nameField = env->GetFieldID(methodClass, "name", "Ljava.lang.String");
|
||||||
|
jfieldID docField = env->GetFieldID(methodClass, "doc", "Ljava.lang.String");
|
||||||
|
jfieldID flagsField = env->GetFieldID(methodClass, "flags", "B");
|
||||||
|
|
||||||
|
size_t len = (size_t) env->GetArrayLength(methods);
|
||||||
|
nn_Method nMethods[len]; // stack allocated, shouldnt be an issue unless you're a freak pushing thousands of methods
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
jobject oArr = env->GetObjectArrayElement(methods, i);
|
||||||
|
jstring nameStr = (jstring) env->GetObjectField(oArr, nameField);
|
||||||
|
jstring docStr = (jstring) env->GetObjectField(oArr, docField);
|
||||||
|
jbyte flagsByte = env->GetByteField(oArr, flagsField);
|
||||||
|
nMethods[i] = {
|
||||||
|
.name = env->GetStringUTFChars(nameStr, NULL),
|
||||||
|
.doc = env->GetStringUTFChars(docStr, NULL),
|
||||||
|
.flags = (nn_MethodFlags) env->GetByteField(oArr, NULL)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// no shot this line below is actually gonna work
|
||||||
|
nn_Exit exitCode = nn_setComponentMethodsArray(nnComp, const_cast<const nn_Method*>(&nMethods[0]), len);
|
||||||
|
// lets cleanup!!!
|
||||||
|
for (size_t i = 0; i < len; i++) {
|
||||||
|
jobject oArr = env->GetObjectArrayElement(methods, i);
|
||||||
|
jstring nameStr = (jstring) env->GetObjectField(oArr, nameField); // TODO: check if this returns a different pointer on a second run
|
||||||
|
jstring docStr = (jstring) env->GetObjectField(oArr, docField); // if it does then we'll have to store the original field jstrings too to clean them up properly
|
||||||
|
nn_Method nm = nMethods[i];
|
||||||
|
env->ReleaseStringUTFChars(nameStr, nm.name);
|
||||||
|
env->ReleaseStringUTFChars(docStr, nm.doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Carbon::Map::To_nn_Exit(env, exitCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setComponentHandler
|
||||||
|
(JNIEnv * env, jclass, jobject component, jobject handler) {
|
||||||
|
nn_Component* nnComp = (nn_Component*) Carbon::PointerBacked::GetPointer(env, component);
|
||||||
|
NULLPTR_CHECKNR(nnComp, nn_Component);
|
||||||
|
nn_setComponentHandler(nnComp, &Carbon::JNIComponentHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1mountComponent
|
||||||
|
(JNIEnv * env, jclass, jobject computer, jobject comp, jint slot, jboolean silent) {
|
||||||
|
nn_Computer* nnPC = (nn_Computer*) Carbon::PointerBacked::GetPointer(env, computer);
|
||||||
|
nn_Component* nnComp = (nn_Component*) Carbon::PointerBacked::GetPointer(env, comp);
|
||||||
|
NULLPTR_CHECK(nnPC, nn_Component);
|
||||||
|
NULLPTR_CHECK(nnComp, nn_Computer);
|
||||||
|
return Carbon::Map::To_nn_Exit(env, nn_mountComponent(nnPC, nnComp, slot, silent));
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1createEEPROM
|
||||||
|
(JNIEnv * env, jclass, jobject universe, jstring address, jobject eeprom, jstring code, jboolean isReadonly) {
|
||||||
|
nn_Universe* nnUni = (nn_Universe*) Carbon::PointerBacked::GetPointer(env, universe);
|
||||||
|
nn_EEPROM* nnEEPROM = (nn_EEPROM*) Carbon::PointerBacked::GetPointer(env, eeprom);
|
||||||
|
NULLPTR_CHECK(nnUni, nn_Universe);
|
||||||
|
NULLPTR_CHECK(nnEEPROM, nn_EEPROM);
|
||||||
|
|
||||||
|
const char * addr = env->GetStringUTFChars(address, NULL);
|
||||||
|
const char * codeStr = env->GetStringUTFChars(code, NULL);
|
||||||
|
jsize codeLen = env->GetStringUTFLength(code); // TODO: check if this is the byte count or character count
|
||||||
|
|
||||||
|
nn_Component* comp = ncl_createEEPROM(nnUni, addr, nnEEPROM, codeStr, codeLen, isReadonly);
|
||||||
|
env->ReleaseStringUTFChars(address, addr);
|
||||||
|
env->ReleaseStringUTFChars(code, codeStr);
|
||||||
|
|
||||||
|
return Carbon::InstantiateDefaultPBC(env, "org/neoflock/NeoNucleus/nn_Component", comp);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1createComputer
|
||||||
|
(JNIEnv * env, jclass, jobject universe, jstring address, jlong totalMemory, jlong maxComponents, jlong maxDevices) {
|
||||||
|
nn_Universe* nnUni = (nn_Universe*) Carbon::PointerBacked::GetPointer(env, universe);
|
||||||
|
NULLPTR_CHECK(nnUni, nn_Universe);
|
||||||
|
|
||||||
|
const char * addr = env->GetStringUTFChars(address, NULL);
|
||||||
|
// TODO: computer jni userdata lol
|
||||||
|
nn_Computer* computer = nn_createComputer(nnUni, NULL, addr, totalMemory, maxComponents, maxDevices);
|
||||||
|
env->ReleaseStringUTFChars(address, addr);
|
||||||
|
return Carbon::InstantiateDefaultPBC(env, "org/neoflock/NeoNucleus/nn_Computer", computer);
|
||||||
|
}
|
||||||
2437
src/native/neonucleus.h
Normal file
2437
src/native/neonucleus.h
Normal file
File diff suppressed because it is too large
Load Diff
2004
src/native/neonucleus.h.old
Normal file
2004
src/native/neonucleus.h.old
Normal file
File diff suppressed because it is too large
Load Diff
11
src/native/nn_Context.cpp
Normal file
11
src/native/nn_Context.cpp
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#include "carbon.hpp"
|
||||||
|
#include "org_neoflock_NeoNucleus_Context.h"
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_Context_free
|
||||||
|
(JNIEnv * env, jobject obj) {
|
||||||
|
void* ptr = Carbon::PointerBacked::GetPointer(env, obj);
|
||||||
|
NULLPTR_CHECKNR(ptr, nn_Context);
|
||||||
|
free(ptr);
|
||||||
|
Carbon::PointerBacked::ResetPointer(env, obj); // lets not be having accidental double frees here
|
||||||
|
}
|
||||||
36
src/native/nn_EEPROM.cpp
Normal file
36
src/native/nn_EEPROM.cpp
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#include "org_neoflock_NeoNucleus_nn_EEPROM.h"
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <cstring>
|
||||||
|
#include "carbon.hpp"
|
||||||
|
// FIXME: doesn't check for null
|
||||||
|
#define GET_LONG_FIELD(name) eepromNative->name = (uint64_t) env->GetLongField(eeprom, env->GetFieldID(clazz, #name, "J"));
|
||||||
|
#define GET_DOUBLE_FIELD(name) eepromNative->name = (double) env->GetDoubleField(eeprom, env->GetFieldID(clazz, #name, "D"));
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_allocate
|
||||||
|
(JNIEnv * env, jobject eeprom) {
|
||||||
|
jclass clazz = env->GetObjectClass(eeprom);
|
||||||
|
//jfieldID fid = env->GetFieldID(clazz, "ptr", "J");
|
||||||
|
//jlong size = env->GetLongField(eeprom, fid);
|
||||||
|
nn_EEPROM * eepromNative = (nn_EEPROM*)malloc(sizeof(nn_EEPROM));
|
||||||
|
GET_LONG_FIELD(size);
|
||||||
|
GET_LONG_FIELD(dataSize);
|
||||||
|
GET_DOUBLE_FIELD(readEnergyCost);
|
||||||
|
GET_DOUBLE_FIELD(readDataEnergyCost);
|
||||||
|
GET_DOUBLE_FIELD(writeEnergyCost);
|
||||||
|
GET_DOUBLE_FIELD(writeDataEnergyCost);
|
||||||
|
GET_DOUBLE_FIELD(writeDelay);
|
||||||
|
GET_DOUBLE_FIELD(writeDelay);
|
||||||
|
//printf("double_size=%d, %d %d %lf %lf %lf\n", sizeof(double), eepromNative->size, eepromNative->dataSize, eepromNative->readEnergyCost, eepromNative->readDataEnergyCost, eepromNative->writeEnergyCost);
|
||||||
|
return Carbon::PointerBacked::SetPointer(env, eeprom, eepromNative);
|
||||||
|
}
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_free
|
||||||
|
(JNIEnv * env, jobject eeprom) {
|
||||||
|
if (Carbon::PointerBacked::GetPointer(env, eeprom) == NULL) {
|
||||||
|
NULLPTR_THROW(nn_EEPROM);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// assuming free(NULL) does nothing, this should be fine
|
||||||
|
free(Carbon::PointerBacked::GetPointer(env, eeprom));
|
||||||
|
Carbon::PointerBacked::ResetPointer(env, eeprom);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
21
src/native/org_neoflock_NeoNucleus_Context.h
Normal file
21
src/native/org_neoflock_NeoNucleus_Context.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||||
|
#include <jni.h>
|
||||||
|
/* Header for class org_neoflock_NeoNucleus_Context */
|
||||||
|
|
||||||
|
#ifndef _Included_org_neoflock_NeoNucleus_Context
|
||||||
|
#define _Included_org_neoflock_NeoNucleus_Context
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_Context
|
||||||
|
* Method: free
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_Context_free
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
405
src/native/org_neoflock_NeoNucleus_NativeBindings.h
Normal file
405
src/native/org_neoflock_NeoNucleus_NativeBindings.h
Normal file
@@ -0,0 +1,405 @@
|
|||||||
|
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||||
|
#include <jni.h>
|
||||||
|
/* Header for class org_neoflock_NeoNucleus_NativeBindings */
|
||||||
|
|
||||||
|
#ifndef _Included_org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
#define _Included_org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_initContext
|
||||||
|
* Signature: ()Lorg/neoflock/NeoNucleus/nn_Context;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1initContext
|
||||||
|
(JNIEnv *, jclass);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_initPalettes
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1initPalettes
|
||||||
|
(JNIEnv *, jclass);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_createUniverse
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Context;)Lorg/neoflock/NeoNucleus/nn_Universe;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1createUniverse
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_createComponent
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Universe;Ljava/lang/String;Ljava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Component;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1createComponent
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setComponentMethods
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Component;[Lorg/neoflock/NeoNucleus/nn_Method;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setComponentMethods
|
||||||
|
(JNIEnv *, jclass, jobject, jobjectArray);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setComponentHandler
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Component;Lorg/neoflock/NeoNucleus/ComponentHandler;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setComponentHandler
|
||||||
|
(JNIEnv *, jclass, jobject, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_mountComponent
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Lorg/neoflock/NeoNucleus/nn_Component;IZ)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1mountComponent
|
||||||
|
(JNIEnv *, jclass, jobject, jobject, jint, jboolean);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_createEEPROM
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Universe;Ljava/lang/String;Lorg/neoflock/NeoNucleus/nn_EEPROM;Ljava/lang/String;Z)Lorg/neoflock/NeoNucleus/nn_Component;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1createEEPROM
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jobject, jstring, jboolean);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_createComputer
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Universe;Ljava/lang/String;JJJ)Lorg/neoflock/NeoNucleus/nn_Computer;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1createComputer
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jlong, jlong, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setComputerEnvironment
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Lorg/neoflock/NeoNucleus/nn_Environment;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setComputerEnvironment
|
||||||
|
(JNIEnv *, jclass, jobject, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setCallBudget
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;D)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setCallBudget
|
||||||
|
(JNIEnv *, jclass, jobject, jdouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setTotalEnergy
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;D)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setTotalEnergy
|
||||||
|
(JNIEnv *, jclass, jobject, jdouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setArchitecture
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Lorg/neoflock/NeoNucleus/nn_Architecture;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setArchitecture
|
||||||
|
(JNIEnv *, jclass, jobject, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_addSupportedArchitecture
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Lorg/neoflock/NeoNucleus/nn_Architecture;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1addSupportedArchitecture
|
||||||
|
(JNIEnv *, jclass, jobject, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_setTmpAddress
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1setTmpAddress
|
||||||
|
(JNIEnv *, jclass, jobject, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getComponentAddress
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Component;)Ljava/lang/String;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jstring JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getComponentAddress
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_addCommonDeviceInfo
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;Lorg/neoflock/NeoNucleus/nn_CommonDeviceInfo;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1addCommonDeviceInfo
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getComponentState
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Component;)Lorg/neoflock/NeoNucleus/ComponentState;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getComponentState
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_lockScreen
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1lockScreen
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_getScreenViewport
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)Lorg/neoflock/NeoNucleus/Resolution;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1getScreenViewport
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_setScreenViewport
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;JJ)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1setScreenViewport
|
||||||
|
(JNIEnv *, jclass, jobject, jlong, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_getScreenFlags
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)Lorg/neoflock/NeoNucleus/ncl_ScreenFlags;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1getScreenFlags
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_getScreenBrightness
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)D
|
||||||
|
*/
|
||||||
|
JNIEXPORT jdouble JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1getScreenBrightness
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_getScreenPixel
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;II)Lorg/neoflock/NeoNucleus/ncl_Pixel;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1getScreenPixel
|
||||||
|
(JNIEnv *, jclass, jobject, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_unlockScreen
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1unlockScreen
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushTouch
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;DDILjava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushTouch
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jdouble, jdouble, jint, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushDrop
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;DDILjava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushDrop
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jdouble, jdouble, jint, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushDrag
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;DDILjava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushDrag
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jdouble, jdouble, jint, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushScroll
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;DDDLjava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushScroll
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jdouble, jdouble, jdouble, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getUsedMemory
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)J
|
||||||
|
*/
|
||||||
|
JNIEXPORT jlong JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getUsedMemory
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getTotalMemory
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)J
|
||||||
|
*/
|
||||||
|
JNIEXPORT jlong JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getTotalMemory
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushClipboard
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushClipboard
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jstring, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushKeyDown
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;IILjava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushKeyDown
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jint, jint, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_pushKeyUp
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;Ljava/lang/String;IILjava/lang/String;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1pushKeyUp
|
||||||
|
(JNIEnv *, jclass, jobject, jstring, jint, jint, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_clearstack
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1clearstack
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_removeEnergy
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;D)Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1removeEnergy
|
||||||
|
(JNIEnv *, jclass, jobject, jdouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_tickSynchronized
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1tickSynchronized
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_getScreenEnergyUsage
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)D
|
||||||
|
*/
|
||||||
|
JNIEXPORT jdouble JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1getScreenEnergyUsage
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_resetIdleTime
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1resetIdleTime
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_tick
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)Lorg/neoflock/NeoNucleus/nn_Exit;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1tick
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getComputerState
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)Lorg/neoflock/NeoNucleus/nn_ComputerState;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getComputerState
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getError
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)Ljava/lang/String;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jstring JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getError
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_getDesiredArchitecture
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)Lorg/neoflock/NeoNucleus/nn_Architecture;
|
||||||
|
*/
|
||||||
|
JNIEXPORT jobject JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1getDesiredArchitecture
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_stopComputer
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1stopComputer
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: ncl_resetScreen
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/ncl_ScreenState;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_ncl_1resetScreen
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_addIdleTime
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;D)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1addIdleTime
|
||||||
|
(JNIEnv *, jclass, jobject, jdouble);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_destroyComputer
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Computer;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1destroyComputer
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_dropComponent
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Component;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1dropComponent
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_NativeBindings
|
||||||
|
* Method: nn_destroyUniverse
|
||||||
|
* Signature: (Lorg/neoflock/NeoNucleus/nn_Universe;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_NativeBindings_nn_1destroyUniverse
|
||||||
|
(JNIEnv *, jclass, jobject);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
29
src/native/org_neoflock_NeoNucleus_nn_Architecture.h
Normal file
29
src/native/org_neoflock_NeoNucleus_nn_Architecture.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||||
|
#include <jni.h>
|
||||||
|
/* Header for class org_neoflock_NeoNucleus_nn_Architecture */
|
||||||
|
|
||||||
|
#ifndef _Included_org_neoflock_NeoNucleus_nn_Architecture
|
||||||
|
#define _Included_org_neoflock_NeoNucleus_nn_Architecture
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_nn_Architecture
|
||||||
|
* Method: allocate
|
||||||
|
* Signature: ()Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1Architecture_allocate
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_nn_Architecture
|
||||||
|
* Method: free
|
||||||
|
* Signature: ()Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1Architecture_free
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
21
src/native/org_neoflock_NeoNucleus_nn_Context.h
Normal file
21
src/native/org_neoflock_NeoNucleus_nn_Context.h
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||||
|
#include <jni.h>
|
||||||
|
/* Header for class org_neoflock_NeoNucleus_nn_Context */
|
||||||
|
|
||||||
|
#ifndef _Included_org_neoflock_NeoNucleus_nn_Context
|
||||||
|
#define _Included_org_neoflock_NeoNucleus_nn_Context
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_nn_Context
|
||||||
|
* Method: free
|
||||||
|
* Signature: ()V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_neoflock_NeoNucleus_nn_1Context_free
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
29
src/native/org_neoflock_NeoNucleus_nn_EEPROM.h
Normal file
29
src/native/org_neoflock_NeoNucleus_nn_EEPROM.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||||
|
#include <jni.h>
|
||||||
|
/* Header for class org_neoflock_NeoNucleus_nn_EEPROM */
|
||||||
|
|
||||||
|
#ifndef _Included_org_neoflock_NeoNucleus_nn_EEPROM
|
||||||
|
#define _Included_org_neoflock_NeoNucleus_nn_EEPROM
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_nn_EEPROM
|
||||||
|
* Method: allocate
|
||||||
|
* Signature: ()Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_allocate
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_neoflock_NeoNucleus_nn_EEPROM
|
||||||
|
* Method: free
|
||||||
|
* Signature: ()Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_neoflock_NeoNucleus_nn_1EEPROM_free
|
||||||
|
(JNIEnv *, jobject);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user