1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
32 33 34 35
36
37 import xdc.rov.ViewInfo;
38
39 import ti.sysbios.knl.Semaphore;
40
41 /*!
42 * ======== SyncSem ========
43 * Implements ISyncs using semaphores.
44 *
45 * Module that implements {@link xdc.runtime.knl.ISync} using
46 * {@link ti.sysbios.knl.Semaphore}
47 *
48 * This module uses {@link ti.sysbios.knl.Semaphore#pend} to implement
49 * {@link xdc.runtime.knl.ISync#wait} and {@link ti.sysbios.knl.Semaphore#post}
50 * to implement {@link xdc.runtime.knl.ISync#signal}.
51 *
52 * Modules like {@link ti.sdo.io.Stream} use an ISync.Handle for
53 * selecting the synchronization mechanism. This allows Stream to be
54 * independent of the synchronization mechanism.
55 *
56 * An instance of SyncSem requires a Semaphore.Handle. When given a null
57 * Semaphore.Handle, SynSem will create a Semaphore for its use. Note that
58 * the underlying Semaphore has to be binary in nature and initialized as
59 * being unavailable.
60 */
61
62 @InstanceFinalize
63 @InstanceInitError
64
65 module SyncSem inherits xdc.runtime.knl.ISync
66 {
67
68 /*!
69 * ======== BasicView ========
70 * @_nodoc
71 */
72 metaonly struct BasicView {
73 String label;
74 String SemaphoreHandle;
75 String pendedTasks[];
76 }
77
78 /*!
79 * ======== rovViewInfo ========
80 * @_nodoc
81 */
82 @Facet
83 metaonly config ViewInfo.Instance rovViewInfo =
84 ViewInfo.create({
85 viewMap: [
86 ['Basic', {type: ViewInfo.INSTANCE, viewInitFxn: 'viewInitBasic', structName: 'BasicView'}],
87 ]
88 });
89
90 instance:
91
92 /*!
93 * Semaphore handle to be used. When Semaphore.Handle is null SyncSem
94 * will create a Semaphore instance.
95 */
96 config Semaphore.Handle sem = null;
97
98 internal:
99
100
101 struct Instance_State {
102 Bool userSem;
103 Semaphore.Handle sem;
104 };
105
106 }