User visible changes in the firmware version 4.1.00 since version 4.0.02.

                             Highlights.

1. T2+: Added Spoofing / Jamming detection.

2. T2+: Implemented calculation of S4 and sigmaPhi for ionosphere
   scintillation analysis.

3. T2+: Implemented output of raw 1-millisecond I and Q samples.

4. File push: SFTP support implemented.

5. Ephemeris (unhealthy GPS and BeiDou CNAV): fixed bug of update.

6. RTCM3: added support for BeiDou-3 new signals, including B2b.

7. Triumph-3: fix a case of BlueTooth misbehavior.

8. Triumph-1M: fix problem sometimes not booting after power-on.

9. GREIS: fix /par/rover/mode/jps being always 'on' for some
   receivers.

10. Triumph-3: implemented advanced tilt-compensation using IMU.


                      More Detailed Description
                (refer to GREIS for even more details)

                             1. Messages.

1.1 New message: [sj] spoofing/jamming information

struct SpoofingJamming {
  u1  ssid;   // SSID from ESI
  u1  slotId; // SlotId
  u2  num;    // Number of satellites in this record
  u2  numSpoofed;    // Number of spoofed (with 2 correlation peaks) satellites
  u2  meanNoise;     // Noise mean value (percents)
  u2  devNoise;      // Noise deviation value (percents)
  SpoofData sj[num]; // Spoofing information for each satellite
  u1  cs;            // checksum
};

struct SpoofData {
  u2 svid;   // SVID from ESI, but 2 bytes long
  u2 peak1;  // Main peak value [percents]
  u2 peak2;  // Second peak value [percents]
  i4 dRange; // Delta range between peaks [meters]
}

1.2 [FC],[F1],[F2],[F3],[F5],[Fl] New bits added:

  rm_SPOOFED =  0x1000; // spoofing detected
  rm_JAMMED  =  0x2000; // jamming detected


1.3 T2+: New messages: [x0], [x1], [x2], [x3], [x5], [x4]: S4

struct S4 {nSats+1} {
  f4 s4[nSats]; // S4
  u1 cs;        // Checksum
};

These messages contain corresponding s4 value for all the satellites
specified in the latest [SX] message. The messages contain
CA/L1, P/L1, P/L2, CA/L2, L5, and L1C S4, respectively.

1.4 T2+: New messages: [y0], [y1], [y2], [y3], [y5], [y4]: sigmaPhi

struct SIGMAPHI {nSats+1} {
  f4 sigmaPhi[nSats]; // SigmaPhi [radians]
  u1 cs;              // Checksum
};

These messages contain corresponding sigmaPhi value for all the satellites
specified in the latest [SI] message. The messages contain
CA/L1, P/L1, P/L2, CA/L2, L5, and L1C sigmaPhi, respectively.

1.5. T2+: New message: [IQ] 1-millisecond I AND q samples

struct Iq_Samples {
  ESI  esi;   // ESI
  u1  slotId; // SlotId
  i1  isQ;    // 1 if Q output is enabled; 0 - otherwise
  IQ  iq[n];  // I samples; n is variable number.
  u1  cs;     // Checksum
};

These messages contain 1000HZ I and Q samples.

IQ definition when /par/raw/out/q is 'off':

struct IQ {
  i2   i; I sample
}

IQ definition when /par/raw/out/q is 'on':

struct IQ {
  i2   i; I sample
  i2   q; Q sample
}

1.6 New IMU messages

[PE] WGS84 Coordinates of the Pole End

struct PE {25} {
  f8 x;  // x-coordinate of the end of the pole in WGS84 [m]
  f8 y;  // y-coordinate of the end of the pole in WGS84 [m]
  f8 z;  // z-coordinate of the end of the pole in WGS84 [m]
  u1 cs; // Checksum
};


[pV] Local Coordinates of Antenna Phase Center

struct pV {37} {
  f8 x;  // Eastern coordinate of APC in ENU [m]
  f8 y;  // Northern coordinate of APC in ENU [m]
  f8 z;  // Up-coordinate of APC in ENU [m]
  f4 x;  // Eastern velocity in ENU [m/s]
  f4 y;  // Northern velocity in ENU [m/s]
  f4 z;  // Up velocity in ENU [m/s]
  u1 cs; // Checksum
};

[fA] Accelerometer Raw Data

struct fA  {7} {
  i2 ax; // ax multiplied by 588 [cm/sec^2]
  i2 ay; // ay multiplied by 588 [cm/sec^2]
  i2 az; // az multiplied by 588 [cm/sec^2]
  u1 cs; // Checksum
};


[lA] Accelerometer Smoothed Data

struct lA {7} {
  i2 ax; // ax [cm/sec^2]
  i2 ay; // ay [cm/sec^2]
  i2 az; // az [cm/sec^2]
  u1 cs; // Checksum
};


[aV] Gyroscope Raw Data

Angular velocities in the body-frame.

struct aV {13} {
  f4 wx; // x-component multiplied by 2800 [rad/sec]
  f4 wy; // y-component multiplied by 2800 [rad/sec]
  f4 wz; // z-component multiplied by 2800 [rad/sec]
  u1 cs; // Checksum
};

[mA] Magnetometer Raw Data

Magnetic field in the body-frame.

struct mA {7} {
  i2 bx; // x-component
  i2 by; // y-component
  i2 bz; // z-component
  u1 cs; // Checksum
};

[dV] Acceleration in ENU

struct dV {13} {
  f4 dvx; // Derivative of the eastern velocity [m/sec^2]
  f4 dvy; // Derivative of the northern velocity [m/sec^2]
  f4 dvz; // Derivative of the up velocity [m/sec^2]
  u1 cs;  // Checksum
};

[pE] Tilt-compensated Solution (full)

struct pE {71} {
  u1 status; // see Table 1
  u1 error;  // see Table 2
  f8 lat;    // Latitude of the end of the pole in WGS84 [rad]
  f8 lon;    // Longitude of the end of the pole in WGS84 [rad]
  f8 h;      // Height of the end of the pole above WGS84 ellipsoid [m]
  f4 rms_xy; // RMS of position in local plane [m]
  f4 rms_h;  // RMS of position of local hight [m]
  f4 len;    // Length of time interval [sec];
  f4 crit0;  // First value of the criterion
  f4 crit1;  // Final value of the criterion
  f4 x;      // Eastern component of the end of the pole in ENU [m]
  f4 y;      // Nothern component of the end of the pole in ENU [m]
  f4 z;      // Up-component of the end of the pole in ENU [m]
  f4 heading; // Heading angle of the device [rad]
  f4 pitch;  // Pitch angle of the device [rad]
  f4 roll;   // Roll angle of the device [rad]
  u1 cs;     // Checksum
};


[pe] Tilt-compensated Solution (short)

struct pe {26} {
  f8 x; // Current x-coordinate of the end of the pole in WGS84 [m]
  f8 y; // Current y-coordinate of the end of the pole in WGS84 [m]
  f8 z; // Current z-coordinate of the end of the pole in WGS84 [m]
  u1 error; // see Table 2
  u1 cs; // Checksum
}

Table 1, IMU Solution Status
----------------------------
Value | Description
----------------------------
0     | No errors occured
1     | Error, see Table 2
2     | Waiting for immobility
3     | Waiting for motion
4     | In motion
5     | Immobile
6     | Ready to count
7     | Counting
8     | Fixed
----------------------------

Table 2, IMU Errors
-------------------------------------------------------
Value | As string
-------------------------------------------------------
0     | "No errors"
1     | "Start undefined"
2     | "T0>history T1"
3     | "T0<history T0"
4     | "N > history length"
5     | "No position"
6     | "No fixed position"
7     | "No ENU coordinates"
8     | "No IMU data"
9     | "No gyroscope data"
10    | "Unable to minimize"
11    | "Pole end moved, or calibration fails"
12    | "Motion amplitude is not enough to detect heading"
13    | "Incorrect value of pos/msint"
14    | "No velocity measurements are available"
15    | "Command available in imu/mode fixed_tip"

                             2. Parameters.

2.1 T2+ New spoofing detection parameters

Spoofing Detection Mode

Name:           /par/raw/spoof/mode
Access:         rw
Type:	        boolean
Default:        off

on - turn on spoofing/jamming detection
off -turn off spoofing/jamming detection


Use Spoofed Signals in Position

Name:           /par/raw/spoof/pos
Access:         rw
Type:	        boolean
Default:        off

off - do not use measurements from satellite signals detected as
spoofed or jammed in position computation

on - ignore spoofed and jammed status of signals in position
computation, so that such signals could still be used

2.2 T2+: New S4 parameter

Period of S4 calculation

Name:           /par/raw/s4/per
Access:         rw
Type:	        integer [seconds]
Values:         [0..100]
Default:        0

0 - turn off S4 calculation

2.3 T2+: New sigmaPhi parameters

Period of sigmaPhi calculation

Name:           /par/raw/sigmaphi/per
Access:         rw
Type:	        integer [seconds]
Values:         [0..100]
Default:        0

0 - turn off sigmaPhi calculation

Enable Q output in [IQ] message

Name:           /par/raw/out/q
Access:         rw
Type:	        boolean
Default:        off

2.4 T2+: New raw IQ output parameters

Satellite Signals for [Ib] and [Qb] Messages.

Name:            /par/raw/out/SYSTEM/SLOT/SVID

SYSTEM, SLOT and SVID definitions are the same as for
/par/lock/sig/SYSTEM/SLOT/SVID parameters

WARNING: 1000Hz data output causes extremely high data traffic! Do not
output more data than can be transmitted / received through selected
connection.

2.5 /par/log/push/host: extended

To support different push protocols, support for URI scheme has been
added to this parameter, so the syntax of the host name now is:

[prefix:][scheme://]<host>

where 'scheme' could be one of:

ftp - use FTP protocol
sftp - use SFTP protocol

and 'prefix' is still one of: 'rin.tar.gz' or 'rinex'.

2.6 New IMU parameters for tilt-compensation

IMU Firmware Version

Name:           /par/imu/ver
Access:         r
Type:           string


IMU Board Revision

Name:           /par/imu/rev
Access:         r
Type:           string

IMU Mode of Operation

Name:           /par/imu/mode
Access:         rw
Type:           enumerated
Values:         off,fixed_tip,moving_tip
Default:        off

fixed_tip - motion of the system, receiver on the top of the pole, is
  supposed to be carried out with the fixed bottom end of the pole at
  the point that needs to be measured.

moving_tip - motion of the system can be done with the loose bottom
  end of the pole and then fixed and left motionless for a while at
  the point that needs to be measured.

off - both the above mode are turned off.

Length of the Pole for IMU

Name:           /par/imu/height
Access:         rw
Type:           double [meters]
Values:         [0.05...5.0]
Default:        2.1


IMU Immobility Duration

Name:           /par/imu/stop_interval
Access:         rw
Type:           double [seconds]
Values:         [0.1...10]
Default:        3


IMU Duration of Motion

Name:           /par/imu/motion_interval
Access:         rw
Type:           double [seconds]
Values:         [1...30]
Default:        10

IMU Raw Accelerometer Offsets

Name:           /par/imu/aoffs/data
Access:         rw
Type:           list {int,int,int} [cm/sec^2*588]
Values:         {[-100...100],[-100...100],[-100...100]}
Default:        {0,0,0}

ax-, ay-, and az-components for raw accelerometer offsets.

IMU Use Raw Accelerometer Offsets

Name:           /par/imu/aoffs/is
Access:         rw
Type:           boolean
Values:         on,off
Default:        off

on - apply offsets specified by /par/imu/aoffs/data

off - ignore offsets specified by /par/imu/aoffs/data

IMU Use Auto-calculated Offsets for IMU Gyroscopes

Name:           /par/imu/goffs/auto
Access:         rw
Type:           enumarated
Values:         on,off
Default:        off

IMU Minimum Value of Optimization Functional

Name:           /par/imu/crit/min
Access:         rw
Type:           double
Values:         [0.2...0.9]
Default:        0.6

IMU Maximum Value of Optimization Functional

Name:           /par/imu/crit/max
Access:         rw
Type:           double
Values:         [0.01...0.2]
Default:        0.15

IMU Tilt Compensated Solution Status

Name:           /par/imu/status
Access:         r
Type:           string
Values:         see Table 3

The value is comma-separated list of the following fields:

--------------------------------------------------------------------------------------------------------
#  | Fmt  | Description
--------------------------------------------------------------------------------------------------------
1  | %S   | Status, see Table #1. If anything but 'Fixed', all the
   |      | other fields are empty
2  | %.9f | Latitude of the end of the pole in WGS84 [rad]
3  | %.9f | Longitude of the end of the pole in WGS84 [rad]
4  | %.4f | Hight of the end of the pole above WGS84 ellipsoid [m]
5  | %f   | Rms of position in local plane [m]
6  | %f   | Rms of the local hight [m]
7  | %.2f | Time span during which position was estimated [sec]
8  | %f   | Initial value of the criterion
9  | %f   | Final value of the criterion
10 | %f   | Eastern component of the end of the pole in ENU [m]
11 | %f   | Northern component of the end of the pole in ENU [m]
12 | %f   | Up-component of the end of the pole in ENU [m]
13 | %f   | Heading angle of the device [rad]
14 | %f   | Pitch angle of the device [rad]
15 | %f   | Roll angle of the device [rad]
16 | %s   | Type of local frame
17 | %.9f | Latitude in local frame [rad]
18 | %.9f | Longitude in local frame [rad]
19 | %.4f | Hight in local frame [m]
20 | %c   | Is Local Geoid Valid  'V'/'N'
21 | %.4f | Hight of Local Geoid [m]
22 | %c   | Is Local Grid Valid 'V'/'N'
23 | %s   | Name of projection
24 | %i   | Number of grid zone
25 | %.4f | x-component of the end of the pole in local Grid [m]
26 | %.4f | y-component of the end of the pole in local Grid [m]
27 | %.4f | z-component of the end of the pole in local Grid [m]
--------------------------------------------------------------------------------------------------------


IMU  Tilt Compensated Solution Error

Name:           /par/imu/error
Access:         r
Type:           string
Values:         see Table 2

Set ENU Frame for IMU to the Current Position

Name:           /par/imu/ref
Access:         rw
Type:	        boolean
Values:         on,off
Default:        off

on - setting to 'on' will set ENU frame to the current position. If
  position is not being calculated, error will be reported.

off - setting to 'off' is ignored.

IMU Start Calculation of Tilt Compensated Position

Name:           /par/imu/count
Access:         rw
Type:	        boolean
Values:         on, off
Default:        off

on - start calculation of the position if /par/imu/mode is 'fixed-tip'.
  In any other mode, setting this parameter to 'on' will return error.
  At the moment of setting to 'on' the device should be motionless.

off - setting to 'off' is ignored.

IMU Start Collecting Data With Fixed End of the Pole

Name:           /par/imu/start
Access:         rw
Type:	        boolean
Values:         on, off
Default:        off

on - start collecting data for subsequent calculation if /par/imu/mode
  is 'fixed-tip'. In any other mode, setting this parameter to 'on'
  will return error. At the moment of setting to 'on' the device
  should be motionless.

off - setting to 'off' is ignored.

Setting automatic calculation of position in the 'fixed-tip' mode

Name:           /par/imu/auto_count
Access:         rw
Type:	        boolean
Values:         on, off
Default:        off

on - in the 'fixed-tip' mode, calculation of position will start
  automatically after the pole moved and was staying motionless at
  leas 1 second. In any other mode, setting this parameter to 'on'
  will return error.

off - in the 'fixed-tip' mode, manual control of calculation of
  position is required.


                             3. Options.

3.1 New option OP_SPF to enable spoofing/jamming detection feature.

0 - Spoofing/jamming detection disabled
1 - Spoofing/jamming detection enabled


                             4. Miscellaneous.

4.1. Short description of spoofing / jamming detection algorithm.

Receiver detects possible spoofing analyzing number of correlation
peaks. In normal conditions only one peak is present. In case of
spoofing, there should be 2 peaks - original and from spoofer.
If receiver detects 2 peaks - it marks signal as "spoofed" and do
not use it in positioning (in case /par/raw/spoof/pos is set to "off")
If number of spoofed satellites appeared to be more than one, that
signal for all satellites is flagged as "spoofed".

Jamming detection based on analysis of incoming noise characteristics.
In case of jamming "noise floor" increases. Also deviation of noise
may increase. Receiver measures these parameters and in case at least
one is more than threshold (it's value is more than 100 in [sj]
message), that signal for all satellites is flagged as "jammed".

Note: for spoofing/jamming detection, signal should be tracked in
independent (not guided) mode, so for checking of all possible signals
it is required to switch tracking to independent mode:
%%set,/par/lock/adv/guide,n



4.2. Example of receiver configuration for S4 and sigmaPhi computation:

Historically, in first receivers, these parameters were computed based
on GPS C/A code tracking. But, they may be computed from any/all
sources. In this example all signals are used. PLL loop bandwidth is
25 Hz (it is default). Receiver computes S4 and sigmaPhi only for
signals, tracked independently, so tracking is set to independent
mode.

%%set,/par/lock/adv/guide,n
%%set,/par/raw/msecmode,iq
%%set,/par/raw/sigmaphi/per,30
%%set,/par/raw/s4/per,60
%%em,,jps/{x0,x1,x2,x3,x5,x4,y0,y1,y2,y3,y3,y5,y4}
%%set,reset,y

4.3 SlotId is defined according to:

Table 3-8. Satellite Signals Allocation

0 - CA/L1, 1 - P/L1, 2 - P/L2, 3 - CA/L2, 4 - L5, 5 - L1C

<END>
