28 #define CHN_NAME_LENGTH 32
45 cm_msg(MLOG,
"",
"++epics_ca_callback()");
53 cm_msg(MLOG,
"",
"callback for channel %d", i);
58 if (i < info->num_channels)
59 info->
array[
i] = *((
float *) args.dbr);
62 cm_msg(MLOG,
"",
"--epics_ca_callback()");
75 cm_msg(MLOG,
"",
"++epics_ca_init(%d channels)",channels);
78 info = calloc(1,
sizeof(
CA_INFO));
84 cm_get_experiment_database(&hDB, NULL);
90 db_merge_data(hDB, hKey,
"Channel name",
94 status = ca_task_initialize();
95 if (!(status & ECA_NORMAL)) {
96 cm_msg(MERROR,
"epics_ca_init",
"Unable to initialize! ca_task_initialize() "
97 "returned 0X%x",status);
102 info->
array = calloc(channels,
sizeof(
float));
103 info->
pv_handles = calloc(channels,
sizeof(
void *));
105 info->
pv_handles[i] = calloc(1,
sizeof(chid));
112 if (!(status & ECA_NORMAL))
113 cm_msg(MERROR,
"epics_ca_init",
"ERROR 0X%x returned by ca_search(%s)",
117 if ((status=ca_pend_io(5.0)) == ECA_TIMEOUT) {
120 cm_msg(MERROR,
"epics_ca_init",
"Not connect to %s",
122 }
else if (status != ECA_NORMAL) {
129 if (ca_state(info->
pv_handles[i]) != cs_conn) {
135 if (!(status & ECA_NORMAL))
136 cm_msg(MERROR,
"epics_ca_init",
"channel %s ca_add_event() returned 0X%x",
140 if ((status=ca_pend_io(5.0)) == ECA_TIMEOUT) {
143 cm_msg(MERROR,
"epics_ca_init",
"Not connect to %s",
145 }
else if (status != ECA_NORMAL) {
153 cm_msg(MLOG,
"",
"--epics_ca_init()");
165 cm_msg(MLOG,
"",
"++epics_ca_exit()");
187 cm_msg(MLOG,
"",
"--epics_ca_exit()");
197 cm_msg(MLOG,
"",
"++epics_ca_set(channel %d, value %f)",channel,value);
202 cm_msg(MLOG,
"",
"--epics_ca_set()");
214 cm_msg(MLOG,
"",
"++epics_ca_set_all(%d channels)",channels);
217 ca_put(DBR_FLOAT, info->
pv_handles[i], &value);
220 cm_msg(MLOG,
"",
"--epics_ca_set_all()");
234 cm_msg(MLOG,
"",
"++epics_ca_set_label(channel %d, label %s)", channels, label);
237 status = ca_search(str, &chan_id);
239 status = ca_pend_io(2.0);
240 if (status != ECA_NORMAL)
241 printf(
"%s not found\n", str);
243 status = ca_put(ca_field_type(chan_id), chan_id, label);
247 cm_msg(MLOG,
"",
"--epics_ca_set_label()");
257 cm_msg(MLOG,
"",
"++epics_ca_get(channel %d)",channel);
259 ca_pend_event(0.0001);
264 cm_msg(MLOG,
"",
"--epics_ca_get(value = %f)",*pvalue);
266 cm_msg(MLOG,
"",
"--epics_ca_get(NULL pointer to return)");
278 cm_msg(MLOG,
"",
"++epics_ca_get_all(%d channels)", channels);
284 cm_msg(MLOG,
"",
"--epics_ca_get_all()");
297 float value, *pvalue;
301 va_start(argptr, cmd);
305 cm_msg(MLOG,
"",
"++epics_ca(CMD=%d)",cmd);
307 if (cmd == CMD_INIT) {
310 hKey = va_arg(argptr, HNDLE);
311 pinfo = va_arg(argptr,
void *);
312 channel = va_arg(argptr, INT);
313 flags = va_arg(argptr,
DWORD);
318 info = va_arg(argptr,
void *);
322 status = FE_ERR_DISABLED;
333 channel = va_arg(argptr, INT);
334 value = (float) va_arg(argptr,
double);
339 channel = va_arg(argptr, INT);
340 value = (float) va_arg(argptr,
double);
345 channel = va_arg(argptr, INT);
346 label = va_arg(argptr,
char *);
351 channel = va_arg(argptr, INT);
352 pvalue = va_arg(argptr,
float *);
357 channel = va_arg(argptr, INT);
358 pvalue = va_arg(argptr,
float *);
370 cm_msg(MLOG,
"",
"--epics_ca()");