Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Generic mode rereader#796

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
dwalend wants to merge2 commits intoev3dev-lang-java:sysfs_perf2
base:sysfs_perf2
Choose a base branch
Loading
fromdwalend:GenericModeRereader
Open
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 32 additions & 17 deletionssrc/main/java/ev3dev/sensors/GenericMode.java
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
package ev3dev.sensors;

import ev3dev.utils.Sysfs;
import ev3dev.utils.DataChannelRereader;
import lejos.hardware.sensor.SensorMode;

import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;

/**
* Generic ev3dev sensor handler.
Expand All@@ -12,28 +15,30 @@
* are valid only when the sensor itself is in the correct mode.
* Otherwise, wrong data will be returned.</p>
*/
public class GenericMode implements SensorMode {

protected final File pathDevice;
public class GenericMode implements SensorMode, Closeable {

private final int sampleSize;
private final String modeName;

private final float correctMin;
private final float correctMax;
private final float correctFactor;

private final DataChannelRereader[] rereaders;

/**
* Create new generic sensor handler.
* @param pathDevice Reference to the object responsible for mode setting and value reading.
* @param sampleSize Number of returned samples.
* @param modeName Human-readable sensor mode name.
*/
public GenericMode(
final File pathDevice,
final int sampleSize,
final String modeName) {
final File pathDevice,
final int sampleSize,
final String modeName) {
this(pathDevice, sampleSize, modeName,
Float.MIN_VALUE, Float.MAX_VALUE, 1.0f);
Float.MIN_VALUE, Float.MAX_VALUE, 1.0f);
}

/**
Expand All@@ -42,23 +47,27 @@ public GenericMode(
* @param pathDevice Reference to the object responsible for mode setting and value reading.
* @param sampleSize Number of returned samples.
* @param modeName Human-readable sensor mode name.
* @param correctMin Minimum value measured by the sensor. If the reading is lower,zerois returned.
* @param correctMin Minimum value measured by the sensor. If the reading is lower,negative infinityis returned
* @param correctMax Maximum value measured by the sensor. If the reading is higher, positive infinity is returned.
* @param correctFactor Scaling factor applied to the sensor reading.
*/
public GenericMode(
final File pathDevice,
final int sampleSize,
final String modeName,
final float correctMin,
final float correctMax,
final float correctFactor) {
this.pathDevice = pathDevice;
final File pathDevice,
final int sampleSize,
final String modeName,
final float correctMin,
final float correctMax,
final float correctFactor) {
this.sampleSize = sampleSize;
this.modeName = modeName;
this.correctMin = correctMin;
this.correctMax = correctMax;
this.correctFactor = correctFactor;

this.rereaders = new DataChannelRereader[sampleSize];
for (int n = 0; n < sampleSize; n++) {
rereaders[n] = new DataChannelRereader(Path.of(pathDevice.toString(),"value" + n),32);
}
}

@Override
Expand All@@ -71,7 +80,6 @@ public int sampleSize() {
return sampleSize;
}


/**
* Fetches a sample from the sensor.
*
Expand All@@ -88,7 +96,7 @@ public void fetchSample(float[] sample, int offset) {
// for all values
for (int n = 0; n < sampleSize; n++) {
// read
float reading =Sysfs.readFloat(this.pathDevice + "/" + "value" + n);
float reading =Float.parseFloat(rereaders[n].readString());

// apply correction
reading *= correctFactor;
Expand All@@ -102,4 +110,11 @@ public void fetchSample(float[] sample, int offset) {
sample[offset + n] = reading;
}
}

@Override
public void close() throws IOException {
for (DataChannelRereader rereader: rereaders) {
rereader.close();
}
}
}
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,7 @@ private class InternalMode extends GenericMode {
private final float correctMin;
private final float correctMax;
private final float correctFactor;
private final File pathDevice;

public InternalMode(File pathDevice, int sampleSize, String modeName,
float correctMin, float correctMax, float correctFactor) {
Expand All@@ -59,6 +60,7 @@ public InternalMode(File pathDevice, int sampleSize, String modeName,
this.correctMin = correctMin;
this.correctMax = correctMax;
this.correctFactor = correctFactor;
this.pathDevice = pathDevice;
}

@Override
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp