chiark
/
gitweb
/
~ijackson
/
trains.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sane handling of incoming detections
[trains.git]
/
hostside
/
startup.c
diff --git
a/hostside/startup.c
b/hostside/startup.c
index 2e9ed335067b290c5cd6b13de13f3530d428e11b..f6a318ce030eac1a77b4b8600a12bf037e6b32a0 100644
(file)
--- a/
hostside/startup.c
+++ b/
hostside/startup.c
@@
-207,10
+207,23
@@
void on_pic_spurious(const PicInsnInfo *pii, const PicInsn *pi, int objnum) {
" detection interrupts\"", objnum);
}
" detection interrupts\"", objnum);
}
-void on_pic_detect1(const PicInsnInfo *pii, const PicInsn *pi, int segn) {
- Segment *seg;
- if (segn >= NUM_SEGMENTS) die("PIC sent detect @#%#x out of range",segn);
+static SegmentNum on_pic_detect_prep(int detyn, int objnum) {
+ SegmentNum segn;
+
+ if (objnum >= info_segmentmaplen ||
+ (segn= info_segmentmap[objnum]) < 0)
+ die("PIC sent detect%d @#%#x not in map",detyn,objnum);
+ oprintf(UPO,"picio in detect%d %s\n",detyn,info_segments[segn].pname);
+
+ return segn;
+}
+
+void on_pic_detect1(const PicInsnInfo *pii, const PicInsn *pi, int objnum) {
+ SegmentNum segn;
+ Segment *seg;
+
+ segn= on_pic_detect_prep(1,objnum);
seg= &segments[segn];
switch (sta_state) {
seg= &segments[segn];
switch (sta_state) {
@@
-239,6
+252,7
@@
void on_pic_nmradone(const PicInsnInfo *pii, const PicInsn *pi, int objnum) {
}
void on_pic_detect0(const PicInsnInfo *pii, const PicInsn *pi, int objnum) {
}
void on_pic_detect0(const PicInsnInfo *pii, const PicInsn *pi, int objnum) {
+ on_pic_detect_prep(0,objnum);
}
void choreographers_all_abandon(void) { }
}
void choreographers_all_abandon(void) { }