Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
sequencer-2-2
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Jira
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
epics-modules
sequencer-2-2
Commits
b3a9a7f2
Commit
b3a9a7f2
authored
11 years ago
by
benjamin.franksen
Browse files
Options
Downloads
Patches
Plain Diff
renamed EV_ID to EF_ID, added seq_efInit for internal use
parent
f01ad7d9
No related branches found
No related tags found
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
src/seq/seqCom.h
+7
-6
7 additions, 6 deletions
src/seq/seqCom.h
src/seq/seqPvt.h
+2
-2
2 additions, 2 deletions
src/seq/seqPvt.h
src/seq/seq_if.c
+25
-11
25 additions, 11 deletions
src/seq/seq_if.c
src/seq/seq_snc.h
+3
-1
3 additions, 1 deletion
src/seq/seq_snc.h
src/seq/seq_task.c
+1
-1
1 addition, 1 deletion
src/seq/seq_task.c
with
38 additions
and
21 deletions
src/seq/seqCom.h
+
7
−
6
View file @
b3a9a7f2
...
...
@@ -55,7 +55,7 @@ typedef struct _seq_vars SEQ_VARS; /* struct defined in generated code */
typedef
char
string
[
MAX_STRING_SIZE
];
/* representation of SNL string type */
/* these typedefs make the code more self documenting */
typedef
unsigned
E
V
_ID
;
/* identifier for an event */
typedef
unsigned
E
F
_ID
;
/* identifier for an event */
typedef
unsigned
CH_ID
;
/* identifier for a pv */
typedef
int
seqBool
;
...
...
@@ -68,10 +68,10 @@ typedef struct seqProgram seqProgram; /* struct defined in generated code */
*/
/* event flag operations */
epicsShareFunc
void
seq_efSet
(
SS_ID
,
E
V
_ID
);
epicsShareFunc
seqBool
seq_efTest
(
SS_ID
,
E
V
_ID
);
epicsShareFunc
seqBool
seq_efClear
(
SS_ID
,
E
V
_ID
);
epicsShareFunc
seqBool
seq_efTestAndClear
(
SS_ID
,
E
V
_ID
);
epicsShareFunc
void
seq_efSet
(
SS_ID
,
E
F
_ID
);
epicsShareFunc
seqBool
seq_efTest
(
SS_ID
,
E
F
_ID
);
epicsShareFunc
seqBool
seq_efClear
(
SS_ID
,
E
F
_ID
);
epicsShareFunc
seqBool
seq_efTestAndClear
(
SS_ID
,
E
F
_ID
);
/* pv operations */
epicsShareFunc
pvStat
seq_pvGet
(
SS_ID
,
CH_ID
,
enum
compType
,
double
tmo
);
epicsShareFunc
pvStat
seq_pvGetMultiple
(
SS_ID
,
CH_ID
,
...
...
@@ -89,7 +89,7 @@ epicsShareFunc void seq_pvGetCancel(SS_ID, CH_ID, unsigned);
epicsShareFunc
void
seq_pvPutCancel
(
SS_ID
,
CH_ID
,
unsigned
);
epicsShareFunc
pvStat
seq_pvAssign
(
SS_ID
,
CH_ID
,
const
char
*
);
epicsShareFunc
pvStat
seq_pvMonitor
(
SS_ID
,
CH_ID
,
unsigned
);
epicsShareFunc
void
seq_pvSync
(
SS_ID
,
CH_ID
,
unsigned
,
E
V
_ID
);
epicsShareFunc
void
seq_pvSync
(
SS_ID
,
CH_ID
,
unsigned
,
E
F
_ID
);
epicsShareFunc
pvStat
seq_pvStopMonitor
(
SS_ID
,
CH_ID
,
unsigned
);
/* pv info */
epicsShareFunc
char
*
seq_pvName
(
SS_ID
,
CH_ID
);
...
...
@@ -132,6 +132,7 @@ epicsShareFunc epicsThreadId seq(seqProgram *, const char *, unsigned);
#define USER_VAR SEQ_VARS
#define UserVar _seq_vars
#define VAR_ID CH_ID
#define EV_ID EF_ID
#define seq_pvFreeQ seq_pvFlushQ
#define DEFAULT_QUEUE_SIZE 100
/* number of elements */
...
...
This diff is collapsed.
Click to expand it.
src/seq/seqPvt.h
+
2
−
2
View file @
b3a9a7f2
...
...
@@ -94,7 +94,7 @@ struct channel
/* dynamic channel data (assigned at runtime) */
DBCHAN
*
dbch
;
/* channel assigned to a named db pv */
E
V
_ID
syncedTo
;
/* event flag id if synced */
E
F
_ID
syncedTo
;
/* event flag id if synced */
CHAN
*
nextSynced
;
/* next channel synced to same flag */
QUEUE
queue
;
/* queue if queued */
boolean
monitored
;
/* whether channel is monitored */
...
...
@@ -218,7 +218,7 @@ struct pvreq
void
sequencer
(
void
*
arg
);
void
ss_write_buffer
(
CHAN
*
ch
,
void
*
val
,
PVMETA
*
meta
,
boolean
dirtify
);
void
ss_read_buffer
(
SSCB
*
ss
,
CHAN
*
ch
,
boolean
dirty_only
);
void
ss_read_buffer_selective
(
PROG
*
sp
,
SSCB
*
ss
,
E
V
_ID
ev_flag
);
void
ss_read_buffer_selective
(
PROG
*
sp
,
SSCB
*
ss
,
E
F
_ID
ev_flag
);
void
ss_wakeup
(
PROG
*
sp
,
unsigned
eventNum
);
/* seq_mac.c */
...
...
This diff is collapsed.
Click to expand it.
src/seq/seq_if.c
+
25
−
11
View file @
b3a9a7f2
...
...
@@ -769,7 +769,7 @@ epicsShareFunc pvStat seq_pvStopMonitor(SS_ID ss, CH_ID chId, unsigned length)
* Synchronize pv with an event flag.
* ev_flag == 0 means unSync.
*/
epicsShareFunc
void
seq_pvSync
(
SS_ID
ss
,
CH_ID
chId
,
unsigned
length
,
E
V
_ID
new_ev_flag
)
epicsShareFunc
void
seq_pvSync
(
SS_ID
ss
,
CH_ID
chId
,
unsigned
length
,
E
F
_ID
new_ev_flag
)
{
PROG
*
sp
=
ss
->
prog
;
unsigned
i
;
...
...
@@ -780,7 +780,7 @@ epicsShareFunc void seq_pvSync(SS_ID ss, CH_ID chId, unsigned length, EV_ID new_
for
(
i
=
0
;
i
<
length
;
i
++
)
{
CHAN
*
this_ch
=
sp
->
chan
+
chId
+
i
;
E
V
_ID
old_ev_flag
=
this_ch
->
syncedTo
;
E
F
_ID
old_ev_flag
=
this_ch
->
syncedTo
;
if
(
old_ev_flag
!=
new_ev_flag
)
{
...
...
@@ -937,13 +937,12 @@ epicsShareFunc epicsTimeStamp seq_pvTimeStamp(SS_ID ss, CH_ID chId)
* Set an event flag, then wake up each state
* set that might be waiting on that event flag.
*/
epicsShareFunc
void
seq_efSet
(
SS_ID
ss
,
E
V
_ID
ev_flag
)
epicsShareFunc
void
seq_efSet
(
SS_ID
ss
,
E
F
_ID
ev_flag
)
{
PROG
*
sp
=
ss
->
prog
;
DEBUG
(
"efSet: sp=%p, ss=%p, ev_flag=%d
\n
"
,
sp
,
ss
,
ev_flag
);
assert
(
ev_flag
>
0
&&
ev_flag
<=
ss
->
prog
->
numEvFlags
);
DEBUG
(
"efSet: sp=%p, ev_flag=%d
\n
"
,
sp
,
ev_flag
);
assert
(
ev_flag
>
0
&&
ev_flag
<=
sp
->
numEvFlags
);
epicsMutexMustLock
(
sp
->
lock
);
...
...
@@ -956,10 +955,25 @@ epicsShareFunc void seq_efSet(SS_ID ss, EV_ID ev_flag)
epicsMutexUnlock
(
sp
->
lock
);
}
/*
* Initialize an event flag.
*/
epicsShareFunc
void
seq_efInit
(
PROG_ID
sp
,
EF_ID
ev_flag
,
unsigned
val
)
{
assert
(
ev_flag
>
0
&&
ev_flag
<=
sp
->
numEvFlags
);
epicsMutexMustLock
(
sp
->
lock
);
if
(
val
)
bitSet
(
sp
->
evFlags
,
ev_flag
);
else
bitClear
(
sp
->
evFlags
,
ev_flag
);
epicsMutexUnlock
(
sp
->
lock
);
}
/*
* Return whether event flag is set.
*/
epicsShareFunc
boolean
seq_efTest
(
SS_ID
ss
,
E
V
_ID
ev_flag
)
epicsShareFunc
boolean
seq_efTest
(
SS_ID
ss
,
E
F
_ID
ev_flag
)
/* event flag */
{
PROG
*
sp
=
ss
->
prog
;
...
...
@@ -983,7 +997,7 @@ epicsShareFunc boolean seq_efTest(SS_ID ss, EV_ID ev_flag)
/*
* Clear event flag.
*/
epicsShareFunc
boolean
seq_efClear
(
SS_ID
ss
,
E
V
_ID
ev_flag
)
epicsShareFunc
boolean
seq_efClear
(
SS_ID
ss
,
E
F
_ID
ev_flag
)
{
PROG
*
sp
=
ss
->
prog
;
boolean
isSet
;
...
...
@@ -1006,7 +1020,7 @@ epicsShareFunc boolean seq_efClear(SS_ID ss, EV_ID ev_flag)
* Atomically test event flag against outstanding events, then clear it
* and return whether it was set.
*/
epicsShareFunc
boolean
seq_efTestAndClear
(
SS_ID
ss
,
E
V
_ID
ev_flag
)
epicsShareFunc
boolean
seq_efTestAndClear
(
SS_ID
ss
,
E
F
_ID
ev_flag
)
{
PROG
*
sp
=
ss
->
prog
;
boolean
isSet
;
...
...
@@ -1063,7 +1077,7 @@ epicsShareFunc boolean seq_pvGetQ(SS_ID ss, CH_ID chId)
PROG
*
sp
=
ss
->
prog
;
CHAN
*
ch
=
sp
->
chan
+
chId
;
void
*
var
=
valPtr
(
ch
,
ss
);
E
V
_ID
ev_flag
=
ch
->
syncedTo
;
E
F
_ID
ev_flag
=
ch
->
syncedTo
;
PVMETA
*
meta
=
metaPtr
(
ch
,
ss
);
boolean
was_empty
;
struct
getq_cp_arg
arg
=
{
ch
,
var
,
meta
};
...
...
@@ -1100,7 +1114,7 @@ epicsShareFunc void seq_pvFlushQ(SS_ID ss, CH_ID chId)
{
PROG
*
sp
=
ss
->
prog
;
CHAN
*
ch
=
sp
->
chan
+
chId
;
E
V
_ID
ev_flag
=
ch
->
syncedTo
;
E
F
_ID
ev_flag
=
ch
->
syncedTo
;
QUEUE
queue
=
ch
->
queue
;
DEBUG
(
"pvFlushQ: pv name=%s, count=%d
\n
"
,
...
...
This diff is collapsed.
Click to expand it.
src/seq/seq_snc.h
+
3
−
1
View file @
b3a9a7f2
...
...
@@ -85,7 +85,7 @@ struct seqChan
enum
prim_type_tag
varType
;
/* variable (base) type */
unsigned
count
;
/* element count for arrays */
unsigned
eventNum
;
/* event number for this channel */
E
V
_ID
efId
;
/* event flag id if synced */
E
F
_ID
efId
;
/* event flag id if synced */
seqBool
monitored
;
/* whether channel should be monitored */
unsigned
queueSize
;
/* syncQ queue size (0=not queued) */
unsigned
queueIndex
;
/* syncQ queue index */
...
...
@@ -130,6 +130,8 @@ struct seqProgram
unsigned
numQueues
;
/* number of syncQ queues */
};
epicsShareFunc
void
seq_efInit
(
PROG_ID
sp
,
EF_ID
ev_flag
,
unsigned
val
);
/* called by generated main and registrar routines */
epicsShareFunc
void
seqRegisterSequencerProgram
(
seqProgram
*
p
);
epicsShareFunc
void
seqRegisterSequencerCommands
(
void
);
...
...
This diff is collapsed.
Click to expand it.
src/seq/seq_task.c
+
1
−
1
View file @
b3a9a7f2
...
...
@@ -197,7 +197,7 @@ static void ss_read_all_buffer(PROG *sp, SSCB *ss)
* NOTE: calling code must take sp->lock, as we traverse
* the list of channels synced to this event flag.
*/
void
ss_read_buffer_selective
(
PROG
*
sp
,
SSCB
*
ss
,
E
V
_ID
ev_flag
)
void
ss_read_buffer_selective
(
PROG
*
sp
,
SSCB
*
ss
,
E
F
_ID
ev_flag
)
{
CHAN
*
ch
=
sp
->
syncedChans
[
ev_flag
];
while
(
ch
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment