SICS-294 anstohttp.c

Histmem now only calls TaskYield after SICS has finished initalising, this stops the statusfile task from being called early and overwriting the status file. Created ANSTO_MakeHistMemory command to install ANSTO_HistAction
Added veto functions.  Mapped the HistDriver interface Pause() and Continue() commands to AnstoHttpVeto and AnstoHttpNoVeto. Implemented an ANSTO_Histaction to call AnstoHttpPause when sent a "pause" subcommand.

hmcontrol_ansto.c
Call AnstoHttpPause() directly when Pause_HM_After_Count is set to preserver current behaviour.

counterdriv.c
Now sends the correct "SICS RESUME" command to resume a paused count.

ansto_sctdriveadapter.c NEW
This lets you create driveable objects from script-context controllers which have one node for setting a parameter and another node for reading the parameter (eg temperature controllers, choppers, velocity selectors)

sctemonadapter.c NEW
This generates an environment monitor interface for script-context controllers so that the emon object in SICS will be able to pause counters if the controller goes out of tolerance.

sct_usbtmcprot.c, usbtmc.h NEW
First attempt at a protocol handler for USB Test and Measurement Class devices

sct_julabo_lh45.tcl NEW
Implements script-context controller for the Julabo LH45 temperature controller.

Makefile
Added ansto_sctdriveadapter and sctemonadapter

hardsup/makefile
Added velocity selector and usbtmc protocol handlers

hardsup/sct_velselprot.c
Simplified, don't worry about trying to implement a login handler for now, just implement a "Reading" handler.

site_ansto.c
Add the velocity selector and USBTMC protocol handlers.
Added the ANSTO_MakeHM command

instrument/config/hipadaba/common_instrument_dictionary.tcl
Added support for auxiliary data, ie extra meta-data entries in the "data" group of the nexus file.
Add new NXvelocity_selector object under /instrument.

instrument/config/hipadaba/hipadaba_configuration_common.tcl
Add the new "sct_object" script-context controller objects to the hdb tree.

instrument/config/hipadaba/instdict_specification.tcl
Define the new sct_object controllers.

instrument/config/hmm/hmm_configuration_common_1.tcl
Use the new ANSTO_MakeHM command to create histmem drivers which support veto.
Define allowed attributes and elements for the BAT_TABLE and FAT_TABLE
Stop between counts instead of pausing because setting pause now sends a veto.

instrument/config/motors/sct_jogmotor_common.tcl
You now need to specify klass when creating a jogmotor.

instrument/config/motors/sct_positmotor_common.tcl
You can now specify an optional function which calculates the instrument parameter (eg attenuation) from a posit table entry when defining a posit motor.

instrument/config/nexus/nxscripts_common_1.tcl
Report file status info in the /experiment section of the hdb tree.  Add auxiliary data to data file.
Handle saving data from script-context controller objects.

instrument/util/script_context_util.tcl
Added procedure to set required properties  for saving script-context object data.

instrument/util/utility.tcl
Added set_sct_object_attributes proc to automatically set required attributes on SCT_OBJECTs
Fixed hlistplainprop to deal with empty property fields on hdb nodes.

instrument/server_config.tcl
Call the new nexus initialisation command and set attributes on sct objects.

hrpd/config/motors/motor_configuration.tcl
New absenc home readings for mchi and mphi. New absenc home and range for mf1

hipd/config/commands/commands.tcl
Exported and published the new ajscmds so that they can be used in batch files.

hipd/config/motors/motor_configuration.tcl
New mchi absenc home

rsd/config/hmm/hmm_configuration.tcl
Provide support for saving corrected hmm data

rsd/config/motors/motor_configuration.tcl
Use simple names for motors.

SICS-329

sans/config/INSTCFCOMMON.TXT
Added julabo and lakeshore configuration files to list.

sans/config/optics/guide_configuration.tcl
Added entrance aperture positions to the configuration table and the cn_maps which map the index to the component ID.

sans/commands/commands.tcl
The "guide" command now set EApPosYmm after driving the guides in place.
The indexed position to component maps (cn_map) have been moved to the guide_configuration.tcl file.

sans/motors/motor_configuration.tcl
Set samy home to 56.1mm

sans/config/velsel/sct_velsel.tc NEW
Implements script-context controller object for the NVS40 velocity selector. TODO tilt-angle control, driveable interface.

sans/config/hmm/hmm_configuration.tcl
Set 5.08mm spacing on detector width. Use pixel-offset for vertical and horizontal detector axes.

sans/config/motors/motor_configuration.tcl
Swap directions of beamstops 4 and 5 (the two smallest)
New config parameters for samx, samthet, apx, det, detoff, bsz,

sans/config/motors/positmotor_configuration.tcl
Added descriptive headers to positmotor configuration tables and new synstax for the make positmotor command.

sans/config/nexus/nxscripts.tcl
Implemented initialisation command.

sans/config/parameters/parameters.tcl
Added SampleThickness and TransmissionFlag.  Calculate SamplePosYmm from samy and SamyOffsetmm.
Added beamstops to hdb tree.

reflectometer/config/nexus/nxscripts.tcl
Implement the initialisation procedure.

r2767 | ffr | 2009-03-31 10:16:54 +1100 (Tue, 31 Mar 2009) | 123 lines
This commit is contained in:
Ferdi Franceschini
2009-03-31 10:16:54 +11:00
committed by Douglas Clowes
parent eec824f98a
commit d2f57e4615
39 changed files with 2026 additions and 557 deletions

View File

