1 /*
2 * Copyright (c) 2012-2013, Texas Instruments Incorporated
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * * Neither the name of Texas Instruments Incorporated nor the names of
17 * its contributors may be used to endorse or promote products derived
18 * from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32 /*
33 * ======== NotifyDriverCirc.xs ================
34 */
36 var NotifyDriverCirc = null;
37 var MultiProc = null;
38 var Notify = null;
39 var Ipc = null;
40 var Cache = null;
41 var Memory = null;
42 var SharedRegion = null;
43 var Timestamp = null;
45 /*
46 * ======== module$use ========
47 */
48 function module$use()
49 {
50 NotifyDriverCirc = this;
51 MultiProc = xdc.useModule("ti.sdo.utils.MultiProc");
52 Notify = xdc.useModule("ti.sdo.ipc.Notify");
53 Ipc = xdc.useModule("ti.sdo.ipc.Ipc");
54 SharedRegion = xdc.useModule("ti.sdo.ipc.SharedRegion");
55 Cache = xdc.useModule("ti.sysbios.hal.Cache");
56 Timestamp = xdc.useModule("xdc.runtime.Timestamp");
58 if (NotifyDriverCirc.InterruptProxy == null) {
59 var Settings = xdc.module("ti.sdo.ipc.family.Settings");
60 var interruptDelegate = Settings.getDefaultInterruptDelegate();
61 NotifyDriverCirc.InterruptProxy = xdc.useModule(interruptDelegate);
62 }
63 }
65 /*
66 * ======== module$static$init ========
67 */
68 function module$static$init(mod, params)
69 {
70 NotifyDriverCirc.maxIndex = NotifyDriverCirc.numMsgs - 1;
71 NotifyDriverCirc.modIndex = NotifyDriverCirc.numMsgs / 4;
72 }
74 /*
75 *************************************************************************
76 * ROV View functions
77 *************************************************************************
78 */
80 /*
81 * ======== viewInitBasic ========
82 */
83 function viewInitBasic(view, obj)
84 {
85 var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
86 var modCfg =
87 Program.getModuleConfig('ti.sdo.ipc.notifyDrivers.NotifyDriverCirc');
89 /* view.remoteProcName */
90 try {
91 view.remoteProcName = MultiProc.getName$view(obj.remoteProcId);
92 }
93 catch(e) {
94 Program.displayError(view, 'remoteProcName',
95 "Problem retrieving proc name: " + e);
96 }
98 /* view obj information */
99 view.cacheEnabled = obj.cacheEnabled;
100 view.bufSize = modCfg.numMsgs;
101 view.spinCount = obj.spinCount;
102 view.maxSpinWait = obj.spinWaitTime;;
103 }
105 /*
106 * ======== getEventData ========
107 * Helper function for use within viewInitData
108 */
109 function getEventData(view, obj, bufferPtr, putIndex, getIndex)
110 {
111 var NotifyDriverCirc =
112 xdc.useModule('ti.sdo.ipc.notifyDrivers.NotifyDriverCirc');
113 var modCfg =
114 Program.getModuleConfig('ti.sdo.ipc.notifyDrivers.NotifyDriverCirc');
116 if (bufferPtr == obj.putBuffer) {
117 var bufferName = "put";
118 }
119 else {
120 var bufferName = "get";
121 }
123 try {
124 var putBuffer = Program.fetchArray(obj.putBuffer$fetchDesc,
125 bufferPtr,
126 modCfg.numMsgs);
127 }
128 catch(e) {
129 throw (new Error("Error fetching putBuffer struct from shared memory"));
130 }
132 var i = getIndex;
134 while (i != putIndex) {
135 /* The event is registered */
136 var elem = Program.newViewStruct(
137 'ti.sdo.ipc.notifyDrivers.NotifyDriverCirc',
138 'Events');
140 elem.index = i;
141 elem.buffer = bufferName;
142 elem.addr = utils.toHex(putBuffer[i].$addr);
143 elem.eventId = putBuffer[i].eventid;
144 elem.payload = utils.toHex(putBuffer[i].payload);
146 /* Create a new row in the instance data view */
147 view.elements.$add(elem);
149 i++;
150 }
151 }
154 /*
155 * ======== viewInitData ========
156 * Instance data view.
157 */
158 function viewInitData(view, obj)
159 {
160 var Program = xdc.useModule('xdc.rov.Program');
161 var ScalarStructs = xdc.useModule('xdc.rov.support.ScalarStructs');
162 var MultiProc = xdc.useModule('ti.sdo.utils.MultiProc');
164 try {
165 var notifyObj = Program.scanHandleView('ti.sdo.ipc.Notify',
166 obj.notifyHandle, 'Basic');
167 }
168 catch (e) {
169 throw (new Error("Error fetching Notify instance view"));
170 }
172 /* Display the instance label in the tree */
173 view.label = "remoteProcId = " + obj.remoteProcId + " lineId = " +
174 notifyObj.lineId;
176 /* Fetch put/get index's */
177 try {
178 var putWriteIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
179 obj.putWriteIndex);
180 }
181 catch(e) {
182 throw (new Error("Error fetching putWriteIndex struct from shared memory"));
183 }
185 try {
186 var putReadIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
187 obj.putReadIndex);
188 }
189 catch(e) {
190 throw (new Error("Error fetching putReadIndex struct from shared memory"));
191 }
193 try {
194 var getWriteIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
195 obj.getWriteIndex);
196 }
197 catch(e) {
198 throw (new Error("Error fetching getWriteIndex struct from shared memory"));
199 }
201 try {
202 var getReadIndex = Program.fetchStruct(ScalarStructs.S_Bits32$fetchDesc,
203 obj.getReadIndex);
204 }
205 catch(e) {
206 throw (new Error("Error fetching getReadIndex struct from shared memory"));
207 }
209 /* Get event data for the put buffer */
210 getEventData(view, obj, obj.putBuffer, putWriteIndex.elem, putReadIndex.elem);
212 /* Get event data for the get buffer */
213 getEventData(view, obj, obj.getBuffer, getWriteIndex.elem, getReadIndex.elem);
215 }