Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:45

0001 /* 
0002 ** fakeFrame.C
0003 ** 
0004 ** Author: $Author: dave $  
0005 **   Date: $Date: 2003/03/01 20:14:42 $ 
0006 ** 
0007 ** $Log: fakeFrame.C,v $
0008 ** Revision 1.2  2003/03/01 20:14:42  dave
0009 ** Put ifdef DEBUG around Debug_Output call instead of trying to define the call itself as a macro
0010 **
0011 ** Revision 1.1.1.1  2000/07/21 01:51:12  purschke
0012 ** mlp -- adding the new automakified "basic" module to CVS.
0013 **
0014 **
0015 ** Revision 1.6  1999/09/29 22:16:07  steinber
0016 ** mods to bring afs to nevis1 version
0017 **
0018 ** Revision 1.4  1998/12/11 22:02:01  markacs
0019 ** (stephen markacs) adding log into cvs tags
0020 ** 
0021 */
0022 
0023 #include <stdlib.h>
0024 #include <stdio.h>
0025 #include <malloc.h>
0026 #include "phenixOnline.h"
0027 #include "fakeFrame.h"
0028 #include "Cframe.h"
0029 #include "CframeV1.h"
0030 #include "packetRoutines.h"
0031 #include "frameRoutines.h"
0032 #include "framePublic.h"
0033 #include "formatIO.h"
0034 
0035 #define BUFFER_SIZE 65536
0036 
0037 int fakeFrame(
0038               PHDWORD* frame_ptr,
0039               int bufferSize,
0040               UINT sourceId,
0041               ALIGNBLK alignBlk,
0042               int number_of_packets,
0043               int packet_ids[], 
0044               int packet_lengths[],
0045               int historySize,
0046               int errorSize
0047               )
0048 {
0049   int remainingSpace;
0050   
0051   int total_frame_size;
0052   int maxFrameLen;
0053   PHDWORD* write_ptr;
0054   
0055   //  int total_data_words;
0056   PHDWORD data_arr[BUFFER_SIZE];
0057   UINT addr_arr[BUFFER_SIZE];
0058   int packetLength;
0059   int numBytes;
0060   
0061   int err;
0062   int i,j;
0063   int historyBlockSize;
0064   
0065   // Set registers and clear data buffer
0066   
0067   maxFrameLen = BUFFER_SIZE;
0068   dwordClear(&data_arr,BUFFER_SIZE);
0069   
0070   if ( (err = makeFrameHdr(frame_ptr,maxFrameLen,0x1,0x1, sourceId)) != 0 ){
0071     printf("FakeFrame: makeFrameHdr failed\n");
0072     return(-1);
0073   }
0074   
0075   setAlignBlock(frame_ptr,(PHDWORD*) &alignBlk,2);
0076   
0077   write_ptr = findFrameEnd(frame_ptr)+1;
0078   
0079   for (i = 0; i<number_of_packets;i++)
0080   {
0081     
0082     remainingSpace = bufferSize - (int) (write_ptr - frame_ptr);
0083     //printf("Remaining space = %d\n",remainingSpace);
0084     makeUnstructPacket(write_ptr,
0085       remainingSpace,
0086       packet_ids[i], //packetId
0087       sizeof(PHDWORD), //wordSize
0088       0  //hitformat
0089       );
0090 
0091 //    numBytes = packet_lengths[i] * sizeof(PHDWORD);
0092 
0093     numBytes = packet_lengths[i] ; // number of "words", actually
0094     
0095     for (j=0; j<packet_lengths[i];j++){
0096 //      data_arr[j]=packet_ids[i];
0097       data_arr[j]=j;
0098     }
0099     
0100     packetLength = storePacketHits(
0101       write_ptr,
0102       remainingSpace,
0103       addr_arr,
0104       (BYTE*) &data_arr,
0105       numBytes,
0106       0
0107       );
0108     extendFrameDataNopad(frame_ptr,bufferSize,packetLength);    
0109 #ifdef DEBUG
0110     Debug_Output("Packet %2d : Length = %d Total=%d\n",
0111          i,packetLength,getFrameDataLength(frame_ptr));
0112 #endif
0113     write_ptr += packetLength;
0114   }
0115   
0116   //  printf("1: Frame data length: %d\n",getFrameDataLength(frame_ptr));
0117   remainingSpace = bufferSize - (int) (write_ptr - frame_ptr);
0118   historyBlockSize = storeFrameHistory(frame_ptr,
0119     remainingSpace,
0120     (PHDWORD*) &data_arr,
0121     historySize);
0122   //  printf("2: Frame data length: %d\n",getFrameDataLength(frame_ptr));
0123   write_ptr += historyBlockSize;
0124   
0125   /*
0126   printf("Frame lengths: Header,Data,History = %d, %d, %d\n",
0127      getFrameHdrLength(frame_ptr),
0128    getFrameDataLength(frame_ptr),
0129    getFrameHistoryLength(frame_ptr)
0130    );
0131   */  
0132   
0133   total_frame_size = getFrameLength(frame_ptr);
0134   
0135   return total_frame_size;
0136   
0137 }
0138 
0139 int splitFakeFrame(
0140                    PHDWORD* frame_ptr,
0141                    int total_frame_size,
0142                    int length_of_buffer,
0143                    PHDWORD* start_of_buffer[]
0144                    )
0145 {
0146   int i,j;
0147   int number_of_buffers;
0148   PHDWORD* write_ptr;
0149   PHDWORD* write_ptr_buf;
0150   write_ptr = frame_ptr;
0151   
0152   number_of_buffers = total_frame_size / length_of_buffer + 1;
0153   
0154   for (i=0;i<number_of_buffers;i++){
0155     start_of_buffer[i] = (PHDWORD*) malloc(4*length_of_buffer);
0156     write_ptr_buf = start_of_buffer[i];
0157     
0158     for (j=0 ; j<length_of_buffer ; j++){
0159       *write_ptr_buf = *write_ptr; 
0160       write_ptr++;
0161       write_ptr_buf++;
0162     }
0163   }
0164   
0165   /*
0166   printf("\nFrame header from start_buffer[0]\n");
0167   dumpFrameHdr(start_of_buffer[0]);
0168   printf("\n");
0169   */
0170   
0171   return number_of_buffers;
0172   
0173 }
0174 
0175 
0176