/[PAMELA software]/quicklook/dataToXML/Data/compilationInfo/src/INFN/DAQ_IDAQ_INFN.c
ViewVC logotype

Annotation of /quicklook/dataToXML/Data/compilationInfo/src/INFN/DAQ_IDAQ_INFN.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Tue Apr 25 09:00:20 2006 UTC (19 years, 2 months ago) by kusanagi
Branch point for: MAIN
File MIME type: text/plain
Initial revision

1 kusanagi 1.1 /****************************************************************************
2     * F i l e D a t a
3     * $Id: DAQ_IDAQ_INFN.c,v 1.69 2005/03/20 18:19:21 sebastiani Exp $
4     * $Revision: 1.69 $
5     * $Date: 2005/03/20 18:19:21 $
6     * $RCSfile: DAQ_IDAQ_INFN.c,v $
7     *
8     ****************************************************************************
9     * S W D e v e l o p m e n t E n v i r o n m e n t
10     *
11     * $Author: sebastiani $
12     * :
13     ****************************************************************************
14     * U p d a t i n g
15     *
16     * $Log: DAQ_IDAQ_INFN.c,v $
17     * Revision 1.69 2005/03/20 18:19:21 sebastiani
18     * CRC start valeu in DAQ_ module start from zero, like always
19     *
20     * Revision 1.68 2005/03/06 14:54:46 sebastiani
21     * version running on 06 03 2005
22     *
23     * Revision 1.67 2005/02/24 16:49:29 sebastiani
24     * DAQ_STORE_MM moved to be a macro , not a static var
25     *
26     * Revision 1.66 2005/02/21 08:58:29 sebastiani
27     * all log comments completed
28     *
29     * Revision 1.65 2005/01/26 18:46:48 sebastiani
30     * new bug fixes for WS
31     *
32     * Revision 1.64 2004/11/19 15:14:52 sebastiani
33     * PRH_EXTERN_{VAR,ARR,TABLE} removed and put them on the autogenerated parameter heeader file
34     *
35     * Revision 1.63 2004/11/05 16:43:07 sebastiani
36     * *** empty log message ***
37     *
38     * Revision 1.62 2004/10/01 08:48:10 sebastiani
39     * TRD alarma renamed TRD_S4 - S4 Alarm renamed S4_POWER
40     * Callback function into DAQ_SendCmd2PIFWaitDAQReply_internal
41     *
42     * Revision 1.61 2004/09/17 15:01:00 faber
43     * LU_INFN_LOG flags fixing
44     *
45     * Revision 1.60 2004/09/09 14:52:55 sebastiani
46     * using PreparePage to send cmd to idaq/FE
47     * added some test
48     * added trigger param
49     * added/tested Force Send KHB_to_FE
50     * added/tested Send Cmd to IDAQ/FE
51     *
52     * Revision 1.59 2004/08/31 09:08:35 sebastiani
53     * fix warning
54     *
55     * Revision 1.58 2004/08/26 16:54:34 sebastiani
56     * version work fine
57     *
58     * Revision 1.57 2004/08/13 14:42:19 sebastiani
59     * Add Neutron detector!
60     * need add file ND_READ_ACQ.dat on site ...
61     *
62     * Revision 1.56 2004/08/11 15:49:59 sebastiani
63     * delete unuseful line
64     *
65     * Revision 1.55 2004/08/02 15:49:47 alfarano
66     * alarm handling , scm & pm communication rewrite
67     *
68     * Revision 1.54 2004/08/02 14:26:38 sebastiani
69     * fix mm bug
70     *
71     * Revision 1.53 2004/08/02 12:16:24 sebastiani
72     * little fix
73     *
74     * Revision 1.52 2004/07/21 14:08:32 sebastiani
75     * Fix close RUN we wait a event to close the run
76     * PM send Sint and don't wait for SintOK
77     * Header'Trailer Initialization
78     * FixPacketCounter
79     *
80     * Revision 1.51 2004/07/20 14:36:26 sebastiani
81     * AC/CAL/TRK/TOF/TRG unmaksed all KHB alarms
82     * RM: Close Run before RunTrailer (send page 2)
83     *
84     * Revision 1.50 2004/07/15 13:45:58 sebastiani
85     * fix some bugs
86     *
87     * Revision 1.49 2004/07/12 09:19:33 sebastiani
88     * some fixing about alamrs
89     *
90     * Revision 1.48 2004/06/22 09:34:52 faber
91     * *** empty log message ***
92     *
93     * Revision 1.47 2004/06/22 08:57:01 sebastiani
94     * *** empty log message ***
95     *
96     * Revision 1.46 2004/06/16 09:35:13 faber
97     * *** empty log message ***
98     *
99     * Revision 1.45 2004/06/15 08:22:06 sebastiani
100     * adjust DAQ_DEFAULT_{DTO,ETO}_TICS
101     *
102     * Revision 1.44 2004/06/04 14:24:38 sebastiani
103     * clear some files
104     *
105     * Revision 1.43 2004/06/01 16:41:19 sebastiani
106     * EventReceive ANY
107     *
108     * Revision 1.42 2004/05/27 17:50:40 sebastiani
109     * *** empty log message ***
110     *
111     * Revision 1.41 2004/05/25 17:41:08 sebastiani
112     * fix alfarano's bugs
113     *
114     * Revision 1.40 2004/05/24 10:27:32 faber
115     * *** empty log message ***
116     *
117     * Revision 1.39 2004/05/20 16:51:02 sebastiani
118     * add append with offset and fix some bug
119     *
120     * Revision 1.38 2004/05/20 16:03:52 faber
121     * ACQ flow dev continuing
122     *
123     * Revision 1.37 2004/05/20 09:04:15 sebastiani
124     * ok
125     *
126     * Revision 1.36 2004/05/19 08:44:38 sebastiani
127     * fix trk init and calib
128     *
129     * Revision 1.35 2004/05/14 08:37:27 sebastiani
130     * same default param, some sebastiani's bugs
131     *
132     * Revision 1.34 2004/05/12 14:46:14 faber
133     * *** empty log message ***
134     *
135     * Revision 1.33 2004/05/12 08:10:11 faber
136     * *** empty log message ***
137     *
138     * Revision 1.32 2004/05/11 17:45:10 sebastiani
139     * x-1 offset
140     *
141     * Revision 1.31 2004/05/11 15:28:28 alfarano
142     * updates..
143     *
144     * Revision 1.30 2004/05/11 13:58:49 sebastiani
145     * ETO/ATO 4+4 bit instead of 5.3 in DAQ_IDAQ_INFN
146     *
147     * Revision 1.29 2004/05/06 08:52:24 faber
148     * development goes on..
149     *
150     * Revision 1.28 2004/05/03 14:45:13 sebastiani
151     * correct len
152     *
153     * Revision 1.27 2004/04/30 09:51:36 alfarano
154     * stupid error
155     *
156     * Revision 1.26 2004/04/29 16:13:59 alfarano
157     * update cal
158     *
159     * Revision 1.25 2004/04/29 15:22:42 sebastiani
160     * buffer->len+=SM_HEADER_LEN in WriteHeaderLen
161     *
162     * Revision 1.24 2004/04/29 15:17:24 sebastiani
163     * *** empty log message ***
164     *
165     * Revision 1.23 2004/04/29 08:30:59 sebastiani
166     * WriteHeader moved to DAQ_IDAQ_INFN.c
167     *
168     * Revision 1.22 2004/02/13 10:11:30 alfarano
169     * calorimeter initialization func and more
170     *
171     * Revision 1.21 2004/02/11 16:26:52 faber
172     * CM_TIME2REG introduced
173     *
174     * Revision 1.20 2004/02/10 16:48:28 faber
175     * *** empty log message ***
176     *
177     * Revision 1.19 2004/02/05 11:36:11 sebastiani
178     * DAQ_FE_DUMMY introduced and TEST_FE2LINK changed
179     *
180     * Revision 1.18 2004/01/29 18:10:01 sebastiani
181     * DAQ_Format_Daq2Ram_ReadData introduced; DAQ_FORMAT_OPCODE_CMD_TEMPLATE modifed to work better
182     *
183     * Revision 1.17 2004/01/22 10:10:25 faber
184     * *** empty log message ***
185     *
186     * Revision 1.16 2004/01/12 17:51:28 tassa
187     * manca solo la parte di invio e ricezione sulla/dalla IDAQ
188     *
189     * Revision 1.15 2003/11/04 11:57:45 sebastiani
190     * DAQ_Format_Cmd2Ram_ReadData added
191     *
192     * Revision 1.14 2003/10/27 18:52:58 sebastiani
193     * *** empty log message ***
194     *
195     * Revision 1.13 2003/10/21 13:16:01 sebastiani
196     * no logs on clear event any more
197     *
198     * Revision 1.12 2003/10/17 08:44:15 sebastiani
199     * new implementation of DAQ_SaveBuffer2MM
200     *
201     * Revision 1.11 2003/10/02 16:14:43 faber
202     * IDAQ deep ETO/ATO modifications
203     * All comments for functions
204     *
205     * Revision 1.10 2003/10/01 18:13:01 faber
206     * temp buf size bug fix
207     *
208     * Revision 1.9 2003/09/25 16:51:27 alfarano
209     * conflicts resolved
210     *
211     * Revision 1.8 2003/09/25 12:57:07 faber
212     * first version of cmdgenerator.c
213     *
214     * Revision 1.7 2003/09/22 14:05:38 alfarano
215     * functions moved from RM_RunManager to DAQ_IDAQ_INFN:StoreCmdQueue2PIF,SendCmdQueue2CMDIF; added DAQ_SendCmd2PIFWaitDAQReply
216     *
217     * Revision 1.6 2003/09/19 15:57:35 faber
218     * Large development update INFN software
219     *
220     * Revision 1.5 2003/09/10 16:15:52 faber
221     * PRH_EXTERN_VAR(XX_LOGMASK) removed (not needed any more)
222     *
223     * Revision 1.4 2003/09/10 11:55:07 faber
224     * LU_MASK introduced. Log mask for module is now an unique array (PRH_ARR_LOG_MASK) indexed by __FILEID__
225     *
226     * Revision 1.3 2003/08/22 07:57:08 sebastiani
227     * *** empty log message ***
228     *
229     * Revision 1.2 2003/08/08 11:00:42 sebastiani
230     * Primo test funzionante IDAQ (GuidoBoard)
231     * Import Test Russi 30.8
232     *
233     * Revision 1.1.1.1 2003/08/04 09:40:22 sebastiani
234     * Imported sources laben rel. 19.06.2003 integrated with pam2
235     *
236     * Revision 1.7 2003/07/28 09:12:01 sebastiani
237     * *** empty log message ***
238     *
239     * Revision 1.6 2003/07/25 15:32:57 sebastiani
240     * * Cmd2XX / ReadData cancelled (non valid!)
241     * * new way of declaration of buffers
242     *
243     * Revision 1.5 2003/07/18 13:35:10 sebastiani
244     * PRH_ParamHandler_INFN_int.c sobstitues PRH_ParamHandler_INFN_*.*
245     * introduced DAQTEST directive
246     *
247     * Revision 1.4 2003/07/17 11:15:52 sebastiani
248     * idaq manager
249     * new print for logging in minicom
250     *
251     * Revision 1.3 2003/07/11 09:39:23 sebastiani
252     * *** empty log message ***
253     *
254     * Revision 1.2 2003/07/10 15:56:27 sebastiani
255     * *** empty log message ***
256     *
257     * Revision 1.1 2003/07/10 07:05:14 sebastiani
258     * first IDAQ driver import
259     *
260     *
261     *****************************************************************************/
262    
263    
264     /*============================= Include File ================================*/
265    
266    
267     #include <src/INFN/LU_SourceFileID_INFN.h>
268     #define __FILEID__ _DAQ_IDAQ_INFN__c
269    
270    
271     #ifndef I386
272     #include <src/INFN/PRH_ParamHandler_INFN_auto.h>
273     #include <src/INFN/PRH_ParamHandler_INFN_autopri.h>
274     #include <src/INFN/PRH_ParamHandler_INFN.h>
275     #include <src/INFN/LU_LogUtility_INFN.h>
276     LU_DECL_MASK();
277     #endif // I386
278    
279     #include <src/INFN/DAQ_IDAQ_INFN.h>
280     #include <src/INFN/CM_Common_INFN.h>
281    
282    
283     #ifndef I386
284     #include <src/INFN/KHB_Driver_INFN.h>
285     #include <src/INFN/HK_Manager_INFN.h>
286     #include <src/INFN/RM_RunManager_INFN.h>
287     #include <src/FileManager/MMSUManager/FT_MMSUManager_p.h>
288     #endif // I386
289    
290     /*============================ Global define ================================*/
291    
292     #define DAQ_SSBUF_SHORTCMD_LIMIT 124
293     #define DAQ_SSBUF_LONGCMD_LIMIT 126
294    
295     //#define DAQ_SSBUF_SHORTCMD_LIMIT 5
296     //#define DAQ_SSBUF_LONGCMD_LIMIT 6
297    
298     #define DAQ_LINK_SPARE 0xFF
299    
300     #define DAQ_FLASH_N_SECTOR 0x12
301    
302    
303     #ifdef I386
304     typedef unsigned int PRH_VAR_TYPE;
305     #define SUCCESSFUL 0
306     #endif // I386
307    
308    
309     // #define ETOATO_EXTERN(name) PRH_EXTERN_VAR(DAQ_##name##_ETO); PRH_EXTERN_VAR(DAQ_##name##_ATO)
310     #define DEF_ETOATO(name,eto,ato) static BYTE DAQ_##name##_ETO=eto; static BYTE DAQ_##name##_ATO=ato;
311     #define ETOATO(name) DAQ_##name##_ETO,DAQ_##name##_ATO
312    
313    
314    
315    
316     #ifdef I386
317     #define TEMP_BUF_LEN (64*1024)
318     #else
319     #define TEMP_BUF_LEN (SM_SRAMPAGESIZE*2)
320     #endif // I386
321    
322     /*============================== global types ==============================*/
323    
324    
325    
326    
327     /*****************************************************************************/
328     /*=========================== Structure define ==============================*/
329    
330     /* this resurse is protected from the DAQ_BUF_INFN_RES */
331    
332     static DAQ_CMD_BUF tempbuf;
333     static BYTE __tempbuf[TEMP_BUF_LEN];
334    
335     static unsigned int DAQ_FLASH_SECTOR_DIM_KB[DAQ_FLASH_N_SECTOR] = {16,8,8,32,64,64,64,64,64,64,64,64,64,64,64,64,64,64};
336     static unsigned int DAQ_FLASH_SECTOR_LADDR[DAQ_FLASH_N_SECTOR];
337     static unsigned int DAQ_FLASH_SECTOR_UADDR[DAQ_FLASH_N_SECTOR];
338    
339     /*****************************************************************************/
340     /*============================ Enumerate define =============================*/
341    
342     /*****************************************************************************/
343    
344     /*=== ZZZ I N T E R N A L ==*/
345    
346     /*****************************************************************************/
347    
348     /* Exec Time Out and Answer Time Out definitions . To be defined */
349    
350    
351    
352    
353     DEF_ETOATO(FLASH_SECTORERASE,0,0);
354     DEF_ETOATO(FLASH_SETADDRESS,0,0);
355     DEF_ETOATO(FLASH_WRITEDATA,0,0);
356     DEF_ETOATO(FLASH_ENDBLOCK,0,0);
357     DEF_ETOATO(FLASH_READDATA,0,0);
358    
359     /* READDATA / WRITEDATA ETO depends on length of the stream. */
360    
361     DEF_ETOATO(RAM_SETADDRESS,2,1);
362     DEF_ETOATO(RAM_WRITEDATA,2,1);
363     DEF_ETOATO(RAM_ENDBLOCK,2,1);
364     DEF_ETOATO(RAM_READDATA,2,1);
365    
366     DEF_ETOATO(DSP_STARTPROGRAM,2,1);
367     DEF_ETOATO(DSP_SETADDRESS,2,1);
368     DEF_ETOATO(DSP_WRITEDATA,2,1);
369     DEF_ETOATO(DSP_READDATA,2,1);
370     DEF_ETOATO(DSP_RESET,2,1);
371     DEF_ETOATO(DSP_FLAGREAD,2,1);
372     DEF_ETOATO(DSP_CHECKMEMORY,2,1);
373    
374    
375    
376     #ifndef I386
377     #define DAQ_FORMAT_OPCODE_CMD_TEMPLATE(function1,function2) status_code s1,s2; \
378     if( (s1=OS_piResourceObtain_INFN(DAQ_BUF_INFN_RES,RTEMS_WAIT,RTEMS_NO_TIMEOUT)) != SUCCESSFUL) \
379     return s1; \
380     s1=function1; \
381     if(s1 == DAQ_SC_SUCCESSFUL) \
382     s2 = function2; \
383     OS_piResourceRelease_INFN(DAQ_BUF_INFN_RES); \
384     if(s1 != DAQ_SC_SUCCESSFUL) \
385     return s1; \
386     return s2
387     #else
388     #define DAQ_FORMAT_OPCODE_CMD_TEMPLATE(function1,function2) status_code s1,s2; \
389     s1=function1; \
390     if(s1 == DAQ_SC_SUCCESSFUL) \
391     s2 = function2; \
392     if(s1 != DAQ_SC_SUCCESSFUL) \
393     return s1; \
394     return s2
395     #endif // I386
396    
397     /* coocked commands: */
398    
399     DAQ_DECLBUF(readdata,1);
400     DAQ_DECLBUF(nullbuf,1);
401    
402     void DAQ_Init_CoockedCommands() {
403     DAQ_BUFFER_INIT(readdata);
404     DAQ_BUFFER_INIT(nullbuf);
405     }
406    
407     status_code DAQ_Init() {
408     int i;
409     unsigned int prec=-1;
410     for(i=0;i<DAQ_FLASH_N_SECTOR;i++) {
411     DAQ_FLASH_SECTOR_LADDR[i]=prec+1;
412     prec=DAQ_FLASH_SECTOR_UADDR[i]=DAQ_FLASH_SECTOR_LADDR[i]+DAQ_FLASH_SECTOR_DIM_KB[i]*1024;
413     }
414     DAQ_Format_CMD_Init(&tempbuf,TEMP_BUF_LEN,0,__tempbuf);
415     DAQ_Init_CoockedCommands();
416     return DAQ_SC_SUCCESSFUL;
417     }
418    
419    
420     status_code DAQ_Format_CMD_Init(DAQ_CMD_BUF *cmdbuf,unsigned int size,unsigned int len,BYTE *buf) {
421     cmdbuf->size=size;
422     cmdbuf->len=len;
423     cmdbuf->buf=buf;
424     cmdbuf->eto = DAQ_ETO_UNSET;
425     cmdbuf->ato = DAQ_ATO_UNSET;
426     cmdbuf->crc16 = 0;
427     cmdbuf->crc8 = 0;
428     return DAQ_SC_SUCCESSFUL;
429     }
430    
431     status_code DAQ_Format_CMD_Fill(DAQ_CMD_BUF *cmdbuf,unsigned int len,BYTE pattern) {
432     int i;
433     DAQ_CTRL_SET_LEN(cmdbuf,len);
434     for(i=0;i<len;i++)
435     cmdbuf->buf[i]=pattern;
436     return DAQ_SC_SUCCESSFUL;
437     }
438    
439    
440     #ifdef TEST_I
441     status_code DAQ_BufDump(DAQ_CMD_BUF *b) {
442     static char str[100];
443     int i;
444     sprintf(str,"BufDump: Len:%d ETO:%d ATO:%d",b->len,b->eto,b->ato);
445    
446     #ifdef I386
447     // printf("%s\n",str);
448     #else
449     //TS_piWriteOnUART(str);
450     LU_WriteOnUART(str);
451     #endif // I386
452    
453    
454     for(i=0;i<b->len;i++) {
455     sprintf(str,"0x%x",b->buf[i]);
456    
457     #ifdef I386
458     printf("%s\n",str);
459     #else
460     // TS_piWriteOnUART(str);
461     LU_WriteOnUART(str);
462     #endif // I386
463    
464    
465     }
466    
467     #ifdef I386
468     //printf("BufDump END\n");
469     #else
470     // TS_piWriteOnUART("BufDump END");
471     LU_WriteOnUART("BufDump END");
472     #endif // I386
473     return SUCCESSFUL;
474     }
475     #endif
476    
477     status_code DAQ_Format_AppendBuffer_offset(DAQ_CMD_BUF *target,DAQ_CMD_BUF *source,unsigned int offset) {
478     unsigned int l=target->len;
479     // TBD: what to do with ETO/ATO ?
480     if(offset >= source->len)
481     {
482     return CM_RC_INVALID_BUFFER_SIZE;
483     }
484     DAQ_CTRL_SET_LEN(target,target->len+source->len-offset);
485     memcpy(&target->buf[l],&source->buf[offset],source->len-offset);
486     return DAQ_SC_SUCCESSFUL;
487     }
488    
489    
490     status_code DAQ_Format_AppendBuffer(DAQ_CMD_BUF *target,DAQ_CMD_BUF *source) {
491     unsigned int l=target->len;
492     // TBD: what to do with ETO/ATO ?
493     DAQ_CTRL_SET_LEN(target,target->len+source->len);
494     memcpy(&target->buf[l],source->buf,source->len);
495     return DAQ_SC_SUCCESSFUL;
496     }
497    
498     status_code DAQ_Format_CopyBuffer(DAQ_CMD_BUF *target,DAQ_CMD_BUF *source) {
499     // emtpy the buffer:
500     if( target->size < source->len)
501     return DAQ_SC_DAQ_BUF_NO_SPACE_LEFT;
502     target->len=source->len;
503     target->eto=source->eto;
504     target->ato=source->ato;
505     memcpy(&target->buf[0],source->buf,source->len);
506     return DAQ_SC_SUCCESSFUL;
507     }
508    
509    
510     status_code DAQ_Compute_CRC16(DAQ_CMD_BUF *b) {
511     b->crc16=CM_Compute_CRC16 (0,b->buf,b->len);
512     return CM_RC_SUCCESSFUL;
513     }
514    
515    
516     status_code DAQ_Compute_CRC8 (DAQ_CMD_BUF *b) {
517     b->crc8 =CM_Compute_CRC8_8 (0,b->buf,b->len);
518     return CM_RC_SUCCESSFUL;
519     }
520    
521    
522    
523     status_code DAQ_Format_CMD(BOOL append,DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF *devcmd,
524     DAQ_OPCODE opcode,DAQ_FE fe,BYTE esectimeout,BYTE anstimeout) {
525     BYTE *tbuf=idaqcmd->buf;
526     BYTE *ssbuf=devcmd->buf;
527     BYTE npk,rem,i;
528     BYTE islong=devcmd->len > DAQ_SSBUF_SHORTCMD_LIMIT;
529     status_code s;
530     unsigned int flen,idaqcmd_len;
531    
532     if(islong) {
533     npk=(devcmd->len-DAQ_SSBUF_SHORTCMD_LIMIT) / DAQ_SSBUF_LONGCMD_LIMIT;
534     rem=(devcmd->len-DAQ_SSBUF_SHORTCMD_LIMIT) % DAQ_SSBUF_LONGCMD_LIMIT;
535     flen=devcmd->len+4+npk+(rem?1:0);
536     }else{
537     flen=devcmd->len+4;
538     }
539    
540     if(append==DAQ_APPEND) {
541     idaqcmd_len = idaqcmd->len + flen;
542     tbuf=&idaqcmd->buf[idaqcmd->len];
543     }else{
544     idaqcmd_len = flen;
545     }
546    
547     if(idaqcmd_len > idaqcmd->size)
548     return DAQ_SC_DAQ_BUF_NO_SPACE_LEFT;
549    
550     idaqcmd->len = idaqcmd_len;
551    
552    
553     // 0 (1) | cmd length (7)
554     *tbuf++ =islong ? 0x7F : 0x7F & devcmd->len+3;
555     // Opcode (4) | #link (4):
556     *tbuf++ =(opcode << 4) | ( ((BYTE)fe) & 0x0F);
557     // Esec timeout (4) | ans timeout (4):
558     *tbuf++ =(esectimeout << 4) | (anstimeout & 0x0F);
559     if(islong) {
560     memcpy(tbuf,ssbuf,DAQ_SSBUF_SHORTCMD_LIMIT);
561     ssbuf+=DAQ_SSBUF_SHORTCMD_LIMIT;
562     tbuf+=DAQ_SSBUF_SHORTCMD_LIMIT;
563     for(i=0;i<npk;i++) {
564     *tbuf++=0x7F;
565     memcpy(tbuf,ssbuf,DAQ_SSBUF_LONGCMD_LIMIT);
566     ssbuf+=DAQ_SSBUF_LONGCMD_LIMIT;
567     tbuf+=DAQ_SSBUF_LONGCMD_LIMIT;
568     }
569     if(rem) {
570     *tbuf++=rem+1;
571     memcpy(tbuf,ssbuf,rem);
572     tbuf+=rem;
573     }
574     }else{
575     memcpy(tbuf,ssbuf,devcmd->len);
576     tbuf+=devcmd->len;
577     }
578     *tbuf++=0xAA;
579     return DAQ_SC_SUCCESSFUL;
580     }
581    
582    
583     status_code DAQ_Format_OneByteCmd(DAQ_CMD_BUF* cmdbuffer,BYTE cmd) {
584     DAQ_CTRL_SET_LEN(cmdbuffer,1);
585     cmdbuffer->buf[0]=cmd;
586     return DAQ_SC_SUCCESSFUL;
587     }
588    
589    
590     status_code DAQ_Format_Flash_SectorErase(DAQ_CMD_BUF* cmdbuffer,BYTE sector) {
591     DAQ_CTRL_SET_LEN(cmdbuffer,2);
592     cmdbuffer->buf[0]=0x1E;
593     if(sector > 0x11) {
594     #ifndef I386
595     LU_INFN_LOG(LU_INTERNAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,sector);
596     #endif // I386
597     return DAQ_SC_BAD_FLASH_SECTOR;
598     }
599     cmdbuffer->buf[1]=sector;
600     cmdbuffer->eto = DAQ_FLASH_SECTORERASE_ETO;
601     cmdbuffer->ato = DAQ_FLASH_SECTORERASE_ATO;
602     return DAQ_SC_SUCCESSFUL;
603     }
604    
605    
606     status_code DAQ_Format_Flash_SetAddress(DAQ_CMD_BUF* cmdbuffer,unsigned int addr) {
607     DAQ_CTRL_SET_LEN(cmdbuffer,4);
608     cmdbuffer->buf[0]=0x2D;
609     cmdbuffer->buf[1]=(BYTE) (addr & 0x000000ff);
610     cmdbuffer->buf[2]=(BYTE) ((addr & 0x0000ff00) >> 8);
611     cmdbuffer->buf[3]=(BYTE) ((addr & 0x00ff0000) >> 16);
612     cmdbuffer->eto = DAQ_FLASH_SETADDRESS_ETO;
613     cmdbuffer->ato = DAQ_FLASH_SETADDRESS_ATO;
614     return DAQ_SC_SUCCESSFUL;
615     }
616    
617     status_code DAQ_Format_Flash_WriteData(DAQ_CMD_BUF* cmdbuffer,DAQ_CMD_BUF *data) {
618     DAQ_CTRL_SET_LEN(cmdbuffer,1);
619     cmdbuffer->buf[0]=0x33;
620     DAQ_Format_AppendBuffer(cmdbuffer,data);
621    
622     cmdbuffer->eto = DAQ_FLASH_WRITEDATA_ETO;
623     cmdbuffer->ato = DAQ_FLASH_WRITEDATA_ATO;
624    
625     return DAQ_SC_SUCCESSFUL;
626     }
627    
628     status_code DAQ_Format_Flash_EndBlock(DAQ_CMD_BUF* cmdbuffer) {
629     cmdbuffer->eto = DAQ_FLASH_ENDBLOCK_ETO;
630     cmdbuffer->ato = DAQ_FLASH_ENDBLOCK_ATO;
631     return DAQ_Format_OneByteCmd(cmdbuffer,0x55);
632     }
633    
634     status_code DAQ_Format_Flash_ReadData(DAQ_CMD_BUF* cmdbuffer) {
635     cmdbuffer->eto = DAQ_FLASH_READDATA_ATO;
636     cmdbuffer->ato = DAQ_FLASH_READDATA_ATO;
637     return DAQ_Format_OneByteCmd(cmdbuffer,0x4B);
638     }
639    
640    
641     status_code DAQ_Format_Ram_SetAddress(DAQ_CMD_BUF* cmdbuffer,unsigned int addr) {
642     DAQ_CTRL_SET_LEN(cmdbuffer,4);
643     cmdbuffer->buf[0]=0x2D;
644     cmdbuffer->buf[1]=(BYTE) (addr & 0x000000ff);
645     cmdbuffer->buf[2]=(BYTE) ((addr & 0x0000ff00) >> 8);
646     cmdbuffer->buf[3]=(BYTE) ((addr & 0x00ff0000) >> 16);
647     cmdbuffer->eto = DAQ_RAM_SETADDRESS_ETO;
648     cmdbuffer->ato = DAQ_RAM_SETADDRESS_ATO;
649     return DAQ_SC_SUCCESSFUL;
650     }
651    
652    
653     status_code DAQ_Format_Ram_WriteData(DAQ_CMD_BUF* cmdbuffer,DAQ_CMD_BUF *data) {
654     DAQ_CTRL_SET_LEN(cmdbuffer,1);
655     cmdbuffer->buf[0]=0x33;
656     DAQ_Format_AppendBuffer(cmdbuffer,data);
657    
658     cmdbuffer->eto = DAQ_RAM_WRITEDATA_ETO;
659     cmdbuffer->ato = DAQ_RAM_WRITEDATA_ATO;
660    
661     return DAQ_SC_SUCCESSFUL;
662     }
663    
664     status_code DAQ_Format_Ram_EndBlock(DAQ_CMD_BUF* cmdbuffer) {
665     cmdbuffer->eto = DAQ_RAM_ENDBLOCK_ETO;
666     cmdbuffer->ato = DAQ_RAM_ENDBLOCK_ATO;
667     return DAQ_Format_OneByteCmd(cmdbuffer,0x55);
668     }
669    
670     status_code DAQ_Format_Ram_ReadData(DAQ_CMD_BUF* cmdbuffer) {
671    
672    
673     cmdbuffer->eto = DAQ_RAM_READDATA_ETO;
674     cmdbuffer->ato = DAQ_RAM_READDATA_ATO;
675    
676     return DAQ_Format_OneByteCmd(cmdbuffer,0x4b);
677     }
678    
679    
680     status_code DAQ_Format_Dsp_StartProgram(DAQ_CMD_BUF* cmdbuffer) {
681     cmdbuffer->eto = DAQ_DSP_STARTPROGRAM_ETO;
682     cmdbuffer->ato = DAQ_DSP_STARTPROGRAM_ATO;
683     return DAQ_Format_OneByteCmd(cmdbuffer,0x1E);
684     }
685    
686     status_code DAQ_Format_Dsp_SetAddress(DAQ_CMD_BUF* cmdbuffer,BOOL PMDM,unsigned int addr) {
687     DAQ_CTRL_SET_LEN(cmdbuffer,3);
688     cmdbuffer->buf[0]=0x2d;
689     cmdbuffer->buf[1]= (BYTE) ( ((PMDM ? 1 : 0) << 7) | ( (addr & 0x00007F00) >> 8 ) );
690     cmdbuffer->buf[2]= (BYTE) ( addr & 0x000000FF );
691     cmdbuffer->eto = DAQ_DSP_SETADDRESS_ETO;
692     cmdbuffer->ato = DAQ_DSP_SETADDRESS_ATO;
693     return DAQ_SC_SUCCESSFUL;
694     }
695    
696     status_code DAQ_Format_Dsp_SetAddressPM(DAQ_CMD_BUF* cmdbuffer,unsigned int addr) {
697     return DAQ_Format_Dsp_SetAddress(cmdbuffer,0,addr);
698     }
699    
700     status_code DAQ_Format_Dsp_SetAddressDM(DAQ_CMD_BUF* cmdbuffer,unsigned int addr) {
701     return DAQ_Format_Dsp_SetAddress(cmdbuffer,1,addr);
702     }
703    
704     status_code DAQ_Format_Dsp_WriteData(DAQ_CMD_BUF* cmdbuffer,DAQ_CMD_BUF *data) {
705     DAQ_CTRL_SET_LEN(cmdbuffer,2);
706     cmdbuffer->buf[0]=0x33;
707     cmdbuffer->buf[1]=(BYTE) data->len;
708    
709     cmdbuffer->eto = DAQ_DSP_WRITEDATA_ETO;
710     cmdbuffer->ato = DAQ_DSP_WRITEDATA_ATO;
711    
712     return DAQ_Format_AppendBuffer(cmdbuffer,data);
713     }
714    
715     status_code DAQ_Format_Dsp_ReadData(DAQ_CMD_BUF* cmdbuffer) {
716    
717     cmdbuffer->eto = DAQ_DSP_READDATA_ETO;
718     cmdbuffer->ato = DAQ_DSP_READDATA_ATO;
719    
720     return DAQ_Format_OneByteCmd(cmdbuffer,0x4b);
721     }
722    
723     status_code DAQ_Format_Dsp_CheckMemory(DAQ_CMD_BUF* cmdbuffer) {
724     cmdbuffer->eto = DAQ_DSP_CHECKMEMORY_ETO;
725     cmdbuffer->ato = DAQ_DSP_CHECKMEMORY_ATO;
726     return DAQ_Format_OneByteCmd(cmdbuffer,0x55);
727     }
728    
729     status_code DAQ_Format_Dsp_ResetDSP(DAQ_CMD_BUF* cmdbuffer) {
730     cmdbuffer->eto = DAQ_DSP_RESET_ETO;
731     cmdbuffer->ato = DAQ_DSP_RESET_ATO;
732     return DAQ_Format_OneByteCmd(cmdbuffer,0x66);
733     }
734    
735    
736    
737     status_code DAQ_Format_Dsp_FlagRead(DAQ_CMD_BUF* cmdbuffer) {
738     cmdbuffer->eto = DAQ_DSP_FLAGREAD_ETO;
739     cmdbuffer->ato = DAQ_DSP_FLAGREAD_ATO;
740     return DAQ_Format_OneByteCmd(cmdbuffer,0x78);
741     }
742    
743    
744    
745     // ----------------------- Functions to format "IDAQ" Commands -------------------------
746    
747     /*
748     * DAQ_Format_Fe2Daq
749     *
750     * Appends into the buffer 'idaqbuf' the "Fe2Daq" IDAQ command.
751     *
752     * Input:
753     * cmdbuffer: the buffer containing the command for the FE
754     * link : the link to send the command to
755     * ETO/ATO information is transfered from cmdbuffer
756     * Output:
757     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
758     * end of this buffer.
759     * Return:
760     * see DAQ_STATUS_CODE
761     *
762     */
763    
764     status_code DAQ_Format_Fe2Daq(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
765     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_FE2DAQ,link,
766     cmdbuffer->eto,cmdbuffer->ato);
767     }
768    
769    
770     /*
771     * DAQ_Format_Fe2Ram
772     *
773     * Appends into the buffer 'idaqbuf' the "Fe2Ram" IDAQ command.
774     *
775     * Input:
776     * cmdbuffer: the buffer containing the command for the FE
777     * link : the link to send the command to
778     * ETO/ATO information is transfered from cmdbuffer
779     * Output:
780     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
781     * end of this buffer.
782     * Return:
783     * see DAQ_STATUS_CODE
784     *
785     */
786    
787     status_code DAQ_Format_Fe2Ram(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
788     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_FE2RAM,link,
789     cmdbuffer->eto,cmdbuffer->ato);
790     }
791    
792     /*
793     * DAQ_Format_Fe2Dsp
794     *
795     * Appends into the buffer 'idaqbuf' the "Fe2Dsp" IDAQ command.
796     *
797     * Input:
798     * cmdbuffer: the buffer containing the command for the FE
799     * link : the link to send the command to.
800     * ETO/ATO information is transfered from cmdbuffer
801     * Output:
802     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
803     * end of this buffer.
804     * Return:
805     * see DAQ_STATUS_CODE
806     *
807     */
808    
809     status_code DAQ_Format_Fe2Dsp(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
810     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_FE2DSP,link,
811     cmdbuffer->eto,cmdbuffer->ato);
812     }
813    
814     /*
815     * DAQ_Format_Dsp2Daq
816     *
817     * Appends into the buffer 'idaqbuf' the "Dsp2Daq" IDAQ command.
818     *
819     * Input:
820     * cmdbuffer: the buffer containing the command for the DSP.
821     * ETO/ATO information is transfered from cmdbuffer
822     *
823     * Output:
824     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
825     * end of this buffer.
826     * Return:
827     * see DAQ_STATUS_CODE
828     *
829     */
830    
831     status_code DAQ_Format_Dsp2Daq(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
832     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_DSP2DAQ,DAQ_FE_SPARE,
833     cmdbuffer->eto,cmdbuffer->ato);
834     }
835    
836     /*
837     * DAQ_Format_Dsp2Ram
838     *
839     * Appends into the buffer 'idaqbuf' the "Dsp2Ram" IDAQ command.
840     *
841     * Input:
842     * cmdbuffer: the buffer containing the command for the DSP
843     * ETO/ATO information is transfered from cmdbuffer
844     * Output:
845     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
846     * end of this buffer.
847     * Return:
848     * see DAQ_STATUS_CODE
849     *
850     */
851    
852     status_code DAQ_Format_Dsp2Ram(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
853     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_DSP2RAM,DAQ_FE_SPARE,
854     cmdbuffer->eto,cmdbuffer->ato);
855     }
856     /*
857     * DAQ_Format_Flash2Dsp
858     *
859     * Appends into the buffer 'idaqbuf' the "Flash2Dsp" IDAQ command.
860     *
861     * Input:
862     * cmdbuffer: the buffer containing the command for the DSP
863     * ETO/ATO information is transfered from cmdbuffer to idaqbuf
864     * Output:
865     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
866     * end of this buffer.
867     * Return:
868     * see DAQ_STATUS_CODE
869     *
870     */
871    
872     status_code DAQ_Format_Flash2Dsp(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
873     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_FLASH2DSP,DAQ_FE_SPARE,
874     cmdbuffer->eto,cmdbuffer->ato);
875     }
876    
877     /*
878     * DAQ_Format_Flash2Dsp
879     *
880     * Appends into the buffer 'idaqbuf' the "Flash2Fe" IDAQ command.
881     *
882     * Input:
883     * cmdbuffer: the buffer containing the command for the Flash
884     * ETO/ATO information is transfered from cmdbuffer
885     * link : the link to send the command to.
886     * Output:
887     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
888     * end of this buffer.
889     * Return:
890     * see DAQ_STATUS_CODE
891     *
892     */
893    
894     status_code DAQ_Format_Flash2Fe(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
895     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_FLASH2FE,link,
896     cmdbuffer->eto,cmdbuffer->ato);
897     }
898    
899     /*
900     * DAQ_Format_Ram2Daq
901     *
902     * Appends into the buffer 'idaqbuf' the "Ram2Daq" IDAQ command.
903     *
904     * Input:
905     * cmdbuffer: the buffer containing the command for the IDAQ RAM
906     * ETO/ATO information is transfered from cmdbuffer
907     * Output:
908     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
909     * end of this buffer.
910     * Return:
911     * see DAQ_STATUS_CODE
912     *
913     */
914    
915    
916     status_code DAQ_Format_Ram2Daq(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
917     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_RAM2DAQ,DAQ_FE_SPARE,cmdbuffer->eto,cmdbuffer->ato);
918     }
919    
920     /*
921     * DAQ_Format_Ram2Dsp
922     *
923     * Appends into the buffer 'idaqbuf' the "Ram2Dsp" IDAQ command.
924     *
925     * Input:
926     * cmdbuffer: the buffer containing the command for the IDAQ DSP
927     * ETO/ATO information is transfered from cmdbuffer
928     * Output:
929     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
930     * end of this buffer.
931     * Return:
932     * see DAQ_STATUS_CODE
933     *
934     */
935    
936    
937     status_code DAQ_Format_Ram2Dsp(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
938     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_RAM2DSP,DAQ_FE_SPARE,
939     cmdbuffer->eto,cmdbuffer->ato);
940     }
941    
942    
943     /*
944     * DAQ_Format_ReleaseBusy
945     *
946     * Appends into the buffer 'idaqbuf' the "ReleaseBusy" IDAQ command.
947     *
948     * Output:
949     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
950     * end of this buffer.
951     * Return:
952     * see DAQ_STATUS_CODE
953     *
954     */
955    
956     status_code DAQ_Format_ReleaseBusy(DAQ_CMD_BUF* idaqcmd) {
957     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,&nullbuf,DAQ_OP_RELEASEBUSY,DAQ_FE_SPARE,
958     DAQ_RELEASEBUSY_ETO,DAQ_RELEASEBUSY_ATO);
959     }
960    
961    
962    
963     status_code DAQ_Format_Spare(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
964     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_SPARE,DAQ_FE_SPARE,
965     cmdbuffer->eto,cmdbuffer->ato);
966     }
967    
968    
969     /*
970     * DAQ_Format_Cmd2Fe
971     *
972     * Appends into the buffer 'idaqbuf' the "Cmd2Fe" IDAQ command.
973     *
974     * Input:
975     * cmdbuffer: the buffer to send to the FE
976     * ETO/ATO information is transfered from cmdbuffer
977     * link : the link ID of the FE
978     * Output:
979     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
980     * end of this buffer.
981     * Return:
982     * see DAQ_STATUS_CODE
983     *
984     */
985     status_code DAQ_Format_Cmd2Fe(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
986     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_CMD2FE,link,
987     cmdbuffer->eto,cmdbuffer->ato);
988     }
989    
990    
991     /*
992     * DAQ_Format_Cmd2Flash
993     *
994     * Appends into the buffer 'idaqbuf' the "Cmd2Flash" IDAQ command.
995     *
996     * Input:
997     * cmdbuffer: the buffer containing the command for the IDAQ Flash
998     * ETO/ATO information is transfered from cmdbuffer
999     * Output:
1000     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1001     * end of this buffer.
1002     * Return:
1003     * see DAQ_STATUS_CODE
1004     *
1005     */
1006     status_code DAQ_Format_Cmd2Flash(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
1007     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_CMD2FLASH,DAQ_FE_SPARE,
1008     cmdbuffer->eto,cmdbuffer->ato);
1009     }
1010    
1011     /*
1012     * DAQ_Format_Cmd2Dsp
1013     *
1014     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command.
1015     *
1016     * Input:
1017     * cmdbuffer: the buffer containing the command for the IDAQ DSP
1018     * ETO/ATO information is transfered from cmdbuffer
1019     * Output:
1020     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1021     * end of this buffer.
1022     * Return:
1023     * see DAQ_STATUS_CODE
1024     *
1025     */
1026     status_code DAQ_Format_Cmd2Dsp(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
1027     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_CMD2DSP,DAQ_FE_SPARE,
1028     cmdbuffer->eto,cmdbuffer->ato);
1029     }
1030    
1031     /*
1032     * DAQ_Format_Cmd2Flash
1033     *
1034     * Appends into the buffer 'idaqbuf' the "Cmd2Ram" IDAQ command.
1035     *
1036     * Input:
1037     * cmdbuffer: the buffer containing the command for the IDAQ RAM
1038     * ETO/ATO information is transfered from cmdbuffer
1039     * Output:
1040     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1041     * end of this buffer.
1042     * Return:
1043     * see DAQ_STATUS_CODE
1044     *
1045     */
1046     status_code DAQ_Format_Cmd2Ram(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer) {
1047     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_CMD2RAM,DAQ_FE_SPARE,
1048     cmdbuffer->eto,cmdbuffer->ato
1049     );
1050     }
1051    
1052    
1053     /*
1054     * DAQ_Format_Ram2Fe
1055     *
1056     * Appends into the buffer 'idaqbuf' the "Ram2Fe" IDAQ command.
1057     *
1058     * Input:
1059     * cmdbuffer: the buffer containing the command for the IDAQ RAM
1060     * ETO/ATO information is transfered from cmdbuffer
1061     * Output:
1062     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1063     * end of this buffer.
1064     * Return:
1065     * see DAQ_STATUS_CODE
1066     *
1067     */
1068     status_code DAQ_Format_Ram2Fe(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* cmdbuffer,DAQ_FE link) {
1069     return DAQ_Format_CMD(DAQ_APPEND,idaqcmd,cmdbuffer,DAQ_OP_RAM2FE,link,
1070     cmdbuffer->eto,cmdbuffer->ato);
1071     }
1072    
1073     /*
1074     * DAQ_Format_Cmd2Ram_SetAddress
1075     *
1076     * Appends into the buffer 'idaqbuf' the "Cmd2Ram" IDAQ command that set the address for the RAM.
1077     *
1078     * Input:
1079     * cmdbuffer: the buffer to send to the FE
1080     * addr : the IDAQ RAM address to set to.
1081     * Output:
1082     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1083     * end of this buffer.
1084     *
1085     * Return:
1086     * see DAQ_STATUS_CODE
1087     *
1088     */
1089    
1090     status_code DAQ_Format_Cmd2Ram_SetAddress(DAQ_CMD_BUF* idaqcmd,unsigned int addr) {
1091     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1092     DAQ_Format_Ram_SetAddress(&tempbuf,addr),
1093     DAQ_Format_Cmd2Ram(idaqcmd,&tempbuf)
1094     );
1095     }
1096    
1097     /*
1098     * DAQ_Format_Cmd2Ram_WriteData
1099     *
1100     * Appends into the buffer 'idaqbuf' the "Cmd2Ram" IDAQ command that Write the data into the IDAQ RAM.
1101     *
1102     * Input:
1103     * data : the buffer containing the data to write.
1104     *
1105     * Output:
1106     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1107     * end of this buffer.
1108     *
1109     * Return:
1110     * see DAQ_STATUS_CODE
1111     *
1112     */
1113    
1114     status_code DAQ_Format_Cmd2Ram_WriteData (DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF* data) {
1115     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1116     DAQ_Format_Ram_WriteData(&tempbuf,data),
1117     DAQ_Format_Cmd2Ram(idaqcmd,&tempbuf)
1118     );
1119     }
1120    
1121    
1122    
1123    
1124     /*
1125     * DAQ_Format_Cmd2Ram_ReadData
1126     *
1127     * Appends into the buffer 'idaqbuf' the "Cmd2Ram" IDAQ command that Read data from the IDAQ RAM.
1128     *
1129     * Input:
1130     *
1131     *
1132     * Output:
1133     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1134     * end of this buffer.
1135     *
1136     * Return:
1137     * see DAQ_STATUS_CODE
1138     *
1139     */
1140    
1141     status_code DAQ_Format_Cmd2Ram_ReadData (DAQ_CMD_BUF* idaqcmd) {
1142     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1143     DAQ_Format_Ram_ReadData(&tempbuf),
1144     DAQ_Format_Cmd2Ram(idaqcmd,&tempbuf)
1145     );
1146     }
1147    
1148    
1149    
1150     /*
1151     * DAQ_Format_Cmd2Ram_EndBlock
1152     *
1153     * Appends into the buffer 'idaqbuf' the "Cmd2Ram" IDAQ command containg the "end block" command for the
1154     * IDAQ RAM.
1155     *
1156     * Output:
1157     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1158     * end of this buffer.
1159     *
1160     * Return:
1161     * see DAQ_STATUS_CODE
1162     *
1163     */
1164    
1165    
1166     status_code DAQ_Format_Cmd2Ram_EndBlock (DAQ_CMD_BUF* idaqcmd) {
1167     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1168     DAQ_Format_Ram_EndBlock(&tempbuf),
1169     DAQ_Format_Cmd2Ram(idaqcmd,&tempbuf)
1170     );
1171     }
1172    
1173     /*
1174     * DAQ_Format_Cmd2Dsp_StartProgram
1175     *
1176     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that send the "start program" command
1177     * to the IDAQ DSP
1178     *
1179     * Input:
1180     *
1181     * Output:
1182     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1183     * end of this buffer.
1184     *
1185     * Return:
1186     * see DAQ_STATUS_CODE
1187     *
1188     */
1189    
1190     status_code DAQ_Format_Cmd2Dsp_StartProgram(DAQ_CMD_BUF* idaqcmd) {
1191     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1192     DAQ_Format_Dsp_StartProgram(&tempbuf),
1193     DAQ_Format_Cmd2Dsp(idaqcmd,&tempbuf);
1194     );
1195     }
1196    
1197     /*
1198     * DAQ_Format_Cmd2Dsp_SetAddressPM
1199     *
1200     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that set the address for program memory
1201     * of the IDAQ DSP
1202     *
1203     * Input:
1204     * addr : the DSP program memory address to set to.
1205     *
1206     * Output:
1207     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1208     * end of this buffer.
1209     *
1210     * Return:
1211     * see DAQ_STATUS_CODE
1212     *
1213     */
1214    
1215    
1216     status_code DAQ_Format_Cmd2Dsp_SetAddressPM(DAQ_CMD_BUF* idaqcmd,unsigned int addr) {
1217     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1218     DAQ_Format_Dsp_SetAddressPM(&tempbuf,addr),
1219     DAQ_Format_Cmd2Dsp(idaqcmd,&tempbuf)
1220     );
1221     }
1222    
1223    
1224     /*
1225     * DAQ_Format_Cmd2Dsp_SetAddressDM
1226     *
1227     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that set the address for data memory
1228     * of the IDAQ DSP
1229     *
1230     * Input:
1231     * addr : the DSP data memory address to set to.
1232     *
1233     * Output:
1234     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1235     * end of this buffer.
1236     *
1237     * Return:
1238     * see DAQ_STATUS_CODE
1239     *
1240     */
1241    
1242    
1243     status_code DAQ_Format_Cmd2Dsp_SetAddressDM(DAQ_CMD_BUF* idaqcmd,unsigned int addr) {
1244     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1245     DAQ_Format_Dsp_SetAddressDM(&tempbuf,addr),
1246     DAQ_Format_Cmd2Dsp(idaqcmd,&tempbuf)
1247     );
1248     }
1249    
1250     /*
1251     * DAQ_Format_Cmd2Dsp_WriteData
1252     *
1253     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that write the data into the IDAQ DSP
1254     *
1255     * Input:
1256     * data : the buffer containing the data to write into the DSP.
1257     *
1258     * Output:
1259     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1260     * end of this buffer.
1261     *
1262     * Return:
1263     * see DAQ_STATUS_CODE
1264     *
1265     */
1266    
1267    
1268     status_code DAQ_Format_Cmd2Dsp_WriteData(DAQ_CMD_BUF* idaqcmd,DAQ_CMD_BUF *data) {
1269     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1270     DAQ_Format_Dsp_WriteData(&tempbuf,data),
1271     DAQ_Format_Cmd2Dsp(idaqcmd,&tempbuf)
1272     );
1273     }
1274    
1275     /*
1276     * DAQ_Format_Cmd2Dsp_CheckMemory
1277     *
1278     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that is "check memory" for the IDAQ DSP
1279     *
1280     * Input:
1281     *
1282     * Output:
1283     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1284     * end of this buffer.
1285     *
1286     * Return:
1287     * see DAQ_STATUS_CODE
1288     *
1289     */
1290    
1291    
1292     status_code DAQ_Format_Cmd2Dsp_CheckMemory(DAQ_CMD_BUF* cmdbuffer) {
1293     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1294     DAQ_Format_Dsp_CheckMemory(&tempbuf),
1295     DAQ_Format_Cmd2Dsp(cmdbuffer,&tempbuf)
1296     );
1297     }
1298    
1299     /*
1300     * DAQ_Format_Cmd2Dsp_CheckMemory
1301     *
1302     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that is "reset DSP" for the IDAQ DSP
1303     *
1304     * Input:
1305     *
1306     * Output:
1307     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1308     * end of this buffer.
1309     *
1310     * Return:
1311     * see DAQ_STATUS_CODE
1312     *
1313     */
1314    
1315    
1316     status_code DAQ_Format_Cmd2Dsp_ResetDSP(DAQ_CMD_BUF* cmdbuffer) {
1317     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1318     DAQ_Format_Dsp_ResetDSP(&tempbuf),
1319     DAQ_Format_Cmd2Dsp(cmdbuffer,&tempbuf)
1320     );
1321     }
1322    
1323     /*
1324     * DAQ_Format_Cmd2Dsp_FlagRea
1325     *
1326     * Appends into the buffer 'idaqbuf' the "Cmd2Dsp" IDAQ command that is "flag READ" for the IDAQ DSP
1327     *
1328     * Input:
1329     *
1330     * Output:
1331     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1332     * end of this buffer.
1333     *
1334     * Return:
1335     * see DAQ_STATUS_CODE
1336     *
1337     */
1338    
1339     status_code DAQ_Format_Cmd2Dsp_FlagRead(DAQ_CMD_BUF* cmdbuffer) {
1340     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1341     DAQ_Format_Dsp_FlagRead(&tempbuf),
1342     DAQ_Format_Cmd2Dsp(cmdbuffer,&tempbuf)
1343     );
1344     }
1345    
1346     /*
1347     * DAQ_Format_Cmd2Flash_SectorErase
1348     *
1349     * Appends into the buffer 'idaqbuf' the "Cmd2Flash" IDAQ command to Erase a flash sector
1350     *
1351     * Input:
1352     * sector : the IDAQ flash sector to erase.
1353     *
1354     * Output:
1355     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1356     * end of this buffer.
1357     *
1358     * Return:
1359     * see DAQ_STATUS_CODE
1360     *
1361     */
1362    
1363     status_code DAQ_Format_Cmd2Flash_SectorErase(DAQ_CMD_BUF* cmdbuffer,BYTE sector) {
1364     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1365     DAQ_Format_Flash_SectorErase(&tempbuf,sector),
1366     DAQ_Format_Cmd2Flash(cmdbuffer,&tempbuf)
1367     );
1368     }
1369    
1370    
1371     /*
1372     * DAQ_Format_Cmd2Flash_SetAddress
1373     *
1374     * Appends into the buffer 'idaqbuf' the "Cmd2Flash" IDAQ command to set the address for the Flash.
1375     *
1376     * Input:
1377     * addr : the IDAQ flash address to set to
1378     *
1379     * Output:
1380     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1381     * end of this buffer.
1382     *
1383     * Return:
1384     * see DAQ_STATUS_CODE
1385     *
1386     */
1387    
1388    
1389     status_code DAQ_Format_Cmd2Flash_SetAddress(DAQ_CMD_BUF* cmdbuffer,unsigned int addr) {
1390     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1391     DAQ_Format_Flash_SetAddress(&tempbuf,addr),
1392     DAQ_Format_Cmd2Flash(cmdbuffer,&tempbuf)
1393     );
1394     }
1395    
1396     /*
1397     * DAQ_Format_Cmd2Flash_SetAddress
1398     *
1399     * Appends into the buffer 'idaqbuf' the "Cmd2Flash" IDAQ command to Write data into
1400     * the IDAQ Flash
1401     *
1402     * Input:
1403     * data : the Buffer containing the data to write into the Flash
1404     *
1405     * Output:
1406     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1407     * end of this buffer.
1408     *
1409     * Return:
1410     * see DAQ_STATUS_CODE
1411     *
1412     */
1413    
1414     status_code DAQ_Format_Cmd2Flash_WriteData(DAQ_CMD_BUF* cmdbuffer,DAQ_CMD_BUF *data) {
1415     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1416     DAQ_Format_Flash_WriteData(&tempbuf,data),
1417     DAQ_Format_Cmd2Flash(cmdbuffer,&tempbuf)
1418     );
1419     }
1420     /*
1421     * DAQ_Format_Cmd2Flash_EndBlock
1422     *
1423     * Appends into the buffer 'idaqbuf' the "Cmd2Flash" IDAQ command that is 'end block'
1424     *
1425     * Input:
1426     *
1427     * Output:
1428     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1429     * end of this buffer.
1430     *
1431     * Return:
1432     * see DAQ_STATUS_CODE
1433     *
1434     */
1435    
1436     status_code DAQ_Format_Cmd2Flash_EndBlock(DAQ_CMD_BUF* cmdbuffer) {
1437     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1438     DAQ_Format_Flash_EndBlock(&tempbuf),
1439     DAQ_Format_Cmd2Flash(cmdbuffer,&tempbuf)
1440     );
1441     }
1442    
1443    
1444    
1445     /*
1446     * DAQ_Format_Ram2Daq_ReadData
1447     *
1448     * Appends into the buffer 'idaqbuf' the "Ram2Daq" IDAQ command that is 'read data'
1449     *
1450     * Input:
1451     *
1452     * Output:
1453     * idaqbuf : the new command queue for the IDAQ. New command formatted is appended into the
1454     * end of this buffer.
1455     *
1456     * Return:
1457     * see DAQ_STATUS_CODE
1458     *
1459     */
1460    
1461     status_code DAQ_Format_Ram2Daq_ReadData(DAQ_CMD_BUF* cmdbuffer) {
1462     DAQ_FORMAT_OPCODE_CMD_TEMPLATE(
1463     DAQ_Format_Ram_ReadData(&tempbuf),
1464     DAQ_Format_Ram2Daq(cmdbuffer,&tempbuf)
1465     );
1466     }
1467    
1468    
1469    
1470    
1471     #ifndef I386
1472    
1473     status_code DAQ_ReadStatusWord(UINT16 *statusword) {
1474     UINT16 combuf=0xAA;
1475     status_code s;
1476     s=HK_KHB_Cmd2FE(KHB_IDAQ,1,1,&combuf,statusword,10);
1477     if(s==CM_RC_SUCCESSFUL)
1478     /*@LOG Read IDAQ status word - idaq_st_word */
1479     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,*statusword);
1480     else
1481     /*@LOG Error reading IDAQ status word - status */
1482     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,s);
1483     return s;
1484     }
1485    
1486     status_code DAQ_WriteHeader2Buffer(DAQ_CMD_BUF *buffer,UINT32 counter,
1487     BYTE pkt_type,UINT32 len,TI_TIME obt) {
1488     BYTE *start;
1489     if(buffer->size - buffer->len < SM_PKTHEADER_LEN)
1490     return CM_RC_NO_SPACE_LEFT;
1491     start=(&(buffer->buf[buffer->len]));
1492    
1493     start[0]=PM_HEADER_1;
1494     start[1]=PM_HEADER_2;
1495     start[2]=PM_HEADER_3;
1496    
1497     start[3]=pkt_type;
1498     start[4]=pkt_type;
1499    
1500     start[5]=(counter>>16) & 0xff;
1501     start[6]=(counter>>8) & 0xff;
1502     start[7]=(counter & 0xff);
1503    
1504     start[8] =(obt>>24) & 0xFF;
1505     start[9] =(obt>>16) & 0xFF;
1506     start[10]=(obt>> 8) & 0xFF;
1507     start[11]=(obt ) & 0xFF;
1508    
1509    
1510     start[12]=(len>>16) & 0xff;
1511     start[13]=(len>>8 ) & 0xff;
1512     start[14]=(len ) & 0xff;
1513    
1514     start[15]=CM_Compute_CRC16(0,start,15) & 0xff;
1515     buffer->len+=SM_PKTHEADER_LEN;
1516    
1517     return CM_RC_SUCCESSFUL;
1518     }
1519    
1520     status_code DAQ_WaitFreeCMDIF() {
1521     UINT32 counter;
1522     UINT16 n=0;
1523     OS_piTaskSuspend(1);
1524     while( (counter=SD_piGetCMDCounterLeft()) > 0 && (n++ < PRH_VAR_DAQ_WAITFREECMDIF_N)) {
1525     OS_piTaskSuspend(2);
1526     }
1527     if(counter > 0)
1528     return CM_RC_CMDIF_BUSY;
1529     return CM_RC_SUCCESSFUL;
1530    
1531     }
1532    
1533     status_code DAQ_WaitAllExpPageAvail() {
1534     UINT32 counter=0;
1535     while( !PM_pi_AllExpPageAvail() && counter++ < PRH_VAR_ALLPAGEAVAIL_ATTEMPT)
1536     OS_piTaskSuspend(2);
1537     if(counter > PRH_VAR_ALLPAGEAVAIL_ATTEMPT)
1538     return CM_RC_CMDIF_BUSY;
1539     return CM_RC_SUCCESSFUL;
1540     }
1541    
1542    
1543     status_code DAQ_ResetPIF(UINT32 eto,UINT32 dto,SM_ACQMODE mode,BYTE pkttype) {
1544     status_code status;
1545    
1546     if ((status = DAQ_WaitFreeCMDIF()) == CM_RC_CMDIF_BUSY)
1547     {
1548     SD_piPIFReset();
1549     /*@LOG DAQ_ResetPIF: queue busy - status */
1550     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1551     }
1552    
1553     if(status = DAQ_WaitAllExpPageAvail())
1554     /*@LOG Page not available in DAQ_ResetPIF */
1555     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1556    
1557     SD_piSetEventTimeout(eto);
1558     SD_piSetDataTimeout(dto);
1559     PM_pi_SetAcqMode(mode);
1560     PM_pi_SetPktType(pkttype);
1561     return CM_RC_SUCCESSFUL;
1562     }
1563    
1564     BOOL DAQ_WaitFreePif() {
1565     UINT32 ppCounter=0;
1566     BOOL fullPIF;
1567     while( ( fullPIF = !PM_pi_ExpPageAvail() ) && ppCounter < PRH_VAR_RM_N_TRIES_PREPARE_PAGE) {
1568     ppCounter++;
1569     if(PRH_VAR_RM_TRIES_PREPARE_PAGE_SLEEP)
1570     OS_piTaskSuspend(PRH_VAR_RM_TRIES_PREPARE_PAGE_SLEEP);
1571     }
1572     return !fullPIF;
1573     }
1574    
1575    
1576     static status_code DAQ_SendCmd2PIFWaitDAQReply_internal(BOOL catch_sint,
1577     SM_PAGEID page,
1578     BOOL storemm,
1579     DAQ_CMD_BUF *reply,
1580     BOOL storeram,
1581     status_code (*callback)())
1582     {
1583    
1584     status_code status = CM_RC_SUCCESSFUL;
1585     status_code callback_status = CM_RC_SUCCESSFUL;
1586     rtems_event_set evout;
1587     unsigned int intLevel;
1588     unsigned int ppCounter;
1589     BOOL fullPIF;
1590    
1591     if(page < SM_CALEXP0 || page > SM_CALEXP3)
1592     return CM_RC_BADPAGE;
1593    
1594     if (storemm) {
1595     PM_pi_EnableStore_In_DataTimeOut();
1596     } else {
1597     PM_pi_DisableStore_In_DataTimeOut();
1598     }
1599    
1600     /* clear all events */
1601     OS_piEventClear(OS_EVENT_PKT_READY |
1602     // OS_EVENT_SINT |
1603     OS_EVENT_ETO |
1604     OS_EVENT_FLUSH_HB |
1605     OS_EVENT_UNCOMPLETED_CMDIF);
1606    
1607     PM_pi_UseCalibrationPage(page);
1608    
1609     OS_piInterDisable(&intLevel);
1610     SD_piClearInt(SD_DATA_TO | SD_PAGE_OVR | SD_EVT_TO);
1611     SD_piUnMaskInt(SD_DATA_TO | SD_PAGE_OVR | SD_EVT_TO);
1612     OS_piInterEnable(intLevel);
1613     // OS_piInterDisable(&intLevel);
1614    
1615     fullPIF=!DAQ_WaitFreePif();
1616     //OS_piInterEnable(intLevel);
1617    
1618     if(fullPIF) {
1619     /* TBD: Some alarm here ? */
1620     /* Reset the pif: */
1621     // SD_piPIFReset();
1622     /*@LOG fullPIFF in DAQ_SendCmd2PIFWaitDAQReply_internal - status */
1623     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1624     status=UNSATISFIED;
1625     }else{ //ca
1626     PM_pi_SetExpPktCpyFlag(storeram);
1627     status = PM_piPreparePage(TRUE);
1628     if(status!=CM_RC_SUCCESSFUL){
1629     /*@LOG PreparePage failed in DAQ_SendCmd2PIFWaitDAQReply_internal - status */
1630     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1631     PM_pi_SetExpPktCpyFlag(FALSE);
1632     return status;
1633     }
1634    
1635     if(callback != NULL)
1636     callback_status=callback();
1637    
1638     status=OS_piEventReceive(OS_EVENT_PKT_READY |
1639     (catch_sint ? OS_EVENT_SINT : 0) |
1640     OS_EVENT_ETO |
1641     OS_EVENT_FLUSH_HB |
1642     OS_EVENT_UNCOMPLETED_CMDIF,
1643     RTEMS_WAIT | RTEMS_EVENT_ANY ,
1644     PRH_VAR_DAQ_EVENT_RECEIVE_TIMEOUT,&evout);
1645    
1646     OS_piInterDisable(&intLevel);
1647     SD_piMaskInt(SD_DATA_TO | SD_PAGE_OVR | SD_EVT_TO);
1648     OS_piInterEnable(intLevel);
1649    
1650     if(callback_status != CM_RC_SUCCESSFUL)
1651     return callback_status;
1652    
1653     PM_pi_SetExpPktCpyFlag(FALSE);
1654     switch (status) {
1655     case SUCCESSFUL:
1656     if(evout & OS_EVENT_SINT) {
1657     PM_pi_DisableStore_In_DataTimeOut();
1658     status = CM_RC_SINT;
1659     }else if(evout & OS_EVENT_FLUSH_HB) {
1660     RM_WriteHBInfos(FALSE);
1661     }else if(evout & OS_EVENT_PKT_READY) {
1662     if (storeram && reply && reply->buf)
1663     {
1664     if (PM_pi_GetPacket(&(reply->len),reply->buf) == SM_STR_OK)
1665     status = CM_RC_SUCCESSFUL;
1666     else
1667     status = CM_RC_STOREERROR;
1668     }
1669     }else if(evout & OS_EVENT_ETO) {
1670     /* TBD: some alarm */
1671     status = CM_RC_RUNTIMEOUT;
1672     }else if(evout & OS_EVENT_UNCOMPLETED_CMDIF) {
1673     status = CM_RC_UNCOMPLETED_CMDIF;
1674     }
1675     break;
1676     case RTEMS_TIMEOUT:
1677     status = CM_RC_TIMEOUT;
1678     /*@LOG Timeout in DAQ_SendCmd2PIFWaitDAQReply_internal - status */
1679     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1680     break;
1681     default:
1682     status=UNSATISFIED;
1683     /*@LOG UNSATISFIED in DAQ_SendCmd2PIFWaitDAQReply_internal - status */
1684     LU_INFN_LOG(LU_CRITICAL|LU_HA,LU_MASK(__FILEID__),__FILEID__,__LINE__,status);
1685     break;
1686     }
1687     }
1688    
1689     return status;
1690     }
1691    
1692     status_code DAQ_SendCmd2PIFWaitDAQReply(SM_PAGEID page,BOOL storemm, DAQ_CMD_BUF *reply,BOOL storeram) {
1693     return DAQ_SendCmd2PIFWaitDAQReply_internal(DAQ_CATCH_SINT, page, storemm, reply, storeram,NULL);
1694     }
1695    
1696     status_code DAQ_SendCmd2PIFWaitDAQReply_NoSINT(SM_PAGEID page,BOOL storemm, DAQ_CMD_BUF *reply,BOOL storeram) {
1697     return DAQ_SendCmd2PIFWaitDAQReply_internal(DAQ_NO_CATCH_SINT, page, storemm, reply, storeram,NULL);
1698     }
1699    
1700     status_code DAQ_SendCmd2PIFWaitDAQReply_CallBack(SM_PAGEID page,BOOL storemm,
1701     DAQ_CMD_BUF *reply,
1702     BOOL storeram,
1703     status_code (*callback)()) {
1704     return DAQ_SendCmd2PIFWaitDAQReply_internal(DAQ_CATCH_SINT, page, storemm, reply, storeram,callback);
1705     }
1706    
1707    
1708     status_code DAQ_StoreCmdQueue2PIF(SM_PAGEID page,DAQ_CMD_BUF *buf) {
1709     status_code status=CM_RC_SUCCESSFUL;
1710     SM_STRSTAT s;
1711     if(buf) {
1712     s=PM_pi_CopyToSRAM(page , buf->buf , buf->len);
1713     if(s==SM_STR_OK)
1714     status=CM_RC_SUCCESSFUL;
1715     else
1716     status=CM_RC_STOREERROR;
1717     }else
1718     status=CM_RC_EMPTY_BUFFER;
1719     return status;
1720     }
1721    
1722     status_code DAQ_SendCmdQueue2CMDIF(SM_PAGEID page){
1723     UINT32 size;
1724     status_code status=CM_RC_SUCCESSFUL;
1725     SM_STRSTAT s;
1726    
1727     if(page < SM_CALEXP0 || page > SM_CALEXP3)
1728     status=CM_RC_BADPAGE;
1729    
1730     if(status==CM_RC_SUCCESSFUL){
1731     PM_pi_UseCalibrationPage(page);
1732     status = PM_piPreparePage(FALSE);
1733     if( status == CM_RC_SUCCESSFUL ) {
1734     if(status=DAQ_WaitFreeCMDIF())
1735     status =CM_RC_UNCOMPLETED_CMDIF;
1736     }
1737     /*
1738     size=PM_pi_GetDataLength(page);
1739     if(size == 0)
1740     status=CM_RC_EMPTY_BUFFER;
1741    
1742     if (status==CM_RC_SUCCESSFUL && FT_piSavePage(page,(page*SM_SRAMPAGESIZE) + size - 1, FS_CMD) != FT_SUCCESS)
1743     status=CM_RC_STOREERROR;
1744     else
1745     if(status=DAQ_WaitFreeCMDIF())
1746     status =CM_RC_UNCOMPLETED_CMDIF;
1747     */
1748     }
1749     return status;
1750     }
1751    
1752     status_code DAQ_SaveBuffer2MM(DAQ_CMD_BUF *buffer, FS_FILEID id,UINT32 timeout)
1753     {
1754     SM_STRSTAT strstat;
1755     status_code s=CM_RC_SUCCESSFUL;
1756     rtems_event_set out;
1757     if(buffer->len == 0)
1758     return CM_RC_EMPTY_BUFFER;
1759     if(id == FS_HK && timeout > 0) {
1760     /* wait for the OS_EVENT_SKETCHBOARD_FREE */
1761     s=OS_piEventReceive(OS_EVENT_SKETCHBOARD_FREE,RTEMS_WAIT,timeout,&out);
1762     if(s == RTEMS_TIMEOUT)
1763     s=CM_RC_TIMEOUT;
1764     }
1765     if ((s != CM_RC_TIMEOUT) &&
1766     (strstat = PM_pi_StorePacket(buffer->len,buffer->buf,id)) != SM_STR_OK) {
1767     s = CM_RC_STOREERROR;
1768     }
1769     //TDB
1770    
1771     return(s);
1772     }
1773    
1774    
1775    
1776    
1777    
1778     #endif // I386
1779    
1780    
1781    

  ViewVC Help
Powered by ViewVC 1.1.23