Skip to content
Snippets Groups Projects
Commit f5a1e133 authored by Rolf Bork's avatar Rolf Bork
Browse files

Cleanup of ix daq code.

Added CRC calculation to dc_xmit, which is compared at dc_fb_rcv.
Moved heartbeat location of ix_multi_stream to ix_rcv_threads.


git-svn-id: https://redoubt.ligo-wa.caltech.edu/svn/advLigoRTS/trunk@4681 6dcd42c9-f523-4c6d-aada-af552506706e
parent f265049c
No related branches found
No related tags found
No related merge requests found
......@@ -14,6 +14,7 @@ This code is designed to transmit DAQ data via the Dolphin Networks in 2 fashion
only one data area.
Usage: ./ix_multi_stream -n 1 -g 2 -m "x1iopsam
2) ix_rcvr:
Function: This code receives data from ix_multi_stream.
Notes:
......@@ -24,5 +25,19 @@ This code is designed to transmit DAQ data via the Dolphin Networks in 2 fashion
3) ix_rcvr_threads:
Function: Receive data from multiple FE comuters using multiple
threads.
Usage: ./ix_rcvr_threads -rank 1 -group 2 -nodes 1
4) ix_dc_xmit:
Function: Pulls data from multi_cycle block shmmem on DC to FB network
Usage: ./ix_dc_xmit -g 1, where:
-g = Dolphin memory segment
-a = Dolphin adapter card number
./ix_rcvr_threads -rank 1 -group 2 -nodes 1
4) ix_fb_rcv:
Funtion: Receive data from DC and move to receive computer local
memory.
Usage: ./ix_fb_rcv -g 1, where:
-g = Dolphin memory segment
-a = Dolphin adapter card number
......@@ -4,7 +4,8 @@
#define DATA_TRANSFER_READY 8
#define CMD_READY 1234
/* Use upper 4 KB of segment for synchronization. */
#define SYNC_OFFSET ((segmentSize) / 4 - 1024)
// #define SYNC_OFFSET ((segmentSize) / 4 - 1024)
#define IX_SYNC_OFFSET 0x1000
/*
* Remote nodeId:
......
......@@ -32,7 +32,7 @@ extern void *findSharedMemorySize(char *,int);
static char *shmDataPtr[128];
static struct cdsDaqNetGdsTpNum *shmTpTable[128];
static const int xmitDataOffset = MY_DAT_OFFSET + sizeof(daq_multi_cycle_header_t);
static const int xmitDataOffset = MY_DAT_OFFSET + sizeof(struct daq_multi_cycle_header_t);
static const int header_size = sizeof(daq_multi_dcu_header_t);
char *sysname;
daq_multi_dcu_data_t *ixDataBlock;
......@@ -79,8 +79,10 @@ main(int argc,char *argv[])
int dcuId[10];
int ii;
char *mywriteaddr;
int myCrc;
printf("\n %s compiled %s : %s\n\n",argv[0],__DATE__,__TIME__);
printf("my data offset = %d\n",xmitDataOffset);
if (argc<2) {
printf("Exiting here \n");
......@@ -178,9 +180,12 @@ main(int argc,char *argv[])
fprintf(stderr,"SCIMemCpy failed - Error code 0x%x\n",error);
return error;
}
myCrc = crc_ptr((char *)ixDataBlock, sendLength, 0);
myCrc = crc_len(sendLength, myCrc);
xmitHeader->curCycle = ifo_header->curCycle;
xmitHeader->maxCycle = ifo_header->maxCycle;
xmitHeader->cycleDataSize = sendLength;
xmitHeader->msgcrc = myCrc;
SCIFlush(sequence,SCI_FLAG_FLUSH_CPU_BUFFERS_ONLY);
} while(keepRunning);
......
......@@ -82,6 +82,7 @@ main(int argc,char *argv[])
daq_multi_dcu_data_t *ixDataBlock;
int sendLength = 0;
daq_multi_cycle_header_t *rcvHeader;
int myCrc;
printf("\n %s compiled %s : %s\n\n",argv[0],__DATE__,__TIME__);
......@@ -167,6 +168,9 @@ main(int argc,char *argv[])
// Copy data from Dolphin to local memory
memcpy(nextData,rcvDataPtr,sendLength);
myCrc = crc_ptr((char *)nextData, sendLength, 0);
myCrc = crc_len(sendLength, myCrc);
if(new_cycle == 0)
{
printf("New cycle = %d\n", new_cycle);
......@@ -179,6 +183,9 @@ main(int argc,char *argv[])
ifo_header->curCycle = rcvHeader->curCycle;
ifo_header->maxCycle = rcvHeader->maxCycle;
ifo_header->cycleDataSize = sendLength;
ifo_header->msgcrc = rcvHeader->msgcrc;
if(ifo_header->msgcrc != myCrc)
printf("Sent = %d and RCV = %d\n",ifo_header->msgcrc,myCrc);
} while(keepRunning);
......
......@@ -59,7 +59,7 @@
// #define MY_DCU_OFFSET 0x1a00000
#define MY_DCU_OFFSET 0x00000
#define MY_IPC_OFFSET (MY_DCU_OFFSET + 0x8000)
#define MY_IPC_OFFSET (MY_DCU_OFFSET + 0x1000)
#define MY_GDS_OFFSET (MY_DCU_OFFSET + 0x9000)
#define MY_DAT_OFFSET (MY_DCU_OFFSET + 0xa000)
......@@ -172,14 +172,14 @@ int value;
int wait_loops = 0;
do {
value = (*(readAddr+SYNC_OFFSET+node_offset));
value = (*(readAddr+IX_SYNC_OFFSET+node_offset));
wait_loops++;
} while (value != CMD_READY && keepRunning);
}
printf("Client received CMD_READY from all nodes \n\n",value);
/* Lets write CMD_READY to offset 0 to signal all servers to go on. */
*(writeAddr+SYNC_OFFSET) = CMD_READY;
*(writeAddr+IX_SYNC_OFFSET) = CMD_READY;
SCIFlush(sequence,SCI_FLAG_FLUSH_CPU_BUFFERS_ONLY);
if(!keepRunning) return 1;
......
......@@ -30,7 +30,7 @@
// #define MY_DCU_OFFSET 0x1a00000
#define MY_DCU_OFFSET 0x00000
#define MY_IPC_OFFSET (MY_DCU_OFFSET + 0x8000)
#define MY_IPC_OFFSET (MY_DCU_OFFSET + 0x1000)
#define MY_GDS_OFFSET (MY_DCU_OFFSET + 0x9000)
#define MY_DAT_OFFSET (MY_DCU_OFFSET + 0xa000)
......@@ -67,7 +67,7 @@ int waitSender(int rank,sci_sequence_t sequence,volatile unsigned int *readAddr,
/* Lets write CMD_READY the to client, offset "myrank" */
*(writeAddr+SYNC_OFFSET+rank) = CMD_READY;
*(writeAddr+IX_SYNC_OFFSET+rank) = CMD_READY;
SCIFlush(sequence,SCI_FLAG_FLUSH_CPU_BUFFERS_ONLY);
printf("Wait for CMD_READY from master ...\n");
......@@ -75,18 +75,18 @@ int waitSender(int rank,sci_sequence_t sequence,volatile unsigned int *readAddr,
/* Lets wait for the client to send me CMD_READY in offset 0 */
do {
value = (*(readAddr+SYNC_OFFSET));
value = (*(readAddr+IX_SYNC_OFFSET));
wait_loops++;
if ((wait_loops % 100000000)==0) {
/* Lets again write CMD_READY to the client, offset "myrank" */
*(writeAddr+SYNC_OFFSET+rank) = CMD_READY;
*(writeAddr+IX_SYNC_OFFSET+rank) = CMD_READY;
SCIFlush(sequence,SCI_FLAG_FLUSH_CPU_BUFFERS_ONLY);
}
} while (value != CMD_READY);
printf("Server received CMD_READY\n");
*(writeAddr+SYNC_OFFSET+rank) = 0;
*(writeAddr+IX_SYNC_OFFSET+rank) = 0;
SCIFlush(sequence,SCI_FLAG_FLUSH_CPU_BUFFERS_ONLY);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment