Skip to content

Commit d20c809

Browse files
committed
#454 Test commit of generated sources
1 parent 4b92763 commit d20c809

18 files changed

+1445
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.pi4j.plugin.ffm2.file;
2+
3+
import io.github.digitalsmile.annotation.function.NativeCall;
4+
import io.github.digitalsmile.annotation.types.interfaces.NativeMemoryContext;
5+
6+
import java.lang.foreign.*;
7+
import java.lang.invoke.MethodHandle;
8+
9+
class FileDescriptorContext implements NativeMemoryContext {
10+
private static final Arena ARENA = Arena.ofAuto();
11+
12+
private static final SymbolLookup LIBC_LIB = Linker.nativeLinker().defaultLookup();
13+
14+
static final MethodHandle OPEN64 = Linker.nativeLinker().downcallHandle(
15+
LIBC_LIB.find("open64").orElseThrow(),
16+
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.ADDRESS, ValueLayout.JAVA_INT),
17+
Linker.Option.captureCallState("errno"));
18+
19+
static final MethodHandle CLOSE = Linker.nativeLinker().downcallHandle(
20+
LIBC_LIB.find("close").orElseThrow(), FunctionDescriptor.ofVoid(ValueLayout.JAVA_INT),
21+
Linker.Option.captureCallState("errno"));
22+
23+
static final MethodHandle READ = Linker.nativeLinker().downcallHandle(
24+
LIBC_LIB.find("read").orElseThrow(),
25+
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.ADDRESS, ValueLayout.JAVA_INT),
26+
Linker.Option.captureCallState("errno"));
27+
28+
static final MethodHandle WRITE = Linker.nativeLinker().downcallHandle(
29+
LIBC_LIB.find("write").orElseThrow(),
30+
FunctionDescriptor.of(ValueLayout.JAVA_INT, ValueLayout.JAVA_INT, ValueLayout.ADDRESS),
31+
Linker.Option.captureCallState("errno"));
32+
33+
@Override
34+
public MemorySegment allocate(long byteSize, long byteAlignment) {
35+
return ARENA.allocate(byteSize, byteAlignment);
36+
}
37+
38+
@Override
39+
public void checkIsCreatedByArena(MemorySegment segment) {
40+
if ((!ARENA.scope().equals(segment.scope()) || !NativeCall.createdInContext(segment.scope())) && !Arena.global().scope().equals(segment.scope())) {
41+
throw new IllegalArgumentException("The scope of the MemorySegment arena is not the same as the scope of the arena");
42+
}
43+
}
44+
45+
@Override
46+
public Arena getArena() {
47+
return ARENA;
48+
}
49+
50+
@Override
51+
public void close() {
52+
ARENA.close();
53+
}
54+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.pi4j.plugin.ffm2.file;
2+
3+
import com.pi4j.plugin.ffm.common.file.FileDescriptor;
4+
import io.github.digitalsmile.annotation.NativeMemoryException;
5+
import io.github.digitalsmile.annotation.function.NativeCall;
6+
7+
import java.lang.foreign.ValueLayout;
8+
9+
public class FileDescriptorNative extends NativeCall implements FileDescriptor {
10+
public FileDescriptorNative() {
11+
super(new FileDescriptorContext());
12+
}
13+
14+
@Override
15+
public int open(String path, int openFlag) throws NativeMemoryException {
16+
try {
17+
var pathMemorySegment = context.allocateFrom(path);
18+
var capturedState = context.allocate(CAPTURED_STATE_LAYOUT);
19+
var callResult = (int) FileDescriptorContext.OPEN64.invoke(capturedState, pathMemorySegment, openFlag);
20+
processError(callResult, capturedState, "open", pathMemorySegment, openFlag);
21+
return callResult;
22+
} catch (Throwable e) {
23+
throw new NativeMemoryException(e.getMessage(), e);
24+
}
25+
}
26+
27+
@Override
28+
public void close(int fd) throws NativeMemoryException {
29+
try {
30+
var capturedState = context.allocate(CAPTURED_STATE_LAYOUT);
31+
var callResult = (int) FileDescriptorContext.CLOSE.invoke(capturedState, fd);
32+
processError(callResult, capturedState, "close", fd);
33+
} catch (Throwable e) {
34+
throw new NativeMemoryException(e.getMessage(), e);
35+
}
36+
}
37+
38+
@Override
39+
public byte[] read(int fd, byte[] buffer, int size) throws NativeMemoryException {
40+
try {
41+
var bufferMemorySegment = context.allocateFrom(ValueLayout.JAVA_BYTE, buffer);
42+
var capturedState = context.allocate(CAPTURED_STATE_LAYOUT);
43+
var callResult = (int) FileDescriptorContext.READ.invoke(capturedState, fd, bufferMemorySegment, size);
44+
processError(callResult, capturedState, "read", fd, bufferMemorySegment, size);
45+
return bufferMemorySegment.toArray(ValueLayout.JAVA_BYTE);
46+
} catch (Throwable e) {
47+
throw new NativeMemoryException(e.getMessage(), e);
48+
}
49+
}
50+
51+
@Override
52+
public int write(int fd, byte[] data) throws NativeMemoryException {
53+
try {
54+
var dataMemorySegment = context.allocateFrom(ValueLayout.JAVA_BYTE, data);
55+
var capturedState = context.allocate(CAPTURED_STATE_LAYOUT);
56+
var callResult = (int) FileDescriptorContext.WRITE.invoke(capturedState, fd, dataMemorySegment);
57+
processError(callResult, capturedState, "write", fd, dataMemorySegment);
58+
return callResult;
59+
} catch (Throwable e) {
60+
throw new NativeMemoryException(e.getMessage(), e);
61+
}
62+
}
63+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.pi4j.plugin.ffm2.gpio;
2+
3+
import io.github.digitalsmile.annotation.function.NativeCall;
4+
import io.github.digitalsmile.annotation.types.interfaces.NativeMemoryContext;
5+
6+
import java.lang.foreign.Arena;
7+
import java.lang.foreign.MemorySegment;
8+
9+
class GPIOContext implements NativeMemoryContext {
10+
private static final Arena ARENA = Arena.ofAuto();
11+
12+
@Override
13+
public MemorySegment allocate(long byteSize, long byteAlignment) {
14+
return ARENA.allocate(byteSize, byteAlignment);
15+
}
16+
17+
@Override
18+
public void checkIsCreatedByArena(MemorySegment segment) {
19+
if ((!ARENA.scope().equals(segment.scope()) || !NativeCall.createdInContext(segment.scope())) && !Arena.global().scope().equals(segment.scope())) {
20+
throw new IllegalArgumentException("The scope of the MemorySegment arena is not the same as the scope of the arena");
21+
}
22+
}
23+
24+
@Override
25+
public Arena getArena() {
26+
return ARENA;
27+
}
28+
29+
@Override
30+
public void close() {
31+
ARENA.close();
32+
}
33+
}
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
package com.pi4j.plugin.ffm2.gpio;
2+
3+
/**
4+
* Source: NO_POSITION
5+
*/
6+
public class GpioConstants {
7+
/**
8+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:23:9
9+
*/
10+
public static final int GPIO_MAX_NAME_SIZE = 32;
11+
12+
/**
13+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:45:9
14+
*/
15+
public static final int GPIO_V2_LINES_MAX = 64;
16+
17+
/**
18+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:51:9
19+
*/
20+
public static final int GPIO_V2_LINE_NUM_ATTRS_MAX = 10;
21+
22+
/**
23+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:343:9
24+
*/
25+
public static final int GPIOHANDLES_MAX = 64;
26+
27+
/**
28+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:486:9
29+
*/
30+
public static final int GPIOEVENT_EVENT_RISING_EDGE = 1;
31+
32+
/**
33+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:487:9
34+
*/
35+
public static final int GPIOEVENT_EVENT_FALLING_EDGE = 2;
36+
37+
/**
38+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:311:9
39+
*/
40+
public static final long GPIOLINE_FLAG_KERNEL = 1L;
41+
42+
/**
43+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:312:9
44+
*/
45+
public static final long GPIOLINE_FLAG_IS_OUT = 2L;
46+
47+
/**
48+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:313:9
49+
*/
50+
public static final long GPIOLINE_FLAG_ACTIVE_LOW = 4L;
51+
52+
/**
53+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:314:9
54+
*/
55+
public static final long GPIOLINE_FLAG_OPEN_DRAIN = 8L;
56+
57+
/**
58+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:315:9
59+
*/
60+
public static final long GPIOLINE_FLAG_OPEN_SOURCE = 16L;
61+
62+
/**
63+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:316:9
64+
*/
65+
public static final long GPIOLINE_FLAG_BIAS_PULL_UP = 32L;
66+
67+
/**
68+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:317:9
69+
*/
70+
public static final long GPIOLINE_FLAG_BIAS_PULL_DOWN = 64L;
71+
72+
/**
73+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:318:9
74+
*/
75+
public static final long GPIOLINE_FLAG_BIAS_DISABLE = 128L;
76+
77+
/**
78+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:378:9
79+
*/
80+
public static final long GPIOHANDLE_REQUEST_INPUT = 1L;
81+
82+
/**
83+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:379:9
84+
*/
85+
public static final long GPIOHANDLE_REQUEST_OUTPUT = 2L;
86+
87+
/**
88+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:380:9
89+
*/
90+
public static final long GPIOHANDLE_REQUEST_ACTIVE_LOW = 4L;
91+
92+
/**
93+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:381:9
94+
*/
95+
public static final long GPIOHANDLE_REQUEST_OPEN_DRAIN = 8L;
96+
97+
/**
98+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:382:9
99+
*/
100+
public static final long GPIOHANDLE_REQUEST_OPEN_SOURCE = 16L;
101+
102+
/**
103+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:383:9
104+
*/
105+
public static final long GPIOHANDLE_REQUEST_BIAS_PULL_UP = 32L;
106+
107+
/**
108+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:384:9
109+
*/
110+
public static final long GPIOHANDLE_REQUEST_BIAS_PULL_DOWN = 64L;
111+
112+
/**
113+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:385:9
114+
*/
115+
public static final long GPIOHANDLE_REQUEST_BIAS_DISABLE = 128L;
116+
117+
/**
118+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:454:9
119+
*/
120+
public static final long GPIOEVENT_REQUEST_RISING_EDGE = 1L;
121+
122+
/**
123+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:455:9
124+
*/
125+
public static final long GPIOEVENT_REQUEST_FALLING_EDGE = 2L;
126+
127+
/**
128+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:456:9
129+
*/
130+
public static final long GPIOEVENT_REQUEST_BOTH_EDGES = 3L;
131+
132+
/**
133+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:505:9
134+
*/
135+
public static final long GPIO_GET_CHIPINFO_IOCTL = 2151986177L;
136+
137+
/**
138+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:506:9
139+
*/
140+
public static final long GPIO_GET_LINEINFO_UNWATCH_IOCTL = 3221533708L;
141+
142+
/**
143+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:511:9
144+
*/
145+
public static final long GPIO_V2_GET_LINEINFO_IOCTL = 3238048773L;
146+
147+
/**
148+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:512:9
149+
*/
150+
public static final long GPIO_V2_GET_LINEINFO_WATCH_IOCTL = 3238048774L;
151+
152+
/**
153+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:513:9
154+
*/
155+
public static final long GPIO_V2_GET_LINE_IOCTL = 3260068871L;
156+
157+
/**
158+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:514:9
159+
*/
160+
public static final long GPIO_V2_LINE_SET_CONFIG_IOCTL = 3239097357L;
161+
162+
/**
163+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:515:9
164+
*/
165+
public static final long GPIO_V2_LINE_GET_VALUES_IOCTL = 3222320142L;
166+
167+
/**
168+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:516:9
169+
*/
170+
public static final long GPIO_V2_LINE_SET_VALUES_IOCTL = 3222320143L;
171+
172+
/**
173+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:523:9
174+
*/
175+
public static final long GPIO_GET_LINEINFO_IOCTL = 3225990146L;
176+
177+
/**
178+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:524:9
179+
*/
180+
public static final long GPIO_GET_LINEHANDLE_IOCTL = 3245126659L;
181+
182+
/**
183+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:525:9
184+
*/
185+
public static final long GPIO_GET_LINEEVENT_IOCTL = 3224417284L;
186+
187+
/**
188+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:526:9
189+
*/
190+
public static final long GPIOHANDLE_GET_LINE_VALUES_IOCTL = 3225465864L;
191+
192+
/**
193+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:527:9
194+
*/
195+
public static final long GPIOHANDLE_SET_LINE_VALUES_IOCTL = 3225465865L;
196+
197+
/**
198+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:528:9
199+
*/
200+
public static final long GPIOHANDLE_SET_CONFIG_IOCTL = 3226776586L;
201+
202+
/**
203+
* Source: /usr/src/linux-headers-6.8.0-52-generic/include/uapi/linux/gpio.h:529:9
204+
*/
205+
public static final long GPIO_GET_LINEINFO_WATCH_IOCTL = 3225990155L;
206+
}

0 commit comments

Comments
 (0)