##// END OF EJS Templates
Release 0.7...
paul@pc-solar1.lab-lpp.local -
r28:bba8bfc08608 default
parent child
Show More
@@ -1,6 +1,6
1 #############################################################################
1 #############################################################################
2 # Makefile for building: bin/fsw
2 # Makefile for building: bin/fsw-gsa
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jul 5 13:40:45 2013
3 # Generated by qmake (2.01a) (Qt 4.8.4) on: Fri Jul 12 07:42:51 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=6 -DPRINT_MESSAGES_ON_CONSOLE
13 DEFINES = -DSW_VERSION_N1=0 -DSW_VERSION_N2=0 -DSW_VERSION_N3=0 -DSW_VERSION_N4=7 -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
81 QMAKE_TARGET = fsw-gsa
82 DESTDIR = bin/
82 DESTDIR = bin/
83 TARGET = bin/fsw
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/fsw1.0.0 || $(MKDIR) obj/fsw1.0.0
162 @$(CHK_DIR_EXISTS) obj/fsw-gsa1.0.0 || $(MKDIR) obj/fsw-gsa1.0.0
163 $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/fsw1.0.0/ && (cd `dirname obj/fsw1.0.0` && $(TAR) fsw1.0.0.tar fsw1.0.0 && $(COMPRESS) fsw1.0.0.tar) && $(MOVE) `dirname obj/fsw1.0.0`/fsw1.0.0.tar.gz . && $(DEL_FILE) -r obj/fsw1.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
@@ -7,11 +7,11 CONFIG -= qt
7 include(./sparc.pri)
7 include(./sparc.pri)
8
8
9 # flight software version
9 # flight software version
10 SWVERSION=-0-6
10 SWVERSION=-0-7
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
14 DEFINES += SW_VERSION_N4=6
14 DEFINES += SW_VERSION_N4=7
15
15
16 contains( CONFIG, verbose ) {
16 contains( CONFIG, verbose ) {
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
17 DEFINES += PRINT_MESSAGES_ON_CONSOLE
@@ -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-07-05T17:38:58. -->
3 <!-- Written by Qt Creator 2.4.1, 2013-07-12T07:17:03. -->
4 <qtcreator>
4 <qtcreator>
5 <data>
5 <data>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
6 <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -56,7 +56,7
56 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
56 <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
57 <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
58 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
58 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
59 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
59 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/lib64/ccache/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
60 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
60 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
61 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
62 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
62 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
@@ -106,7 +106,7
106 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
106 <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">false</value>
107 </valuemap>
107 </valuemap>
108 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
108 <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
109 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
109 <value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/lib64/ccache/g++.x86-linux-generic-elf-64bit./usr/bin/gdb</value>
110 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
110 <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
111 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
111 <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
112 <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
@@ -1,3 +1,4
1
1 #ifndef CCSDS_H_INCLUDED
2 #ifndef CCSDS_H_INCLUDED
2 #define CCSDS_H_INCLUDED
3 #define CCSDS_H_INCLUDED
3
4
@@ -11,19 +12,25
11 #define CCSDS_PACKET_CATEGORY 12
12 #define CCSDS_PACKET_CATEGORY 12
12 #define CCSDS_NODE_ADDRESS 0xfe
13 #define CCSDS_NODE_ADDRESS 0xfe
13
14
14 // PACKET IDs
15 // PACKET ID
15 #define TM_PACKET_ID_TC_EXE 0x0cc1 // PID 76 CAT 1
16 #define TM_PACKET_ID_TC_EXE 0x0cc1 // PID 76 CAT 1
16 #define TM_PACKET_ID_HK 0x0cc4 // PID 76 CAT 4
17 #define TM_PACKET_ID_HK 0x0cc4 // PID 76 CAT 4
17 #define TM_PACKET_ID_PARAMETER_DUMP 0x0cc9 // PID 76 CAT 9
18 #define TM_PACKET_ID_PARAMETER_DUMP 0x0cc9 // PID 76 CAT 9
18 #define TM_PACKET_ID_SCIENCE_NORMAL 0x0ccc // PID 76 CAT 12
19 #define TM_PACKET_ID_SCIENCE_NORMAL 0x0ccc // PID 76 CAT 12
19 #define TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 0x0cfc // PID 79 CAT 12
20 #define TM_PACKET_ID_SCIENCE_BURST_SBM1_SBM2 0x0cfc // PID 79 CAT 12
20
21
22 // PACKET SEQUENCE CONTROL
23 #define TM_PACKET_SEQ_CTRL_CONTINUATION 0
24 #define TM_PACKET_SEQ_CTRL_FIRST 1
25 #define TM_PACKET_SEQ_CTRL_LAST 2
26 #define TM_PACKET_SEQ_CTRL_STANDALONE 3
27
21 // FAILURE CODES
28 // FAILURE CODES
22 #define FAILURE_CODE_INCONSISTENT 5 // 0x00 0x05
29 #define FAILURE_CODE_INCONSISTENT 5 // 0x00 0x05
23 #define FAILURE_CODE_NOT_EXECUTABLE 40000 // 0x9c 0x40
30 #define FAILURE_CODE_NOT_EXECUTABLE 42000 // 0xa4 0x10
24 #define FAILURE_CODE_NOT_IMPLEMENTED 40002 // 0x9c 0x42
31 #define FAILURE_CODE_NOT_IMPLEMENTED 42002 // 0xa4 0x12
25 #define FAILURE_CODE_ERROR 40003 // 0x9c 0x43
32 #define FAILURE_CODE_ERROR 42003 // 0xa4 0x13
26 #define FAILURE_CODE_CORRUPTED 40005 // 0x9c 0x45
33 #define FAILURE_CODE_CORRUPTED 42005 // 0xa4 0x15
27 //
34 //
28 #define TM_DESTINATION_ID_GROUND 0
35 #define TM_DESTINATION_ID_GROUND 0
29 #define TM_DESTINATION_ID_MISSION_TIMELINE 110
36 #define TM_DESTINATION_ID_MISSION_TIMELINE 110
@@ -39,6 +46,7
39
46
40 #define CCSDS_DESTINATION_ID 0x01
47 #define CCSDS_DESTINATION_ID 0x01
41 #define CCSDS_PROTOCOLE_ID 0x02
48 #define CCSDS_PROTOCOLE_ID 0x02
49 #define CCSDS_RESERVED 0x00
42 #define CCSDS_USER_APP 0x00
50 #define CCSDS_USER_APP 0x00
43
51
44 #define SIZE_TM_LFR_TC_EXE_NOT_IMPLEMENTED 24
52 #define SIZE_TM_LFR_TC_EXE_NOT_IMPLEMENTED 24
@@ -89,23 +97,26
89 // TM TYPES
97 // TM TYPES
90 #define TM_TYPE_TC_EXE 1
98 #define TM_TYPE_TC_EXE 1
91 #define TM_TYPE_HK 3
99 #define TM_TYPE_HK 3
100 #define TM_TYPE_PARAMETER_DUMP 3
92 #define TM_TYPE_LFR_SCIENCE 21
101 #define TM_TYPE_LFR_SCIENCE 21
93
102
94 // TM SUBTYPES
103 // TM SUBTYPES
95 #define TM_SUBTYPE_EXE_OK 7
104 #define TM_SUBTYPE_EXE_OK 7
96 #define TM_SUBTYPE_EXE_NOK 8
105 #define TM_SUBTYPE_EXE_NOK 8
97 #define TM_SUBTYPE_HK 25
106 #define TM_SUBTYPE_HK 25
107 #define TM_SUBTYPE_PARAMETER_DUMP 25
98 #define TM_SUBTYPE_SCIENCE 3
108 #define TM_SUBTYPE_SCIENCE 3
99 #define TM_SUBTYPE_LFR_SCIENCE 3
109 #define TM_SUBTYPE_LFR_SCIENCE 3
100
110
101 // TM SID
111 // TM SID
102 #define SID_DEFAULT 0
112 #define SID_DEFAULT 0
113 #define SID_EXE_INC 5
114 #define SID_NOT_EXE 42000 // 0xa4 0x10
115 #define SID_NOT_IMP 42002 // 0xa4 0x12
116 #define SID_EXE_ERR 42003 // 0xa4 0x13
117 #define SID_EXE_CORR 42005 // 0xa4 0x15
103 #define SID_HK 1
118 #define SID_HK 1
104 #define SID_EXE_INC 5
119 #define SID_PARAMETER_DUMP 10
105 #define SID_NOT_EXE 40000
106 #define SID_NOT_IMP 40002
107 #define SID_EXE_ERR 40003
108 #define SID_EXE_CORR 40005
109
120
110 #define SID_NORM_SWF_F0 3
121 #define SID_NORM_SWF_F0 3
111 #define SID_NORM_SWF_F1 4
122 #define SID_NORM_SWF_F1 4
@@ -137,17 +148,20
137 // LENGTH (BYTES)
148 // LENGTH (BYTES)
138 #define LENGTH_TM_LFR_TC_EXE_MAX 32
149 #define LENGTH_TM_LFR_TC_EXE_MAX 32
139 #define LENGTH_TM_LFR_HK 126
150 #define LENGTH_TM_LFR_HK 126
151
140 // PACKET_LENGTH
152 // PACKET_LENGTH
141 #define PACKET_LENGTH_TC_EXE_SUCCESS 20 - CCSDS_TC_TM_PACKET_OFFSET
153 #define PACKET_LENGTH_TC_EXE_SUCCESS (20 - CCSDS_TC_TM_PACKET_OFFSET)
142 #define PACKET_LENGTH_TC_EXE_INCONSISTENT 26 - CCSDS_TC_TM_PACKET_OFFSET
154 #define PACKET_LENGTH_TC_EXE_INCONSISTENT (26 - CCSDS_TC_TM_PACKET_OFFSET)
143 #define PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE 26 - CCSDS_TC_TM_PACKET_OFFSET
155 #define PACKET_LENGTH_TC_EXE_NOT_EXECUTABLE (26 - CCSDS_TC_TM_PACKET_OFFSET)
144 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED 24 - CCSDS_TC_TM_PACKET_OFFSET
156 #define PACKET_LENGTH_TC_EXE_NOT_IMPLEMENTED (24 - CCSDS_TC_TM_PACKET_OFFSET)
145 #define PACKET_LENGTH_TC_EXE_ERROR 24 - CCSDS_TC_TM_PACKET_OFFSET
157 #define PACKET_LENGTH_TC_EXE_ERROR (24 - CCSDS_TC_TM_PACKET_OFFSET)
146 #define PACKET_LENGTH_TC_EXE_CORRUPTED 32 - CCSDS_TC_TM_PACKET_OFFSET
158 #define PACKET_LENGTH_TC_EXE_CORRUPTED (32 - CCSDS_TC_TM_PACKET_OFFSET)
147 #define PACKET_LENGTH_HK 126 - CCSDS_TC_TM_PACKET_OFFSET
159 #define PACKET_LENGTH_HK (126 - CCSDS_TC_TM_PACKET_OFFSET)
148 #define PACKET_LENGTH_PARAMETER_DUMP 28 - CCSDS_TC_TM_PACKET_OFFSET
160 #define PACKET_LENGTH_PARAMETER_DUMP (34 - CCSDS_TC_TM_PACKET_OFFSET)
149 #define TM_HEADER_LEN 16
161 #define TM_HEADER_LEN 16
150
162
163 #define SPARE1_PUSVERSION_SPARE2 0x10
164
151 #define LEN_TM_LFR_HK 126 + 4
165 #define LEN_TM_LFR_HK 126 + 4
152 #define LEN_TM_LFR_TC_EXE_NOT_IMP 24 +4
166 #define LEN_TM_LFR_TC_EXE_NOT_IMP 24 +4
153
167
@@ -366,4 +380,52 struct Packet_TM_LFR_HK_str
366 };
380 };
367 typedef struct Packet_TM_LFR_HK_str Packet_TM_LFR_HK_t;
381 typedef struct Packet_TM_LFR_HK_str Packet_TM_LFR_HK_t;
368
382
383 struct Packet_TM_LFR_PARAMETER_DUMP_str
384 {
385 volatile unsigned char targetLogicalAddress;
386 volatile unsigned char protocolIdentifier;
387 volatile unsigned char reserved;
388 volatile unsigned char userApplication;
389 volatile unsigned char packetID[2];
390 volatile unsigned char packetSequenceControl[2];
391 volatile unsigned char packetLength[2];
392 // DATA FIELD HEADER
393 volatile unsigned char spare1_pusVersion_spare2;
394 volatile unsigned char serviceType;
395 volatile unsigned char serviceSubType;
396 volatile unsigned char destinationID;
397 volatile unsigned char time[6];
398 volatile unsigned char sid;
399
400 //******************
401 // COMMON PARAMETERS
402 volatile unsigned char unused0;
403 volatile unsigned char bw_sp0_sp1_r0_r1;
404
405 //******************
406 // NORMAL PARAMETERS
407 volatile unsigned char sy_lfr_n_swf_l[2];
408 volatile unsigned char sy_lfr_n_swf_p[2];
409 volatile unsigned char sy_lfr_n_asm_p[2];
410 volatile unsigned char sy_lfr_n_bp_p0;
411 volatile unsigned char sy_lfr_n_bp_p1;
412
413 //*****************
414 // BURST PARAMETERS
415 volatile unsigned char sy_lfr_b_bp_p0;
416 volatile unsigned char sy_lfr_b_bp_p1;
417
418 //****************
419 // SBM1 PARAMETERS
420 volatile unsigned char sy_lfr_s1_bp_p0;
421 volatile unsigned char sy_lfr_s1_bp_p1;
422
423 //****************
424 // SBM2 PARAMETERS
425 volatile unsigned char sy_lfr_s2_bp_p0;
426 volatile unsigned char sy_lfr_s2_bp_p1;
427 };
428 typedef struct Packet_TM_LFR_PARAMETER_DUMP_str Packet_TM_LFR_PARAMETER_DUMP_t;
429
430
369 #endif // CCSDS_H_INCLUDED
431 #endif // CCSDS_H_INCLUDED
@@ -29,11 +29,7 void timecode_irq_handler(void *pDev, vo
29
29
30 // MODE PARAMETERS
30 // MODE PARAMETERS
31 extern struct param_local_str param_local;
31 extern struct param_local_str param_local;
32 extern struct param_common_str param_common;
32 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
33 extern struct param_norm_str param_norm;
34 extern struct param_burst_str param_burst;
35 extern struct param_sbm1_str param_sbm1;
36 extern struct param_sbm2_str param_sbm2;
37 extern Packet_TM_LFR_HK_t housekeeping_packet;
33 extern Packet_TM_LFR_HK_t housekeeping_packet;
38 extern unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
34 extern unsigned short sequenceCounters[SEQ_CNT_NB_PID][SEQ_CNT_NB_CAT][SEQ_CNT_NB_DEST_ID];
39
35
@@ -49,7 +45,8 int start_all_tasks( void );
49 int create_message_queue( void );
45 int create_message_queue( void );
50
46
51 // OTHER functions
47 // OTHER functions
52 void init_default_mode_parameters( void );
48 void init_parameter_dump( void );
49 void init_local_mode_parameters( void );
53 void init_housekeeping_parameters( void );
50 void init_housekeeping_parameters( void );
54
51
55 int spacewire_configure_link( void );
52 int spacewire_configure_link( void );
@@ -24,6 +24,9
24
24
25 //****************************
25 //****************************
26 // LFR DEFAULT MODE PARAMETERS
26 // LFR DEFAULT MODE PARAMETERS
27 // COMMON
28 #define DEFAULT_SY_LFR_COMMON0 0x00
29 #define DEFAULT_SY_LFR_COMMON1 0x10 // default value 0 0 0 1 0 0 0 0
27 // NORM
30 // NORM
28 #define DEFAULT_SY_LFR_N_SWF_L 2048 // nb sample
31 #define DEFAULT_SY_LFR_N_SWF_L 2048 // nb sample
29 #define DEFAULT_SY_LFR_N_SWF_P 16 // sec
32 #define DEFAULT_SY_LFR_N_SWF_P 16 // sec
@@ -144,32 +147,4 struct param_local_str{
144 unsigned int local_sbm2_nb_cwf_max;
147 unsigned int local_sbm2_nb_cwf_max;
145 };
148 };
146
149
147 struct param_common_str{
148 unsigned char sy_lfr_common0;
149 unsigned char sy_lfr_common1;
150 };
151
152 struct param_norm_str{
153 unsigned int sy_lfr_n_swf_l; // length of the snapshots
154 unsigned int sy_lfr_n_swf_p; // time between two snapshots
155 unsigned int sy_lfr_n_asm_p; // time between two asm
156 unsigned char sy_lfr_n_bp_p0; // timebetween two products BP1 set
157 unsigned char sy_lfr_n_bp_p1; // time between two products BP2 set
158 };
159
160 struct param_burst_str{
161 unsigned char sy_lfr_b_bp_p0; // timebetween two products BP1 set
162 unsigned char sy_lfr_b_bp_p1; // time between two products BP2 set
163 };
164
165 struct param_sbm1_str{
166 unsigned char sy_lfr_s1_bp_p0; // timebetween two products BP1 set
167 unsigned char sy_lfr_s1_bp_p1; // time between two products BP2 set
168 };
169
170 struct param_sbm2_str{
171 unsigned char sy_lfr_s2_bp_p0; // timebetween two products BP1 set
172 unsigned char sy_lfr_s2_bp_p1; // time between two products BP2 set
173 };
174
175 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
150 #endif // FSW_RTEMS_CONFIG_H_INCLUDED
@@ -15,10 +15,9 extern rtems_name misc_name[ ];
15 extern rtems_name misc_id[ ];
15 extern rtems_name misc_id[ ];
16 extern rtems_id Task_id[ ]; // array of task ids
16 extern rtems_id Task_id[ ]; // array of task ids
17 // MODE PARAMETERS
17 // MODE PARAMETERS
18 extern struct param_common_str param_common;
19 extern struct param_norm_str param_norm;
20 extern struct param_sbm1_str param_sbm1;
18 extern struct param_sbm1_str param_sbm1;
21 extern struct param_sbm2_str param_sbm2;
19 extern struct param_sbm2_str param_sbm2;
20 extern Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
22 extern Packet_TM_LFR_HK_t housekeeping_packet;
21 extern Packet_TM_LFR_HK_t housekeeping_packet;
23 extern time_management_regs_t *time_management_regs;
22 extern time_management_regs_t *time_management_regs;
24 extern waveform_picker_regs_t *waveform_picker_regs;
23 extern waveform_picker_regs_t *waveform_picker_regs;
@@ -73,6 +72,7 int action_load_norm(ccsdsTelecommandPac
73 int action_load_burst(ccsdsTelecommandPacket_t *TC);
72 int action_load_burst(ccsdsTelecommandPacket_t *TC);
74 int action_load_sbm1(ccsdsTelecommandPacket_t *TC);
73 int action_load_sbm1(ccsdsTelecommandPacket_t *TC);
75 int action_load_sbm2(ccsdsTelecommandPacket_t *TC);
74 int action_load_sbm2(ccsdsTelecommandPacket_t *TC);
75 int action_dump(ccsdsTelecommandPacket_t *TC);
76 // other functions
76 // other functions
77 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
77 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC);
78 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
78 void update_last_TC_rej(ccsdsTelecommandPacket_t *TC);
@@ -80,6 +80,7 void close_action(ccsdsTelecommandPacket
80 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC);
80 int send_tm_lfr_tc_exe_success(ccsdsTelecommandPacket_t *TC);
81 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC);
81 int send_tm_lfr_tc_exe_not_executable(ccsdsTelecommandPacket_t *TC);
82 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC);
82 int send_tm_lfr_tc_exe_not_implemented(ccsdsTelecommandPacket_t *TC);
83 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC);
83
84
84 #endif // TC_HANDLER_H_INCLUDED
85 #endif // TC_HANDLER_H_INCLUDED
85
86
@@ -40,12 +40,8 float averaged_spec_mat_f0[ TOTAL_SIZE_S
40 float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
40 float compressed_spec_mat_f0[ TOTAL_SIZE_COMPRESSED_MATRIX_f0 ];
41
41
42 // MODE PARAMETERS
42 // MODE PARAMETERS
43 Packet_TM_LFR_PARAMETER_DUMP_t parameter_dump_packet;
43 struct param_local_str param_local;
44 struct param_local_str param_local;
44 struct param_common_str param_common;
45 struct param_norm_str param_norm;
46 struct param_burst_str param_burst;
47 struct param_sbm1_str param_sbm1;
48 struct param_sbm2_str param_sbm2;
49
45
50 // HK PACKETS
46 // HK PACKETS
51 Packet_TM_LFR_HK_t housekeeping_packet;
47 Packet_TM_LFR_HK_t housekeeping_packet;
@@ -67,7 +67,8 rtems_task Init( rtems_task_argument ign
67 set_apbuart_scaler_reload_register(REGS_ADDR_APBUART, APBUART_SCALER_RELOAD_VALUE);
67 set_apbuart_scaler_reload_register(REGS_ADDR_APBUART, APBUART_SCALER_RELOAD_VALUE);
68
68
69 initLookUpTableForCRC(); // in tc_handler.h
69 initLookUpTableForCRC(); // in tc_handler.h
70 init_default_mode_parameters();
70 init_parameter_dump();
71 init_local_mode_parameters();
71 init_housekeeping_parameters();
72 init_housekeeping_parameters();
72 create_message_queue();
73 create_message_queue();
73
74
@@ -179,36 +180,76 rtems_task spiq_task(rtems_task_argument
179 }
180 }
180 }
181 }
181
182
182 void init_default_mode_parameters(void)
183 void init_parameter_dump(void)
183 {
184 {
184 // COMMON PARAMETERS
185 parameter_dump_packet.targetLogicalAddress = CCSDS_DESTINATION_ID;
185 param_common.sy_lfr_common0 = 0x00;
186 parameter_dump_packet.protocolIdentifier = CCSDS_PROTOCOLE_ID;
186 param_common.sy_lfr_common1 = 0x10; // default value 0 0 0 1 0 0 0 0
187 parameter_dump_packet.reserved = CCSDS_RESERVED;
188 parameter_dump_packet.userApplication = CCSDS_USER_APP;
189 parameter_dump_packet.packetID[0] = (unsigned char) (TM_PACKET_ID_PARAMETER_DUMP >> 8);
190 parameter_dump_packet.packetID[1] = (unsigned char) TM_PACKET_ID_PARAMETER_DUMP;
191 parameter_dump_packet.packetSequenceControl[0] = (unsigned char) (TM_PACKET_SEQ_CTRL_STANDALONE << 6);
192 parameter_dump_packet.packetSequenceControl[1] = 0x00;
193 parameter_dump_packet.packetLength[0] = (unsigned char) (PACKET_LENGTH_PARAMETER_DUMP >> 8);
194 parameter_dump_packet.packetLength[1] = (unsigned char) PACKET_LENGTH_PARAMETER_DUMP;
195 // DATA FIELD HEADER
196 parameter_dump_packet.spare1_pusVersion_spare2 = SPARE1_PUSVERSION_SPARE2;
197 parameter_dump_packet.serviceType = TM_TYPE_PARAMETER_DUMP;
198 parameter_dump_packet.serviceSubType = TM_SUBTYPE_PARAMETER_DUMP;
199 parameter_dump_packet.destinationID = TM_DESTINATION_ID_GROUND;
200 parameter_dump_packet.time[0] = (unsigned char) (time_management_regs->coarse_time>>24);
201 parameter_dump_packet.time[1] = (unsigned char) (time_management_regs->coarse_time>>16);
202 parameter_dump_packet.time[2] = (unsigned char) (time_management_regs->coarse_time>>8);
203 parameter_dump_packet.time[3] = (unsigned char) (time_management_regs->coarse_time);
204 parameter_dump_packet.time[4] = (unsigned char) (time_management_regs->fine_time>>8);
205 parameter_dump_packet.time[5] = (unsigned char) (time_management_regs->fine_time);
206 parameter_dump_packet.sid = SID_PARAMETER_DUMP;
187
207
188 // NORMAL MODE
208 //******************
189 param_norm.sy_lfr_n_swf_l = DEFAULT_SY_LFR_N_SWF_L; // nb sample
209 // COMMON PARAMETERS
190 param_norm.sy_lfr_n_swf_p = DEFAULT_SY_LFR_N_SWF_P; // sec
210 parameter_dump_packet.unused0 = DEFAULT_SY_LFR_COMMON0;
191 param_norm.sy_lfr_n_asm_p = DEFAULT_SY_LFR_N_ASM_P; // sec
211 parameter_dump_packet.bw_sp0_sp1_r0_r1 = DEFAULT_SY_LFR_COMMON1;
192 param_norm.sy_lfr_n_bp_p0 = DEFAULT_SY_LFR_N_BP_P0; // sec
193 param_norm.sy_lfr_n_bp_p1 = DEFAULT_SY_LFR_N_BP_P1; // sec
194
212
195 // BURST MODE
213 //******************
196 param_burst.sy_lfr_b_bp_p0 = DEFAULT_SY_LFR_B_BP_P0; // sec
214 // NORMAL PARAMETERS
197 param_burst.sy_lfr_b_bp_p1 = DEFAULT_SY_LFR_B_BP_P1; // sec
215 parameter_dump_packet.sy_lfr_n_swf_l[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_L >> 8);
216 parameter_dump_packet.sy_lfr_n_swf_l[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_L;
217 parameter_dump_packet.sy_lfr_n_swf_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_SWF_P >> 8);
218 parameter_dump_packet.sy_lfr_n_swf_p[1] = (unsigned char) DEFAULT_SY_LFR_N_SWF_P;
219 parameter_dump_packet.sy_lfr_n_asm_p[0] = (unsigned char) (DEFAULT_SY_LFR_N_ASM_P >> 8);
220 parameter_dump_packet.sy_lfr_n_asm_p[1] = (unsigned char) DEFAULT_SY_LFR_N_ASM_P;
221 parameter_dump_packet.sy_lfr_n_bp_p0 = (unsigned char) DEFAULT_SY_LFR_N_BP_P0;
222 parameter_dump_packet.sy_lfr_n_bp_p1 = (unsigned char) DEFAULT_SY_LFR_N_BP_P1;
198
223
199 // SBM1 MODE
224 //*****************
200 param_sbm1.sy_lfr_s1_bp_p0 = DEFAULT_SY_LFR_S1_BP_P0; // sec
225 // BURST PARAMETERS
201 param_sbm1.sy_lfr_s1_bp_p1 = DEFAULT_SY_LFR_B_BP_P1; // sec
226 parameter_dump_packet.sy_lfr_b_bp_p0 = (unsigned char) DEFAULT_SY_LFR_B_BP_P0;
227 parameter_dump_packet.sy_lfr_b_bp_p1 = (unsigned char) DEFAULT_SY_LFR_B_BP_P1;
202
228
203 // SBM2 MODE
229 //****************
204 param_sbm2.sy_lfr_s2_bp_p0 = DEFAULT_SY_LFR_S2_BP_P0; // sec
230 // SBM1 PARAMETERS
205 param_sbm2.sy_lfr_s2_bp_p1 = DEFAULT_SY_LFR_S2_BP_P1; // sec
231 parameter_dump_packet.sy_lfr_s1_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0;
232 parameter_dump_packet.sy_lfr_s1_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S1_BP_P0;
206
233
234 //****************
235 // SBM2 PARAMETERS
236 parameter_dump_packet.sy_lfr_s2_bp_p0 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
237 parameter_dump_packet.sy_lfr_s2_bp_p1 = (unsigned char) DEFAULT_SY_LFR_S2_BP_P0;
238 }
239
240 void init_local_mode_parameters(void)
241 {
207 // LOCAL PARAMETERS
242 // LOCAL PARAMETERS
208 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
243 // (2 snapshots of 2048 points per seconds) * (period of the NORM snashots)
209 param_local.local_sbm1_nb_cwf_max = 2 * param_norm.sy_lfr_n_swf_p;
244 param_local.local_sbm1_nb_cwf_max = 2 * (
245 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
246 + parameter_dump_packet.sy_lfr_n_swf_p[1]
247 );
210 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
248 // (period of the NORM snashots) / (8 seconds per snapshot at f2 = 256 Hz)
211 param_local.local_sbm2_nb_cwf_max = param_norm.sy_lfr_n_swf_p / 8;
249 param_local.local_sbm2_nb_cwf_max = (
250 parameter_dump_packet.sy_lfr_n_swf_p[0] * 256
251 + parameter_dump_packet.sy_lfr_n_swf_p[1]
252 )/ 8;
212
253
213 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
254 PRINTF1("local_sbm1_nb_cwf_max %d \n", param_local.local_sbm1_nb_cwf_max)
214 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
255 PRINTF1("local_sbm2_nb_cwf_max %d \n", param_local.local_sbm2_nb_cwf_max)
@@ -480,7 +480,7 rtems_task actn_task( rtems_task_argumen
480 break;
480 break;
481 //
481 //
482 case TC_SUBTYPE_DUMP:
482 case TC_SUBTYPE_DUMP:
483 result = action_default( &TC );
483 result = action_dump( &TC );
484 close_action( &TC, result );
484 close_action( &TC, result );
485 break;
485 break;
486 //
486 //
@@ -613,10 +613,10 int action_enter(ccsdsTelecommandPacket_
613
613
614 int action_load_comm(ccsdsTelecommandPacket_t *TC)
614 int action_load_comm(ccsdsTelecommandPacket_t *TC)
615 {
615 {
616 param_common.sy_lfr_common0 = TC->dataAndCRC[0];
616 parameter_dump_packet.unused0 = TC->dataAndCRC[0];
617 param_common.sy_lfr_common1 = TC->dataAndCRC[1];
617 parameter_dump_packet.bw_sp0_sp1_r0_r1 = TC->dataAndCRC[1];
618
618
619 set_wfp_data_shaping(param_common.sy_lfr_common1);
619 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
620
620
621 return LFR_SUCCESSFUL;
621 return LFR_SUCCESSFUL;
622 }
622 }
@@ -633,11 +633,18 int action_load_norm(ccsdsTelecommandPac
633 result = LFR_DEFAULT;
633 result = LFR_DEFAULT;
634 }
634 }
635 else {
635 else {
636 param_norm.sy_lfr_n_swf_l = (TC->dataAndCRC[0] * 256) + TC->dataAndCRC[1];
636 parameter_dump_packet.sy_lfr_n_swf_l[0] = TC->dataAndCRC[0];
637 param_norm.sy_lfr_n_swf_p = (TC->dataAndCRC[2] * 256) + TC->dataAndCRC[3];
637 parameter_dump_packet.sy_lfr_n_swf_l[1] = TC->dataAndCRC[1];
638 param_norm.sy_lfr_n_asm_p = (TC->dataAndCRC[4] * 256) + TC->dataAndCRC[5];
638
639 param_norm.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
639 parameter_dump_packet.sy_lfr_n_swf_p[0] = TC->dataAndCRC[2];
640 param_norm.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
640 parameter_dump_packet.sy_lfr_n_swf_p[1] = TC->dataAndCRC[3];
641
642 parameter_dump_packet.sy_lfr_n_asm_p[0] = TC->dataAndCRC[4];
643 parameter_dump_packet.sy_lfr_n_asm_p[1] = TC->dataAndCRC[5];
644
645 parameter_dump_packet.sy_lfr_n_bp_p0 = TC->dataAndCRC[6];
646 parameter_dump_packet.sy_lfr_n_bp_p1 = TC->dataAndCRC[7];
647
641 result = LFR_SUCCESSFUL;
648 result = LFR_SUCCESSFUL;
642 }
649 }
643
650
@@ -704,6 +711,25 int action_load_sbm2(ccsdsTelecommandPac
704 return result;
711 return result;
705 }
712 }
706
713
714 int action_dump(ccsdsTelecommandPacket_t *TC)
715 {
716 int status;
717 // send parameter dump packet
718 status = write(fdSPW, (char *) &parameter_dump_packet,
719 PACKET_LENGTH_PARAMETER_DUMP + CCSDS_TC_TM_PACKET_OFFSET + 4);
720 if (status == -1)
721 {
722 PRINTF1("in action_dump *** ERR sending packet, code %d", status)
723 status = RTEMS_UNSATISFIED;
724 }
725 else
726 {
727 status = RTEMS_SUCCESSFUL;
728 }
729
730 return status;
731 }
732
707 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
733 int action_updt_info(ccsdsTelecommandPacket_t *TC) {
708 unsigned int val;
734 unsigned int val;
709 int result;
735 int result;
@@ -994,7 +1020,10 int enter_sbm1_mode(ccsdsTelecommandPack
994 }
1020 }
995
1021
996 // at the beginning of the mode, the parameter local_sbm1_nb_cwf_max has a specific value
1022 // at the beginning of the mode, the parameter local_sbm1_nb_cwf_max has a specific value
997 param_local.local_sbm1_nb_cwf_max = 2 * param_norm.sy_lfr_n_swf_p / 4;
1023 param_local.local_sbm1_nb_cwf_max = 2 * (
1024 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1025 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1026 )/ 4;
998
1027
999 #ifdef GSA
1028 #ifdef GSA
1000 #else
1029 #else
@@ -1024,7 +1053,10 int enter_sbm2_mode(ccsdsTelecommandPack
1024 }
1053 }
1025
1054
1026 // at the beginning of the mode, the parameter local_sbm2_nb_cwf_max has a specific value
1055 // at the beginning of the mode, the parameter local_sbm2_nb_cwf_max has a specific value
1027 param_local.local_sbm1_nb_cwf_max = param_norm.sy_lfr_n_swf_p / 16;
1056 param_local.local_sbm1_nb_cwf_max = (
1057 (parameter_dump_packet.sy_lfr_n_swf_p[0] * 256)
1058 + parameter_dump_packet.sy_lfr_n_swf_p[1]
1059 ) / 16;
1028
1060
1029 #ifdef GSA
1061 #ifdef GSA
1030 #else
1062 #else
@@ -1141,6 +1173,39 int send_tm_lfr_tc_exe_not_implemented(c
1141 return LFR_SUCCESSFUL;
1173 return LFR_SUCCESSFUL;
1142 }
1174 }
1143
1175
1176 int send_tm_lfr_tc_exe_error(ccsdsTelecommandPacket_t *TC)
1177 {
1178 rtems_status_code status;
1179 TMHeader_t TM_header;
1180 char data[8];
1181 spw_ioctl_pkt_send spw_ioctl_send;
1182
1183 TM_build_header( TM_LFR_TC_EXE_ERR, PACKET_LENGTH_TC_EXE_ERROR,
1184 &TM_header,
1185 TC->sourceID); // TC source ID
1186
1187 data[0] = (char) (FAILURE_CODE_ERROR >> 8);
1188 data[1] = (char) FAILURE_CODE_ERROR;
1189 data[2] = TC->packetID[0];
1190 data[3] = TC->packetID[1];
1191 data[4] = TC->packetSequenceControl[0];
1192 data[5] = TC->packetSequenceControl[1];
1193 data[6] = TC->serviceType; // type of the rejected TC
1194 data[7] = TC->serviceSubType; // subtype of the rejected TC
1195
1196 // filling the structure for the spacewire transmission
1197 spw_ioctl_send.hlen = TM_HEADER_LEN + 4; // + 4 is for the protocole extra header
1198 spw_ioctl_send.hdr = (char*) &TM_header;
1199 spw_ioctl_send.dlen = 8;
1200 spw_ioctl_send.data = data;
1201 spw_ioctl_send.options = 0;
1202
1203 // SEND DATA
1204 status = ioctl( fdSPW, SPACEWIRE_IOCTRL_SEND, &spw_ioctl_send );
1205
1206 return LFR_SUCCESSFUL;
1207 }
1208
1144 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1209 void update_last_TC_exe(ccsdsTelecommandPacket_t *TC)
1145 {
1210 {
1146 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
1211 housekeeping_packet.hk_lfr_last_exe_tc_id[0] = TC->packetID[0];
@@ -555,12 +555,18 void send_waveform_norm(Header_TM_LFR_SC
555 if (lfrMode == LFR_MODE_SBM1) {
555 if (lfrMode == LFR_MODE_SBM1) {
556 param_local.local_sbm1_nb_cwf_sent = 0;
556 param_local.local_sbm1_nb_cwf_sent = 0;
557 // after the first transmission of the swf at F1, the period is set to local_sbm1_nb_cwf_max
557 // after the first transmission of the swf at F1, the period is set to local_sbm1_nb_cwf_max
558 param_local.local_sbm1_nb_cwf_max = 2 * param_norm.sy_lfr_n_swf_p;
558 param_local.local_sbm1_nb_cwf_max = 2 * (
559 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
560 + parameter_dump_packet.sy_lfr_n_swf_p[1]
561 );
559 }
562 }
560 else if (lfrMode == LFR_MODE_SBM2) {
563 else if (lfrMode == LFR_MODE_SBM2) {
561 param_local.local_sbm2_nb_cwf_sent = 0;
564 param_local.local_sbm2_nb_cwf_sent = 0;
562 // after the first transmission of the swf at F2, the period is set to local_sbm2_nb_cwf_max
565 // after the first transmission of the swf at F2, the period is set to local_sbm2_nb_cwf_max
563 param_local.local_sbm2_nb_cwf_max = param_norm.sy_lfr_n_swf_p / 8;
566 param_local.local_sbm2_nb_cwf_max = (
567 ( parameter_dump_packet.sy_lfr_n_swf_p[0] * 256 )
568 + parameter_dump_packet.sy_lfr_n_swf_p[1]
569 )/ 8;
564 }
570 }
565 else {
571 else {
566 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
572 waveform_picker_regs->status = waveform_picker_regs->status & 0x00;
@@ -663,14 +669,16 void reset_wfp_burst_enable()
663
669
664 void reset_wfp_regs()
670 void reset_wfp_regs()
665 {
671 {
666 set_wfp_data_shaping(param_common.sy_lfr_common1);
672 set_wfp_data_shaping(parameter_dump_packet.bw_sp0_sp1_r0_r1);
667 reset_wfp_burst_enable();
673 reset_wfp_burst_enable();
668 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
674 waveform_picker_regs->addr_data_f0 = (int) (wf_snap_f0); //
669 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
675 waveform_picker_regs->addr_data_f1 = (int) (wf_snap_f1); //
670 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
676 waveform_picker_regs->addr_data_f2 = (int) (wf_snap_f2); //
671 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
677 waveform_picker_regs->addr_data_f3 = (int) (wf_cont_f3); //
672 waveform_picker_regs->status = 0x00; //
678 waveform_picker_regs->status = 0x00; //
673 set_wfp_delta_snapshot( param_norm.sy_lfr_n_swf_p ); // time in seconds between two snapshots
679 set_wfp_delta_snapshot(
680 ( parameter_dump_packet.sy_lfr_n_swf_p[0]*256)
681 + parameter_dump_packet.sy_lfr_n_swf_p[1] ); // time in seconds between two snapshots
674 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
682 waveform_picker_regs->delta_f2_f1 = 0xffff; // max 4 bytes
675 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
683 waveform_picker_regs->delta_f2_f0 = 0x17c00; // max 5 bytes
676 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
684 waveform_picker_regs->nb_burst_available = 0x180; // max 3 bytes, size of the buffer in burst (1 burst = 16 x 4 octets)
General Comments 0
You need to be logged in to leave comments. Login now