/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/SRAMManager/SRAMPageManager/SM_SRAMPageManager_op.c
ViewVC logotype

Contents of /quicklook/dataToXML/Data/compilationInfo/src/SRAMManager/SRAMPageManager/SM_SRAMPageManager_op.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Tue Apr 25 09:00:21 2006 UTC (19 years, 2 months ago) by kusanagi
Branch: MAIN
CVS Tags: dataToXML1_02/01, dataToXML1_02/00, dataToXML1_03/00, dataToXML1_03/01, dataToXML1_00/00, firstRelease, dataToXML1_01/00, dataToXML1_03_02, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
These program extract in an XML format the info contained into the ROOT files generated by YODA from the PAMELA data. To visualize the XML files in a more human readable format a collection of XSL files are given in the Data subfolder.

1 /****************************************************************************
2 /* F i l e D a t a
3 /*
4 /* Module : SRAMManager
5 /* C.I. No. :
6 /* $Revision: 1.55 $
7 /* $Date: 2005/03/20 18:30:38 $
8 /* Belonging to :
9 /* :
10 /* $RCSfile: SM_SRAMPageManager_op.c,v $
11 /* Program Type :
12 /* Sub-modules :
13 /*
14 /****************************************************************************
15 /* S W D e v e l o p m e n t E n v i r o n m e n t
16 /*
17 /* Host system :
18 /* SW Compiler :
19 /* $Author: sebastiani $
20 /* :
21 /****************************************************************************
22 /* U p d a t i n g
23 /*
24 /* $Log: SM_SRAMPageManager_op.c,v $
25 /* Revision 1.55 2005/03/20 18:30:38 sebastiani
26 /* *** empty log message ***
27 /*
28 /* Revision 1.54 2005/02/21 08:58:29 sebastiani
29 /* all log comments completed
30 /*
31 /* Revision 1.53 2005/02/19 10:20:16 sebastiani
32 /* accept all MCMC in all mode
33 /*
34 /* Revision 1.52 2005/01/26 18:46:56 sebastiani
35 /* new bug fixes for WS
36 /*
37 /* Revision 1.51 2005/01/07 15:42:53 sebastiani
38 /* add exp 64 mode delay patch
39 /*
40 /* Revision 1.50 2004/11/19 15:14:55 sebastiani
41 /* PRH_EXTERN_{VAR,ARR,TABLE} removed and put them on the autogenerated parameter heeader file
42 /*
43 /* Revision 1.49 2004/11/05 16:43:08 sebastiani
44 /* *** empty log message ***
45 /*
46 /* Revision 1.48 2004/09/17 15:01:00 faber
47 /* LU_INFN_LOG flags fixing
48 /*
49 /* Revision 1.47 2004/09/09 14:53:58 sebastiani
50 /* fix prepare page to send cmd
51 /*
52 /* Revision 1.46 2004/08/26 16:54:41 sebastiani
53 /* version work fine
54 /*
55 /* Revision 1.45 2004/08/13 14:42:22 sebastiani
56 /* Add Neutron detector!
57 /* need add file ND_READ_ACQ.dat on site ...
58 /*
59 /* Revision 1.44 2004/08/09 08:30:29 sebastiani
60 /* fix calo alarm procedure
61 /*
62 /* Revision 1.43 2004/08/02 12:17:26 sebastiani
63 /* fix little
64 /*
65 /* Revision 1.42 2004/07/27 17:30:17 faber
66 /* OBT can be now in second or milliseconds, depending of the situazion.
67 /* OBT_s is used for FM compatibility, OBT_ms basically for MM infos
68 /*
69 /* Revision 1.41 2004/07/27 13:27:18 sebastiani
70 /* SM_EXPERIMENT cancelled
71 /*
72 /* Revision 1.40 2004/07/21 14:09:22 sebastiani
73 /* Fix PacketCounter
74 /*
75 /* Revision 1.39 2004/07/16 16:13:05 sebastiani
76 /* important fix
77 /*
78 /* Revision 1.38 2004/07/15 13:46:01 sebastiani
79 /* fix some bugs
80 /*
81 /* Revision 1.37 2004/06/15 08:25:01 sebastiani
82 /* *** empty log message ***
83 /*
84 /* Revision 1.36 2004/06/04 14:24:40 sebastiani
85 /* clear some files
86 /*
87 /* Revision 1.35 2004/06/01 16:41:24 sebastiani
88 /* EventReceive ANY
89 /*
90 /* Revision 1.34 2004/05/26 17:48:30 sebastiani
91 /* *** empty log message ***
92 /*
93 /* Revision 1.33 2004/05/25 14:07:18 faber
94 /* *** empty log message ***
95 /*
96 /* Revision 1.32 2004/05/24 10:25:28 faber
97 /* OS_EVENT_UNCOMPLETED_CMDIF introduced
98 /*
99 /* Revision 1.31 2004/05/20 12:51:58 sebastiani
100 /* nee
101 /*
102 /* Revision 1.30 2004/05/20 09:04:23 sebastiani
103 /* ok
104 /*
105 /* Revision 1.29 2004/05/19 08:45:05 sebastiani
106 /* fix bug
107 /*
108 /* Revision 1.28 2004/05/10 12:59:17 faber
109 /* __FILEID__ right value fixed: many .c files had the wrong value!
110 /*
111 /* Revision 1.27 2004/04/29 16:13:59 alfarano
112 /* update cal
113 /*
114 /* Revision 1.25 2004/02/13 10:11:30 alfarano
115 /* calorimeter initialization func and more
116 /*
117 /* Revision 1.24 2004/02/05 15:38:50 sebastiani
118 /* PM_WAIT_TRIGEVENT managed as a parametrized macro
119 /*
120 /* Revision 1.23 2004/02/05 14:45:13 sebastiani
121 /* unlock acq in PageWasSaved DAQ_SETUP case
122 /*
123 /* Revision 1.22 2004/02/02 08:34:40 sebastiani
124 /* change Macro to write packet header
125 /*
126 /* Revision 1.21 2004/01/22 08:58:54 sebastiani
127 /* WAIT time introduced between DAQ and CMD/IF DMA programming
128 /*
129 /* Revision 1.20 2004/01/13 15:07:38 tassa
130 /* add send forced idaq cmd!
131 /*
132 /* Revision 1.19 2003/12/30 14:22:44 sebastiani
133 /* change crc function: 8 => 16
134 /*
135 /* Revision 1.18 2003/11/18 09:01:15 alfarano
136 /* laben patch fixes some problems
137 /*
138 /* Revision 1.17 2003/11/13 16:15:06 sebastiani
139 /* PM_opUnLockAcquisition added to SM_DAQSETUP in PageWasSaved, as suggested in the new laben versione released in these days
140 /*
141 /* Revision 1.16 2003/11/10 12:13:25 sebastiani
142 /* PM_pi_SetPktType and SM_PktType global variable introdused
143 /*
144 /* Revision 1.15 2003/10/31 17:21:29 sebastiani
145 /* bug fix on read and write function in TM_TMTCManager: added busy flag control on each read & write
146 /* CRC functions updated in the SRAMPageManager
147 /*
148 /* Revision 1.14 2003/10/30 15:34:04 faber
149 /* CRC debug fixed 2
150 /*
151 /* Revision 1.13 2003/10/30 14:55:52 faber
152 /* CRC function debuggin (some fixes)
153 /*
154 /* Revision 1.12 2003/10/30 10:09:36 sebastiani
155 /* *** empty log message ***
156 /*
157 /* Revision 1.11 2003/10/29 17:41:48 sebastiani
158 /* *** empty log message ***
159 /*
160 /* Revision 1.10 2003/10/27 19:03:10 sebastiani
161 /* PM_WRITE_* macros introduced: new header format/management.
162 /* length,pktsize,crc
163 /*
164 /* Revision 1.9 2003/10/21 16:09:12 alfarano
165 /* LU_LOG_INFN replacement for all remaining original log functions
166 /*
167 /* Revision 1.8 2003/10/17 09:16:43 sebastiani
168 /* SKETCHBOARD_FREE event introduced
169 /*
170 /* Revision 1.7 2003/09/17 16:38:53 faber
171 /* PM_pi_ExpPageAvail() introduced
172 /*
173 /* Revision 1.6 2003/09/10 13:44:52 laben
174 /* delete reference to FILE2 ( new File System Model).
175 /*
176 /* Revision 1.5 2003/09/10 10:30:43 faber
177 /* -introduced:
178 /* void PM_pi_DisableStore_In_DataTimeOut(),
179 /* void PM_pi_EnableStore_In_DataTimeOut(),
180 /* UINT32 PM_pi_GetDataLength(SM_PAGEID page);
181 /* - fixed: Bug in PreparePage, EXP64 mode "one page only use".
182 /* the fixing consist of the subsitution
183 /* of the istruction
184 /* SM_SelectedPage <<= 2;
185 /* with
186 /* SM_SelectedPage += 4;
187 /*
188 /* Revision 1.4 2003/08/26 07:44:56 faber
189 /* events introduced
190 /*
191 /* Revision 1.3 2003/08/08 11:02:20 sebastiani
192 /* introduced SM_DIRECT mode
193 /*
194 /* Revision 1.2 2003/08/07 08:46:55 wizard
195 /* SIMULATOR bugfix ifdef/ifndef
196 /* SM_PktSize update bug fix in SM_op_PageHasData in order to fix the laben bug of SM_pi_GetPacket
197 /* introduced the notification to a task from the PageHasData
198 /*
199 /* Revision 1.1.1.1 2003/08/04 09:40:21 sebastiani
200 /* Imported sources laben rel. 19.06.2003 integrated with pam2
201 /*
202 /* Revision 1.21 2003/06/13 09:04:15 aurora
203 /* removed a debug comment
204 /*
205 /* Revision 1.20 2003/06/09 10:20:34 aurora
206 /* improved the management of data acquisition.
207 /* Fixed the dalay when copy the data in to ERC32 memory
208 /*
209 /* Revision 1.19 2003/05/12 16:05:20 aurora
210 /* fixed the last modify
211 /*
212 /* Revision 1.18 2003/05/12 15:48:24 aurora
213 /* Increase the lostpkt counter on ETO interrupt
214 /*
215 /* Revision 1.17 2003/04/29 13:31:34 aurora
216 /* management of page overrun every 64 Kbyte
217 /*
218 /* Revision 1.16 2003/03/24 11:06:11 aurora
219 /* management for interrupt on page overrun at 128KByte in DAQSetup mode
220 /*
221 /* Revision 1.15 2003/01/30 10:17:54 aurora
222 /* correct the routine for share HBUS
223 /*
224 /* Revision 1.14 2003/01/22 14:03:52 aurora
225 /* improved management of HBUS
226 /*
227 /* Revision 1.13 2002/11/14 09:55:02 zulia
228 /* correct the size of data send through CMD I/F
229 /* improved the management of ET ISR
230 /*
231 /* Revision 1.12 2002/10/17 10:08:21 zulia
232 /* fixed PIFReset
233 /*
234 /* Revision 1.11 2002/10/17 08:38:57 zulia
235 /* - added counters for distinguish the cause of lost packets
236 /* - added a flag (SM_EnableStoreET) for enable or disable the
237 /* storage of a packet when rises a ET
238 /* - fixed the clear of page_overrun interrupt
239 /*
240 /* Revision 1.10 2002/09/02 12:55:18 zulia
241 /* reset of PIF on boot
242 /*
243 /* Revision 1.9 2002/07/31 14:34:09 zulia
244 /* send data to CMD I/F after Event Trigger
245 /* set header to 12 Bytes
246 /* packet counter to 32 bits
247 /* provided interface for copy buffer from micro to PIF sram
248 /*
249 /* Revision 1.8 2002/06/25 09:17:03 zulia
250 /* Disable reset of packet counter after change state mode
251 /*
252 /* Revision 1.7 2002/06/19 08:25:31 zulia
253 /* added provided interface PM_pi_GetAndIncrPckCnt that
254 /* get and increase the packet counter
255 /*
256 /* Revision 1.6 2002/05/09 08:16:35 zulia
257 /* * acceptance release
258 /*
259 /*
260 /*****************************************************************************/
261
262
263 /*============================= Include File ================================*/
264
265 #include <src/INFN/LU_SourceFileID_INFN.h>
266 #define __FILEID__ _SM_SRAMPageManager_op__c
267 #include <src/INFN/PRH_ParamHandler_INFN.h>
268 #include <src/INFN/LU_LogUtility_INFN.h>
269 #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
270 LU_DECL_MASK();
271
272
273 #include <src/SRAMManager/SRAMPageManager/SM_SRAMPageManager_op.h>
274 #include <src/SRAMManager/SRAMPageManager/SM_SRAMPageManager_int.h>
275 #include <src/HKManager/HistoryArea/HA_HistoryArea_p.h>
276 #include <src/SRAMManager/SRAMDriver/SD_SRAMDriver_p.h>
277 #include <src/BasicSW/TimingInfo/TI_TimingInfo_p.h>
278 #include <src/FileManager/MMSUManager/FT_MMSUManager_p.h>
279 #include <src/INFN/CM_Common_INFN.h>
280 #include <src/INFN/HB_HKBuffer_INFN.h>
281
282 /*============================== local define ===============================*/
283
284
285
286 /*======================== Object Internal variables ========================*/
287
288 /*****************************************************************************/
289 /* @Variable: SM_AcqMode */
290 /* @Purpose : */
291 /* PIF Acquisition mode */
292 /* @@ */
293 /*****************************************************************************/
294 static SM_ACQMODE SM_AcqMode;
295
296 /*****************************************************************************/
297 /* @Variable: SM_EmptyPage */
298 /* @Purpose : */
299 /* Flag to mark a SRAM "page empty" after an EVENT T.O. */
300 /* @@ */
301 /*****************************************************************************/
302 static BOOL SM_EmptyPage;
303
304 /*****************************************************************************/
305 /* @Variable: SM_TrashFlag */
306 /* @Purpose : */
307 /* Flag to mark the use of the SRAM trash page */
308 /* @@ */
309 /*****************************************************************************/
310 //static BOOL SM_TrashFlag;
311
312 /*****************************************************************************/
313 /* @Variable: SM_SavingSkatchboard */
314 /* @Purpose : */
315 /* Flag to mark that the sketchboard page storage is in progress */
316 /* @@ */
317 /*****************************************************************************/
318 static BOOL SM_SavingSkatchboard;
319
320 /*****************************************************************************/
321 /* @Variable: SM_SelectedPage */
322 /* @Purpose : */
323 /* Current SRAM page used to hold incoming experiment packets */
324 /* @@ */
325 /*****************************************************************************/
326 static UINT32 SM_SelectedPage;
327
328 /*****************************************************************************/
329 /* @Variable: SM_PacketCounter */
330 /* @Purpose : */
331 /* Header packet counter */
332 /* @@ */
333 /*****************************************************************************/
334 static UINT32 SM_PacketCounter;
335
336 /*****************************************************************************/
337 /* @Variable: SM_LostPackets */
338 /* @Purpose : */
339 /* Lost packet counter */
340 /* @@ */
341 /*****************************************************************************/
342 static UINT32 SM_LostPackets;
343
344 /*****************************************************************************/
345 /* @Variable: SM_ETOLostPackets */
346 /* @Purpose : */
347 /* Lost packet counter due to ETO */
348 /* @@ */
349 /*****************************************************************************/
350 static UINT32 SM_ETOLostPackets;
351
352 /*****************************************************************************/
353 /* @Variable: SM_MMSULostPackets */
354 /* @Purpose : */
355 /* Lost packet counter */
356 /* @@ */
357 /*****************************************************************************/
358 static UINT32 SM_MMSULostPackets;
359
360 /*****************************************************************************/
361 /* @Variable: SM_ERC32LostPackets */
362 /* @Purpose : */
363 /* Counter for packets lost during the transfer in ERC32 memory */
364 /* @@ */
365 /*****************************************************************************/
366 static UINT32 SM_ERC32LostPackets;
367
368 /*****************************************************************************/
369 /* @Variable: SM_LostTriggers */
370 /* @Purpose : */
371 /* Lost Event Trigger counter */
372 /* @@ */
373 /*****************************************************************************/
374 static UINT32 SM_LostTriggers;
375
376 /*****************************************************************************/
377 /* @Variable: SM_ExpPageCounter */
378 /* @Purpose : */
379 /* Counter of the free SRAM pages for the experiment pkts caching */
380 /* @@ */
381 /*****************************************************************************/
382 static UINT32 SM_ExpPageCounter;
383
384 /*****************************************************************************/
385 /* @Variable: SM_PktRamCpyFlag */
386 /* @Purpose : */
387 /* Experiment pkt RAM copy flag */
388 /* @@ */
389 /*****************************************************************************/
390 static BOOL SM_PktRamCpyFlag;
391
392 /*****************************************************************************/
393 /* @Variable: SM_PktSize */
394 /* @Purpose : */
395 /* Size of the last recieved packet */
396 /* @@ */
397 /*****************************************************************************/
398 static UINT32 SM_PktSize;
399
400 /*****************************************************************************/
401 /* @Variable: SM_PktStatus */
402 /* @Purpose : */
403 /* Status of the last recieved packet */
404 /* @@ */
405 /*****************************************************************************/
406 static SM_PKTSTAT SM_PktStatus;
407
408 /*****************************************************************************/
409 /* @Variable: SM_PktLock */
410 /* @Purpose : */
411 /* Flag used to avoid concurrency in R/W on PktBuf during exp. acquisition */
412 /* @@ */
413 /*****************************************************************************/
414 static BOOL SM_PktLock;
415
416 /*****************************************************************************/
417 /* @Variable: SM_PIFTrOk */
418 /* @Purpose : */
419 /* PIF Tranfer status flag */
420 /* @@ */
421 /*****************************************************************************/
422 static SD_TRANSFERSTAT SM_PIFTrOk;
423
424 /*****************************************************************************/
425 /* @Variable: SM_CalDataLenght[16] */
426 /* @Purpose : */
427 /* Number of data to write after ET for initialise intruments */
428 /* These values are significatives only for SM_CALEXPx pages */
429 /* @@ */
430 /*****************************************************************************/
431 static UINT32 SM_CalDataLenght[16];
432
433 /*****************************************************************************/
434 /* @Variable: SM_CalPageSelected */
435 /* @Purpose : */
436 /* page used for initialise instruments */
437 /* @@ */
438 /*****************************************************************************/
439 static SM_PAGEID SM_CalPageSelected;
440
441 /*****************************************************************************/
442 /* @Variable: SM_PacketStoreIsOngoing */
443 /* @Purpose : */
444 /* Flag to mark that the store of scientific packet is ongoing */
445 /* @@ */
446 /*****************************************************************************/
447 static BOOL SM_PacketStoreIsOngoing;
448 static BOOL SM_ERC32IsOngoing;
449
450 /*****************************************************************************/
451 /* @Variable: SM_HBUSIsLocked */
452 /* @Purpose : */
453 /* Flag to mark that HBUS is in use from an other function */
454 /* @@ */
455 /*****************************************************************************/
456 static BOOL SM_HBUSIsLocked;
457
458 /*****************************************************************************/
459 /* @Variable: SM_NotifyTask (INFN) */
460 /* @Purpose : */
461 /* Task to notify the Event to */
462 /* @@ */
463 /*****************************************************************************/
464 static UINT32 SM_NotifyTask_PKT_READY;
465 static UINT32 SM_NotifyTask_SKETCHBOARD_FREE;
466
467
468 /*****************************************************************************/
469 /* @Variable: SM_EnableStore */
470 /* @Purpose : */
471 /* Enable/Disable the storing of the packed in the File Sistem (FILE1) */
472 /* @@ */
473 /*****************************************************************************/
474 static BOOL SM_EnableStore;
475
476 /*****************************************************************************/
477 /* @Variable: SM_PktType */
478 /* @Purpose : */
479 /* Enable/Disable the storing of the packed in the File Sistem (FILE1) */
480 /* @@ */
481 /*****************************************************************************/
482 static BOOL SM_PktType;
483
484
485
486 static TI_TIME SM_exp64_t1=0;
487
488
489
490 /*****************************************************************************/
491 /*===== S R A M P a g e M a n a g e r P R O V I D E D I N T E R F A C E ==*/
492
493 /*****************************************************************************/
494 /* @Function: SM_opSRAMPageManagerInit */
495 /* @Purpose : */
496 /* This function initializes the SRAM Page Manager object (its variables). */
497 /* */
498 /* @@ */
499 /* @Parameter Name @Mode @Description */
500 /* SM_EXITCODE OUT Return code */
501 /* RstPktCounter IN Flag used to enable the lost packets */
502 /* counter reset */
503 /* @@ */
504 /*****************************************************************************/
505
506 SM_EXITCODE PM_opSRAMPageManagerInit(BOOL RstPktCounter)
507 {
508 SM_EXITCODE status = SM_SUCCESS;
509 unsigned int intLevel;
510 unsigned int i;
511
512 /* Init the lost packet counter only at startup */
513 if(RstPktCounter)
514 {
515 SD_piPIFReset();
516 SM_LostPackets = 0;
517 SM_ETOLostPackets = 0;
518 SM_MMSULostPackets = 0;
519 SM_ERC32LostPackets = 0;
520 SM_LostTriggers = 0;
521 SM_PacketCounter = 0;
522 /* Init the timeout timers */
523 SD_piSetEventTimeout(SM_ETO_TICS);
524 SD_piSetDataTimeout(SM_DTO_TICS);
525 /* Init the Header length registers */
526 SD_piSetDataHeaderLength(SM_PKTHEADER_LEN);
527 SD_piSetCalibrationHeaderLength(SM_PKTHEADER_LEN);
528 /* Init the length of data in all calibration pages */
529 for (i = 0; i < SM_MAXPAGE; SM_CalDataLenght[i++] = 0);
530 /* select first page for initialise intruments */
531 SM_CalPageSelected = SM_CALEXP0;
532 }
533
534 /* Mask all interrupt related to PIF acquisition */
535 OS_piInterDisable(&intLevel);
536 SD_piMaskInt(SD_EVT_TO | SD_DATA_TO | SD_PAGE_OVR);
537 OS_piInterEnable(intLevel);
538 ERC32_Mask_interrupt(ETIRQ);
539 /* Set the acquisition mode to IDLE */
540 FT_piChangeAcqMode(SM_IDLE);
541 SM_ExpPageCounter = DIRECTPAGES;
542 // console_outbyte_polled( 0, 'J' );
543 // console_outbyte_polled( 0, '\n' );
544 SM_PktLock = FALSE;
545 SM_PktRamCpyFlag = FALSE;
546 SM_NotifyTask_PKT_READY = RM_INFN_TASK;
547 SM_NotifyTask_SKETCHBOARD_FREE = RM_INFN_TASK;
548 SM_PktType = 0;
549 SM_PIFTrOk = SD_TRANSFERFAIL;
550
551 // Skratchboard
552 SM_SavingSkatchboard = FALSE;
553
554 return (status);
555 }
556
557 /*****************************************************************************/
558 /* @MACRO: SM_WRITE_PACKET_HEADER */
559 /* @Purpose : */
560 /* Write in the PIF the header for an incaming event. Must be used only */
561 /* inside the PreparePage */
562 /* */
563 /* @@ */
564 /* @Parameter Name @Mode @Description */
565 /* @@ */
566 /*****************************************************************************/
567
568
569 static BYTE PM_WRITE_PKT_HEADER_Pkt_Header[SM_PKTHEADER_LEN];
570 static UINT32 PM_WRITE_PKT_HEADER_index;
571
572
573 #define PM_WRITE_PKT_HEADER_BYTE(byte) do { \
574 PM_WRITE_PKT_HEADER_Pkt_Header[PM_WRITE_PKT_HEADER_index]=(BYTE)(byte); \
575 SD_piWriteSRAM(PM_WRITE_PKT_HEADER_Pkt_Header[PM_WRITE_PKT_HEADER_index]); \
576 PM_WRITE_PKT_HEADER_index++; \
577 } while(0)
578
579 #define PM_INC_PKT_COUNTER() do { \
580 if(SM_EnableStore) \
581 SM_PacketCounter++; \
582 } while(0)
583
584 #define PM_WRITE_PKT_HEADER(page,pkt_size,crc) do { \
585 /* Retrive OBT */ \
586 TI_TIME obt; \
587 TI_piGetTimeInfo_ms(&obt); \
588 /* Set the SRAM R/W register to the first byte of the Cal page */ \
589 PM_WRITE_PKT_HEADER_index=0; \
590 SD_piSetSRAMRWAddress((UINT32)(page) * SM_SRAMPAGESIZE); \
591 /* The HBUS is locked by PM_opPreparePage */ \
592 PM_WRITE_PKT_HEADER_BYTE(PM_HEADER_1); \
593 PM_WRITE_PKT_HEADER_BYTE(PM_HEADER_2); \
594 PM_WRITE_PKT_HEADER_BYTE(PM_HEADER_3); \
595 /* write packet type */ \
596 PM_WRITE_PKT_HEADER_BYTE(SM_PktType | ((SM_PktStatus == SM_PKT_BAD)<<7) ); \
597 PM_WRITE_PKT_HEADER_BYTE(SM_PktType | ((SM_PktStatus == SM_PKT_BAD)<<7) ); \
598 /* Write the packet counter */ \
599 PM_WRITE_PKT_HEADER_BYTE(((SM_PacketCounter>>16) & 0x000000FF)); \
600 PM_WRITE_PKT_HEADER_BYTE(((SM_PacketCounter>>8 ) & 0x000000FF)); \
601 PM_WRITE_PKT_HEADER_BYTE(( SM_PacketCounter & 0x000000FF)); \
602 /* Write the OBT */ \
603 PM_WRITE_PKT_HEADER_BYTE(((obt>>24) & 0x000000FF)); \
604 PM_WRITE_PKT_HEADER_BYTE(((obt>>16) & 0x000000FF)); \
605 PM_WRITE_PKT_HEADER_BYTE(((obt>>8 ) & 0x000000FF)); \
606 PM_WRITE_PKT_HEADER_BYTE(( obt & 0x000000FF)); \
607 /* Write the pkt lenght */ \
608 PM_WRITE_PKT_HEADER_BYTE((( (pkt_size)-SM_PKTHEADER_LEN)>>16) & 0x000000FF); \
609 PM_WRITE_PKT_HEADER_BYTE((( (pkt_size)-SM_PKTHEADER_LEN)>>8 ) & 0x000000FF); \
610 PM_WRITE_PKT_HEADER_BYTE( ( (pkt_size)-SM_PKTHEADER_LEN) & 0x000000FF); \
611 crc=CM_Compute_CRC16(0,&PM_WRITE_PKT_HEADER_Pkt_Header[0],PM_WRITE_PKT_HEADER_index); \
612 /*crc=CM_Compute_CRC8_8(0,&PM_WRITE_PKT_HEADER_Pkt_Header[0],PM_WRITE_PKT_HEADER_index); */\
613 PM_WRITE_PKT_HEADER_BYTE(crc & 0xff); \
614 PM_WRITE_PKT_HEADER_index=0; \
615 } while(0)
616
617
618
619 /********************************************************g*********************/
620 /* @Function: SM_opPreparePage */
621 /* @Purpose : */
622 /* The function selects a new SRAM page to hold the new data coming from */
623 /* the DAQ I/F and write the page header. */
624 /* */
625 /* @@ */
626 /* @Parameter Name @Mode @Description */
627 /* @@ */
628 /*****************************************************************************/
629
630 status_code PM_opPreparePage(BOOL daq_dmain)
631 {
632 #ifdef SIMULATOR
633 return;
634 #else
635 unsigned int intLevel;
636 status_code status=CM_RC_SUCCESSFUL;
637
638 /* Mask any further Event Trigger */
639 ERC32_Mask_interrupt(ETIRQ);
640
641 #if 0
642 {
643 static TI_TIME SM_exp64_t0=0;
644 TI_TIME delay=0;
645 TI_piGetTimeInfo_ms(&SM_exp64_t0);
646 if(SM_exp64_t0>SM_exp64_t1){
647 if((SM_exp64_t0-SM_exp64_t1)<PRH_VAR_EXP64_MODE_DELAY)
648 delay=SM_exp64_t1+PRH_VAR_EXP64_MODE_DELAY-SM_exp64_t0;
649 }
650 else
651 /* Timing info is over 41 uptime ! days :) */
652 delay=PRH_VAR_EXP64_MODE_DELAY;
653 if(delay)
654 OS_piTaskSuspend(delay);
655 SM_exp64_t1=SM_exp64_t0;
656 }
657 #endif
658
659 if ((PM_opLockHBUS() == SM_SUCCESS))
660 {
661 OS_piInterDisable(&intLevel);
662 switch(SM_AcqMode)
663 {
664 case SM_DIRECT:
665 case SM_DAQSETUP: {
666 if(SM_ExpPageCounter > 0 || !daq_dmain) {
667
668 if (SM_CalDataLenght[SM_CalPageSelected] > 0)
669 {
670 /* Set the selected SRAM page where take data for */
671 /* initialise instrument */
672 SD_piSetCMDBUSReadPage(SM_CalPageSelected);
673 /* Set end of data of selected page */
674 SD_piSetCMDBUSReadParams(
675 (UINT32)(SM_CalPageSelected * SM_SRAMPAGESIZE +
676 SM_CalDataLenght[SM_CalPageSelected]-1));
677
678 /* Start the acquisition and timeouts */
679 if (daq_dmain)
680 {
681 SM_ExpPageCounter--;
682 /* Set the fix SRAM page to hold the incoming pkt */
683 SD_piSetDAQWritePage(SM_CALPAGE);
684
685 SD_piTrigCalibrationEvent();
686 }
687 /* start transfer to CMD I/F*/
688 SD_piStartTransferToCMD();
689 //console_outbyte_polled( 0, 'X' );
690 //console_outbyte_polled( 0, '\n' );
691 }
692 else{
693 status=CM_RC_CALPAGEEMPTY;
694 }
695 }else{
696 status=CM_RC_NOPAGEAVAILABLE;
697 }
698 } break;
699 #if 0
700 /* /\* Actions performed after an ET in Experiment acq. mode *\/ */
701 /* case SM_EXPERIMENT: */
702 /* { */
703 /* /\* Check if a new SRAM cache page has to be selected: *\/ */
704 /* /\* - The last acquisition was good and need to be saved *\/ */
705 /* /\* - In the last acquisition the trash page was selected *\/ */
706 /* if((SM_PIFTrOk == TRUE && */
707 /* SM_EmptyPage == FALSE ) || */
708 /* SM_TrashFlag == TRUE) */
709 /* { */
710 /* /\* Check if there is any free SRAM page left *\/ */
711 /* if(SM_ExpPageCounter > 0) */
712 /* { */
713 /* SM_ExpPageCounter--; */
714 /* /\* Select the next SRAM page number in a circular buffer of *\/ */
715 /* /\* EXPPAGES pages *\/ */
716 /* SM_SelectedPage++; */
717 /* SM_SelectedPage &= 0x00000007; */
718 /* /\* Set the SRAM page to hold the incoming pkt *\/ */
719 /* SD_piSetDAQWritePage(SM_SelectedPage); */
720 /* /\* The selected page is not the trash one *\/ */
721 /* SM_TrashFlag = FALSE; */
722 /* } */
723 /* else */
724 /* { */
725 /* /\* No more free cache SRAM page left. The Trash one must be selected *\/ */
726 /* SD_piSetDAQWritePage(TRASHPAGE); */
727 /* SM_TrashFlag = TRUE; */
728 /* } */
729 /* } */
730 /* /\* If the last acquisition was not good then reselect the same SRAM page *\/ */
731 /* else */
732 /* SD_piSetDAQWritePage(SM_SelectedPage); */
733
734 /* if (SM_CalDataLenght[SM_CalPageSelected] > 0) */
735 /* { */
736
737 /* /\* Set the selected SRAM page where take data for *\/ */
738 /* /\* initialise instrument *\/ */
739 /* SD_piSetCMDBUSReadPage(SM_CalPageSelected); */
740 /* /\* Set end of data of selected page *\/ */
741 /* SD_piSetCMDBUSReadParams( */
742 /* (UINT32)(SM_CalPageSelected * SM_SRAMPAGESIZE + */
743 /* SM_CalDataLenght[SM_CalPageSelected]-1)); */
744 /* /\* Start the acquisition *\/ */
745 /* if (daq_dmain) */
746 /* { */
747 /* SD_piTrigDataEvent(); */
748 /* } */
749 /* /\* start transfer to CMD I/F *\/ */
750 /* SD_piStartTransferToCMD(); */
751
752
753 /* // PM_WRITE_PKT_HEADER_BEFORE(SM_SelectedPage); */
754
755
756 /* } */
757 /* } break; */
758 #endif
759 /* Actions performed after an ET in Exp64 acq. mode */
760 case SM_EXP64: {
761 if(SM_ExpPageCounter > 0) {
762 SM_ExpPageCounter--;
763 SM_SelectedPage += 4;
764 SM_SelectedPage &= 0x00000007;
765 /* Set the SRAM page to hold the incoming pkt */
766 SD_piSetDAQWritePage(SM_SelectedPage);
767 if (SM_CalDataLenght[SM_CalPageSelected] > 0)
768 {
769 /* Set the selected SRAM page where take data for */
770 /* initialise instrument */
771 SD_piSetCMDBUSReadPage(SM_CalPageSelected);
772 /* Set end of data of selected page */
773 SD_piSetCMDBUSReadParams(
774 (UINT32)(SM_CalPageSelected * SM_SRAMPAGESIZE +
775 SM_CalDataLenght[SM_CalPageSelected]-1));
776 /* Start the acquisition */
777 SD_piTrigData64Event();
778 /* start transfer to CMD I/F */
779 SD_piStartTransferToCMD();
780 // PM_WRITE_PKT_HEADER_BEFORE(SM_SelectedPage);
781 }
782 else{
783 status=CM_RC_CALPAGEEMPTY;
784 }
785 }
786 else{
787 status=CM_RC_NOPAGEAVAILABLE;
788 }
789 #if 0
790 /* /\* Check if a new SRAM cache page has to be selected: *\/ */
791 /* /\* - The last acquisition was good and need to be saved *\/ */
792 /* /\* - In the last acquisition the trash page was selected *\/ */
793 /* if((SM_PIFTrOk == TRUE && */
794 /* SM_EmptyPage == FALSE ) || */
795 /* SM_TrashFlag == TRUE) { */
796 /* /\* Check if there is any free SRAM page left *\/ */
797 /* if(SM_ExpPageCounter > 0) { */
798 /* SM_ExpPageCounter--; */
799 /* /\* Select the page 0 and the page 3 in a circulat buffer of *\/ */
800 /* /\* page 0 and page 3 *\/ */
801 /* SM_SelectedPage += 4; */
802 /* SM_SelectedPage &= 0x00000007; */
803 /* /\* Set the SRAM page to hold the incoming pkt *\/ */
804 /* SD_piSetDAQWritePage(SM_SelectedPage); */
805 /* /\* The selected page is not the trash one *\/ */
806 /* SM_TrashFlag = FALSE; */
807 /* } */
808 /* else { */
809 /* /\* No more free cache SRAM page left. The Trash one must be selected *\/ */
810 /* SD_piSetDAQWritePage(TRASHPAGE); */
811 /* SM_TrashFlag = TRUE; */
812 /* } */
813 /* } */
814 /* /\* If the last acquisition was not good then reselect the same SRAM page *\/ */
815 /* else */
816 /* SD_piSetDAQWritePage(SM_SelectedPage); */
817
818 /* if (SM_CalDataLenght[SM_CalPageSelected] > 0) */
819 /* { */
820
821 /* /\* Set the selected SRAM page where take data for *\/ */
822 /* /\* initialise instrument *\/ */
823 /* SD_piSetCMDBUSReadPage(SM_CalPageSelected); */
824 /* /\* Set end of data of selected page *\/ */
825 /* SD_piSetCMDBUSReadParams( */
826 /* (UINT32)(SM_CalPageSelected * SM_SRAMPAGESIZE + */
827 /* SM_CalDataLenght[SM_CalPageSelected]-1)); */
828
829 /* /\* Start the acquisition *\/ */
830 /* SD_piTrigData64Event(); */
831 /* /\* start transfer to CMD I/F *\/ */
832 /* SD_piStartTransferToCMD(); */
833
834 /* // PM_WRITE_PKT_HEADER_BEFORE(SM_SelectedPage); */
835 /* } */
836 #endif // 0
837
838 }break;
839 }
840 OS_piInterEnable(intLevel);
841 }
842 else
843 {
844 /* HBUS is locked or an other storage is ongoing */
845 SM_LostTriggers++;
846 status=CM_RC_BUSY;
847 }
848 /* Release the HBUS for an other transfer */
849 PM_opReleaseHBUS();
850 /* Clear ERC32 interrupt */
851
852 OS_piInterDisable(&intLevel);
853 ERC32_Clear_interrupt(ETIRQ);
854 ERC32_Unmask_interrupt(ETIRQ);
855 OS_piInterEnable(intLevel);
856 return status;
857 #endif // SIMULATOR
858 }
859
860 void PM_opDisableStore_In_DataTimeOut() {
861 SM_EnableStore = FALSE;
862 }
863 void PM_opEnableStore_In_DataTimeOut() {
864 SM_EnableStore = TRUE;
865 }
866
867 BYTE PM_opSetPktType(BYTE pkttype) {
868 BYTE old=SM_PktType;
869 SM_PktType = pkttype;
870 return old;
871 }
872
873 BYTE PM_opGetPktType() {
874 return SM_PktType;
875 }
876
877
878 /*****************************************************************************/
879 /* @Function: PM_opPageHasData */
880 /* @Purpose : */
881 /* The function is used to tell the Page Manager that the last selected page*/
882 /* contains data written by the DAQ I/F. The Page Manager checks the data */
883 /* and send a "store" request to the MMSUManager. */
884 /* */
885 /* @@ */
886 /* @Parameter Name @Mode @Description */
887 /* @@ */
888 /*****************************************************************************/
889
890 static UINT32 counterleft=~0x00;
891 void PM_opPageHasData(void)
892 {
893 #ifdef SIMULATOR
894 return;
895 #else
896
897 SD_DAQ_WRESULT pageInfo;
898 unsigned int intLevel;
899 static BYTE crc_pkt;
900 unsigned int pkt_size;
901 BOOL savepagecalled=FALSE;
902
903 OS_piInterDisable(&intLevel);
904 SD_piClearInt(SD_DATA_TO);
905 OS_piInterEnable(intLevel);
906
907 ERC32_Clear_interrupt(ERC32_INTERRUPT_EXTERNAL_2);
908
909 counterleft=SD_piGetCMDCounterLeft();
910
911 switch(SM_AcqMode) {
912
913 case SM_DIRECT: {
914 /* Check if the packet buffer is not locked for read operation */
915 if(!SM_PktLock &&
916 !SD_piIsIntPending(SD_PAGE_OVR))
917 {
918
919 /* Evaluate the packet size in bytes */
920 SM_PktSize = pageInfo = SD_piGetDAQWriteResult();
921 SM_PktSize++;
922
923 if (FT_piSavePage(SM_CALPAGE, SM_PktSize, FS_ERC32) != FT_SUCCESS)
924 {
925 SM_ExpPageCounter=DIRECTPAGES;
926 SM_ERC32LostPackets++;
927 }
928 else
929 SM_ERC32IsOngoing=TRUE;
930 /* Check if the packet is good */
931 if(SD_piIsDAQWriteOk() == SD_TRANSFEROK)
932 SM_PktStatus = SM_PKT_GOOD;
933 else
934 {
935 SM_LostPackets++;
936 SM_PktStatus = SM_PKT_BAD;
937 }
938 // TBD:Post to INFN: DAQPkt READY !!!
939 /* Enable again the Event Trigger Interrupt*/
940 if(counterleft){
941 /*@LOG PageHasData: counterleft != 0 - counterleft*/
942 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,counterleft);
943 if(SM_NotifyTask_PKT_READY != NULL_TASK)
944 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_UNCOMPLETED_CMDIF);
945 }else
946 if(SM_NotifyTask_PKT_READY != NULL_TASK)
947 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_PKT_READY);
948 }
949 else
950 {
951 /* Clear the Page Overrun pending interrupt*/
952 if(SD_piIsIntPending(SD_PAGE_OVR))
953 {
954 SD_piClearInt(SD_PAGE_OVR);
955 SM_EmptyPage = TRUE;
956 }
957 SM_PktStatus = SM_PKT_BAD;
958 SM_ExpPageCounter=DIRECTPAGES;
959 // console_outbyte_polled( 0, '@' );
960 // console_outbyte_polled( 0, '\n' );
961 }
962 } break;
963
964 /* Actions performed after an DTO in DAQSetup acq. mode */
965 case SM_DAQSETUP: {
966 /* Check if the packet buffer is not locked for read operation */
967 if(!SM_PktLock &&
968 !SD_piIsIntPending(SD_PAGE_OVR))
969 {
970 /* Increase the packet counter */
971
972 /* Evaluate the packet size in bytes */
973 SM_PktSize = pageInfo = SD_piGetDAQWriteResult();
974 SM_PktSize++;
975
976 /* Check if the packet is good */
977 if(SD_piIsDAQWriteOk() == SD_TRANSFEROK)
978 SM_PktStatus = SM_PKT_GOOD;
979 else
980 {
981 SM_LostPackets++;
982 SM_PktStatus = SM_PKT_BAD;
983 }
984
985
986 PM_WRITE_PKT_HEADER(SM_CALPAGE,SM_PktSize,crc_pkt);
987 PM_INC_PKT_COUNTER();
988
989 savepagecalled=FALSE;
990 /* Put a save request for the selected SRAM page in the save queue*/
991 if(SM_PktRamCpyFlag)
992 if (FT_piSavePage(SM_CALPAGE, pageInfo, FS_ERC32) != FT_SUCCESS)
993 SM_ERC32LostPackets++;
994 else{
995 SM_ERC32IsOngoing=TRUE;
996 savepagecalled=TRUE;
997 }
998
999 if(SM_EnableStore)
1000 if (FT_piSavePage(SM_CALPAGE, pageInfo, FS_FILE1) != FT_SUCCESS)
1001 SM_MMSULostPackets++;
1002 else{
1003 SM_PacketStoreIsOngoing=TRUE;
1004 savepagecalled=TRUE;
1005 }
1006
1007 if(!savepagecalled){
1008 SM_ExpPageCounter=DAQSETUPPAGES;
1009 // console_outbyte_polled( 0, '@' );
1010 // console_outbyte_polled( 0, '\n' );
1011 }
1012 // console_outbyte_polled( 0, 'y' );
1013 // console_outbyte_polled( 0, '\n' );
1014
1015 if(counterleft){
1016 /*@LOG PageHasData: counterleft != 0 - counterleft*/
1017 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,counterleft);
1018 if(SM_NotifyTask_PKT_READY != NULL_TASK)
1019 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_UNCOMPLETED_CMDIF);
1020 }else
1021 if(SM_NotifyTask_PKT_READY != NULL_TASK)
1022 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_PKT_READY);
1023 }
1024 else
1025 {
1026 /* Clear the Page Overrun pending interrupt*/
1027 if(SD_piIsIntPending(SD_PAGE_OVR))
1028 {
1029 SD_piClearInt(SD_PAGE_OVR);
1030 SM_EmptyPage = TRUE;
1031 }
1032 SM_LostPackets++;
1033 /* this counter is increased only because is reported in RTF */
1034 SM_LostTriggers++;
1035 /* The transfer is complete then enalble an other acquisition */
1036 SM_ExpPageCounter=DAQSETUPPAGES;
1037 // console_outbyte_polled( 0, '@' );
1038 // console_outbyte_polled( 0, '\n' );
1039 }
1040 } break;
1041
1042 case SM_EXP64:
1043 {
1044 // SM_exp64_t2=SM_exp64_t1;
1045 /* Actions performed after an DTO in experiment acq. mode */
1046 SM_EmptyPage = FALSE;
1047 /* Check if the packet is good */
1048 /*
1049 SM_PIFTrOk = SD_piIsDAQWriteOk();
1050 if(SM_TrashFlag == FALSE &&
1051 SM_PIFTrOk == SD_TRANSFEROK &&
1052 !SD_piIsIntPending(SD_PAGE_OVR))
1053 */
1054 if(!SD_piIsIntPending(SD_PAGE_OVR))
1055 {
1056 /* Get the paket end address in SRAM */
1057 SM_PktSize = pageInfo = SD_piGetDAQWriteResult() ;
1058 SM_PktSize++;
1059 SM_PktSize -= (SM_SelectedPage * SM_SRAMPAGESIZE);
1060 /* Increase the packet counter */
1061 #if 0
1062 if(PRH_VAR_RM_IDAQONLYACQ_ADDON_SIZE) {
1063 SM_PktSize += CM_RAND(PRH_VAR_RM_IDAQONLYACQ_ADDON_SIZE);
1064 if(SM_PktSize > SM_SRAMPAGESIZE64)
1065 SM_PktSize=SM_SRAMPAGESIZE64;
1066 pageInfo = SM_PktSize + (SM_SelectedPage * SM_SRAMPAGESIZE) -1;
1067 }
1068 #endif
1069 /* Check if the packet is good */
1070 if(SD_piIsDAQWriteOk() == SD_TRANSFEROK)
1071 SM_PktStatus = SM_PKT_GOOD;
1072 else
1073 {
1074 SM_LostPackets++;
1075 SM_PktStatus = SM_PKT_BAD;
1076 }
1077
1078 PM_WRITE_PKT_HEADER(SM_SelectedPage,SM_PktSize,crc_pkt);
1079 PM_INC_PKT_COUNTER();
1080
1081 savepagecalled=FALSE;
1082
1083
1084 /* Check if it's time to copy the packet into RAM */
1085 if(SM_PktRamCpyFlag)
1086 {
1087 if(FT_piSavePage(SM_SelectedPage, pageInfo, FS_ERC32) != FT_SUCCESS)
1088 SM_ERC32LostPackets++;
1089 else
1090 {
1091 SM_ERC32IsOngoing=TRUE;
1092 savepagecalled=TRUE;
1093 }
1094 }
1095 /* Put a save request for the selected SRAM page in the save queue*/
1096 if(SM_EnableStore)
1097 if(FT_piSavePage(SM_SelectedPage, pageInfo, FS_FILE1) != FT_SUCCESS)
1098 {
1099 /* The save request was refused so the current page can be immediatly */
1100 /* reused */
1101 SM_EmptyPage = TRUE;
1102 /* A packet was lost */
1103 SM_MMSULostPackets++;
1104 }
1105 else
1106 {
1107 savepagecalled=TRUE;
1108 SM_PacketStoreIsOngoing=TRUE;
1109 }
1110
1111 if(!savepagecalled)
1112 if(++SM_ExpPageCounter > EXP64PAGES)
1113 {
1114 SM_ExpPageCounter = EXP64PAGES;
1115 }
1116
1117
1118 if(counterleft){
1119 /*@LOG PageHasData: counterleft != 0 - counterleft*/
1120 LU_INFN_LOG(LU_DEBUG_TRACE,LU_MASK(__FILEID__),__FILEID__,__LINE__,counterleft);
1121 if(SM_NotifyTask_PKT_READY != NULL_TASK)
1122 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_UNCOMPLETED_CMDIF);
1123 }else
1124 if(SM_NotifyTask_PKT_READY != NULL_TASK)
1125 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_PKT_READY);
1126 }
1127 else
1128 /* The packet is not good */
1129 {
1130 /* Clear the Page Overrun pending interrupt*/
1131 if(SD_piIsIntPending(SD_PAGE_OVR))
1132 {
1133 SD_piClearInt(SD_PAGE_OVR);
1134 SM_EmptyPage = TRUE;
1135 }
1136 SM_LostPackets++;
1137 SM_LostTriggers++;
1138 if(++SM_ExpPageCounter > EXP64PAGES)
1139 {
1140 SM_ExpPageCounter = EXP64PAGES;
1141 }
1142 }
1143 } break;
1144 default:{
1145 /*@LOG Unespected Data Timeout LOG_INFN HA_piLogHistoryEntry10(HA_E10_SW_SM,HA_E10_UNESPECTED_DTO,HA_E10_REP2_NULL); */
1146 LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,HA_E10_REP2_NULL);
1147 }
1148 }
1149 #endif // SIMULATOR
1150 }
1151
1152
1153
1154
1155
1156 #ifdef DEBUG
1157 status_code PM_opPreparePage_dummy()
1158 {
1159 unsigned int intLevel;
1160 status_code status=CM_RC_SUCCESSFUL;
1161 OS_piInterDisable(&intLevel);
1162 SD_piSetDAQWritePage(SM_CALPAGE);
1163 if(SM_ExpPageCounter > 0) {
1164 SM_ExpPageCounter--;
1165 SM_SelectedPage =0;
1166 }
1167 else{
1168 status=CM_RC_NOPAGEAVAILABLE;
1169 }
1170 OS_piInterEnable(intLevel);
1171 return status;
1172 }
1173 #endif // DEBUG
1174
1175
1176
1177
1178 /*****************************************************************************/
1179 /* @Function: PM_opPageIsEmpty */
1180 /* @Purpose : */
1181 /* The function is used to tell the Page Manager that the last selected page*/
1182 /* was not written by the DAQ I/F. */
1183 /* selected */
1184 /* */
1185 /* @@ */
1186 /* @Parameter Name @Mode @Description */
1187 /* @@ */
1188 /*****************************************************************************/
1189
1190 void PM_opPageIsEmpty(void)
1191 {
1192 unsigned int intLevel;
1193
1194 /* The packet was lost*/
1195 SM_ETOLostPackets++;
1196 SM_LostTriggers++;
1197
1198 if(SM_NotifyTask_PKT_READY != NULL_TASK)
1199 OS_piEventSend(SM_NotifyTask_PKT_READY,OS_EVENT_ETO);
1200
1201 switch(SM_AcqMode) {
1202 /* Actions performed after an ETO in DAQSetup acq. mode */
1203 case SM_DIRECT:
1204 case SM_DAQSETUP:
1205 SM_ExpPageCounter=DIRECTPAGES;
1206 // console_outbyte_polled( 0, '@' );
1207 // console_outbyte_polled( 0, '\n' );
1208 break;
1209 case SM_EXP64:
1210 if(++SM_ExpPageCounter > EXP64PAGES)
1211 {
1212 SM_ExpPageCounter = EXP64PAGES;
1213 }
1214 break;
1215 }
1216
1217 /* Clear the Event Timeout interrupt */
1218 OS_piInterDisable(&intLevel);
1219 SD_piClearInt(SD_EVT_TO);
1220 OS_piInterEnable(intLevel);
1221 }
1222
1223 /*****************************************************************************/
1224 /* @Function: PM_opPageWasSaved */
1225 /* @Purpose : */
1226 /* The function tels the Page Manager that a SRAM page was saved in MMSU and*/
1227 /* can be reused */
1228 /* */
1229 /* @@ */
1230 /* @Parameter Name @Mode @Description */
1231 /* @@ */
1232 /*****************************************************************************/
1233
1234 void PM_opPageWasSaved(FS_FILEID FileId)
1235 {
1236 unsigned int intLevel;
1237 switch (FileId)
1238 {
1239 case FS_FILE1:
1240 {
1241 switch(SM_AcqMode)
1242 {
1243 case SM_EXP64:
1244 {
1245 OS_piInterDisable(&intLevel);
1246 SM_PacketStoreIsOngoing=FALSE;
1247 /* Increment the number free available SRAM page */
1248 if(SM_ERC32IsOngoing==FALSE){
1249 SM_ExpPageCounter++;
1250 if(SM_ExpPageCounter > EXP64PAGES)
1251 {
1252 SM_ExpPageCounter = EXP64PAGES;
1253 }
1254 }
1255 OS_piInterEnable(intLevel);
1256 } break;
1257 case SM_DAQSETUP:
1258 {
1259 OS_piInterDisable(&intLevel);
1260 SM_PacketStoreIsOngoing=FALSE;
1261 /* Increment the number free available SRAM page */
1262 if(SM_ERC32IsOngoing==FALSE){
1263 SM_ExpPageCounter=DAQSETUPPAGES;
1264 // console_outbyte_polled( 0, 'Y' );
1265 // console_outbyte_polled( 0, '\n' );
1266 }
1267 OS_piInterEnable(intLevel);
1268 } break;
1269 case SM_DIRECT:
1270 break;
1271 default:
1272 break;
1273 }
1274 } break;
1275 case FS_HK:
1276 {
1277 /* Unlock the schetchboard page as soon as it is saved*/
1278 SM_SavingSkatchboard = FALSE;
1279 if(SM_NotifyTask_SKETCHBOARD_FREE != NULL_TASK)
1280 OS_piEventSend(SM_NotifyTask_SKETCHBOARD_FREE,OS_EVENT_SKETCHBOARD_FREE);
1281 } break;
1282 case FS_ERC32:
1283 {
1284 switch(SM_AcqMode)
1285 {
1286 case SM_DIRECT:
1287 case SM_DAQSETUP:
1288 OS_piInterDisable(&intLevel);
1289 SM_ERC32IsOngoing=FALSE;
1290 if(SM_PacketStoreIsOngoing==FALSE){
1291 SM_ExpPageCounter=DIRECTPAGES;
1292 // console_outbyte_polled( 0, 'Z' );
1293 // console_outbyte_polled( 0, '\n' );
1294 }
1295 OS_piInterEnable(intLevel);
1296 break;
1297 case SM_EXP64:
1298 OS_piInterDisable(&intLevel);
1299 SM_ERC32IsOngoing=FALSE;
1300 if(SM_PacketStoreIsOngoing==FALSE){
1301 SM_ExpPageCounter++;
1302 if(SM_ExpPageCounter > EXP64PAGES)
1303 {
1304 SM_ExpPageCounter = EXP64PAGES;
1305 }
1306 }
1307 OS_piInterEnable(intLevel);
1308 break;
1309 }
1310 } break;
1311 case FS_CMD:
1312 break;
1313 default:
1314 break;
1315 }
1316 }
1317
1318 /*****************************************************************************/
1319 /* @Function: PM_op_SetAcqMode */
1320 /* @Purpose : */
1321 /* The function selects the operational mode for the Page Manager: */
1322 /* science data or calibration. The transition is possible only if in the */
1323 /* curent mode there are no more SRAM page to store into MMSU */
1324 /* Due to the fact that the SRAM is a shared resource between the */
1325 /* acquisition and the mass memory store automas, this function highly */
1326 /* coupled with the MMSUManager Enable/Disable store functions. */
1327 /* */
1328 /* @@ */
1329 /* @Parameter Name @Mode @Description */
1330 /* SM_EXITCODE OUT Return code */
1331 /* @@ */
1332 /*****************************************************************************/
1333
1334 SM_EXITCODE PM_op_SetAcqMode(SM_ACQMODE mode)
1335 {
1336 SM_EXITCODE status = SM_SUCCESS;
1337 UINT32 idx;
1338 unsigned int intLevel;
1339
1340 /* Mask any interrupt related to acquisition activity */
1341 OS_piInterDisable(&intLevel);
1342 SD_piMaskInt(SD_EVT_TO | SD_DATA_TO | SD_PAGE_OVR);
1343 ERC32_Mask_interrupt(ETIRQ);
1344 OS_piInterEnable(intLevel);
1345 PM_opReleaseHBUS();
1346 SM_ERC32IsOngoing=FALSE;
1347 SM_PacketStoreIsOngoing = FALSE;
1348
1349 switch(mode) {
1350 /* Enter the Direct Mode mode */
1351 case SM_DIRECT:
1352 {
1353 SD_piSetCalibrationHeaderLength(0);
1354 SM_AcqMode = SM_DIRECT;
1355 /* Init the last recieved packet status to a */
1356 /* "to be acquired" condition */
1357 SM_PktStatus = SM_PKT_ACQ;
1358 /* Enable the skatchboard usage */
1359 SM_SavingSkatchboard = FALSE;
1360 /**/
1361 SM_ExpPageCounter = DIRECTPAGES;
1362 if(SM_NotifyTask_SKETCHBOARD_FREE != NULL_TASK)
1363 OS_piEventSend(SM_NotifyTask_SKETCHBOARD_FREE,OS_EVENT_SKETCHBOARD_FREE);
1364 /* Clear and unmask all the acquisition related interrupts */
1365 ERC32_Clear_interrupt(ETIRQ);
1366 OS_piInterDisable(&intLevel);
1367 SD_piClearInt(SD_EVT_TO | SD_DATA_TO | SD_PAGE_OVR);
1368 SD_piUnMaskInt(SD_EVT_TO | SD_DATA_TO);
1369 OS_piInterEnable(intLevel);
1370 ERC32_Unmask_interrupt(ETIRQ);
1371 } break;
1372
1373 /* Enter the DAQSetup mode */
1374 case SM_DAQSETUP:
1375 {
1376 SD_piSetCalibrationHeaderLength(SM_PKTHEADER_LEN);
1377 SM_AcqMode = SM_DAQSETUP;
1378 /* Init the last recieved packet status to a */
1379 /* "to be acquired" condition */
1380 SM_PktStatus = SM_PKT_ACQ;
1381 /* Enable the skatchboard usage */
1382 SM_SavingSkatchboard = FALSE;
1383 SM_ExpPageCounter = DAQSETUPPAGES;
1384 // console_outbyte_polled( 0, '9' );
1385 // console_outbyte_polled( 0, '\n' );
1386 if(SM_NotifyTask_SKETCHBOARD_FREE != NULL_TASK)
1387 OS_piEventSend(SM_NotifyTask_SKETCHBOARD_FREE,OS_EVENT_SKETCHBOARD_FREE);
1388 /* Clear and unmask all the acquisition related interrupts */
1389 ERC32_Clear_interrupt(ETIRQ);
1390 OS_piInterDisable(&intLevel);
1391 SD_piClearInt(SD_EVT_TO | SD_DATA_TO | SD_PAGE_OVR);
1392 SD_piUnMaskInt(SD_EVT_TO | SD_DATA_TO);
1393 OS_piInterEnable(intLevel);
1394 ERC32_Unmask_interrupt(ETIRQ);
1395 } break;
1396
1397 #if 0
1398 /* Enter the Experiment mode */
1399 case SM_EXPERIMENT:
1400 {
1401 SD_piSetCalibrationHeaderLength(SM_PKTHEADER_LEN);
1402 SM_AcqMode = SM_EXPERIMENT;
1403 /* Force the Caching automa to select a brand new SRAM page */
1404 SM_TrashFlag = TRUE;
1405 SM_SelectedPage = 0;
1406 SM_EmptyPage = TRUE;
1407 SM_ExpPageCounter = EXPPAGES;
1408 /* Init the last recieved packet status to a */
1409 /* "to be acquired" condition */
1410 SM_PktStatus = SM_PKT_ACQ;
1411 /* Reset the SRAM to RAM triggrer counter */
1412 /* Enable the skatchboard usage */
1413 SM_SavingSkatchboard = FALSE;
1414 if(SM_NotifyTask_SKETCHBOARD_FREE != NULL_TASK)
1415 OS_piEventSend(SM_NotifyTask_SKETCHBOARD_FREE,OS_EVENT_SKETCHBOARD_FREE);
1416 /* Clear and unmask all the acquisition related interrupts */
1417 OS_piInterDisable(&intLevel);
1418 SD_piClearInt(SD_EVT_TO | SD_DATA_TO | SD_PAGE_OVR);
1419 SD_piUnMaskInt(SD_EVT_TO | SD_DATA_TO);
1420 OS_piInterEnable(intLevel);
1421 ERC32_Clear_interrupt(ETIRQ);
1422 ERC32_Unmask_interrupt(ETIRQ);
1423 } break;
1424 #endif
1425 /* Enter the Experiment mode */
1426 case SM_EXP64:
1427 {
1428 SD_piSetCalibrationHeaderLength(SM_PKTHEADER_LEN);
1429 SM_AcqMode = SM_EXP64;
1430 /* Force the Caching automa to select a brand new SRAM page */
1431 SM_SelectedPage = 0;
1432 SM_EmptyPage = TRUE;
1433 SM_ExpPageCounter = EXP64PAGES;
1434 /* Init the last recieved packet status to a */
1435 /* "to be acquired" condition */
1436 SM_PktStatus = SM_PKT_ACQ;
1437 /* Reset the SRAM to RAM triggrer counter */
1438 /* Enable the skatchboard usage */
1439 SM_SavingSkatchboard = FALSE;
1440 if(SM_NotifyTask_SKETCHBOARD_FREE != NULL_TASK)
1441 OS_piEventSend(SM_NotifyTask_SKETCHBOARD_FREE,OS_EVENT_SKETCHBOARD_FREE);
1442 /* Clear and unmask all the acquisition related interrupts */
1443 OS_piInterDisable(&intLevel);
1444 SD_piClearInt(SD_EVT_TO | SD_DATA_TO | SD_PAGE_OVR);
1445 SD_piUnMaskInt(SD_EVT_TO | SD_DATA_TO);
1446 OS_piInterEnable(intLevel);
1447 ERC32_Clear_interrupt(ETIRQ);
1448 ERC32_Unmask_interrupt(ETIRQ);
1449 } break;
1450
1451 /* Enter the Idle mode */
1452 case SM_IDLE:
1453 {
1454 SM_AcqMode = SM_IDLE;
1455 } break;
1456 default:{
1457 status = SM_WRONGACQMODE;
1458 }
1459 }
1460 return (status);
1461 }
1462
1463 /*****************************************************************************/
1464 /* @Function: PM_op_GetAcqMode */
1465 /* @Purpose : */
1466 /* The function return the current acquisition mode */
1467 /* */
1468 /* @@ */
1469 /* @Parameter Name @Mode @Description */
1470 /* SM_ACQMODE OUT acquisition mode */
1471 /* @@ */
1472 /*****************************************************************************/
1473
1474 SM_ACQMODE PM_op_GetAcqMode(void)
1475 {
1476 /* Return the current acquisition mode */
1477 return (SM_AcqMode);
1478 }
1479
1480 /*****************************************************************************/
1481 /* @Function: PM_op_GetLostPktCounter */
1482 /* @Purpose : */
1483 /* The function return the lost Event Trigger counter */
1484 /* */
1485 /* @@ */
1486 /* @Parameter Name @Mode @Description */
1487 /* @@ */
1488 /*****************************************************************************/
1489
1490 void PM_op_GetLostPktCounter(UINT32* Counter)
1491 {
1492 unsigned int intLevel;
1493
1494 /* Return the lost packets counter */
1495 OS_piInterDisable(&intLevel);
1496 *Counter = SM_LostTriggers;
1497 OS_piInterEnable(intLevel);
1498 }
1499
1500 /*****************************************************************************/
1501 /* @Function: PM_op_GetPacket */
1502 /* @Purpose : */
1503 /* The function return a packet from PIF SRAM Memory */
1504 /* */
1505 /* @@ */
1506 /* @Parameter Name @Mode @Description */
1507 /* SM_PKTSTAT OUT acquisition result */
1508 /* PtrPkt OUT Pointer to the caller packet buffer */
1509 /* Size OUT Size of the packet copied into buffer */
1510 /* @@ */
1511 /*****************************************************************************/
1512
1513 SM_PKTSTAT PM_op_GetPacket(UINT32* Size, void* PtrPkt)
1514 {
1515 SM_PKTSTAT pktStat;
1516 unsigned int intLevel;
1517 FS_FILE_DESCR fd;
1518
1519 if (PM_opLockHBUS() == SM_SUCCESS)
1520 {
1521 /* Lock the buffer in read mode */
1522 OS_piInterDisable(&intLevel);
1523 SM_PktLock = TRUE;
1524 OS_piInterEnable(intLevel);
1525 /* return the packet status */
1526 pktStat = SM_PktStatus;
1527
1528 FS_piGetFileInfo(FS_ERC32, &fd);
1529 /* If the paket is good then copy it to the provided destination */
1530 if(SM_PktStatus == SM_PKT_GOOD)
1531 {
1532 memcpy(PtrPkt, (void*)fd.WriteAddr, SM_PktSize);
1533 *Size = SM_PktSize;
1534 }
1535 /* Unlock the buffer */
1536 OS_piInterDisable(&intLevel);
1537 SM_PktLock = FALSE;
1538 OS_piInterEnable(intLevel);
1539 PM_opReleaseHBUS();
1540 }
1541 else
1542 pktStat = SM_PKT_ACQ;
1543 return (pktStat);
1544 }
1545
1546 /*****************************************************************************/
1547 /* @Function: PM_op_StorePacket */
1548 /* @Purpose : */
1549 /* The function starts all the operations needed to store the given packet */
1550 /* in the selected file. If the result is good it means that the store */
1551 /* request was successfuly accepted. The store of the packet can still fail */
1552 /* */
1553 /* @@ */
1554 /* @Parameter Name @Mode @Description */
1555 /* SM_STRSTAT OUT Store request result */
1556 /* PtrPkt IN Pointer to the caller packet buffer */
1557 /* Size IN Size of the packet to be copied into FileId */
1558 /* in bytes */
1559 /* FileID IN Destination file */
1560 /* @@ */
1561 /*****************************************************************************/
1562
1563 SM_STRSTAT PM_op_StorePacket(UINT32 Size, void* PtrPkt, FS_FILEID FileId)
1564 {
1565 SM_STRSTAT strStat = SM_STR_OK;
1566 SD_DAQ_WRESULT pageInfo;
1567
1568 /* Check the FileID */
1569 if(FileId == FS_REGFILES || FileId == FS_MAXID)
1570 {
1571 strStat = SM_STR_WRONGFILE;
1572 }
1573 /* Check the packet size */
1574 if(Size == 0 || Size > SM_SKETCHSIZE)
1575 {
1576 strStat = SM_STR_WRIONGSIZE;
1577 }
1578 /* Check if the skatchboard is in use */
1579 if(SM_SavingSkatchboard == TRUE)
1580 {
1581 strStat = SM_STR_BUSY;
1582 }
1583
1584 if (strStat == SM_STR_OK)
1585 {
1586 /* Copy the provided packet into SRAM skatchboard */
1587 if(PtrPkt != NULL)
1588 SM_ifCopyToSRAM((UINT32)(SM_SKETCHBOARD * SM_SRAMPAGESIZE),
1589 (void*)PtrPkt, Size);
1590
1591 /* Put a save request for the skatchboard SRAM page in the save queue*/
1592 pageInfo = (UINT32)(SM_SKETCHBOARD * SM_SRAMPAGESIZE) + Size - 1;
1593 /* The save request was accepted */
1594 /* so lock the skatchboard page: assume here that it will have success */
1595 SM_SavingSkatchboard = TRUE;
1596 if(FT_piSavePage(SM_SKETCHBOARD, pageInfo, FileId) != FT_SUCCESS)
1597 {
1598 /* The save request was refused */
1599 strStat = SM_STR_FAILED;
1600
1601 SM_SavingSkatchboard = FALSE;
1602 if(SM_NotifyTask_SKETCHBOARD_FREE != NULL_TASK)
1603 OS_piEventSend(SM_NotifyTask_SKETCHBOARD_FREE,OS_EVENT_SKETCHBOARD_FREE);
1604
1605 }
1606
1607 }
1608
1609 return (strStat);
1610 }
1611
1612 /*****************************************************************************/
1613 /* @Function: PM_op_SetExpPktCpyFlag */
1614 /* @Purpose : */
1615 /* This function sets the experiment pkt RAM copy flag */
1616 /* */
1617 /* @@ */
1618 /* @Parameter Name @Mode @Description */
1619 /* Flag IN Flag */
1620 /* @@ */
1621 /*****************************************************************************/
1622
1623 void PM_op_SetExpPktCpyFlag(BOOL Flag)
1624 {
1625 /* Set the trigger counter for the experiment pkt RAM copy */
1626 SM_PktRamCpyFlag = Flag;
1627 }
1628
1629 /*****************************************************************************/
1630 /* @Function: PM_op_GetAndIncrPckCnt */
1631 /* @Purpose : */
1632 /* This function get and increase the packet counter */
1633 /* */
1634 /* @@ */
1635 /* @Parameter Name @Mode @Description */
1636 /* UINT32 OUT return the packet counter */
1637 /* @@ */
1638 /*****************************************************************************/
1639 UINT32 PM_op_GetAndIncrPckCnt (void)
1640 {
1641 return (SM_PacketCounter++);
1642 }
1643
1644 /*****************************************************************************/
1645 /* @Function: PM_op_CopyToSRAM */
1646 /* @Purpose : */
1647 /* This function copy from RAMStartAddr "Size" bytes to Page selected in */
1648 /* in SRAM Memory. */
1649 /* this function update the value of SM_CalDataLenght for the page selected */
1650 /* with the "size" */
1651 /* */
1652 /* @@ */
1653 /* @Parameter Name @Mode @Description */
1654 /* SM_STRSTAT OUT Store request result */
1655 /* Page IN Page to store data buffer */
1656 /* RAMStartAddr IN Pointer to the caller data buffer */
1657 /* Size IN Size of the packet to be copied into FileId */
1658 /* in bytes */
1659 /* @@ */
1660 /*****************************************************************************/
1661 SM_STRSTAT PM_op_CopyToSRAM (SM_PAGEID Page, void* RAMStartAddr, UINT32 Size)
1662 {
1663 SM_STRSTAT strStat = SM_STR_OK;
1664 unsigned int intLevel;
1665
1666
1667 /* Check the packet size */
1668 if(Size == 0 || Size > SM_SKETCHSIZE)
1669 {
1670 strStat = SM_STR_WRIONGSIZE;
1671 }
1672 /* check that page selected is valid page */
1673 if ((Page < SM_CALEXP0) || (Page > SM_CALEXP3))
1674 {
1675 strStat = SM_STR_WRONGFILE;
1676 }
1677
1678 if (strStat == SM_STR_OK)
1679 {
1680 if (PM_opLockHBUS() == SM_SUCCESS)
1681 {
1682 /* Copy the provided data into SRAM Page Selected */
1683
1684 SM_ifCopyToSRAM((UINT32)(Page * SM_SRAMPAGESIZE), RAMStartAddr, Size);
1685 SM_CalDataLenght[Page] = Size;
1686
1687 PM_opReleaseHBUS();
1688 }
1689 else
1690 strStat = SM_STR_BUSY;
1691 }
1692 return strStat;
1693 }
1694
1695 /*****************************************************************************/
1696 /* @Function: PM_op_UseCalibrationPage */
1697 /* @Purpose : */
1698 /* This function select the page that must be used for next acquisition */
1699 /* */
1700 /* @@ */
1701 /* @Parameter Name @Mode @Description */
1702 /* Page IN Page to store data buffer */
1703 /* @@ */
1704 /*****************************************************************************/
1705 void PM_op_UseCalibrationPage (SM_PAGEID Page)
1706 {
1707 SM_CalPageSelected = Page;
1708 }
1709
1710 /*****************************************************************************/
1711 /* @Function: PM_opLockHBUS */
1712 /* @Purpose : */
1713 /* This function lock the HW HBUS shared resource */
1714 /* */
1715 /* @@ */
1716 /* @Parameter Name @Mode @Description */
1717 /* SM_EXITCODE OUT Lock HBUS request result */
1718 /* @@ */
1719 /*****************************************************************************/
1720 SM_EXITCODE PM_opLockHBUS()
1721 {
1722 SM_EXITCODE status = SM_SUCCESS;
1723 unsigned int intLevel;
1724
1725 OS_piInterDisable(&intLevel);
1726 if (SM_HBUSIsLocked)
1727 status = SM_FAIL;
1728 else
1729 SM_HBUSIsLocked = TRUE;
1730 OS_piInterEnable(intLevel);
1731 return status;
1732 }
1733
1734 /*****************************************************************************/
1735 /* @Function: PM_opReleaseHBUS */
1736 /* @Purpose : */
1737 /* This function release the HW HBUS shared resource */
1738 /* */
1739 /* @@ */
1740 /* @Parameter Name @Mode @Description */
1741 /* @@ */
1742 /*****************************************************************************/
1743 void PM_opReleaseHBUS()
1744 {
1745 unsigned int intLevel;
1746
1747 OS_piInterDisable(&intLevel);
1748 SM_HBUSIsLocked = FALSE;
1749 OS_piInterEnable(intLevel);
1750 }
1751
1752 /*****************************************************************************/
1753 /* @Function: PM_opGetDataLen */
1754 /* @Purpose : */
1755 /* Returns the length of a page */
1756 /* */
1757 /* @@ */
1758 /* @Parameter Name @Mode @Description */
1759 /* @@ */
1760 /*****************************************************************************/
1761 UINT32 SM_opGetDataLength(SM_PAGEID page)
1762 {
1763 return SM_CalDataLenght[page];
1764 }
1765
1766 /*****************************************************************************/
1767 /* @Function: PM_opFullExp */
1768 /* @Purpose : */
1769 /* Returns wheather or not the is at least one page available on the PIF */
1770 /* (exp page) */
1771 /* @@ */
1772 /* @Parameter Name @Mode @Description */
1773 /* @@ */
1774 /*****************************************************************************/
1775 BOOL SM_opExpPageAvail()
1776 {
1777 BOOL ret = FALSE;
1778 unsigned int intLevel;
1779 OS_piInterDisable(&intLevel);
1780 switch(SM_AcqMode)
1781 {
1782 case SM_DIRECT:
1783 case SM_DAQSETUP:
1784 // ret = !SM_PacketStoreIsOngoing;
1785 ret = SM_ExpPageCounter > 0;
1786 break;
1787 case SM_EXP64:
1788 // case SM_EXPERIMENT:
1789 ret = SM_ExpPageCounter > 0;
1790 break;
1791 }
1792 OS_piInterEnable(intLevel);
1793 return ret;
1794 }
1795
1796
1797 BOOL SM_opAllExpPageAvail()
1798 {
1799 BOOL ret = FALSE;
1800 unsigned int intLevel;
1801 OS_piInterDisable(&intLevel);
1802 switch(SM_AcqMode)
1803 {
1804 case SM_DIRECT:
1805 case SM_DAQSETUP:
1806 ret = SM_ExpPageCounter == DAQSETUPPAGES;
1807 break;
1808 case SM_EXP64:
1809 ret = SM_ExpPageCounter == EXP64PAGES;
1810 break;
1811 }
1812 OS_piInterEnable(intLevel);
1813 return ret;
1814 }
1815

  ViewVC Help
Powered by ViewVC 1.1.23