##// END OF EJS Templates
BP sending filtered depending on the lastValidEnterModeTime
paul -
r243:e8fa8af1f64c R3a
parent child
Show More
@@ -1,2 +1,2
1 1 3081d1f9bb20b2b64a192585337a292a9804e0c5 LFR_basic-parameters
2 ff85ce82cd9845f180cb578272717bcb76b62cb5 header/lfr_common_headers
2 ce0c2f17257170a8529605f68687c18f23973087 header/lfr_common_headers
@@ -123,6 +123,9 void BP_init_header_with_spare(bp_packet
123 123 void BP_send( char *data,
124 124 rtems_id queue_id ,
125 125 unsigned int nbBytesToSend , unsigned int sid );
126 void BP_send_s1_s2(char *data,
127 rtems_id queue_id,
128 unsigned int nbBytesToSend, unsigned int sid );
126 129
127 130 //******************
128 131 // general functions
@@ -12,7 +12,8
12 12
13 13 #include "lfr_cpu_usage_report.h"
14 14
15 extern unsigned int lastValidTransitionDate;
15 extern unsigned int lastValidEnterModeTime;
16 extern enum lfr_transition_type_t lfrTransitionType;
16 17
17 18 //****
18 19 // ISR
@@ -58,7 +58,8 spectral_matrix_regs_t *spectra
58 58 // MODE PARAMETERS
59 59 Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
60 60 struct param_local_str param_local;
61 unsigned int lastValidTransitionDate;
61 unsigned int lastValidEnterModeTime;
62 enum lfr_transition_type_t lfrTransitionType;
62 63
63 64 // HK PACKETS
64 65 Packet_TM_LFR_HK_t housekeeping_packet;
@@ -285,7 +285,7 rtems_task prc0_task( rtems_task_argumen
285 285 set_time( packet_sbm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM );
286 286 packet_sbm_bp1.biaStatusInfo = pa_bia_status_info;
287 287 packet_sbm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
288 BP_send( (char *) &packet_sbm_bp1, queue_id,
288 BP_send_s1_s2( (char *) &packet_sbm_bp1, queue_id,
289 289 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F0 + PACKET_LENGTH_DELTA,
290 290 sid);
291 291 // 4) compute the BP2 set if needed
@@ -298,7 +298,7 rtems_task prc0_task( rtems_task_argumen
298 298 set_time( packet_sbm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM );
299 299 packet_sbm_bp2.biaStatusInfo = pa_bia_status_info;
300 300 packet_sbm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
301 BP_send( (char *) &packet_sbm_bp2, queue_id,
301 BP_send_s1_s2( (char *) &packet_sbm_bp2, queue_id,
302 302 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F0 + PACKET_LENGTH_DELTA,
303 303 sid);
304 304 }
@@ -280,7 +280,7 rtems_task prc1_task( rtems_task_argumen
280 280 set_time( packet_sbm_bp1.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM );
281 281 packet_sbm_bp1.biaStatusInfo = pa_bia_status_info;
282 282 packet_sbm_bp1.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
283 BP_send( (char *) &packet_sbm_bp1, queue_id_send,
283 BP_send_s1_s2( (char *) &packet_sbm_bp1, queue_id_send,
284 284 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP1_F1 + PACKET_LENGTH_DELTA,
285 285 sid );
286 286 // 4) compute the BP2 set if needed
@@ -293,7 +293,7 rtems_task prc1_task( rtems_task_argumen
293 293 set_time( packet_sbm_bp2.acquisitionTime, (unsigned char *) &incomingMsg->coarseTimeSBM );
294 294 packet_sbm_bp2.biaStatusInfo = pa_bia_status_info;
295 295 packet_sbm_bp2.sy_lfr_common_parameters = parameter_dump_packet.sy_lfr_common_parameters;
296 BP_send( (char *) &packet_sbm_bp2, queue_id_send,
296 BP_send_s1_s2( (char *) &packet_sbm_bp2, queue_id_send,
297 297 PACKET_LENGTH_TM_LFR_SCIENCE_SBM_BP2_F1 + PACKET_LENGTH_DELTA,
298 298 sid );
299 299 }
@@ -386,6 +386,34 void BP_send(char *data, rtems_id queue_
386 386 }
387 387 }
388 388
389 void BP_send_s1_s2(char *data, rtems_id queue_id, unsigned int nbBytesToSend, unsigned int sid )
390 {
391 /** This function is used to send the BP paquets when needed.
392 *
393 * @param transitionCoarseTime is the requested transition time contained in the TC_LFR_ENTER_MODE
394 *
395 * @return void
396 *
397 * SBM1 and SBM2 paquets are sent depending on the type of the LFR mode transition.
398 * BURST paquets are sent everytime.
399 *
400 */
401
402 rtems_status_code status;
403
404 // SEND PACKET
405 // before lastValidTransitionDate, the data are drops even if they are ready
406 // this guarantees that no SBM packets will be received before the requestion enter mode time
407 if ( time_management_regs->coarse_time >= lastValidEnterModeTime)
408 {
409 status = rtems_message_queue_send( queue_id, data, nbBytesToSend);
410 if (status != RTEMS_SUCCESSFUL)
411 {
412 PRINTF1("ERR *** in BP_send *** ERR %d\n", (int) status)
413 }
414 }
415 }
416
389 417 //******************
390 418 // general functions
391 419
@@ -206,7 +206,7 int action_enter_mode(ccsdsTelecommandPa
206 206 {
207 207 PRINTF1("OK *** in action_enter_mode *** enter mode %d\n", requestedMode);
208 208
209
209 update_last_valid_transition_date( transitionCoarseTime );
210 210
211 211 switch(requestedMode)
212 212 {
@@ -446,7 +446,7 int check_mode_transition( unsigned char
446 446
447 447 void update_last_valid_transition_date(unsigned int transitionCoarseTime)
448 448 {
449 lastValidTransitionDate = transitionCoarseTime;
449 lastValidEnterModeTime = transitionCoarseTime;
450 450 }
451 451
452 452 int check_transition_date( unsigned int transitionCoarseTime )
@@ -607,6 +607,7 int enter_mode_standby()
607 607 int status;
608 608
609 609 status = stop_current_mode(); // STOP THE CURRENT MODE
610 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
610 611
611 612 #ifdef PRINT_TASK_STATISTICS
612 613 rtems_cpu_usage_report();
@@ -648,6 +649,7 int enter_mode_normal( unsigned int tran
648 649 switch( lfrCurrentMode )
649 650 {
650 651 case LFR_MODE_STANDBY:
652 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
651 653 status = restart_science_tasks( LFR_MODE_NORMAL ); // restart science tasks
652 654 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
653 655 {
@@ -656,6 +658,7 int enter_mode_normal( unsigned int tran
656 658 }
657 659 break;
658 660 case LFR_MODE_BURST:
661 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
659 662 status = stop_current_mode(); // stop the current mode
660 663 status = restart_science_tasks( LFR_MODE_NORMAL ); // restart the science tasks
661 664 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
@@ -665,10 +668,12 int enter_mode_normal( unsigned int tran
665 668 }
666 669 break;
667 670 case LFR_MODE_SBM1:
671 lfrTransitionType = TRANSITION_S1_TO_NORM;
668 672 restart_asm_activities( LFR_MODE_NORMAL ); // this is necessary to restart ASM tasks to update the parameters
669 673 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
670 674 break;
671 675 case LFR_MODE_SBM2:
676 lfrTransitionType = TRANSITION_S2_TO_NORM;
672 677 restart_asm_activities( LFR_MODE_NORMAL ); // this is necessary to restart ASM tasks to update the parameters
673 678 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
674 679 break;
@@ -708,6 +713,7 int enter_mode_burst( unsigned int trans
708 713 rtems_cpu_usage_reset();
709 714 #endif
710 715
716 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
711 717 status = stop_current_mode(); // stop the current mode
712 718 status = restart_science_tasks( LFR_MODE_BURST ); // restart the science tasks
713 719 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
@@ -754,6 +760,7 int enter_mode_sbm1( unsigned int transi
754 760 switch( lfrCurrentMode )
755 761 {
756 762 case LFR_MODE_STANDBY:
763 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
757 764 status = restart_science_tasks( LFR_MODE_SBM1 ); // restart science tasks
758 765 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
759 766 {
@@ -762,10 +769,12 int enter_mode_sbm1( unsigned int transi
762 769 }
763 770 break;
764 771 case LFR_MODE_NORMAL: // lfrCurrentMode will be updated after the execution of close_action
772 lfrTransitionType = TRANSITION_NORM_TO_S1;
765 773 restart_asm_activities( LFR_MODE_SBM1 );
766 774 status = LFR_SUCCESSFUL;
767 775 break;
768 776 case LFR_MODE_BURST:
777 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
769 778 status = stop_current_mode(); // stop the current mode
770 779 status = restart_science_tasks( LFR_MODE_SBM1 ); // restart the science tasks
771 780 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
@@ -775,6 +784,7 int enter_mode_sbm1( unsigned int transi
775 784 }
776 785 break;
777 786 case LFR_MODE_SBM2:
787 lfrTransitionType = TRANSITION_S2_TO_S1;
778 788 restart_asm_activities( LFR_MODE_SBM1 );
779 789 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
780 790 break;
@@ -820,6 +830,7 int enter_mode_sbm2( unsigned int transi
820 830 switch( lfrCurrentMode )
821 831 {
822 832 case LFR_MODE_STANDBY:
833 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
823 834 status = restart_science_tasks( LFR_MODE_SBM2 ); // restart science tasks
824 835 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
825 836 {
@@ -828,10 +839,12 int enter_mode_sbm2( unsigned int transi
828 839 }
829 840 break;
830 841 case LFR_MODE_NORMAL:
842 lfrTransitionType = TRANSITION_NORM_TO_S2;
831 843 restart_asm_activities( LFR_MODE_SBM2 );
832 844 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
833 845 break;
834 846 case LFR_MODE_BURST:
847 lfrTransitionType = TRANSITION_NOT_SPECIFIC;
835 848 status = stop_current_mode(); // stop the current mode
836 849 status = restart_science_tasks( LFR_MODE_SBM2 ); // restart the science tasks
837 850 if (status == RTEMS_SUCCESSFUL) // relaunch spectral_matrix and waveform_picker modules
@@ -841,6 +854,7 int enter_mode_sbm2( unsigned int transi
841 854 }
842 855 break;
843 856 case LFR_MODE_SBM1:
857 lfrTransitionType = TRANSITION_S1_TO_S2;
844 858 restart_asm_activities( LFR_MODE_SBM2 );
845 859 status = LFR_SUCCESSFUL; // lfrCurrentMode will be updated after the execution of close_action
846 860 break;
General Comments 0
You need to be logged in to leave comments. Login now