##// END OF EJS Templates
2.0.1.1...
paul -
r168:8af347acc664 patch rev 2
parent child
Show More
@@ -2,6 +2,7 syntax: glob
2 2 *.pdf
3 3 *~
4 4 *.o
5 *.gcno
5 6 *.zip
6 7 tests/*.err
7 8 doc
@@ -1,6 +1,6
1 1 #############################################################################
2 2 # Makefile for building: bin/fsw
3 # Generated by qmake (2.01a) (Qt 4.8.6) on: Thu Sep 25 11:05:34 2014
3 # Generated by qmake (2.01a) (Qt 4.8.6) on: Tue Oct 7 15:14:40 2014
4 4 # Project: fsw-qt.pro
5 5 # Template: app
6 6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
@@ -14,9 +14,17 DEFINES += SW_VERSION_N2=0 # minor
14 14 DEFINES += SW_VERSION_N3=1 # patch
15 15 DEFINES += SW_VERSION_N4=1 # internal
16 16
17 # <GCOV>
18 #QMAKE_CFLAGS_RELEASE += -fprofile-arcs -ftest-coverage
19 #QMAKE_LFLAGS_RELEASE +=
20 #LIBS += -lgcov /opt/GCOV/01A/lib/overload.o -lc
21 # </GCOV>
22
23 # <CHANGE BEFORE FLIGHT>
17 24 contains( CONFIG, lpp_dpu_destid ) {
18 25 DEFINES += LPP_DPU_DESTID
19 26 }
27 # </CHANGE BEFORE FLIGHT>
20 28
21 29 contains( CONFIG, debug_tch ) {
22 30 DEFINES += DEBUG_TCH
@@ -1,6 +1,6
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by QtCreator 3.2.0, 2014-09-25T16:02:43. -->
3 <!-- Written by QtCreator 3.2.0, 2014-10-06T16:01:42. -->
4 4 <qtcreator>
5 5 <data>
6 6 <variable>EnvironmentId</variable>
@@ -27,11 +27,11 typedef struct ring_node
27 27 #define NB_SAMPLES_PER_SNAPSHOT 2688 // 336 * 8 = 672 * 4 = 2688
28 28 #define TIME_OFFSET 2
29 29 #define TIME_OFFSET_IN_BYTES 8
30 #define WAVEFORM_EXTENDED_HEADER_OFFSET 22
30 //#define WAVEFORM_EXTENDED_HEADER_OFFSET 22
31 31 #define NB_BYTES_SWF_BLK (2 * 6)
32 32 #define NB_WORDS_SWF_BLK 3
33 33 #define NB_BYTES_CWF3_LIGHT_BLK 6
34 #define WFRM_INDEX_OF_LAST_PACKET 6 // waveforms are transmitted in groups of 2048 blocks, 6 packets of 340 and 1 of 8
34 //#define WFRM_INDEX_OF_LAST_PACKET 6 // waveforms are transmitted in groups of 2048 blocks, 6 packets of 340 and 1 of 8
35 35 #define NB_RING_NODES_F0 3 // AT LEAST 3
36 36 #define NB_RING_NODES_F1 5 // AT LEAST 3
37 37 #define NB_RING_NODES_F2 5 // AT LEAST 3
@@ -127,7 +127,8 typedef struct ring_node
127 127
128 128 #define APBUART_CTRL_REG_MASK_DB 0xfffff7ff
129 129 #define APBUART_CTRL_REG_MASK_TE 0x00000002
130 #define APBUART_SCALER_RELOAD_VALUE 0x00000050 // 25 MHz => about 38400 (0x50)
130 // scaler value = system_clock_frequency / ( baud_rate * 8 ) - 1
131 #define APBUART_SCALER_RELOAD_VALUE 0x00000050 // 25 MHz => about 38400
131 132
132 133 //**********
133 134 // IRQ LINES
@@ -67,7 +67,7 int send_waveform_CWF3_light( volatile i
67 67 void compute_acquisition_time(unsigned int coarseTime, unsigned int fineTime,
68 68 unsigned int sid, unsigned char pa_lfr_pkt_nr, unsigned char *acquisitionTime );
69 69 void build_snapshot_from_ring(ring_node *ring_node_to_send , unsigned char frequencyChannel );
70 void build_acquisition_time( unsigned long long int * acquisitionTimeAslong, ring_node *current_ring_node );
70 void snapshot_resynchronization( unsigned char *timePtr );
71 71 //
72 72 rtems_id get_pkts_queue_id( void );
73 73
@@ -145,6 +145,8 int action_reset(ccsdsTelecommandPacket_
145 145 *
146 146 */
147 147
148 printf("this is the end!!!\n");
149 exit(0);
148 150 send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time );
149 151 return LFR_DEFAULT;
150 152 }
@@ -210,6 +210,9 rtems_task wfrm_task(rtems_task_argument
210 210 rtems_event_set event_out;
211 211 rtems_id queue_id;
212 212 rtems_status_code status;
213 bool resynchronisationEngaged;
214
215 resynchronisationEngaged = false;
213 216
214 217 init_header_snapshot_wf_table( SID_NORM_SWF_F0, headerSWF_F0 );
215 218 init_header_snapshot_wf_table( SID_NORM_SWF_F1, headerSWF_F1 );
@@ -228,6 +231,19 rtems_task wfrm_task(rtems_task_argument
228 231 rtems_event_receive(RTEMS_EVENT_MODE_NORMAL | RTEMS_EVENT_MODE_SBM1
229 232 | RTEMS_EVENT_MODE_SBM2 | RTEMS_EVENT_MODE_SBM2_WFRM,
230 233 RTEMS_WAIT | RTEMS_EVENT_ANY, RTEMS_NO_TIMEOUT, &event_out);
234 if(resynchronisationEngaged == false)
235 { // engage resynchronisation
236 snapshot_resynchronization( (unsigned char *) ring_node_to_send_swf_f0->buffer_address);
237 resynchronisationEngaged = true;
238 }
239 else
240 { // reset delta_snapshot to the nominal value
241 PRINTF("no resynchronisation, reset delta_snapshot to the nominal value\n")
242 set_wfp_delta_snapshot();
243 resynchronisationEngaged = false;
244 }
245 //
246
231 247 if (event_out == RTEMS_EVENT_MODE_NORMAL)
232 248 {
233 249 DEBUG_PRINTF("WFRM received RTEMS_EVENT_MODE_NORMAL\n")
@@ -954,7 +970,7 void build_snapshot_from_ring( ring_node
954 970 sampleOffset_asLong = 0x00;
955 971
956 972 // (1) get the f0 acquisition time
957 build_acquisition_time( &acquisitionTimeF0_asLong, current_ring_node_f0 );
973 acquisitionTimeF0_asLong = get_acquisition_time( (unsigned char *) current_ring_node_f0->buffer_address );
958 974
959 975 // (2) compute the central reference time
960 976 centerTime_asLong = acquisitionTimeF0_asLong + deltaT_F0;
@@ -986,7 +1002,7 void build_snapshot_from_ring( ring_node
986 1002 for (i=0; i<nb_ring_nodes; i++)
987 1003 {
988 1004 PRINTF1("%d ... ", i)
989 build_acquisition_time( &bufferAcquisitionTime_asLong, ring_node_to_send );
1005 bufferAcquisitionTime_asLong = get_acquisition_time( (unsigned char *) ring_node_to_send->buffer_address );
990 1006 if (bufferAcquisitionTime_asLong <= acquisitionTime_asLong)
991 1007 {
992 1008 PRINTF1("buffer found with acquisition time = %llx\n", bufferAcquisitionTime_asLong)
@@ -1037,19 +1053,47 void build_snapshot_from_ring( ring_node
1037 1053 }
1038 1054 }
1039 1055
1040 void build_acquisition_time( unsigned long long int *acquisitionTimeAslong, ring_node *current_ring_node )
1056 void snapshot_resynchronization( unsigned char *timePtr )
1041 1057 {
1042 unsigned char *acquisitionTimeCharPtr;
1058 unsigned long long int acquisitionTime;
1059 unsigned long long int centerTime;
1060 unsigned long long int previousTick;
1061 unsigned long long int nextTick;
1062 unsigned long long int deltaPreviousTick;
1063 unsigned long long int deltaNextTick;
1064 unsigned int deltaTickInF2;
1065 double deltaPrevious;
1066 double deltaNext;
1043 1067
1044 acquisitionTimeCharPtr = (unsigned char*) current_ring_node->buffer_address;
1068 acquisitionTime = get_acquisition_time( timePtr );
1069
1070 // compute center time
1071 centerTime = acquisitionTime + 2731; // (2048. / 24576. / 2.) * 65536. = 2730.667;
1072 previousTick = centerTime - (centerTime & 0xffff);
1073 nextTick = previousTick + 65536;
1045 1074
1046 *acquisitionTimeAslong = 0x00;
1047 *acquisitionTimeAslong = ( (unsigned long long int) (acquisitionTimeCharPtr[0] & 0x7f) << 40 ) // [0111 1111] mask the synchronization bit
1048 + ( (unsigned long long int) acquisitionTimeCharPtr[1] << 32 )
1049 + ( (unsigned long long int) acquisitionTimeCharPtr[2] << 24 )
1050 + ( (unsigned long long int) acquisitionTimeCharPtr[3] << 16 )
1051 + ( (unsigned long long int) acquisitionTimeCharPtr[6] << 8 )
1052 + ( (unsigned long long int) acquisitionTimeCharPtr[7] );
1075 deltaPreviousTick = centerTime - previousTick;
1076 deltaNextTick = nextTick - centerTime;
1077
1078 deltaPrevious = ((double) deltaPreviousTick) / 65536. * 1000.;
1079 deltaNext = ((double) deltaNextTick) / 65536. * 1000.;
1080
1081 printf("delta previous = %f ms, delta next = %f ms\n", deltaPrevious, deltaNext);
1082 printf("delta previous = %llu, delta next = %llu\n", deltaPreviousTick, deltaNextTick);
1083
1084 // which tick is the closest
1085 if (deltaPreviousTick > deltaNextTick)
1086 {
1087 deltaTickInF2 = floor( (deltaNext * 256. / 1000.) ); // the division by 2 is important here
1088 waveform_picker_regs->delta_snapshot = waveform_picker_regs->delta_snapshot + deltaTickInF2;
1089 printf("correction of = + %u\n", deltaTickInF2);
1090 }
1091 else
1092 {
1093 deltaTickInF2 = floor( (deltaPrevious * 256. / 1000.) ); // the division by 2 is important here
1094 waveform_picker_regs->delta_snapshot = waveform_picker_regs->delta_snapshot - deltaTickInF2;
1095 printf("correction of = - %u\n", deltaTickInF2);
1096 }
1053 1097 }
1054 1098
1055 1099 //**************
General Comments 0
You need to be logged in to leave comments. Login now