From 2590869f4d2780c8d613454b5e6ec2fa50896111 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Wed, 15 Nov 2006 08:08:28 +1100 Subject: [PATCH] handle changed format of event report r1289 | dcl | 2006-11-15 08:08:28 +1100 (Wed, 15 Nov 2006) | 2 lines --- site_ansto/counterdriv.c | 41 +++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/site_ansto/counterdriv.c b/site_ansto/counterdriv.c index a55110da..dea76d98 100644 --- a/site_ansto/counterdriv.c +++ b/site_ansto/counterdriv.c @@ -259,30 +259,41 @@ static void HandleReport(CounterDriver *cntrData, BUFFER* bp) * \param bp pointer to buffer containing the line of input * * This function sets the state of the counter based on events reported by - * the monitor. + * the monitor. The event format is "EVENT " */ static void MonHandleInput(CounterDriver *cntrData, BUFFER* bp) { BeamMon* self = NULL; - const char et[] = "EVENT TERMINAL"; - const char eri[] = "EVENT RANGE IN"; - const char ero[] = "EVENT RANGE OUT"; + const char et[] = " TERMINAL"; + const char eri[] = "RANGE IN"; + const char ero[] = "RANGE OUT"; const char rpt[] = "READ"; self = (BeamMon *) cntrData->pData; /* TODO handle the line */ flog('=', bp->body); - if (strncasecmp(bp->body, et, sizeof(et) - 1) == 0) { - if (self->state == HWBusy) - self->state = HWIdle; + if (strncasecmp(bp->body, "EVENT", 5) == 0) { + char* cp = bp->body + 5; + while (*cp && isspace(*cp)) // skip space + ++cp; + while (*cp && !isspace(*cp)) // skip timestamp + ++cp; + while (*cp && isspace(*cp)) // skip space + ++cp; + if (strncasecmp(cp, et, sizeof(et) - 1) == 0) { + if (self->state == HWBusy) + self->state = HWIdle; + } + else if (strncasecmp(cp, eri, sizeof(eri) - 1) == 0) { + if (self->state == HWPause) + self->state = HWBusy; + } + else if (strncasecmp(cp, ero, sizeof(ero) - 1) == 0) { + if (self->state == HWBusy) + self->state = HWPause; + } } - if (strncasecmp(bp->body, eri, sizeof(eri) - 1) == 0) - if (self->state == HWPause) - self->state = HWBusy; - if (strncasecmp(bp->body, ero, sizeof(ero) - 1) == 0) - if (self->state == HWBusy) - self->state = HWPause; - if (strncasecmp(bp->body, rpt, sizeof(rpt) - 1) == 0) { - HandleReport(cntrData, &self->buffer); + else if (strncasecmp(bp->body, rpt, sizeof(rpt) - 1) == 0) { + HandleReport(cntrData, &self->buffer); } bp->length = 0; }