@@ -1,6 +1,6 | |||||
1 | ############################################################################# |
|
1 | ############################################################################# | |
2 | # Makefile for building: bin/fsw |
|
2 | # Makefile for building: bin/fsw | |
3 |
# Generated by qmake (2.01a) (Qt 4.8.5) on: |
|
3 | # Generated by qmake (2.01a) (Qt 4.8.5) on: Fri Mar 28 13:24:20 2014 | |
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=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4= |
|
13 | DEFINES = -DSW_VERSION_N1=1 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=5 -DVHDL_DEV -DPRINT_MESSAGES_ON_CONSOLE | |
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 -I../../LFR_basic-parameters |
|
16 | INCPATH = -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I../src -I../header -I../../LFR_basic-parameters |
@@ -11,7 +11,7 SWVERSION=-1-0 | |||||
11 | DEFINES += SW_VERSION_N1=1 # major |
|
11 | DEFINES += SW_VERSION_N1=1 # major | |
12 | DEFINES += SW_VERSION_N2=0 # minor |
|
12 | DEFINES += SW_VERSION_N2=0 # minor | |
13 | DEFINES += SW_VERSION_N3=0 # patch |
|
13 | DEFINES += SW_VERSION_N3=0 # patch | |
14 |
DEFINES += SW_VERSION_N4= |
|
14 | DEFINES += SW_VERSION_N4=5 # internal | |
15 |
|
15 | |||
16 | contains( CONFIG, debug_tch ) { |
|
16 | contains( CONFIG, debug_tch ) { | |
17 | DEFINES += DEBUG_TCH |
|
17 | DEFINES += DEBUG_TCH |
@@ -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 QtCreator 3.0.1, 2014-03-28T |
|
3 | <!-- Written by QtCreator 3.0.1, 2014-03-28T16:51:27. --> | |
4 | <qtcreator> |
|
4 | <qtcreator> | |
5 | <data> |
|
5 | <data> | |
6 | <variable>ProjectExplorer.Project.ActiveTarget</variable> |
|
6 | <variable>ProjectExplorer.Project.ActiveTarget</variable> |
@@ -23,4 +23,7 | |||||
23 | #define BYTE_POS_HK_UPDATE_INFO_PAR_SET5 24 // 34 - 10 |
|
23 | #define BYTE_POS_HK_UPDATE_INFO_PAR_SET5 24 // 34 - 10 | |
24 | #define BYTE_POS_HK_UPDATE_INFO_PAR_SET6 25 // 35 - 10 |
|
24 | #define BYTE_POS_HK_UPDATE_INFO_PAR_SET6 25 // 35 - 10 | |
25 |
|
25 | |||
|
26 | // TC_LFR_ENTER_MODE | |||
|
27 | #define BYTE_POS_CP_LFR_ENTER_MODE_TIME 2 // 12 - 10 | |||
|
28 | ||||
26 | #endif // TM_BYTE_POSITIONS_H |
|
29 | #endif // TM_BYTE_POSITIONS_H |
@@ -25,7 +25,7 rtems_task actn_task( rtems_task_argumen | |||||
25 | //*********** |
|
25 | //*********** | |
26 | // TC ACTIONS |
|
26 | // TC ACTIONS | |
27 | int action_reset( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); |
|
27 | int action_reset( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); | |
28 |
int action_enter_mode( |
|
28 | int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id); | |
29 | int action_update_info( ccsdsTelecommandPacket_t *TC, rtems_id queue_id ); |
|
29 | int action_update_info( ccsdsTelecommandPacket_t *TC, rtems_id queue_id ); | |
30 | int action_enable_calibration( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); |
|
30 | int action_enable_calibration( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); | |
31 | int action_disable_calibration( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); |
|
31 | int action_disable_calibration( ccsdsTelecommandPacket_t *TC, rtems_id queue_id, unsigned char *time ); | |
@@ -34,11 +34,12 int action_update_time( ccsdsTelecommand | |||||
34 | // mode transition |
|
34 | // mode transition | |
35 | int check_mode_value( unsigned char requestedMode ); |
|
35 | int check_mode_value( unsigned char requestedMode ); | |
36 | int check_mode_transition( unsigned char requestedMode ); |
|
36 | int check_mode_transition( unsigned char requestedMode ); | |
|
37 | int check_transition_date( unsigned int transitionCoarseTime ); | |||
37 | int stop_current_mode( void ); |
|
38 | int stop_current_mode( void ); | |
38 | int enter_mode( unsigned char mode ); |
|
39 | int enter_mode( unsigned char mode , unsigned int transitionCoarseTime ); | |
39 | int restart_science_tasks(); |
|
40 | int restart_science_tasks(); | |
40 | int suspend_science_tasks(); |
|
41 | int suspend_science_tasks(); | |
41 |
void launch_waveform_picker( |
|
42 | void launch_waveform_picker(unsigned char mode , unsigned int transitionCoarseTime); | |
42 | void launch_spectral_matrix( unsigned char mode ); |
|
43 | void launch_spectral_matrix( unsigned char mode ); | |
43 | void set_irq_on_new_ready_matrix(unsigned char value ); |
|
44 | void set_irq_on_new_ready_matrix(unsigned char value ); | |
44 | void set_run_matrix_spectral( unsigned char value ); |
|
45 | void set_run_matrix_spectral( unsigned char value ); |
@@ -310,7 +310,7 void init_housekeeping_parameters( void | |||||
310 | housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3; |
|
310 | housekeeping_packet.lfr_sw_version[2] = SW_VERSION_N3; | |
311 | housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4; |
|
311 | housekeeping_packet.lfr_sw_version[3] = SW_VERSION_N4; | |
312 | // init fpga version |
|
312 | // init fpga version | |
313 |
parameters = (unsigned char *) (REGS_ADDR_WAVEFORM_PICKER + 0x |
|
313 | parameters = (unsigned char *) (REGS_ADDR_WAVEFORM_PICKER + 0xb0); | |
314 | housekeeping_packet.lfr_fpga_version[0] = parameters[1]; // n1 |
|
314 | housekeeping_packet.lfr_fpga_version[0] = parameters[1]; // n1 | |
315 | housekeeping_packet.lfr_fpga_version[1] = parameters[2]; // n2 |
|
315 | housekeeping_packet.lfr_fpga_version[1] = parameters[2]; // n2 | |
316 | housekeeping_packet.lfr_fpga_version[2] = parameters[3]; // n3 |
|
316 | housekeeping_packet.lfr_fpga_version[2] = parameters[3]; // n3 | |
@@ -395,7 +395,7 void send_dumb_hk( void ) | |||||
395 | dummy_hk_packet.lfr_sw_version[2] = SW_VERSION_N3; |
|
395 | dummy_hk_packet.lfr_sw_version[2] = SW_VERSION_N3; | |
396 | dummy_hk_packet.lfr_sw_version[3] = SW_VERSION_N4; |
|
396 | dummy_hk_packet.lfr_sw_version[3] = SW_VERSION_N4; | |
397 | // init fpga version |
|
397 | // init fpga version | |
398 |
parameters = (unsigned char *) (REGS_ADDR_WAVEFORM_PICKER + 0x |
|
398 | parameters = (unsigned char *) (REGS_ADDR_WAVEFORM_PICKER + 0xb0); | |
399 | dummy_hk_packet.lfr_fpga_version[0] = parameters[1]; // n1 |
|
399 | dummy_hk_packet.lfr_fpga_version[0] = parameters[1]; // n1 | |
400 | dummy_hk_packet.lfr_fpga_version[1] = parameters[2]; // n2 |
|
400 | dummy_hk_packet.lfr_fpga_version[1] = parameters[2]; // n2 | |
401 | dummy_hk_packet.lfr_fpga_version[2] = parameters[3]; // n3 |
|
401 | dummy_hk_packet.lfr_fpga_version[2] = parameters[3]; // n3 |
@@ -87,7 +87,7 rtems_task spiq_task(rtems_task_argument | |||||
87 | if ( status != RTEMS_SUCCESSFUL ) { |
|
87 | if ( status != RTEMS_SUCCESSFUL ) { | |
88 | PRINTF1("in SPIQ *** ERR stop_current_mode *** code %d\n", status) |
|
88 | PRINTF1("in SPIQ *** ERR stop_current_mode *** code %d\n", status) | |
89 | } |
|
89 | } | |
90 | status = enter_mode( LFR_MODE_STANDBY ); |
|
90 | status = enter_mode( LFR_MODE_STANDBY, 0 ); | |
91 | if ( status != RTEMS_SUCCESSFUL ) { |
|
91 | if ( status != RTEMS_SUCCESSFUL ) { | |
92 | PRINTF1("in SPIQ *** ERR enter_standby_mode *** code %d\n", status) |
|
92 | PRINTF1("in SPIQ *** ERR enter_standby_mode *** code %d\n", status) | |
93 | } |
|
93 | } |
@@ -102,7 +102,7 rtems_task actn_task( rtems_task_argumen | |||||
102 | break; |
|
102 | break; | |
103 | // |
|
103 | // | |
104 | case TC_SUBTYPE_ENTER: |
|
104 | case TC_SUBTYPE_ENTER: | |
105 |
result = action_enter_mode( &TC, queue_snd_id |
|
105 | result = action_enter_mode( &TC, queue_snd_id ); | |
106 | close_action( &TC, result, queue_snd_id ); |
|
106 | close_action( &TC, result, queue_snd_id ); | |
107 | break; |
|
107 | break; | |
108 | // |
|
108 | // | |
@@ -149,7 +149,7 int action_reset(ccsdsTelecommandPacket_ | |||||
149 | return LFR_DEFAULT; |
|
149 | return LFR_DEFAULT; | |
150 | } |
|
150 | } | |
151 |
|
151 | |||
152 |
int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id |
|
152 | int action_enter_mode(ccsdsTelecommandPacket_t *TC, rtems_id queue_id ) | |
153 | { |
|
153 | { | |
154 | /** This function executes specific actions when a TC_LFR_ENTER_MODE TeleCommand has been received. |
|
154 | /** This function executes specific actions when a TC_LFR_ENTER_MODE TeleCommand has been received. | |
155 | * |
|
155 | * | |
@@ -160,8 +160,12 int action_enter_mode(ccsdsTelecommandPa | |||||
160 |
|
160 | |||
161 | rtems_status_code status; |
|
161 | rtems_status_code status; | |
162 | unsigned char requestedMode; |
|
162 | unsigned char requestedMode; | |
|
163 | unsigned int *transitionCoarseTime_ptr; | |||
|
164 | unsigned int transitionCoarseTime; | |||
163 |
|
165 | |||
164 | requestedMode = TC->dataAndCRC[1]; |
|
166 | requestedMode = TC->dataAndCRC[1]; | |
|
167 | transitionCoarseTime_ptr = (unsigned int *) (&TC->dataAndCRC[BYTE_POS_CP_LFR_ENTER_MODE_TIME]); | |||
|
168 | transitionCoarseTime = (*transitionCoarseTime_ptr) & 0x7fffffff; | |||
165 |
|
169 | |||
166 | status = check_mode_value( requestedMode ); |
|
170 | status = check_mode_value( requestedMode ); | |
167 |
|
171 | |||
@@ -169,22 +173,32 int action_enter_mode(ccsdsTelecommandPa | |||||
169 | { |
|
173 | { | |
170 | send_tm_lfr_tc_exe_inconsistent( TC, queue_id, BYTE_POS_CP_LFR_MODE, requestedMode ); |
|
174 | send_tm_lfr_tc_exe_inconsistent( TC, queue_id, BYTE_POS_CP_LFR_MODE, requestedMode ); | |
171 | } |
|
175 | } | |
172 | else |
|
176 | else // the mode value is consistent, check the transition | |
173 | { |
|
177 | { | |
174 | status = check_mode_transition(requestedMode); |
|
178 | status = check_mode_transition(requestedMode); | |
175 |
|
179 | if (status != LFR_SUCCESSFUL) | ||
176 | if ( status == LFR_SUCCESSFUL ) |
|
|||
177 | { |
|
180 | { | |
178 |
PRINTF |
|
181 | PRINTF("ERR *** in action_enter_mode *** check_mode_transition\n") | |
179 | status = enter_mode( requestedMode ); |
|
|||
180 | } |
|
|||
181 | else |
|
|||
182 | { |
|
|||
183 | PRINTF("ERR *** in action_enter_mode *** transition rejected\n") |
|
|||
184 | send_tm_lfr_tc_exe_not_executable( TC, queue_id ); |
|
182 | send_tm_lfr_tc_exe_not_executable( TC, queue_id ); | |
185 | } |
|
183 | } | |
186 | } |
|
184 | } | |
187 |
|
185 | |||
|
186 | if ( status == LFR_SUCCESSFUL ) // the transition is valid, enter the mode | |||
|
187 | { | |||
|
188 | status = check_transition_date( transitionCoarseTime ); | |||
|
189 | if (status != LFR_SUCCESSFUL) | |||
|
190 | { | |||
|
191 | PRINTF("ERR *** in action_enter_mode *** check_transition_date\n") | |||
|
192 | send_tm_lfr_tc_exe_not_executable( TC, queue_id ); | |||
|
193 | } | |||
|
194 | } | |||
|
195 | ||||
|
196 | if ( status == LFR_SUCCESSFUL ) // the date is valid, enter the mode | |||
|
197 | { | |||
|
198 | PRINTF1("OK *** in action_enter_mode *** enter mode %d\n", requestedMode); | |||
|
199 | status = enter_mode( requestedMode, transitionCoarseTime ); | |||
|
200 | } | |||
|
201 | ||||
188 | return status; |
|
202 | return status; | |
189 | } |
|
203 | } | |
190 |
|
204 | |||
@@ -390,6 +404,42 int check_mode_transition( unsigned char | |||||
390 | return status; |
|
404 | return status; | |
391 | } |
|
405 | } | |
392 |
|
406 | |||
|
407 | int check_transition_date( unsigned int transitionCoarseTime ) | |||
|
408 | { | |||
|
409 | int status; | |||
|
410 | unsigned int localCoarseTime; | |||
|
411 | unsigned int deltaCoarseTime; | |||
|
412 | ||||
|
413 | status = LFR_SUCCESSFUL; | |||
|
414 | ||||
|
415 | if (transitionCoarseTime == 0) // transition time = 0 means an instant transition | |||
|
416 | { | |||
|
417 | status = LFR_SUCCESSFUL; | |||
|
418 | } | |||
|
419 | else | |||
|
420 | { | |||
|
421 | localCoarseTime = time_management_regs->coarse_time & 0x7fffffff; | |||
|
422 | ||||
|
423 | if ( transitionCoarseTime < localCoarseTime ) // SSS-CP-EQS-322 | |||
|
424 | { | |||
|
425 | status = LFR_DEFAULT; | |||
|
426 | PRINTF2("ERR *** in check_transition_date *** transition = %x, local = %x\n", transitionCoarseTime, localCoarseTime) | |||
|
427 | } | |||
|
428 | ||||
|
429 | if (status == LFR_SUCCESSFUL) | |||
|
430 | { | |||
|
431 | deltaCoarseTime = transitionCoarseTime - localCoarseTime; | |||
|
432 | if ( deltaCoarseTime > 3 ) // SSS-CP-EQS-323 | |||
|
433 | { | |||
|
434 | status = LFR_DEFAULT; | |||
|
435 | PRINTF1("ERR *** in check_transition_date *** deltaCoarseTime = %x\n", deltaCoarseTime) | |||
|
436 | } | |||
|
437 | } | |||
|
438 | } | |||
|
439 | ||||
|
440 | return status; | |||
|
441 | } | |||
|
442 | ||||
393 | int stop_current_mode( void ) |
|
443 | int stop_current_mode( void ) | |
394 | { |
|
444 | { | |
395 | /** This function stops the current mode by masking interrupt lines and suspending science tasks. |
|
445 | /** This function stops the current mode by masking interrupt lines and suspending science tasks. | |
@@ -441,7 +491,7 int stop_current_mode( void ) | |||||
441 | return status; |
|
491 | return status; | |
442 | } |
|
492 | } | |
443 |
|
493 | |||
444 | int enter_mode( unsigned char mode ) |
|
494 | int enter_mode( unsigned char mode, unsigned int transitionCoarseTime ) | |
445 | { |
|
495 | { | |
446 | /** This function is launched after a mode transition validation. |
|
496 | /** This function is launched after a mode transition validation. | |
447 | * |
|
497 | * | |
@@ -473,7 +523,7 int enter_mode( unsigned char mode ) | |||||
473 | maxCount = 0; |
|
523 | maxCount = 0; | |
474 | #endif |
|
524 | #endif | |
475 | status = restart_science_tasks(); |
|
525 | status = restart_science_tasks(); | |
476 | launch_waveform_picker( mode ); |
|
526 | launch_waveform_picker( mode, transitionCoarseTime ); | |
477 | // launch_spectral_matrix( mode ); |
|
527 | // launch_spectral_matrix( mode ); | |
478 | } |
|
528 | } | |
479 | else if ( mode == LFR_MODE_STANDBY ) |
|
529 | else if ( mode == LFR_MODE_STANDBY ) | |
@@ -617,10 +667,8 int suspend_science_tasks() | |||||
617 | return status; |
|
667 | return status; | |
618 | } |
|
668 | } | |
619 |
|
669 | |||
620 | void launch_waveform_picker( unsigned char mode ) |
|
670 | void launch_waveform_picker( unsigned char mode, unsigned int transitionCoarseTime ) | |
621 | { |
|
671 | { | |
622 | int startDate; |
|
|||
623 |
|
||||
624 | reset_current_ring_nodes(); |
|
672 | reset_current_ring_nodes(); | |
625 | reset_waveform_picker_regs(); |
|
673 | reset_waveform_picker_regs(); | |
626 | set_wfp_burst_enable_register( mode ); |
|
674 | set_wfp_burst_enable_register( mode ); | |
@@ -628,9 +676,15 void launch_waveform_picker( unsigned ch | |||||
628 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); |
|
676 | LEON_Clear_interrupt( IRQ_WAVEFORM_PICKER ); | |
629 | LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER ); |
|
677 | LEON_Unmask_interrupt( IRQ_WAVEFORM_PICKER ); | |
630 |
|
678 | |||
631 | startDate = time_management_regs->coarse_time + 2; |
|
|||
632 | waveform_picker_regs->run_burst_enable = waveform_picker_regs->run_burst_enable | 0x80; // [1000 0000] |
|
679 | waveform_picker_regs->run_burst_enable = waveform_picker_regs->run_burst_enable | 0x80; // [1000 0000] | |
633 | waveform_picker_regs->start_date = startDate; |
|
680 | if (transitionCoarseTime == 0) | |
|
681 | { | |||
|
682 | waveform_picker_regs->start_date = time_management_regs->coarse_time; | |||
|
683 | } | |||
|
684 | else | |||
|
685 | { | |||
|
686 | waveform_picker_regs->start_date = transitionCoarseTime; | |||
|
687 | } | |||
634 | } |
|
688 | } | |
635 |
|
689 | |||
636 | void launch_spectral_matrix( unsigned char mode ) |
|
690 | void launch_spectral_matrix( unsigned char mode ) |
General Comments 0
You need to be logged in to leave comments.
Login now