@@ -1,204 +1,50 @@
/**
* @file Astrium Velocity Selector protocol
* @Author Ferdi Franceschini
*/
#include <errno.h>
#include <ascon.h>
#include <ascon.i>
#include <dynstring.h>
#define MAXRETRIES 3
static char *UIDPROMPT="#SES#Fill in your user ID";
static char *PWDPROMPT="#SES#Fill in your password";
static char *CMDOK="#SOS#ACCEPT";
static char *CMDERR="#SOS#NCCEPT";
typedef enum {
Unknown,
sendUID,
sendPWD,
Established
} VelSelState;
typedef struct {
VelSelState subState;
char *user;
char *password;
char *expect;
int retries;
} VelSelProt, *pVelSelProt;
void VelSelAuthUID(Ascon *a) {
char chr;
int VelSelReading(Ascon *a)
{
int ret;
}
void VelSelAuthPwd(Ascon *a) {
}
void VelSelAuthenticate(Ascon *a) {
char chr;
int ret;
pVelSelProt pVelSel = (pVelSelProt)a->private;
switch (pVelSel->authProg) {
case start:
break;
case readingUIDPrompt:
break;
case readingPWDPrompt:
break;
}
char chr=0;
ret = AsconReadChar(a->fd, &chr);
if (ret > 0 && chr == '#') {
while (AsconReadChar(a->fd, &chr) > 0) {
if (chr == 0) {
if (a->timeout > 0) {
if (DoubleTime() - a->start > a->timeout) {
AsconError(a, "read timeout", 0);
a->state = AsconTimeout;
}
}
return 1;
}
if (a->state != AsconReadDone) {
if (a->timeout > 0) {
if (DoubleTime() - a->start > a->timeout) {
AsconError(a, "read timeout", 0);
a->state = AsconTimeout;
return 1;
} else {
return 1;
}
}
DynStringConcatChar(a->rdBuffer, chr);
while ((ret = AsconReadChar(a->fd, &chr)) > 0) {
DynStringConcatChar(a->rdBuffer, chr);
}
}
int VelSelWriteStart(Ascon *a) {
DynStringConcatChar(a->wrBuffer, '\r');
a->state = AsconWriting;
a->wrPos = 0;
return 1;
a->state = AsconReadDone;
DynStringConcatChar(a->rdBuffer, '\0');
}
int VelSelReading(Ascon *a) {
int VelSelProtHandler(Ascon *a)
{
int ret;
char chr;
pVelSelProt pVelSel = (pVelSelProt)a->private;
switch (pVelSel->subState) {
case sendUID:
ret = AsconReadChar(a->fd, &chr);
if (ret > 0) {
if (*pVelSel->expect == '\0') {
pVelSel->substate = sendPWD;
pVelSel->expect = PWDPROMPT;
} else if (chr == *pVelSel->expect) {
pVelSel->expect++;
} else if (pVelSel->retries-- > 0) {
a->state = AsconConnectStart;
pVelSel->retries = MAXRETRIES;
AsconError(a, "Did not get UID request", 0);
return 1;
}
}
pVelSel->retries = MAXRETRIES;
break;
case sendPWD:
break;
case Established:
break;
default:
}
switch(event) {
case UIDReq:
// wrBuffer = user:NVS
a->state = AsconWriteStart;
return 1;
break;
case PWDReq:
// wrBuffer = password:NVS
a->state = AsconWriteStart;
return 1;
break;
case
}
}
int VelSelProtHandler(Ascon *a) {
int ret;
pVelSelProt pVelSel = (pVelSelProt)a->private;
switch (a->state) {
case AsconConnecting:
ret = AsconConnectSuccess(a->fd);
if (ret == 0) {
/* in progress */
} else if (ret > 0) {
pVelSelProt->subState = sendUID;
a->state = AsconReading;
} else if (ret < 0) {
AsconError(a, "AsconConnectSuccess failed:", errno);
}
break;
case AsconWriteStart:
ret = VelSelWriteStart(a);
return ret;
break;
switch(a->state){
case AsconReading:
ret = VelSelReading(a);
return ret;
return VelSelReading(a);
break;
default:
return AsconStdHandler(a);
}
}
static void VelSelKill(void *data) {
pVelSelProt pVelSel = (pVelSelProt)data;
if (pVelSel == NULL)
return;
if (pVelSel->user != NULL)
free(pVelSel->user);
if (pVelSel->password != NULL)
free(pVelSel->password);
free(pVelSel);
}
static int VelSelProtInit(Ascon *a, SConnection *con, int argc, char *argv[]) {
pVelSelProt *pVelSel = NULL;
Tcl_Interp *tcl_interp;
pVelSel = (pVelSelProt) malloc(sizeof(VelSelProt));
if (VelSel == NULL) {
SCWrite(con, "ERROR: malloc for pVelSel failed in VelSelProtInit",eError);
return 0;
}
if (argc < 4) {
SCWrite(con, "ERROR: You must provide host, user, password parameters",eError);
return 0;
}
a->hostport = strdup(argv[1]);
pVelSel->user = strdup(argv[2]);
pVelSel->password = strdup(argv[3]);
if (argc == 5) {
tcl_interp = InterpGetTcl(pServ->pSics);
if (TCL_ERROR == Tcl_GetDobule(tcl_interp,argv[4],&a->timeout)) {
SCWrite(con, Tcl_GetStringResult(tcl_interp), eError);
return 0;
}
} else {
a->timeout = 10;
}
pVelSel->subState = Unknown;
pVelSel->expect = UIDPROMPT;
pVelSel->retries = MAXRETRIES;
a->private = pVelSel;
a->killPrivate = VelSelKill;
a->state = AsconConnectStart;
return 1;
}
void AddVelSelProtocol() {
void AddVelSelProtocol()
{
AsconProtocol *prot = NULL;
prot = calloc(sizeof(AsconProtocol), 1);
prot->name = strdup("astvelsel");
prot->init = VelSelProtInit;
prot->init = AsconStdInit;
prot->handler = VelSelProtHandler;
AsconInsertProtocol(prot);
}