@@ -1,2 +1,2 | |||||
1 | a586fe639ac179e95bdc150ebdbab0312f31dc30 LFR_basic-parameters |
|
1 | a586fe639ac179e95bdc150ebdbab0312f31dc30 LFR_basic-parameters | |
2 | ddd0a6fe16cc1861ad679bf646663e070189e037 header/lfr_common_headers |
|
2 | 5467523e44cd6a627a81b156673a891f4d6b0017 header/lfr_common_headers |
@@ -38,6 +38,7 int spw_send_waveform_CWF( ring_node *ri | |||||
38 | int spw_send_waveform_SWF( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_SWF_t *header ); |
|
38 | int spw_send_waveform_SWF( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_SWF_t *header ); | |
39 | int spw_send_waveform_CWF3_light( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_CWF_t *header ); |
|
39 | int spw_send_waveform_CWF3_light( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_CWF_t *header ); | |
40 | void spw_send_asm( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_ASM_t *header ); |
|
40 | void spw_send_asm( ring_node *ring_node_to_send, Header_TM_LFR_SCIENCE_ASM_t *header ); | |
|
41 | void spw_send_k_dump( ring_node *ring_node_to_send ); | |||
41 |
|
42 | |||
42 | void timecode_irq_handler( void *pDev, void *regs, int minor, unsigned int tc ); |
|
43 | void timecode_irq_handler( void *pDev, void *regs, int minor, unsigned int tc ); | |
43 | rtems_timer_service_routine user_routine( rtems_id timer_id, void *user_data ); |
|
44 | rtems_timer_service_routine user_routine( rtems_id timer_id, void *user_data ); |
@@ -8,10 +8,16 | |||||
8 | #include "wf_handler.h" |
|
8 | #include "wf_handler.h" | |
9 | #include "tm_lfr_tc_exe.h" |
|
9 | #include "tm_lfr_tc_exe.h" | |
10 | #include "fsw_misc.h" |
|
10 | #include "fsw_misc.h" | |
|
11 | #include "basic_parameters_params.h" | |||
11 |
|
12 | |||
12 | #define FLOAT_EQUAL_ZERO 0.001 |
|
13 | #define FLOAT_EQUAL_ZERO 0.001 | |
13 |
|
14 | |||
14 | extern unsigned short sequenceCounterParameterDump; |
|
15 | extern unsigned short sequenceCounterParameterDump; | |
|
16 | extern float k_coeff_intercalib_f0_norm[ ]; | |||
|
17 | extern float k_coeff_intercalib_f0_sbm[ ]; | |||
|
18 | extern float k_coeff_intercalib_f1_norm[ ]; | |||
|
19 | extern float k_coeff_intercalib_f1_sbm[ ]; | |||
|
20 | extern float k_coeff_intercalib_f2[ ]; | |||
15 |
|
21 | |||
16 | int action_load_common_par( ccsdsTelecommandPacket_t *TC ); |
|
22 | int action_load_common_par( ccsdsTelecommandPacket_t *TC ); | |
17 | int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id , unsigned char *time); |
|
23 | int action_load_normal_par(ccsdsTelecommandPacket_t *TC, rtems_id queue_id , unsigned char *time); | |
@@ -49,6 +55,11 unsigned int check_update_info_hk_lfr_mo | |||||
49 | unsigned int check_update_info_hk_tds_mode( unsigned char mode ); |
|
55 | unsigned int check_update_info_hk_tds_mode( unsigned char mode ); | |
50 | unsigned int check_update_info_hk_thr_mode( unsigned char mode ); |
|
56 | unsigned int check_update_info_hk_thr_mode( unsigned char mode ); | |
51 |
|
57 | |||
|
58 | // KCOEFFICIENTS | |||
|
59 | int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ); | |||
|
60 | ||||
52 | void init_parameter_dump( void ); |
|
61 | void init_parameter_dump( void ); | |
|
62 | void init_kcoefficients_dump( void ); | |||
|
63 | void init_kcoefficients_dump_packet( Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump, unsigned char pkt_nr, unsigned char blk_nr ); | |||
53 |
|
64 | |||
54 | #endif // TC_LOAD_DUMP_PARAMETERS_H |
|
65 | #endif // TC_LOAD_DUMP_PARAMETERS_H |
@@ -1,8 +1,8 | |||||
1 | # LOAD FSW USING LINK 1 |
|
1 | # LOAD FSW USING LINK 1 | |
2 | SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) |
|
2 | SpwPlugin0.StarDundeeSelectLinkNumber( 1 ) | |
3 |
|
3 | |||
4 |
|
|
4 | dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") | |
5 | dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") |
|
5 | #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") | |
6 | dsu3plugin0.loadFile() |
|
6 | dsu3plugin0.loadFile() | |
7 |
|
7 | |||
8 | dsu3plugin0.run() |
|
8 | dsu3plugin0.run() |
@@ -22,6 +22,7 SpwPlugin0.TCPServerConnect() | |||||
22 | LFRControlPlugin0.TCPServerConnect() |
|
22 | LFRControlPlugin0.TCPServerConnect() | |
23 |
|
23 | |||
24 | dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") |
|
24 | dsu3plugin0.openFile("/opt/DEV_PLE/FSW-qt/bin/fsw") | |
|
25 | #dsu3plugin0.openFile("/opt/LFR/LFR-FSW/2.0.2.3/fsw") | |||
25 | dsu3plugin0.loadFile() |
|
26 | dsu3plugin0.loadFile() | |
26 | dsu3plugin0.run() |
|
27 | dsu3plugin0.run() | |
27 |
|
28 |
@@ -129,6 +129,7 rtems_task Init( rtems_task_argument ign | |||||
129 | PRINTF("\n\n") |
|
129 | PRINTF("\n\n") | |
130 |
|
130 | |||
131 | init_parameter_dump(); |
|
131 | init_parameter_dump(); | |
|
132 | init_kcoefficients_dump(); | |||
132 | init_local_mode_parameters(); |
|
133 | init_local_mode_parameters(); | |
133 | init_housekeeping_parameters(); |
|
134 | init_housekeeping_parameters(); | |
134 | init_k_coefficients_f0(); |
|
135 | init_k_coefficients_f0(); |
@@ -335,7 +335,7 void init_housekeeping_parameters( void | |||||
335 |
|
335 | |||
336 | void increment_seq_counter( unsigned short *packetSequenceControl ) |
|
336 | void increment_seq_counter( unsigned short *packetSequenceControl ) | |
337 | { |
|
337 | { | |
338 |
/** This function increment the sequence counter p |
|
338 | /** This function increment the sequence counter passes in argument. | |
339 | * |
|
339 | * | |
340 | * The increment does not affect the grouping flag. In case of an overflow, the counter is reset to 0. |
|
340 | * The increment does not affect the grouping flag. In case of an overflow, the counter is reset to 0. | |
341 | * |
|
341 | * |
@@ -217,7 +217,7 rtems_task send_task( rtems_task_argumen | |||||
217 | size_t size; // size of the incoming TC packet |
|
217 | size_t size; // size of the incoming TC packet | |
218 | u_int32_t count; |
|
218 | u_int32_t count; | |
219 | rtems_id queue_id; |
|
219 | rtems_id queue_id; | |
220 |
unsigned |
|
220 | unsigned int sid; | |
221 |
|
221 | |||
222 | incomingRingNodePtr = NULL; |
|
222 | incomingRingNodePtr = NULL; | |
223 | ring_node_address = 0; |
|
223 | ring_node_address = 0; | |
@@ -270,10 +270,14 rtems_task send_task( rtems_task_argumen | |||||
270 | { |
|
270 | { | |
271 | spw_send_waveform_CWF3_light( incomingRingNodePtr, &headerCWF ); |
|
271 | spw_send_waveform_CWF3_light( incomingRingNodePtr, &headerCWF ); | |
272 | } |
|
272 | } | |
273 | else if ( (sid==SID_NORM_ASM_F0) || (SID_NORM_ASM_F1) || (SID_NORM_ASM_F2) ) |
|
273 | else if ( (sid==SID_NORM_ASM_F0) || (sid==SID_NORM_ASM_F1) || (sid==SID_NORM_ASM_F2) ) | |
274 | { |
|
274 | { | |
275 | spw_send_asm( incomingRingNodePtr, &headerASM ); |
|
275 | spw_send_asm( incomingRingNodePtr, &headerASM ); | |
276 | } |
|
276 | } | |
|
277 | else if ( sid==TM_CODE_K_DUMP ) | |||
|
278 | { | |||
|
279 | spw_send_k_dump( incomingRingNodePtr ); | |||
|
280 | } | |||
277 | else |
|
281 | else | |
278 | { |
|
282 | { | |
279 | printf("unexpected sid = %d\n", sid); |
|
283 | printf("unexpected sid = %d\n", sid); | |
@@ -1124,3 +1128,29 void spw_send_asm( ring_node *ring_node_ | |||||
1124 | } |
|
1128 | } | |
1125 | } |
|
1129 | } | |
1126 | } |
|
1130 | } | |
|
1131 | ||||
|
1132 | void spw_send_k_dump( ring_node *ring_node_to_send ) | |||
|
1133 | { | |||
|
1134 | rtems_status_code status; | |||
|
1135 | Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump; | |||
|
1136 | unsigned int packetLength; | |||
|
1137 | unsigned int size; | |||
|
1138 | ||||
|
1139 | printf("spw_send_k_dump\n"); | |||
|
1140 | ||||
|
1141 | kcoefficients_dump = (Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *) ring_node_to_send->buffer_address; | |||
|
1142 | ||||
|
1143 | packetLength = kcoefficients_dump->packetLength[0] * 256 + kcoefficients_dump->packetLength[1]; | |||
|
1144 | ||||
|
1145 | size = packetLength + CCSDS_TC_TM_PACKET_OFFSET + CCSDS_PROTOCOLE_EXTRA_BYTES; | |||
|
1146 | ||||
|
1147 | printf("packetLength %d, size %d\n", packetLength, size ); | |||
|
1148 | ||||
|
1149 | status = write( fdSPW, (char *) ring_node_to_send->buffer_address, size ); | |||
|
1150 | ||||
|
1151 | if (status == -1){ | |||
|
1152 | PRINTF2("in SEND *** (2.a) ERRNO = %d, size = %d\n", errno, size) | |||
|
1153 | } | |||
|
1154 | ||||
|
1155 | ring_node_to_send->status = 0x00; | |||
|
1156 | } |
@@ -226,7 +226,9 int tc_check_type_subtype( unsigned char | |||||
226 | || (packetSubType == TC_SUBTYPE_DUMP) |
|
226 | || (packetSubType == TC_SUBTYPE_DUMP) | |
227 | || (packetSubType == TC_SUBTYPE_ENTER) |
|
227 | || (packetSubType == TC_SUBTYPE_ENTER) | |
228 | || (packetSubType == TC_SUBTYPE_UPDT_INFO) |
|
228 | || (packetSubType == TC_SUBTYPE_UPDT_INFO) | |
229 |
|| (packetSubType == TC_SUBTYPE_EN_CAL) || (packetSubType == TC_SUBTYPE_DIS_CAL) |
|
229 | || (packetSubType == TC_SUBTYPE_EN_CAL) || (packetSubType == TC_SUBTYPE_DIS_CAL) | |
|
230 | || (packetSubType == TC_SUBTYPE_LOAD_K) || (packetSubType == TC_SUBTYPE_DUMP_K) | |||
|
231 | || (packetSubType == TC_SUBTYPE_LOAD_FBINS) ) | |||
230 | { |
|
232 | { | |
231 | status = CCSDS_TM_VALID; |
|
233 | status = CCSDS_TM_VALID; | |
232 | } |
|
234 | } | |
@@ -388,6 +390,30 int tc_check_length( unsigned char packe | |||||
388 | status = CCSDS_TM_VALID; |
|
390 | status = CCSDS_TM_VALID; | |
389 | } |
|
391 | } | |
390 | break; |
|
392 | break; | |
|
393 | case TC_SUBTYPE_LOAD_K: | |||
|
394 | if (length!=(TC_LEN_LOAD_K-CCSDS_TC_TM_PACKET_OFFSET)) { | |||
|
395 | status = WRONG_LEN_PKT; | |||
|
396 | } | |||
|
397 | else { | |||
|
398 | status = CCSDS_TM_VALID; | |||
|
399 | } | |||
|
400 | break; | |||
|
401 | case TC_SUBTYPE_DUMP_K: | |||
|
402 | if (length!=(TC_LEN_DUMP_K-CCSDS_TC_TM_PACKET_OFFSET)) { | |||
|
403 | status = WRONG_LEN_PKT; | |||
|
404 | } | |||
|
405 | else { | |||
|
406 | status = CCSDS_TM_VALID; | |||
|
407 | } | |||
|
408 | break; | |||
|
409 | case TC_SUBTYPE_LOAD_FBINS: | |||
|
410 | if (length!=(TC_LEN_LOAD_FBINS-CCSDS_TC_TM_PACKET_OFFSET)) { | |||
|
411 | status = WRONG_LEN_PKT; | |||
|
412 | } | |||
|
413 | else { | |||
|
414 | status = CCSDS_TM_VALID; | |||
|
415 | } | |||
|
416 | break; | |||
391 | case TC_SUBTYPE_UPDT_TIME: |
|
417 | case TC_SUBTYPE_UPDT_TIME: | |
392 | if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) { |
|
418 | if (length!=(TC_LEN_UPDT_TIME-CCSDS_TC_TM_PACKET_OFFSET)) { | |
393 | status = WRONG_LEN_PKT; |
|
419 | status = WRONG_LEN_PKT; |
@@ -112,6 +112,7 rtems_task actn_task( rtems_task_argumen | |||||
112 | close_action( &TC, result, queue_snd_id ); |
|
112 | close_action( &TC, result, queue_snd_id ); | |
113 | break; |
|
113 | break; | |
114 | case TC_SUBTYPE_LOAD_K: |
|
114 | case TC_SUBTYPE_LOAD_K: | |
|
115 | printf("TC_SUBTYPE_LOAD_K\n"); | |||
115 | result = action_load_kcoefficients( &TC, queue_snd_id, time ); |
|
116 | result = action_load_kcoefficients( &TC, queue_snd_id, time ); | |
116 | close_action( &TC, result, queue_snd_id ); |
|
117 | close_action( &TC, result, queue_snd_id ); | |
117 | break; |
|
118 | break; | |
@@ -167,8 +168,6 int action_enter_mode(ccsdsTelecommandPa | |||||
167 | unsigned int transitionCoarseTime; |
|
168 | unsigned int transitionCoarseTime; | |
168 | unsigned char * bytePosPtr; |
|
169 | unsigned char * bytePosPtr; | |
169 |
|
170 | |||
170 | printTaskID(); |
|
|||
171 |
|
||||
172 | bytePosPtr = (unsigned char *) &TC->packetID; |
|
171 | bytePosPtr = (unsigned char *) &TC->packetID; | |
173 |
|
172 | |||
174 | requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ]; |
|
173 | requestedMode = bytePosPtr[ BYTE_POS_CP_MODE_LFR_SET ]; | |
@@ -672,7 +671,6 int suspend_science_tasks() | |||||
672 | rtems_status_code status; |
|
671 | rtems_status_code status; | |
673 |
|
672 | |||
674 | printf("in suspend_science_tasks\n"); |
|
673 | printf("in suspend_science_tasks\n"); | |
675 | printTaskID(); |
|
|||
676 |
|
674 | |||
677 | status = rtems_task_suspend( Task_id[TASKID_AVF0] ); // suspend AVF0 |
|
675 | status = rtems_task_suspend( Task_id[TASKID_AVF0] ); // suspend AVF0 | |
678 | if (status != RTEMS_SUCCESSFUL) |
|
676 | if (status != RTEMS_SUCCESSFUL) | |
@@ -1121,13 +1119,3 void reset_lfr( void ) | |||||
1121 |
|
1119 | |||
1122 | set_lfr_soft_reset( 0 ); |
|
1120 | set_lfr_soft_reset( 0 ); | |
1123 | } |
|
1121 | } | |
1124 |
|
||||
1125 | void printTaskID( void ) |
|
|||
1126 | { |
|
|||
1127 | unsigned int i; |
|
|||
1128 |
|
||||
1129 | for (i=0; i<20;i++) |
|
|||
1130 | { |
|
|||
1131 | printf("ID %d = %d\n", i, (unsigned int) Task_id[i]); |
|
|||
1132 | } |
|
|||
1133 | } |
|
@@ -14,6 +14,11 | |||||
14 |
|
14 | |||
15 | #include "tc_load_dump_parameters.h" |
|
15 | #include "tc_load_dump_parameters.h" | |
16 |
|
16 | |||
|
17 | Packet_TM_LFR_KCOEFFICIENTS_DUMP_t kcoefficients_dump_1; | |||
|
18 | Packet_TM_LFR_KCOEFFICIENTS_DUMP_t kcoefficients_dump_2; | |||
|
19 | ring_node kcoefficient_node_1; | |||
|
20 | ring_node kcoefficient_node_2; | |||
|
21 | ||||
17 | int action_load_common_par(ccsdsTelecommandPacket_t *TC) |
|
22 | int action_load_common_par(ccsdsTelecommandPacket_t *TC) | |
18 | { |
|
23 | { | |
19 | /** This function updates the LFR registers with the incoming common parameters. |
|
24 | /** This function updates the LFR registers with the incoming common parameters. | |
@@ -282,11 +287,7 int action_load_kcoefficients(ccsdsTelec | |||||
282 |
|
287 | |||
283 | flag = LFR_DEFAULT; |
|
288 | flag = LFR_DEFAULT; | |
284 |
|
289 | |||
285 | // NB_BINS_COMPRESSED_SM_F0; |
|
290 | flag = set_sy_lfr_kcoeff( TC ); | |
286 | // NB_BINS_COMPRESSED_SM_F1; |
|
|||
287 | // NB_BINS_COMPRESSED_SM_F2; |
|
|||
288 |
|
||||
289 | send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time ); |
|
|||
290 |
|
291 | |||
291 | return flag; |
|
292 | return flag; | |
292 | } |
|
293 | } | |
@@ -309,6 +310,18 int action_load_fbins_mask(ccsdsTelecomm | |||||
309 | return flag; |
|
310 | return flag; | |
310 | } |
|
311 | } | |
311 |
|
312 | |||
|
313 | void printKCoefficients(unsigned int freq, unsigned int bin, float *k_coeff) | |||
|
314 | { | |||
|
315 | printf("freq = %d *** bin = %d *** (0) %f *** (1) %f *** (2) %f *** (3) %f *** (4) %f\n", | |||
|
316 | freq, | |||
|
317 | bin, | |||
|
318 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 0 ], | |||
|
319 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 1 ], | |||
|
320 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 2 ], | |||
|
321 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 3 ], | |||
|
322 | k_coeff[ (bin*NB_K_COEFF_PER_BIN) + 4 ]); | |||
|
323 | } | |||
|
324 | ||||
312 | int action_dump_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) |
|
325 | int action_dump_kcoefficients(ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time) | |
313 | { |
|
326 | { | |
314 | /** This function updates the LFR registers with the incoming sbm2 parameters. |
|
327 | /** This function updates the LFR registers with the incoming sbm2 parameters. | |
@@ -318,13 +331,127 int action_dump_kcoefficients(ccsdsTelec | |||||
318 | * |
|
331 | * | |
319 | */ |
|
332 | */ | |
320 |
|
333 | |||
321 | int flag; |
|
334 | unsigned int address; | |
|
335 | rtems_status_code status; | |||
|
336 | unsigned int freq; | |||
|
337 | unsigned int bin; | |||
|
338 | unsigned int coeff; | |||
|
339 | unsigned char *kCoeffPtr; | |||
|
340 | unsigned char *kCoeffDumpPtr; | |||
322 |
|
341 | |||
323 | flag = LFR_DEFAULT; |
|
342 | // for each sy_lfr_kcoeff_frequency there is 32 kcoeff | |
|
343 | // F0 => 11 bins | |||
|
344 | // F1 => 13 bins | |||
|
345 | // F2 => 12 bins | |||
|
346 | // 36 bins to dump in two packets (30 bins max per packet) | |||
324 |
|
347 | |||
325 | send_tm_lfr_tc_exe_not_implemented( TC, queue_id, time ); |
|
348 | //********* | |
|
349 | // PACKET 1 | |||
|
350 | // 11 F0 bins, 13 F1 bins and 6 F2 bins | |||
|
351 | kcoefficients_dump_1.packetSequenceControl[0] = (unsigned char) (sequenceCounterParameterDump >> 8); | |||
|
352 | kcoefficients_dump_1.packetSequenceControl[1] = (unsigned char) (sequenceCounterParameterDump ); | |||
|
353 | increment_seq_counter( &sequenceCounterParameterDump ); | |||
|
354 | for( freq=0; | |||
|
355 | freq<NB_BINS_COMPRESSED_SM_F0; | |||
|
356 | freq++ ) | |||
|
357 | { | |||
|
358 | kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1] = freq; | |||
|
359 | bin = freq; | |||
|
360 | printKCoefficients( freq, bin, k_coeff_intercalib_f0_norm); | |||
|
361 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |||
|
362 | { | |||
|
363 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |||
|
364 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f0_norm[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |||
|
365 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |||
|
366 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |||
|
367 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |||
|
368 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |||
|
369 | } | |||
|
370 | } | |||
|
371 | for( freq=NB_BINS_COMPRESSED_SM_F0; | |||
|
372 | freq<(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1); | |||
|
373 | freq++ ) | |||
|
374 | { | |||
|
375 | kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq; | |||
|
376 | bin = freq - NB_BINS_COMPRESSED_SM_F0; | |||
|
377 | printKCoefficients( freq, bin, k_coeff_intercalib_f1_norm); | |||
|
378 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |||
|
379 | { | |||
|
380 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |||
|
381 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f1_norm[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |||
|
382 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |||
|
383 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |||
|
384 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |||
|
385 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |||
|
386 | } | |||
|
387 | } | |||
|
388 | for( freq=(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1); | |||
|
389 | freq<(NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1+6); | |||
|
390 | freq++ ) | |||
|
391 | { | |||
|
392 | kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = freq; | |||
|
393 | bin = freq - (NB_BINS_COMPRESSED_SM_F0+NB_BINS_COMPRESSED_SM_F1); | |||
|
394 | printKCoefficients( freq, bin, k_coeff_intercalib_f2); | |||
|
395 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |||
|
396 | { | |||
|
397 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_1.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |||
|
398 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f2[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |||
|
399 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |||
|
400 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |||
|
401 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |||
|
402 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |||
|
403 | } | |||
|
404 | } | |||
|
405 | kcoefficients_dump_1.time[0] = (unsigned char) (time_management_regs->coarse_time>>24); | |||
|
406 | kcoefficients_dump_1.time[1] = (unsigned char) (time_management_regs->coarse_time>>16); | |||
|
407 | kcoefficients_dump_1.time[2] = (unsigned char) (time_management_regs->coarse_time>>8); | |||
|
408 | kcoefficients_dump_1.time[3] = (unsigned char) (time_management_regs->coarse_time); | |||
|
409 | kcoefficients_dump_1.time[4] = (unsigned char) (time_management_regs->fine_time>>8); | |||
|
410 | kcoefficients_dump_1.time[5] = (unsigned char) (time_management_regs->fine_time); | |||
|
411 | // SEND DATA | |||
|
412 | kcoefficient_node_1.status = 1; | |||
|
413 | address = (unsigned int) &kcoefficient_node_1; | |||
|
414 | status = rtems_message_queue_send( queue_id, &address, sizeof( ring_node* ) ); | |||
|
415 | if (status != RTEMS_SUCCESSFUL) { | |||
|
416 | PRINTF1("in action_dump_kcoefficients *** ERR sending packet 1 , code %d", status) | |||
|
417 | } | |||
326 |
|
418 | |||
327 | return flag; |
|
419 | //******** | |
|
420 | // PACKET 2 | |||
|
421 | // 6 F2 bins | |||
|
422 | kcoefficients_dump_2.packetSequenceControl[0] = (unsigned char) (sequenceCounterParameterDump >> 8); | |||
|
423 | kcoefficients_dump_2.packetSequenceControl[1] = (unsigned char) (sequenceCounterParameterDump ); | |||
|
424 | increment_seq_counter( &sequenceCounterParameterDump ); | |||
|
425 | for( freq=0; freq<6; freq++ ) | |||
|
426 | { | |||
|
427 | kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + 1 ] = NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + 6 + freq; | |||
|
428 | bin = freq + 6; | |||
|
429 | printKCoefficients( freq, bin, k_coeff_intercalib_f2); | |||
|
430 | for ( coeff=0; coeff<NB_K_COEFF_PER_BIN; coeff++ ) | |||
|
431 | { | |||
|
432 | kCoeffDumpPtr = (unsigned char*) &kcoefficients_dump_2.kcoeff_blks[ freq*KCOEFF_BLK_SIZE + coeff*NB_BYTES_PER_FLOAT + 2 ]; // 2 for the kcoeff_frequency | |||
|
433 | kCoeffPtr = (unsigned char*) &k_coeff_intercalib_f2[ (bin*NB_K_COEFF_PER_BIN) + coeff ]; | |||
|
434 | kCoeffDumpPtr[0] = kCoeffPtr[0]; | |||
|
435 | kCoeffDumpPtr[1] = kCoeffPtr[1]; | |||
|
436 | kCoeffDumpPtr[2] = kCoeffPtr[2]; | |||
|
437 | kCoeffDumpPtr[3] = kCoeffPtr[3]; | |||
|
438 | } | |||
|
439 | } | |||
|
440 | kcoefficients_dump_2.time[0] = (unsigned char) (time_management_regs->coarse_time>>24); | |||
|
441 | kcoefficients_dump_2.time[1] = (unsigned char) (time_management_regs->coarse_time>>16); | |||
|
442 | kcoefficients_dump_2.time[2] = (unsigned char) (time_management_regs->coarse_time>>8); | |||
|
443 | kcoefficients_dump_2.time[3] = (unsigned char) (time_management_regs->coarse_time); | |||
|
444 | kcoefficients_dump_2.time[4] = (unsigned char) (time_management_regs->fine_time>>8); | |||
|
445 | kcoefficients_dump_2.time[5] = (unsigned char) (time_management_regs->fine_time); | |||
|
446 | // SEND DATA | |||
|
447 | kcoefficient_node_2.status = 1; | |||
|
448 | address = (unsigned int) &kcoefficient_node_2; | |||
|
449 | status = rtems_message_queue_send( queue_id, &address, sizeof( ring_node* ) ); | |||
|
450 | if (status != RTEMS_SUCCESSFUL) { | |||
|
451 | PRINTF1("in action_dump_kcoefficients *** ERR sending packet 2, code %d", status) | |||
|
452 | } | |||
|
453 | ||||
|
454 | return status; | |||
328 | } |
|
455 | } | |
329 |
|
456 | |||
330 | int action_dump_par( rtems_id queue_id ) |
|
457 | int action_dump_par( rtems_id queue_id ) | |
@@ -760,21 +887,73 unsigned int check_update_info_hk_thr_mo | |||||
760 | // KCOEFFICIENTS |
|
887 | // KCOEFFICIENTS | |
761 | int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ) |
|
888 | int set_sy_lfr_kcoeff( ccsdsTelecommandPacket_t *TC ) | |
762 | { |
|
889 | { | |
|
890 | unsigned int i; | |||
763 | unsigned short sy_lfr_kcoeff_frequency; |
|
891 | unsigned short sy_lfr_kcoeff_frequency; | |
|
892 | unsigned short bin; | |||
764 | unsigned short *freqPtr; |
|
893 | unsigned short *freqPtr; | |
|
894 | float *kcoeffPtr_norm; | |||
|
895 | float *kcoeffPtr_sbm; | |||
765 | int status; |
|
896 | int status; | |
|
897 | unsigned char *kcoeffLoadPtr; | |||
|
898 | unsigned char *kcoeffNormPtr; | |||
766 |
|
899 | |||
767 | status = LFR_SUCCESSFUL; |
|
900 | status = LFR_SUCCESSFUL; | |
768 |
|
901 | |||
769 | freqPtr = (unsigned short *) &TC->dataAndCRC[0]; |
|
902 | kcoeffPtr_norm = NULL; | |
|
903 | kcoeffPtr_sbm = NULL; | |||
|
904 | bin = 0; | |||
|
905 | ||||
|
906 | freqPtr = (unsigned short *) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_FREQUENCY]; | |||
770 | sy_lfr_kcoeff_frequency = *freqPtr; |
|
907 | sy_lfr_kcoeff_frequency = *freqPtr; | |
771 |
|
908 | |||
772 | PRINTF1("sy_lfr_kcoeff_frequency = %d\n", sy_lfr_kcoeff_frequency) |
|
|||
773 |
|
||||
774 | if (sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM) |
|
909 | if ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM ) | |
775 | { |
|
910 | { | |
776 | PRINTF1("ERR *** in set_sy_lfr_kcoeff_frequency *** sy_lfr_kcoeff_frequency = %d\n", sy_lfr_kcoeff_frequency) |
|
911 | PRINTF1("ERR *** in set_sy_lfr_kcoeff_frequency *** sy_lfr_kcoeff_frequency = %d\n", sy_lfr_kcoeff_frequency) | |
777 | } |
|
912 | } | |
|
913 | else | |||
|
914 | { | |||
|
915 | if ( ( sy_lfr_kcoeff_frequency >= 0 ) | |||
|
916 | && ( sy_lfr_kcoeff_frequency < NB_BINS_COMPRESSED_SM_F0 ) ) | |||
|
917 | { | |||
|
918 | kcoeffPtr_norm = k_coeff_intercalib_f0_norm; | |||
|
919 | kcoeffPtr_sbm = k_coeff_intercalib_f0_sbm; | |||
|
920 | bin = sy_lfr_kcoeff_frequency; | |||
|
921 | } | |||
|
922 | else if ( ( sy_lfr_kcoeff_frequency >= NB_BINS_COMPRESSED_SM_F0 ) | |||
|
923 | && ( sy_lfr_kcoeff_frequency < (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1) ) ) | |||
|
924 | { | |||
|
925 | kcoeffPtr_norm = k_coeff_intercalib_f1_norm; | |||
|
926 | kcoeffPtr_sbm = k_coeff_intercalib_f1_sbm; | |||
|
927 | bin = sy_lfr_kcoeff_frequency - NB_BINS_COMPRESSED_SM_F0; | |||
|
928 | } | |||
|
929 | else if ( ( sy_lfr_kcoeff_frequency >= (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1) ) | |||
|
930 | && ( sy_lfr_kcoeff_frequency < (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1 + NB_BINS_COMPRESSED_SM_F2) ) ) | |||
|
931 | { | |||
|
932 | kcoeffPtr_norm = k_coeff_intercalib_f2; | |||
|
933 | kcoeffPtr_sbm = NULL; | |||
|
934 | bin = sy_lfr_kcoeff_frequency - (NB_BINS_COMPRESSED_SM_F0 + NB_BINS_COMPRESSED_SM_F1); | |||
|
935 | } | |||
|
936 | } | |||
|
937 | ||||
|
938 | if (kcoeffPtr_norm != NULL ) | |||
|
939 | { | |||
|
940 | printf("freq = %d, bin = %d\n", sy_lfr_kcoeff_frequency, bin); | |||
|
941 | for (i=0; i<NB_K_COEFF_PER_BIN; i++) | |||
|
942 | { | |||
|
943 | kcoeffLoadPtr = (unsigned char*) &TC->dataAndCRC[DATAFIELD_POS_SY_LFR_KCOEFF_1 + NB_BYTES_PER_FLOAT * i]; | |||
|
944 | kcoeffNormPtr = (unsigned char*) &kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + i ]; | |||
|
945 | kcoeffNormPtr[0] = kcoeffLoadPtr[0]; | |||
|
946 | kcoeffNormPtr[1] = kcoeffLoadPtr[1]; | |||
|
947 | kcoeffNormPtr[2] = kcoeffLoadPtr[2]; | |||
|
948 | kcoeffNormPtr[3] = kcoeffLoadPtr[3]; | |||
|
949 | printf("kcoeffPtr: %x %x %x %x *** %f \n", | |||
|
950 | kcoeffLoadPtr[0], | |||
|
951 | kcoeffLoadPtr[1], | |||
|
952 | kcoeffLoadPtr[2], | |||
|
953 | kcoeffLoadPtr[3], | |||
|
954 | kcoeffPtr_norm[ (bin * NB_K_COEFF_PER_BIN) + i ]); | |||
|
955 | } | |||
|
956 | } | |||
778 |
|
957 | |||
779 | return status; |
|
958 | return status; | |
780 | } |
|
959 | } | |
@@ -844,9 +1023,70 void init_parameter_dump( void ) | |||||
844 | parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1; |
|
1023 | parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P1; | |
845 | } |
|
1024 | } | |
846 |
|
1025 | |||
|
1026 | void init_kcoefficients_dump( void ) | |||
|
1027 | { | |||
|
1028 | init_kcoefficients_dump_packet( &kcoefficients_dump_1, 1, 30 ); | |||
|
1029 | init_kcoefficients_dump_packet( &kcoefficients_dump_2, 2, 6 ); | |||
|
1030 | ||||
|
1031 | kcoefficient_node_1.previous = NULL; | |||
|
1032 | kcoefficient_node_1.next = NULL; | |||
|
1033 | kcoefficient_node_1.sid = TM_CODE_K_DUMP; | |||
|
1034 | kcoefficient_node_1.coarseTime = 0x00; | |||
|
1035 | kcoefficient_node_1.fineTime = 0x00; | |||
|
1036 | kcoefficient_node_1.buffer_address = (int) &kcoefficients_dump_1; | |||
|
1037 | kcoefficient_node_1.status = 0x00; | |||
|
1038 | ||||
|
1039 | kcoefficient_node_2.previous = NULL; | |||
|
1040 | kcoefficient_node_2.next = NULL; | |||
|
1041 | kcoefficient_node_2.sid = TM_CODE_K_DUMP; | |||
|
1042 | kcoefficient_node_2.coarseTime = 0x00; | |||
|
1043 | kcoefficient_node_2.fineTime = 0x00; | |||
|
1044 | kcoefficient_node_2.buffer_address = (int) &kcoefficients_dump_2; | |||
|
1045 | kcoefficient_node_2.status = 0x00; | |||
|
1046 | } | |||
|
1047 | ||||
|
1048 | void init_kcoefficients_dump_packet( Packet_TM_LFR_KCOEFFICIENTS_DUMP_t *kcoefficients_dump, unsigned char pkt_nr, unsigned char blk_nr ) | |||
|
1049 | { | |||
|
1050 | unsigned int k; | |||
|
1051 | unsigned int packetLength; | |||
|
1052 | ||||
|
1053 | packetLength = blk_nr * 130 + 20 - CCSDS_TC_TM_PACKET_OFFSET; // 4 bytes for the CCSDS header | |||
|
1054 | ||||
|
1055 | kcoefficients_dump->targetLogicalAddress = CCSDS_DESTINATION_ID; | |||
|
1056 | kcoefficients_dump->protocolIdentifier = CCSDS_PROTOCOLE_ID; | |||
|
1057 | kcoefficients_dump->reserved = CCSDS_RESERVED; | |||
|
1058 | kcoefficients_dump->userApplication = CCSDS_USER_APP; | |||
|
1059 | kcoefficients_dump->packetID[0] = (unsigned char) (APID_TM_PARAMETER_DUMP >> 8);; | |||
|
1060 | kcoefficients_dump->packetID[1] = (unsigned char) APID_TM_PARAMETER_DUMP;; | |||
|
1061 | kcoefficients_dump->packetSequenceControl[0] = TM_PACKET_SEQ_CTRL_STANDALONE; | |||
|
1062 | kcoefficients_dump->packetSequenceControl[1] = TM_PACKET_SEQ_CNT_DEFAULT; | |||
|
1063 | kcoefficients_dump->packetLength[0] = (unsigned char) (packetLength >> 8); | |||
|
1064 | kcoefficients_dump->packetLength[1] = (unsigned char) packetLength; | |||
|
1065 | // DATA FIELD HEADER | |||
|
1066 | kcoefficients_dump->spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2; | |||
|
1067 | kcoefficients_dump->serviceType = TM_TYPE_K_DUMP; | |||
|
1068 | kcoefficients_dump->serviceSubType = TM_SUBTYPE_K_DUMP; | |||
|
1069 | kcoefficients_dump->destinationID= TM_DESTINATION_ID_GROUND; | |||
|
1070 | kcoefficients_dump->time[0] = 0x00; | |||
|
1071 | kcoefficients_dump->time[1] = 0x00; | |||
|
1072 | kcoefficients_dump->time[2] = 0x00; | |||
|
1073 | kcoefficients_dump->time[3] = 0x00; | |||
|
1074 | kcoefficients_dump->time[4] = 0x00; | |||
|
1075 | kcoefficients_dump->time[5] = 0x00; | |||
|
1076 | kcoefficients_dump->sid = SID_K_DUMP; | |||
|
1077 | ||||
|
1078 | kcoefficients_dump->pkt_cnt = 2; | |||
|
1079 | kcoefficients_dump->pkt_nr = pkt_nr; | |||
|
1080 | kcoefficients_dump->blk_nr = blk_nr; | |||
|
1081 | ||||
|
1082 | //****************** | |||
|
1083 | // SOURCE DATA repeated N times with N in [0 .. PA_LFR_KCOEFF_BLK_NR] | |||
|
1084 | // one blk is 2 + 4 * 32 = 130 bytes, 30 blks max in one packet (30 * 130 = 3900) | |||
|
1085 | for (k=0; k<3900; k++) | |||
|
1086 | { | |||
|
1087 | kcoefficients_dump->kcoeff_blks[k] = 0x00; | |||
|
1088 | } | |||
|
1089 | } | |||
847 |
|
1090 | |||
848 |
|
1091 | |||
849 |
|
1092 | |||
850 |
|
||||
851 |
|
||||
852 |
|
General Comments 0
You need to be logged in to leave comments.
Login now