##// END OF EJS Templates
All modes partially implemented...
paul@pc-solar1.lab-lpp.local -
r22:c4e2ba2dd2be default
parent child
Show More
@@ -1,6 +1,6
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw$(SW_VERSION)
2 # Makefile for building: bin/fsw-gsa
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jun 14 07:50:58 2013
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Tue Jun 18 14:00:55 2013
4 # Project: fsw-qt.pro
4 # Project: fsw-qt.pro
5 # Template: app
5 # Template: app
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
6 # Command: /usr/bin/qmake-qt4 -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
@@ -10,7 +10,7
10
10
11 CC = sparc-rtems-gcc
11 CC = sparc-rtems-gcc
12 CXX = sparc-rtems-g++
12 CXX = sparc-rtems-g++
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=4 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=5 -DPRINT_MESSAGES_ON_CONSOLE -DGSA
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
14 CFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
15 CXXFLAGS = -pipe -O3 -Wall $(DEFINES)
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
16 INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header
@@ -78,9 +78,9 DIST = /usr/lib64/qt4/mkspecs/c
78 /usr/lib64/qt4/mkspecs/features/lex.prf \
78 /usr/lib64/qt4/mkspecs/features/lex.prf \
79 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
79 /usr/lib64/qt4/mkspecs/features/include_source_dir.prf \
80 fsw-qt.pro
80 fsw-qt.pro
81 QMAKE_TARGET = fsw$(SW_VERSION)
81 QMAKE_TARGET = fsw-gsa
82 DESTDIR = bin/
82 DESTDIR = bin/
83 TARGET = bin/fsw$(SW_VERSION)
83 TARGET = bin/fsw-gsa
84
84
85 first: all
85 first: all
86 ####### Implicit rules
86 ####### Implicit rules
@@ -159,8 +159,8 qmake: FORCE
159 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
159 @$(QMAKE) -spec /usr/lib64/qt4/mkspecs/linux-g++ -o Makefile fsw-qt.pro
160
160
161 dist:
161 dist:
162 @$(CHK_DIR_EXISTS) obj/fsw$(SW_VERSION)1.0.0 || $(MKDIR) obj/fsw$(SW_VERSION)1.0.0
162 @$(CHK_DIR_EXISTS) obj/fsw-gsa1.0.0 || $(MKDIR) obj/fsw-gsa1.0.0
163 $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/fsw$(SW_VERSION)1.0.0/ && (cd `dirname obj/fsw$(SW_VERSION)1.0.0` && $(TAR) fsw$(SW_VERSION)1.0.0.tar fsw$(SW_VERSION)1.0.0 && $(COMPRESS) fsw$(SW_VERSION)1.0.0.tar) && $(MOVE) `dirname obj/fsw$(SW_VERSION)1.0.0`/fsw$(SW_VERSION)1.0.0.tar.gz . && $(DEL_FILE) -r obj/fsw$(SW_VERSION)1.0.0
163 $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/fsw-gsa1.0.0/ && (cd `dirname obj/fsw-gsa1.0.0` && $(TAR) fsw-gsa1.0.0.tar fsw-gsa1.0.0 && $(COMPRESS) fsw-gsa1.0.0.tar) && $(MOVE) `dirname obj/fsw-gsa1.0.0`/fsw-gsa1.0.0.tar.gz . && $(DEL_FILE) -r obj/fsw-gsa1.0.0
164
164
165
165
166 clean:compiler_clean
166 clean:compiler_clean
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,13 +1,13
1 TEMPLATE = app
1 TEMPLATE = app
2 # CONFIG += console v8 sim
2 # CONFIG += console v8 sim
3 # CONFIG options = verbose *** cpu_usage_report *** gsa
3 # CONFIG options = verbose *** cpu_usage_report *** gsa
4 CONFIG += console verbose
4 CONFIG += console verbose gsa
5 CONFIG -= qt
5 CONFIG -= qt
6
6
7 include(./sparc.pri)
7 include(./sparc.pri)
8
8
9 # flight software version
9 # flight software version
10 SW_VERSION=-0-5
10 SWVERSION=-0-5
11 DEFINES += SW_VERSION_N1=0
11 DEFINES += SW_VERSION_N1=0
12 DEFINES += SW_VERSION_N2=0
12 DEFINES += SW_VERSION_N2=0
13 DEFINES += SW_VERSION_N3=0
13 DEFINES += SW_VERSION_N3=0
@@ -21,10 +21,10 contains( CONFIG, cpu_usage_report ) {
21 DEFINES += PRINT_TASK_STATISTICS
21 DEFINES += PRINT_TASK_STATISTICS
22 }
22 }
23
23
24 TARGET = fsw$(SW_VERSION)
24 TARGET = fsw
25 contains( CONFIG, gsa ) {
25 contains( CONFIG, gsa ) {
26 DEFINES += GSA
26 DEFINES += GSA
27 TARGET = fsw-gsa$(SW_VERSION)
27 TARGET = fsw-gsa
28 }
28 }
29
29
30 INCLUDEPATH += \
30 INCLUDEPATH += \
@@ -1,6 +1,6
1 <?xml version="1.0" encoding="UTF-8"?>
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE QtCreatorProject>
2 <!DOCTYPE QtCreatorProject>
3 <!-- Written by Qt Creator 2.4.1, 2013-06-17T15:56:28. -->
3 <!-- Written by Qt Creator 2.4.1, 2013-06-18T14:38:28. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -58,7 +58,9 int send_tm_lfr_tc_exe_success(ccsdsTele
58 //
58 //
59 int stop_current_mode();
59 int stop_current_mode();
60 int enter_normal_mode();
60 int enter_normal_mode();
61 int enter_burst_mode();
61 int enter_sbm1_mode();
62 int enter_sbm1_mode();
63 int enter_sbm2_mode();
62 int action_load_comm(ccsdsTelecommandPacket_t *TC);
64 int action_load_comm(ccsdsTelecommandPacket_t *TC);
63 int action_load_norm(ccsdsTelecommandPacket_t *TC);
65 int action_load_norm(ccsdsTelecommandPacket_t *TC);
64 int action_enter(ccsdsTelecommandPacket_t *TC);
66 int action_enter(ccsdsTelecommandPacket_t *TC);
@@ -67,9 +69,6 int action_updt_time(ccsdsTelecommandPac
67 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
69 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
68 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
70 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
69 void close_action(ccsdsTelecommandPacket_t *TC, int result);
71 void close_action(ccsdsTelecommandPacket_t *TC, int result);
70 //
71 rtems_status_code restart_if_needed(rtems_id id);
72 rtems_status_code suspend_if_needed(rtems_id id);
73
72
74 #endif // TC_HANDLER_H_INCLUDED
73 #endif // TC_HANDLER_H_INCLUDED
75
74
@@ -20,11 +20,11 extern volatile int wf_snap_f0[ ];
20 extern volatile int wf_snap_f1[ ];
20 extern volatile int wf_snap_f1[ ];
21 extern volatile int wf_snap_f1_bis[ ];
21 extern volatile int wf_snap_f1_bis[ ];
22 extern volatile int wf_snap_f2[ ];
22 extern volatile int wf_snap_f2[ ];
23 extern volatile int wf_snap_f2_bis[ ];
23 extern volatile int wf_cont_f3[ ];
24 extern volatile int wf_cont_f3[ ];
24 extern waveform_picker_regs_t *waveform_picker_regs;
25 extern waveform_picker_regs_t *waveform_picker_regs;
25
26
26 rtems_isr waveforms_isr( rtems_vector_number vector );
27 rtems_isr waveforms_isr( rtems_vector_number vector );
27 rtems_isr waveforms_isr_alternative( rtems_vector_number vector );
28 rtems_isr waveforms_simulator_isr( rtems_vector_number vector );
28 rtems_isr waveforms_simulator_isr( rtems_vector_number vector );
29 rtems_task wfrm_task(rtems_task_argument argument);
29 rtems_task wfrm_task(rtems_task_argument argument);
30
30
@@ -22,6 +22,7 volatile int wf_snap_f0[ NB_SAMPLES_PER_
22 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
22 volatile int wf_snap_f1[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
23 volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
23 volatile int wf_snap_f1_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
24 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
24 volatile int wf_snap_f2[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
25 volatile int wf_snap_f2_bis[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
25 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
26 volatile int wf_cont_f3[ NB_SAMPLES_PER_SNAPSHOT * NB_WORDS_SWF_BLK + TIME_OFFSET];
26
27
27 // SPECTRAL MATRICES GLOBAL VARIABLES
28 // SPECTRAL MATRICES GLOBAL VARIABLES
@@ -71,9 +71,10 rtems_task Init( rtems_task_argument ign
71 init_housekeeping_parameters();
71 init_housekeeping_parameters();
72 create_message_queue();
72 create_message_queue();
73
73
74 create_names();
74 create_names(); // create all names
75 create_all_tasks();
75 create_all_tasks(); // create all tasks
76 start_all_tasks();
76 start_all_tasks(); // start all tasks
77 stop_current_mode(); // go in STANDBY mode
77
78
78 grspw_timecode_callback = &timecode_irq_handler;
79 grspw_timecode_callback = &timecode_irq_handler;
79
80
@@ -497,7 +497,7 rtems_task actn_task( rtems_task_argumen
497 {
497 {
498 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
498 status = rtems_message_queue_receive(misc_id[0], (char*) &TC, &size,
499 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
499 RTEMS_WAIT, RTEMS_NO_TIMEOUT);
500 if (status!=RTEMS_SUCCESSFUL) PRINTF1("in task ACTN *** error receiving a message, code %d \n", status)
500 if (status!=RTEMS_SUCCESSFUL) PRINTF1("ERR *** in task ACTN *** error receiving a message, code %d \n", status)
501 else
501 else
502 {
502 {
503 subtype = TC.dataFieldHeader[2];
503 subtype = TC.dataFieldHeader[2];
@@ -538,6 +538,14 rtems_task actn_task( rtems_task_argumen
538 break;
538 break;
539 //
539 //
540 case TC_SUBTYPE_ENTER:
540 case TC_SUBTYPE_ENTER:
541 if ( (housekeeping_packet.lfr_status_word[0] & 0xf0) != LFR_MODE_STANDBY)
542 {
543 status = stop_current_mode();
544 }
545 if (status != RTEMS_SUCCESSFUL)
546 {
547 PRINTF("ERR *** in task ACTN *** TC_SUBTYPE_ENTER *** stop_current_mode\n")
548 }
541 result = action_enter( &TC );
549 result = action_enter( &TC );
542 close_action( &TC, result );
550 close_action( &TC, result );
543 break;
551 break;
@@ -630,7 +638,7 int action_default(ccsdsTelecommandPacke
630
638
631 int action_enter(ccsdsTelecommandPacket_t *TC)
639 int action_enter(ccsdsTelecommandPacket_t *TC)
632 {
640 {
633 rtems_status_code status;
641 rtems_status_code status = RTEMS_SUCCESSFUL;
634 unsigned char lfr_mode = TC->dataAndCRC[1];
642 unsigned char lfr_mode = TC->dataAndCRC[1];
635 printf("enter mode %d\n", lfr_mode);
643 printf("enter mode %d\n", lfr_mode);
636 switch(lfr_mode)
644 switch(lfr_mode)
@@ -638,18 +646,12 int action_enter(ccsdsTelecommandPacket_
638 //********
646 //********
639 // STANDBY
647 // STANDBY
640 case(LFR_MODE_STANDBY):
648 case(LFR_MODE_STANDBY):
641 status = stop_current_mode();
642 if (status != RTEMS_SUCCESSFUL)
643 {
644 PRINTF("in action_enter *** error going back to STANDBY mode\n")
645 }
646 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_STANDBY << 4) + 0x0d);
649 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_STANDBY << 4) + 0x0d);
647 break;
650 break;
648
651
649 //******
652 //******
650 // NORMAL
653 // NORMAL
651 case(LFR_MODE_NORMAL):
654 case(LFR_MODE_NORMAL):
652 status = stop_current_mode();
653 status = enter_normal_mode();
655 status = enter_normal_mode();
654 if (status == RTEMS_SUCCESSFUL)
656 if (status == RTEMS_SUCCESSFUL)
655 {
657 {
@@ -660,7 +662,7 int action_enter(ccsdsTelecommandPacket_
660 //******
662 //******
661 // BURST
663 // BURST
662 case(LFR_MODE_BURST):
664 case(LFR_MODE_BURST):
663 status = stop_current_mode();
665 status = enter_burst_mode();
664 if (status == RTEMS_SUCCESSFUL)
666 if (status == RTEMS_SUCCESSFUL)
665 {
667 {
666 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_BURST << 4) + 0x0d);
668 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_BURST << 4) + 0x0d);
@@ -670,7 +672,6 int action_enter(ccsdsTelecommandPacket_
670 //*****
672 //*****
671 // SBM1
673 // SBM1
672 case(LFR_MODE_SBM1):
674 case(LFR_MODE_SBM1):
673 status = stop_current_mode();
674 status = enter_sbm1_mode();
675 status = enter_sbm1_mode();
675 if (status == RTEMS_SUCCESSFUL)
676 if (status == RTEMS_SUCCESSFUL)
676 {
677 {
@@ -681,7 +682,7 int action_enter(ccsdsTelecommandPacket_
681 //*****
682 //*****
682 // SBM2
683 // SBM2
683 case(LFR_MODE_SBM2):
684 case(LFR_MODE_SBM2):
684 status = stop_current_mode();
685 status = enter_sbm2_mode();
685 if (status == RTEMS_SUCCESSFUL)
686 if (status == RTEMS_SUCCESSFUL)
686 {
687 {
687 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_SBM2 << 4) + 0x0d);
688 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_SBM2 << 4) + 0x0d);
@@ -691,11 +692,7 int action_enter(ccsdsTelecommandPacket_
691 //********
692 //********
692 // DEFAULT
693 // DEFAULT
693 default:
694 default:
694 status = stop_current_mode();
695 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_STANDBY << 4) + 0x0d);
695 if (status == RTEMS_SUCCESSFUL)
696 {
697 housekeeping_packet.lfr_status_word[0] = (unsigned char) ((LFR_MODE_STANDBY << 4) + 0x0d);
698 }
699 break;
696 break;
700 }
697 }
701 return status;
698 return status;
@@ -704,6 +701,7 int action_enter(ccsdsTelecommandPacket_
704 int stop_current_mode()
701 int stop_current_mode()
705 {
702 {
706 rtems_status_code status;
703 rtems_status_code status;
704
707 // mask all IRQ lines related to signal processing
705 // mask all IRQ lines related to signal processing
708 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
706 LEON_Mask_interrupt( IRQ_WF ); // mask waveform interrupt (coming from the timer VHDL IP)
709 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
707 LEON_Mask_interrupt( IRQ_SM ); // mask spectral matrices interrupt (coming from the timer VHDL IP)
@@ -715,14 +713,20 int stop_current_mode()
715 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
713 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); // clear waveform picker interrupt
716
714
717 // suspend several tasks
715 // suspend several tasks
718 status = suspend_if_needed( Task_id[TASKID_AVF0] );
716
717 status = rtems_task_suspend( Task_id[TASKID_AVF0] );
719 if (status == RTEMS_SUCCESSFUL) {
718 if (status == RTEMS_SUCCESSFUL) {
720 status = suspend_if_needed( Task_id[TASKID_BPF0] );
719 status = rtems_task_suspend( Task_id[TASKID_BPF0] );
721 if (status == RTEMS_SUCCESSFUL) {
720 if (status == RTEMS_SUCCESSFUL) {
722 status = suspend_if_needed( Task_id[TASKID_WFRM] );
721 status = rtems_task_suspend( Task_id[TASKID_WFRM] );
723 }
722 }
724 }
723 }
725
724
725 if (status != RTEMS_SUCCESSFUL)
726 {
727 PRINTF("ERR *** in stop_current_mode *** suspending tasks\n")
728 }
729
726 // initialize the registers
730 // initialize the registers
727 waveform_picker_regs->burst_enable = 0x00; // initialize
731 waveform_picker_regs->burst_enable = 0x00; // initialize
728
732
@@ -733,11 +737,11 int enter_normal_mode()
733 {
737 {
734 rtems_status_code status;
738 rtems_status_code status;
735
739
736 status = restart_if_needed( Task_id[TASKID_AVF0] );
740 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
737 if (status == RTEMS_SUCCESSFUL) {
741 if (status == RTEMS_SUCCESSFUL) {
738 status = restart_if_needed( Task_id[TASKID_BPF0] );
742 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
739 if (status == RTEMS_SUCCESSFUL) {
743 if (status == RTEMS_SUCCESSFUL) {
740 status = restart_if_needed( Task_id[TASKID_WFRM] );
744 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
741 }
745 }
742 }
746 }
743
747
@@ -755,14 +759,15 int enter_normal_mode()
755 return status;
759 return status;
756 }
760 }
757
761
758 int enter_sbm1_mode()
762 int enter_burst_mode()
759 {
763 {
760 rtems_status_code status;
764 rtems_status_code status;
761 status = restart_if_needed( Task_id[TASKID_AVF0] );
765
766 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
762 if (status == RTEMS_SUCCESSFUL) {
767 if (status == RTEMS_SUCCESSFUL) {
763 status = restart_if_needed( Task_id[TASKID_BPF0] );
768 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
764 if (status == RTEMS_SUCCESSFUL) {
769 if (status == RTEMS_SUCCESSFUL) {
765 status = restart_if_needed( Task_id[TASKID_WFRM] );
770 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
766 }
771 }
767 }
772 }
768
773
@@ -770,11 +775,65 int enter_sbm1_mode()
770 #else
775 #else
771 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
776 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
772 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
777 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
778 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
779 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
780 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
781 waveform_picker_regs->status = 0x00;
782 #endif
783
784 LEON_Unmask_interrupt( IRQ_SM );
785 return status;
786 }
787
788 int enter_sbm1_mode()
789 {
790 rtems_status_code status;
791
792 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
793 if (status == RTEMS_SUCCESSFUL) {
794 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
795 if (status == RTEMS_SUCCESSFUL) {
796 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
797 }
798 }
799
800 #ifdef GSA
801 #else
802 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
803 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
804 waveform_picker_regs->addr_data_f1 = (int) wf_snap_f1;
773 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0
805 waveform_picker_regs->burst_enable = 0x20; // [0010 0000] burst f2, f1, f0 enable f3 f2 f1 f0
774 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x02;
806 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x02;
775 waveform_picker_regs->status = 0x00;
807 waveform_picker_regs->status = 0x00;
776 #endif
808 #endif
777 //LEON_Unmask_interrupt( IRQ_SM );
809
810 LEON_Unmask_interrupt( IRQ_SM );
811 return status;
812 }
813
814 int enter_sbm2_mode()
815 {
816 rtems_status_code status;
817
818 status = rtems_task_restart( Task_id[TASKID_AVF0], 0 );
819 if (status == RTEMS_SUCCESSFUL) {
820 status = rtems_task_restart( Task_id[TASKID_BPF0], 0 );
821 if (status == RTEMS_SUCCESSFUL) {
822 status = rtems_task_restart( Task_id[TASKID_WFRM], 0 );
823 }
824 }
825
826 #ifdef GSA
827 #else
828 LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER );
829 LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER );
830 waveform_picker_regs->addr_data_f2 = (int) wf_snap_f2;
831 waveform_picker_regs->burst_enable = 0x40; // [0100 0000] burst f2, f1, f0 enable f3 f2 f1 f0
832 waveform_picker_regs->burst_enable = waveform_picker_regs->burst_enable | 0x04;
833 waveform_picker_regs->status = 0x00;
834 #endif
835
836 LEON_Unmask_interrupt( IRQ_SM );
778 return status;
837 return status;
779 }
838 }
780
839
@@ -835,38 +894,6 int send_tm_lfr_tc_exe_success(ccsdsTele
835 return 0;
894 return 0;
836 }
895 }
837
896
838 rtems_status_code restart_if_needed(rtems_id id)
839 {
840 rtems_status_code status;
841
842 status = rtems_task_is_suspended( id );
843
844 if (status==RTEMS_SUCCESSFUL) {
845 status = rtems_task_restart( id, 0 );
846 if (status!=RTEMS_SUCCESSFUL) {
847 PRINTF1("in restart_if_needed *** Error restarting with id %d\n", (int) id)
848 }
849 }
850
851 return status;
852 }
853
854 rtems_status_code suspend_if_needed(rtems_id id)
855 {
856 rtems_status_code status;
857
858 status = rtems_task_is_suspended( id );
859
860 if (status!=RTEMS_SUCCESSFUL) {
861 status = rtems_task_suspend( id );
862 if (status!=RTEMS_SUCCESSFUL) {
863 PRINTF1("in suspend_if_needed *** Error suspending task with id %d\n", (int) id)
864 }
865 }
866
867 return status;
868 }
869
870 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
897 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
871 {
898 {
872 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
899 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
@@ -1,34 +1,5
1 #include <wf_handler.h>
1 #include <wf_handler.h>
2
2
3 rtems_isr waveforms_isr_alternative( rtems_vector_number vector )
4 {
5 if (waveform_picker_regs->burst_enable == 0x22) {
6 if (waveform_picker_regs->addr_data_f1 == (int) wf_snap_f1) {
7 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1_bis);
8 }
9 else {
10 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1);
11 }
12 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) {
13 //rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
14 }
15 }
16 waveform_picker_regs->status = 0x00;
17 /*else if ( (waveform_picker_regs->burst_enable & 0x7) == 0x0 ){// if no channel is enable
18 if (rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 ) != RTEMS_SUCCESSFUL) {
19 printf("In timecode_irq_handler *** Error sending event to DUMB\n");
20 }
21 }
22 else {
23 if ( (waveform_picker_regs->status & 0x7) == 0x7 ){ // f2 f1 and f0 are full
24 waveform_picker_regs->burst_enable = 0x00;
25 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
26 printf("In waveforms_isr *** Error sending event to WFRM\n");
27 }
28 }
29 }*/
30 }
31
32 rtems_isr waveforms_isr( rtems_vector_number vector )
3 rtems_isr waveforms_isr( rtems_vector_number vector )
33 {
4 {
34 unsigned char lfrMode;
5 unsigned char lfrMode;
@@ -95,6 +66,23 rtems_isr waveforms_isr( rtems_vector_nu
95 //*****
66 //*****
96 // SBM2
67 // SBM2
97 case(LFR_MODE_SBM2):
68 case(LFR_MODE_SBM2):
69 #ifdef GSA
70 PRINTF("in waveform_isr *** unexpected waveform picker interruption\n")
71 #else
72 if (waveform_picker_regs->burst_enable == 0x44) {
73 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
74 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2_bis);
75 }
76 else {
77 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2);
78 }
79 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_SBM2 ) != RTEMS_SUCCESSFUL) {
80 PRINTF("in waveforms_isr *** Error sending event to WFRM\n")
81 rtems_event_send( Task_id[TASKID_DUMB], RTEMS_EVENT_2 );
82 }
83 }
84 waveform_picker_regs->status = 0x00;
85 #endif
98 break;
86 break;
99
87
100 //********
88 //********
@@ -106,8 +94,43 rtems_isr waveforms_isr( rtems_vector_nu
106
94
107 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
95 rtems_isr waveforms_simulator_isr( rtems_vector_number vector )
108 {
96 {
109 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_0 ) != RTEMS_SUCCESSFUL) {
97 unsigned char lfrMode;
110 printf("In waveforms_isr *** Error sending event to WFRM\n");
98 lfrMode = (housekeeping_packet.lfr_status_word[0] & 0xf0) >> 4;
99
100 switch(lfrMode)
101 {
102 //********
103 // STANDBY
104 case(LFR_MODE_STANDBY):
105 break;
106
107 //******
108 // NORMAL
109 case(LFR_MODE_NORMAL):
110 if (rtems_event_send( Task_id[TASKID_WFRM], RTEMS_EVENT_MODE_NORMAL ) != RTEMS_SUCCESSFUL) {
111 PRINTF("ERR *** in waveforms_isr *** error sending event to WFRM\n");
112 }
113 break;
114
115 //******
116 // BURST
117 case(LFR_MODE_BURST):
118 break;
119
120 //*****
121 // SBM1
122 case(LFR_MODE_SBM1):
123 break;
124
125 //*****
126 // SBM2
127 case(LFR_MODE_SBM2):
128 break;
129
130 //********
131 // DEFAULT
132 default:
133 break;
111 }
134 }
112 }
135 }
113
136
@@ -197,6 +220,21 rtems_task wfrm_task(rtems_task_argument
197 send_waveform( &header, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send);
220 send_waveform( &header, wf_snap_f1, SID_NORM_SWF_F1, &spw_ioctl_send);
198 }
221 }
199 break;
222 break;
223
224 //*****
225 // SBM2
226 case(RTEMS_EVENT_MODE_SBM2):
227 // F2
228 if (waveform_picker_regs->addr_data_f2 == (int) wf_snap_f2) {
229 send_waveform( &header, wf_snap_f2_bis, SID_NORM_SWF_F2, &spw_ioctl_send);
230 }
231 else {
232 send_waveform( &header, wf_snap_f2, SID_NORM_SWF_F2, &spw_ioctl_send);
233 }
234 break;
235
236 //********
237 // DEFAULT
200 default:
238 default:
201 break;
239 break;
202 }
240 }
General Comments 0
You need to be logged in to leave comments. Login now