Skip to content

Commit 353a8ea

Browse files
mcm001OfirSiboni
andauthored
Add FMS info to snapshot names (#1460)
Supersedes #464 Co-authored-by: Ofir Siboni <[email protected]>
1 parent 09b1bb9 commit 353a8ea

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

photon-core/src/main/java/org/photonvision/common/dataflow/networktables/NetworkTablesManager.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ public void accept(NetworkTableEvent event) {
114114
}
115115
}
116116

117+
public NetworkTableInstance getNTInst() {
118+
return ntInstance;
119+
}
120+
117121
private void onFieldLayoutChanged(NetworkTableEvent event) {
118122
var atfl_json = event.valueData.value.getString();
119123
try {

photon-core/src/main/java/org/photonvision/vision/frame/consumer/FileSaveFrameConsumer.java

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717

1818
package org.photonvision.vision.frame.consumer;
1919

20+
import edu.wpi.first.math.MathUtil;
2021
import edu.wpi.first.networktables.IntegerEntry;
22+
import edu.wpi.first.networktables.IntegerSubscriber;
2123
import edu.wpi.first.networktables.NetworkTable;
24+
import edu.wpi.first.networktables.StringSubscriber;
2225
import java.io.File;
2326
import java.text.DateFormat;
2427
import java.text.SimpleDateFormat;
@@ -35,6 +38,9 @@
3538
public class FileSaveFrameConsumer implements Consumer<CVMat> {
3639
private final Logger logger = new Logger(FileSaveFrameConsumer.class, LogGroup.General);
3740

41+
// match type's values from the FMS.
42+
private static final String[] matchTypes = {"N/A", "P", "Q", "E", "EV"};
43+
3844
// Formatters to generate unique, timestamped file names
3945
private static final String FILE_PATH = ConfigManager.getInstance().getImageSavePath().toString();
4046
private static final String FILE_EXTENSION = ".jpg";
@@ -48,6 +54,10 @@ public class FileSaveFrameConsumer implements Consumer<CVMat> {
4854
private final String ntEntryName;
4955
private IntegerEntry saveFrameEntry;
5056

57+
private StringSubscriber ntEventName;
58+
private IntegerSubscriber ntMatchNum;
59+
private IntegerSubscriber ntMatchType;
60+
5161
private final String cameraUniqueName;
5262
private String cameraNickname;
5363
private final String streamType;
@@ -61,6 +71,12 @@ public FileSaveFrameConsumer(String camNickname, String cameraUniqueName, String
6171
this.streamType = streamPrefix;
6272

6373
this.rootTable = NetworkTablesManager.getInstance().kRootTable;
74+
75+
NetworkTable fmsTable = NetworkTablesManager.getInstance().getNTInst().getTable("FMSInfo");
76+
this.ntEventName = fmsTable.getStringTopic("EventName").subscribe("UNKNOWN");
77+
this.ntMatchNum = fmsTable.getIntegerTopic("MatchNumber").subscribe(-1);
78+
this.ntMatchType = fmsTable.getIntegerTopic("MatchType").subscribe(0);
79+
6480
updateCameraNickname(camNickname);
6581
}
6682

@@ -75,7 +91,15 @@ public void accept(CVMat image) {
7591
Date now = new Date();
7692

7793
String fileName =
78-
cameraNickname + "_" + streamType + "_" + df.format(now) + "T" + tf.format(now);
94+
cameraNickname
95+
+ "_"
96+
+ streamType
97+
+ "_"
98+
+ df.format(now)
99+
+ "T"
100+
+ tf.format(now)
101+
+ "_"
102+
+ getMatchData();
79103

80104
// Check if the Unique Camera directory exists and create it if it doesn't
81105
String cameraPath = FILE_PATH + File.separator + this.cameraUniqueName;
@@ -119,4 +143,30 @@ public void overrideTakeSnapshot() {
119143
// Simulate NT change
120144
saveFrameEntry.set(saveFrameEntry.get() + 1);
121145
}
146+
147+
/**
148+
* Returns the match Data collected from the NT. eg : Q58 for qualfication match 58. If not in
149+
* event, returns N/A-0-EVENTNAME
150+
*/
151+
private String getMatchData() {
152+
var matchType = ntMatchType.getAtomic();
153+
if (matchType.timestamp == 0) {
154+
// no NT info yet
155+
logger.warn("Did not recieve match type, defaulting to 0");
156+
}
157+
158+
var matchNum = ntMatchNum.getAtomic();
159+
if (matchNum.timestamp == 0) {
160+
logger.warn("Did not recieve match num, defaulting to -1");
161+
}
162+
163+
var eventName = ntEventName.getAtomic();
164+
if (eventName.timestamp == 0) {
165+
logger.warn("Did not recieve event name, defaulting to 'UNKNOWN'");
166+
}
167+
168+
String matchTypeStr =
169+
matchTypes[MathUtil.clamp((int) matchType.value, 0, matchTypes.length - 1)];
170+
return matchTypeStr + "-" + matchNum.value + "-" + eventName.value;
171+
}
122172
}

0 commit comments

Comments
 (0)