Sync edgetx to Gitea
@@ -0,0 +1,593 @@
|
||||
|
||||
2014-07-11,22:41:01.340: 7E 00
|
||||
2014-07-11,22:41:01.350: 7E A1
|
||||
2014-07-11,22:41:01.360: 7E 22
|
||||
2014-07-11,22:41:01.380: 7E 83
|
||||
2014-07-11,22:41:01.390: 7E E4
|
||||
2014-07-11,22:41:01.400: 7E 45
|
||||
2014-07-11,22:41:01.410: 7E C6
|
||||
2014-07-11,22:41:01.420: 7E 67
|
||||
2014-07-11,22:41:01.440: 7E 48
|
||||
2014-07-11,22:41:01.450: 7E E9
|
||||
2014-07-11,22:41:01.460: 7E 6A
|
||||
2014-07-11,22:41:01.470: 7E CB
|
||||
2014-07-11,22:41:01.480: 7E AC
|
||||
2014-07-11,22:41:01.500: 7E 0D
|
||||
2014-07-11,22:41:01.510: 7E 8E
|
||||
2014-07-11,22:41:01.520: 7E 2F
|
||||
2014-07-11,22:41:01.530: 7E D0
|
||||
2014-07-11,22:41:01.540: 7E 71
|
||||
2014-07-11,22:41:01.560: 7E F2
|
||||
2014-07-11,22:41:01.570: 7E 53
|
||||
2014-07-11,22:41:01.580: 7E 34
|
||||
2014-07-11,22:41:01.590: 7E 95
|
||||
2014-07-11,22:41:01.600: 7E 16
|
||||
2014-07-11,22:41:01.620: 7E B7
|
||||
2014-07-11,22:41:01.630: 7E 98
|
||||
2014-07-11,22:41:01.640: 7E 39
|
||||
2014-07-11,22:41:01.650: 7E BA
|
||||
2014-07-11,22:41:01.660: 7E 1B
|
||||
2014-07-11,22:41:01.680: 7E 00
|
||||
2014-07-11,22:41:01.690: 7E A1
|
||||
2014-07-11,22:41:01.700: 7E 22
|
||||
2014-07-11,22:41:01.710: 7E 83
|
||||
2014-07-11,22:41:01.720: 7E E4
|
||||
2014-07-11,22:41:01.740: 7E 45
|
||||
2014-07-11,22:41:01.750: 7E C6
|
||||
2014-07-11,22:41:01.760: 7E 67
|
||||
2014-07-11,22:41:01.770: 7E 98 10 05 F1 10 35 0F 96 0E
|
||||
2014-07-11,22:41:01.780: 7E 98 10 01 F1 00 00 12 96 54
|
||||
2014-07-11,22:41:01.800: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:01.810: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:01.820: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:01.830: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:01.840: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:01.860: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:01.870: 7E E9
|
||||
2014-07-11,22:41:01.880: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:01.890: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:01.900: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:01.920: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:01.930: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:01.940: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:01.950: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:01.960: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:01.980: 7E 6A
|
||||
2014-07-11,22:41:01.990: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.000: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:02.010: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.020: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.040: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:02.050: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.060: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:02.070: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.080: 7E CB
|
||||
2014-07-11,22:41:02.100: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.110: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:02.120: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.130: 7E AC
|
||||
2014-07-11,22:41:02.140: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:02.160: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.170: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.180: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.190: 7E 0D
|
||||
2014-07-11,22:41:02.200: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.220: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:02.230: 7E 98 10 05 F1 10 32 10 96 10
|
||||
2014-07-11,22:41:02.240: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:02.250: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:02.260: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.280: 7E 8E
|
||||
2014-07-11,22:41:02.290: 7E 2F
|
||||
2014-07-11,22:41:02.300: 7E D0
|
||||
2014-07-11,22:41:02.310: 7E 71
|
||||
2014-07-11,22:41:02.320: 7E F2
|
||||
2014-07-11,22:41:02.340: 7E 48 10 00 03 30 15 50 01 56
|
||||
2014-07-11,22:41:02.350: 7E 53
|
||||
2014-07-11,22:41:02.360: 7E 34
|
||||
2014-07-11,22:41:02.370: 7E 95
|
||||
2014-07-11,22:41:02.380: 7E 16
|
||||
2014-07-11,22:41:02.400: 7E B7
|
||||
2014-07-11,22:41:02.410: 7E 39
|
||||
2014-07-11,22:41:02.420: 7E BA
|
||||
2014-07-11,22:41:02.430: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.440: 7E 1B
|
||||
2014-07-11,22:41:02.460: 7E 00
|
||||
2014-07-11,22:41:02.470: 7E 22
|
||||
2014-07-11,22:41:02.480: 7E 83
|
||||
2014-07-11,22:41:02.490: 7E E4
|
||||
2014-07-11,22:41:02.500: 7E 45
|
||||
2014-07-11,22:41:02.520: 7E C6
|
||||
2014-07-11,22:41:02.530: 7E 67
|
||||
2014-07-11,22:41:02.540: 7E E9
|
||||
2014-07-11,22:41:02.550: 7E 6A
|
||||
2014-07-11,22:41:02.560: 7E CB
|
||||
2014-07-11,22:41:02.580: 7E AC
|
||||
2014-07-11,22:41:02.590: 7E 0D
|
||||
2014-07-11,22:41:02.600: 7E 8E
|
||||
2014-07-11,22:41:02.610: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:02.620: 7E 2F
|
||||
2014-07-11,22:41:02.640: 7E D0
|
||||
2014-07-11,22:41:02.650: 7E 98 10 05 F1 11 30 13 96 0E
|
||||
2014-07-11,22:41:02.660: 7E 98 10 01 F1 5B 00 12 96 F8
|
||||
2014-07-11,22:41:02.670: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:02.680: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:02.700: 7E 71
|
||||
2014-07-11,22:41:02.710: 7E F2
|
||||
2014-07-11,22:41:02.720: 7E 53
|
||||
2014-07-11,22:41:02.730: 7E 34
|
||||
2014-07-11,22:41:02.740: 7E 95
|
||||
2014-07-11,22:41:02.760: 7E 16
|
||||
2014-07-11,22:41:02.770: 7E B7
|
||||
2014-07-11,22:41:02.780: 7E 39
|
||||
2014-07-11,22:41:02.790: 7E BA
|
||||
2014-07-11,22:41:02.800: 7E 1B
|
||||
2014-07-11,22:41:02.820: 7E 00
|
||||
2014-07-11,22:41:02.830: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:02.840: 7E 22
|
||||
2014-07-11,22:41:02.850: 7E 83
|
||||
2014-07-11,22:41:02.860: 7E E4
|
||||
2014-07-11,22:41:02.880: 7E 45
|
||||
2014-07-11,22:41:02.890: 7E C6
|
||||
2014-07-11,22:41:02.900: 7E 67
|
||||
2014-07-11,22:41:02.910: 7E E9
|
||||
2014-07-11,22:41:02.920: 7E 6A
|
||||
2014-07-11,22:41:02.940: 7E CB
|
||||
2014-07-11,22:41:02.950: 7E AC
|
||||
2014-07-11,22:41:02.960: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:02.970: 7E 0D
|
||||
2014-07-11,22:41:02.980: 7E 8E
|
||||
2014-07-11,22:41:03.000: 7E 2F
|
||||
2014-07-11,22:41:03.010: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:03.020: 7E D0
|
||||
2014-07-11,22:41:03.030: 7E 71
|
||||
2014-07-11,22:41:03.040: 7E F2
|
||||
2014-07-11,22:41:03.060: 7E 53
|
||||
2014-07-11,22:41:03.070: 7E 34
|
||||
2014-07-11,22:41:03.080: 7E 95
|
||||
2014-07-11,22:41:03.090: 7E 98 10 05 F1 10 32 0F 96 11
|
||||
2014-07-11,22:41:03.100: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:03.120: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:03.130: 7E 16
|
||||
2014-07-11,22:41:03.140: 7E B7
|
||||
2014-07-11,22:41:03.150: 7E 39
|
||||
2014-07-11,22:41:03.160: 7E BA
|
||||
2014-07-11,22:41:03.180: 7E 1B
|
||||
2014-07-11,22:41:03.190: 7E 00
|
||||
2014-07-11,22:41:03.200: 7E 22
|
||||
2014-07-11,22:41:03.210: 7E 83
|
||||
2014-07-11,22:41:03.220: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:03.240: 7E E4
|
||||
2014-07-11,22:41:03.250: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:03.260: 7E 45
|
||||
2014-07-11,22:41:03.270: 7E C6
|
||||
2014-07-11,22:41:03.280: 7E 67
|
||||
2014-07-11,22:41:03.300: 7E E9
|
||||
2014-07-11,22:41:03.310: 7E 6A
|
||||
2014-07-11,22:41:03.320: 7E CB
|
||||
2014-07-11,22:41:03.330: 7E AC
|
||||
2014-07-11,22:41:03.340: 7E 0D
|
||||
2014-07-11,22:41:03.360: 7E 8E
|
||||
2014-07-11,22:41:03.370: 7E 2F
|
||||
2014-07-11,22:41:03.380: 7E D0
|
||||
2014-07-11,22:41:03.390: 7E 71
|
||||
2014-07-11,22:41:03.400: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:03.420: 7E F2
|
||||
2014-07-11,22:41:03.430: 7E 53
|
||||
2014-07-11,22:41:03.440: 7E 34
|
||||
2014-07-11,22:41:03.450: 7E 95
|
||||
2014-07-11,22:41:03.460: 7E 16
|
||||
2014-07-11,22:41:03.480: 7E B7
|
||||
2014-07-11,22:41:03.490: 7E 39
|
||||
2014-07-11,22:41:03.500: 7E BA
|
||||
2014-07-11,22:41:03.510: 7E 1B
|
||||
2014-07-11,22:41:03.520: 7E 98 10 05 F1 10 34 0F 96 0F
|
||||
2014-07-11,22:41:03.540: 7E 98 10 01 F1 59 00 12 96 FA
|
||||
2014-07-11,22:41:03.550: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:03.560: 7E 00
|
||||
2014-07-11,22:41:03.570: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:03.580: 7E 22
|
||||
2014-07-11,22:41:03.600: 7E 83
|
||||
2014-07-11,22:41:03.610: 7E E4
|
||||
2014-07-11,22:41:03.620: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:03.630: 7E 45
|
||||
2014-07-11,22:41:03.640: 7E C6
|
||||
2014-07-11,22:41:03.660: 7E 67
|
||||
2014-07-11,22:41:03.670: 7E E9
|
||||
2014-07-11,22:41:03.680: 7E 6A
|
||||
2014-07-11,22:41:03.690: 7E CB
|
||||
2014-07-11,22:41:03.700: 7E AC
|
||||
2014-07-11,22:41:03.720: 7E 0D
|
||||
2014-07-11,22:41:03.730: 7E 8E
|
||||
2014-07-11,22:41:03.740: 7E 2F
|
||||
2014-07-11,22:41:03.750: 7E D0
|
||||
2014-07-11,22:41:03.760: 7E 71
|
||||
2014-07-11,22:41:03.780: 7E F2
|
||||
2014-07-11,22:41:03.790: 7E 53
|
||||
2014-07-11,22:41:03.800: 7E 34
|
||||
2014-07-11,22:41:03.810: 7E 95
|
||||
2014-07-11,22:41:03.820: 7E 16
|
||||
2014-07-11,22:41:03.840: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:03.850: 7E B7
|
||||
2014-07-11,22:41:03.860: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:03.870: 7E 39
|
||||
2014-07-11,22:41:03.880: 7E BA
|
||||
2014-07-11,22:41:03.900: 7E 1B
|
||||
2014-07-11,22:41:03.910: 7E 00
|
||||
2014-07-11,22:41:03.920: 7E 22
|
||||
2014-07-11,22:41:03.930: 7E 83
|
||||
2014-07-11,22:41:03.940: 7E E4
|
||||
2014-07-11,22:41:03.960: 7E 45
|
||||
2014-07-11,22:41:03.970: 7E 98 10 05 F1 11 32 10 96 0F
|
||||
2014-07-11,22:41:03.980: 7E 98 10 01 F1 59 00 12 96 FA
|
||||
2014-07-11,22:41:03.990: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:04.000: 7E C6
|
||||
2014-07-11,22:41:04.020: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:04.030: 7E 67
|
||||
2014-07-11,22:41:04.040: 7E E9
|
||||
2014-07-11,22:41:04.050: 7E 6A
|
||||
2014-07-11,22:41:04.060: 7E CB
|
||||
2014-07-11,22:41:04.080: 7E AC
|
||||
2014-07-11,22:41:04.090: 7E 0D
|
||||
2014-07-11,22:41:04.100: 7E 8E
|
||||
2014-07-11,22:41:04.110: 7E 2F
|
||||
2014-07-11,22:41:04.120: 7E D0
|
||||
2014-07-11,22:41:04.140: 7E 71
|
||||
2014-07-11,22:41:04.150: 7E 48 10 00 03 30 15 50 81 D5
|
||||
2014-07-11,22:41:04.160: 7E F2
|
||||
2014-07-11,22:41:04.170: 7E 53
|
||||
2014-07-11,22:41:04.180: 7E 34
|
||||
2014-07-11,22:41:04.200: 7E 95
|
||||
2014-07-11,22:41:04.210: 7E 16
|
||||
2014-07-11,22:41:04.220: 7E B7
|
||||
2014-07-11,22:41:04.230: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:04.240: 7E 39
|
||||
2014-07-11,22:41:04.260: 7E BA
|
||||
2014-07-11,22:41:04.270: 7E 1B
|
||||
2014-07-11,22:41:04.280: 7E 00
|
||||
2014-07-11,22:41:04.290: 7E 22
|
||||
2014-07-11,22:41:04.300: 7E 83
|
||||
2014-07-11,22:41:04.320: 7E E4
|
||||
2014-07-11,22:41:04.330: 7E 45
|
||||
2014-07-11,22:41:04.340: 7E C6
|
||||
2014-07-11,22:41:04.350: 7E 67
|
||||
2014-07-11,22:41:04.360: 7E E9
|
||||
2014-07-11,22:41:04.380: 7E 6A
|
||||
2014-07-11,22:41:04.390: 7E CB
|
||||
2014-07-11,22:41:04.400: 7E AC
|
||||
2014-07-11,22:41:04.410: 7E 98 10 05 F1 11 31 11 96 0F
|
||||
2014-07-11,22:41:04.420: 7E 98 10 01 F1 59 00 12 96 FA
|
||||
2014-07-11,22:41:04.440: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:04.450: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:04.460: 7E 0D
|
||||
2014-07-11,22:41:04.470: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:04.480: 7E 8E
|
||||
2014-07-11,22:41:04.500: 7E 2F
|
||||
2014-07-11,22:41:04.510: 7E D0
|
||||
2014-07-11,22:41:04.520: 7E 71
|
||||
2014-07-11,22:41:04.530: 7E F2
|
||||
2014-07-11,22:41:04.540: 7E 53
|
||||
2014-07-11,22:41:04.560: 7E 34
|
||||
2014-07-11,22:41:04.570: 7E 95
|
||||
2014-07-11,22:41:04.580: 7E 16
|
||||
2014-07-11,22:41:04.590: 7E B7
|
||||
2014-07-11,22:41:04.600: 7E 39
|
||||
2014-07-11,22:41:04.620: 7E BA
|
||||
2014-07-11,22:41:04.630: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:04.640: 7E 1B
|
||||
2014-07-11,22:41:04.650: 7E 00
|
||||
2014-07-11,22:41:04.660: 7E 22
|
||||
2014-07-11,22:41:04.680: 7E 83
|
||||
2014-07-11,22:41:04.690: 7E E4
|
||||
2014-07-11,22:41:04.700: 7E 45
|
||||
2014-07-11,22:41:04.710: 7E C6
|
||||
2014-07-11,22:41:04.720: 7E 67
|
||||
2014-07-11,22:41:04.740: 7E E9
|
||||
2014-07-11,22:41:04.750: 7E 6A
|
||||
2014-07-11,22:41:04.760: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:04.770: 7E CB
|
||||
2014-07-11,22:41:04.780: 7E AC
|
||||
2014-07-11,22:41:04.800: 7E 0D
|
||||
2014-07-11,22:41:04.810: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:04.820: 7E 8E
|
||||
2014-07-11,22:41:04.830: 7E 2F
|
||||
2014-07-11,22:41:04.840: 7E 98 10 05 F1 10 33 0F 96 10
|
||||
2014-07-11,22:41:04.860: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:04.870: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:04.880: 7E D0
|
||||
2014-07-11,22:41:04.890: 7E 71
|
||||
2014-07-11,22:41:04.900: 7E F2
|
||||
2014-07-11,22:41:04.920: 7E 53
|
||||
2014-07-11,22:41:04.930: 7E 34
|
||||
2014-07-11,22:41:04.940: 7E 95
|
||||
2014-07-11,22:41:04.950: 7E 16
|
||||
2014-07-11,22:41:04.960: 7E B7
|
||||
2014-07-11,22:41:04.980: 7E 39
|
||||
2014-07-11,22:41:04.990: 7E BA
|
||||
2014-07-11,22:41:05.000: 7E 1B
|
||||
2014-07-11,22:41:05.010: 7E 00
|
||||
2014-07-11,22:41:05.020: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:05.040: 7E 22
|
||||
2014-07-11,22:41:05.050: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:05.060: 7E 83
|
||||
2014-07-11,22:41:05.070: 7E E4
|
||||
2014-07-11,22:41:05.080: 7E 45
|
||||
2014-07-11,22:41:05.100: 7E C6
|
||||
2014-07-11,22:41:05.110: 7E 67
|
||||
2014-07-11,22:41:05.120: 7E E9
|
||||
2014-07-11,22:41:05.130: 7E 6A
|
||||
2014-07-11,22:41:05.140: 7E CB
|
||||
2014-07-11,22:41:05.160: 7E AC
|
||||
2014-07-11,22:41:05.170: 7E 0D
|
||||
2014-07-11,22:41:05.180: 7E 8E
|
||||
2014-07-11,22:41:05.190: 7E 2F
|
||||
2014-07-11,22:41:05.200: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:05.220: 7E D0
|
||||
2014-07-11,22:41:05.230: 7E 71
|
||||
2014-07-11,22:41:05.240: 7E F2
|
||||
2014-07-11,22:41:05.250: 7E 53
|
||||
2014-07-11,22:41:05.260: 7E 34
|
||||
2014-07-11,22:41:05.280: 7E 95
|
||||
2014-07-11,22:41:05.290: 7E 98 10 05 F1 11 31 10 96 10
|
||||
2014-07-11,22:41:05.300: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:05.310: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:05.320: 7E 16
|
||||
2014-07-11,22:41:05.340: 7E B7
|
||||
2014-07-11,22:41:05.350: 7E 39
|
||||
2014-07-11,22:41:05.360: 7E BA
|
||||
2014-07-11,22:41:05.370: 7E 48 10 00 03 30 15 50 01 56
|
||||
2014-07-11,22:41:05.380: 7E 1B
|
||||
2014-07-11,22:41:05.400: 7E 00
|
||||
2014-07-11,22:41:05.410: 7E 22
|
||||
2014-07-11,22:41:05.420: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:05.430: 7E 83
|
||||
2014-07-11,22:41:05.440: 7E E4
|
||||
2014-07-11,22:41:05.460: 7E 45
|
||||
2014-07-11,22:41:05.470: 7E C6
|
||||
2014-07-11,22:41:05.480: 7E 67
|
||||
2014-07-11,22:41:05.490: 7E E9
|
||||
2014-07-11,22:41:05.500: 7E 6A
|
||||
2014-07-11,22:41:05.520: 7E CB
|
||||
2014-07-11,22:41:05.530: 7E AC
|
||||
2014-07-11,22:41:05.540: 7E 0D
|
||||
2014-07-11,22:41:05.550: 7E 8E
|
||||
2014-07-11,22:41:05.560: 7E 2F
|
||||
2014-07-11,22:41:05.580: 7E D0
|
||||
2014-07-11,22:41:05.590: 7E 71
|
||||
2014-07-11,22:41:05.600: 7E F2
|
||||
2014-07-11,22:41:05.610: 7E 53
|
||||
2014-07-11,22:41:05.620: 7E 34
|
||||
2014-07-11,22:41:05.640: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:05.650: 7E 95
|
||||
2014-07-11,22:41:05.660: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:05.670: 7E 16
|
||||
2014-07-11,22:41:05.680: 7E B7
|
||||
2014-07-11,22:41:05.700: 7E 39
|
||||
2014-07-11,22:41:05.710: 7E BA
|
||||
2014-07-11,22:41:05.720: 7E 1B
|
||||
2014-07-11,22:41:05.730: 7E 98 10 05 F1 10 32 0F 96 11
|
||||
2014-07-11,22:41:05.750: 7E 98 10 01 F1 59 00 12 96 FA
|
||||
2014-07-11,22:41:05.760: 7E 98 10 04 F1 62 00 12 96
|
||||
2014-07-11,22:41:05.770: EE 7E 00
|
||||
2014-07-11,22:41:05.780: 7E 22
|
||||
2014-07-11,22:41:05.800: 7E 83
|
||||
2014-07-11,22:41:05.810: 7E E4
|
||||
2014-07-11,22:41:05.820: 7E A1 10 00 03 30 0D 88 81
|
||||
2014-07-11,22:41:05.830: A5 7E 45
|
||||
2014-07-11,22:41:05.840: 7E C6
|
||||
2014-07-11,22:41:05.860: 7E 67
|
||||
2014-07-11,22:41:05.870: 7E E9
|
||||
2014-07-11,22:41:05.880: 7E 6A
|
||||
2014-07-11,22:41:05.890: 7E CB
|
||||
2014-07-11,22:41:05.900: 7E AC
|
||||
2014-07-11,22:41:05.920: 7E 0D
|
||||
2014-07-11,22:41:05.930: 7E 8E
|
||||
2014-07-11,22:41:05.940: 7E 2F
|
||||
2014-07-11,22:41:05.950: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:05.960: 7E D0
|
||||
2014-07-11,22:41:05.980: 7E 71 7E F2
|
||||
2014-07-11,22:41:06.000: 7E 53
|
||||
2014-07-11,22:41:06.010: 7E 34
|
||||
2014-07-11,22:41:06.020: 7E 95
|
||||
2014-07-11,22:41:06.040: 7E A1 10 00 03 32 34 08 00 7D 5E 7E 16
|
||||
2014-07-11,22:41:06.060: 7E B7
|
||||
2014-07-11,22:41:06.070: 7E 39
|
||||
2014-07-11,22:41:06.090: 7E BA
|
||||
2014-07-11,22:41:06.100: 7E 1B 7E 00
|
||||
2014-07-11,22:41:06.120: 7E 22
|
||||
2014-07-11,22:41:06.130: 7E 83
|
||||
2014-07-11,22:41:06.150: 7E E4
|
||||
2014-07-11,22:41:06.160: 7E 45 7E 98 10 05 F1 11 31 12 96
|
||||
2014-07-11,22:41:06.170: 0E
|
||||
2014-07-11,22:41:06.180: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:06.190: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:06.200: 7E C6
|
||||
2014-07-11,22:41:06.210: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:06.220: 7E 67
|
||||
2014-07-11,22:41:06.240: 7E E9
|
||||
2014-07-11,22:41:06.250: 7E 6A
|
||||
2014-07-11,22:41:06.260: 7E CB
|
||||
2014-07-11,22:41:06.270: 7E 48 10
|
||||
2014-07-11,22:41:06.280: 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:06.290: 7E AC
|
||||
2014-07-11,22:41:06.300: 7E 0D
|
||||
2014-07-11,22:41:06.310: 7E 8E
|
||||
2014-07-11,22:41:06.320: 7E 2F
|
||||
2014-07-11,22:41:06.330: 7E D0
|
||||
2014-07-11,22:41:06.340: 7E 71
|
||||
2014-07-11,22:41:06.360: 7E F2
|
||||
2014-07-11,22:41:06.370: 7E 53
|
||||
2014-07-11,22:41:06.380: 7E 34
|
||||
2014-07-11,22:41:06.390: 7E 95
|
||||
2014-07-11,22:41:06.400: 7E 16
|
||||
2014-07-11,22:41:06.420: 7E B7
|
||||
2014-07-11,22:41:06.430: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:06.450: 7E 39
|
||||
2014-07-11,22:41:06.460: 7E BA
|
||||
2014-07-11,22:41:06.470: 7E 1B
|
||||
2014-07-11,22:41:06.480: 7E 00
|
||||
2014-07-11,22:41:06.490: 7E 22
|
||||
2014-07-11,22:41:06.500: 7E 83
|
||||
2014-07-11,22:41:06.510: 7E E4
|
||||
2014-07-11,22:41:06.520: 7E 45
|
||||
2014-07-11,22:41:06.540: 7E C6
|
||||
2014-07-11,22:41:06.550: 7E 67
|
||||
2014-07-11,22:41:06.560: 7E 48 10 00 03 30 15 58 01
|
||||
2014-07-11,22:41:06.570: 4E 7E E9
|
||||
2014-07-11,22:41:06.580: 7E 6A
|
||||
2014-07-11,22:41:06.600: 7E CB
|
||||
2014-07-11,22:41:06.610: 7E 98 10 05 F1 10 33 0F 96 10
|
||||
2014-07-11,22:41:06.620: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:06.640: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:06.650: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:06.660: 7E AC
|
||||
2014-07-11,22:41:06.670: 7E 0D
|
||||
2014-07-11,22:41:06.680: 7E 8E
|
||||
2014-07-11,22:41:06.690: 7E 2F
|
||||
2014-07-11,22:41:06.700: 7E D0
|
||||
2014-07-11,22:41:06.720: 7E 71
|
||||
2014-07-11,22:41:06.730: 7E F2
|
||||
2014-07-11,22:41:06.740: 7E 53
|
||||
2014-07-11,22:41:06.760: 7E 34
|
||||
2014-07-11,22:41:06.770: 7E 95
|
||||
2014-07-11,22:41:06.780: 7E 16
|
||||
2014-07-11,22:41:06.790: 7E B7
|
||||
2014-07-11,22:41:06.800: 7E 39
|
||||
2014-07-11,22:41:06.810: 7E BA
|
||||
2014-07-11,22:41:06.830: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:06.840: 7E 1B
|
||||
2014-07-11,22:41:06.850: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:06.860: 7E 00
|
||||
2014-07-11,22:41:06.870: 7E 22
|
||||
2014-07-11,22:41:06.880: 7E 83
|
||||
2014-07-11,22:41:06.900: 7E E4
|
||||
2014-07-11,22:41:06.910: 7E 45
|
||||
2014-07-11,22:41:06.930: 7E C6
|
||||
2014-07-11,22:41:06.940: 7E 67
|
||||
2014-07-11,22:41:06.950: 7E E9
|
||||
2014-07-11,22:41:06.960: 7E 6A
|
||||
2014-07-11,22:41:06.970: 7E CB
|
||||
2014-07-11,22:41:06.980: 7E AC
|
||||
2014-07-11,22:41:06.990: 7E 0D
|
||||
2014-07-11,22:41:07.000: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:07.020: 7E 8E
|
||||
2014-07-11,22:41:07.030: 7E 2F
|
||||
2014-07-11,22:41:07.040: 7E D0
|
||||
2014-07-11,22:41:07.050: 7E 98 10 05 F1 11 31 11
|
||||
2014-07-11,22:41:07.060: 96 0F 7E 98
|
||||
2014-07-11,22:41:07.070: 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:07.080: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:07.090: 7E 71
|
||||
2014-07-11,22:41:07.100: 7E F2
|
||||
2014-07-11,22:41:07.120: 7E 53
|
||||
2014-07-11,22:41:07.130: 7E 34
|
||||
2014-07-11,22:41:07.140: 7E 95
|
||||
2014-07-11,22:41:07.150: 7E 16
|
||||
2014-07-11,22:41:07.160: 7E B7
|
||||
2014-07-11,22:41:07.170: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:07.180: 7E 39
|
||||
2014-07-11,22:41:07.200: 7E BA
|
||||
2014-07-11,22:41:07.210: 7E 1B
|
||||
2014-07-11,22:41:07.220: 7E 00
|
||||
2014-07-11,22:41:07.230: 7E 22
|
||||
2014-07-11,22:41:07.250: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:07.260: 7E 83
|
||||
2014-07-11,22:41:07.270: 7E E4
|
||||
2014-07-11,22:41:07.280: 7E 45
|
||||
2014-07-11,22:41:07.300: 7E C6
|
||||
2014-07-11,22:41:07.310: 7E 67
|
||||
2014-07-11,22:41:07.320: 7E E9
|
||||
2014-07-11,22:41:07.330: 7E 6A
|
||||
2014-07-11,22:41:07.340: 7E CB
|
||||
2014-07-11,22:41:07.350: 7E AC
|
||||
2014-07-11,22:41:07.360: 7E 0D
|
||||
2014-07-11,22:41:07.380: 7E 8E
|
||||
2014-07-11,22:41:07.390: 7E 2F
|
||||
2014-07-11,22:41:07.400: 7E D0
|
||||
2014-07-11,22:41:07.420: 7E 71
|
||||
2014-07-11,22:41:07.430: 7E F2
|
||||
2014-07-11,22:41:07.440: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:07.450: 7E 53
|
||||
2014-07-11,22:41:07.460: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:07.470: 7E 34
|
||||
2014-07-11,22:41:07.490: 7E 98 10 05 F1 10 32 0F 96 11
|
||||
2014-07-11,22:41:07.500: 7E 98 10 01 F1 59 00 12 96 FA
|
||||
2014-07-11,22:41:07.510: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:07.520: 7E 95
|
||||
2014-07-11,22:41:07.530: 7E 16
|
||||
2014-07-11,22:41:07.540: 7E B7
|
||||
2014-07-11,22:41:07.560: 7E 39
|
||||
2014-07-11,22:41:07.570: 7E BA
|
||||
2014-07-11,22:41:07.590: 7E 1B
|
||||
2014-07-11,22:41:07.600: 7E 00
|
||||
2014-07-11,22:41:07.610: 7E 22
|
||||
2014-07-11,22:41:07.620: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:07.630: 7E 83
|
||||
2014-07-11,22:41:07.640: 7E E4
|
||||
2014-07-11,22:41:07.650: 7E 45
|
||||
2014-07-11,22:41:07.660: 7E C6
|
||||
2014-07-11,22:41:07.680: 7E 67
|
||||
2014-07-11,22:41:07.690: 7E E9
|
||||
2014-07-11,22:41:07.700: 7E 6A
|
||||
2014-07-11,22:41:07.710: 7E CB
|
||||
2014-07-11,22:41:07.720: 7E AC
|
||||
2014-07-11,22:41:07.740: 7E 0D
|
||||
2014-07-11,22:41:07.750: 7E 48 10 00 03 30 15 58 81 CD
|
||||
2014-07-11,22:41:07.760: 7E 8E
|
||||
2014-07-11,22:41:07.780: 7E 2F
|
||||
2014-07-11,22:41:07.790: 7E D0
|
||||
2014-07-11,22:41:07.800: 7E 71
|
||||
2014-07-11,22:41:07.810: 7E F2
|
||||
2014-07-11,22:41:07.820: 7E 53
|
||||
2014-07-11,22:41:07.830: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:07.840: 7E 34
|
||||
2014-07-11,22:41:07.860: 7E 95
|
||||
2014-07-11,22:41:07.870: 7E 16
|
||||
2014-07-11,22:41:07.880: 7E B7
|
||||
2014-07-11,22:41:07.890: 7E 39
|
||||
2014-07-11,22:41:07.910: 7E BA
|
||||
2014-07-11,22:41:07.920: 7E 1B
|
||||
2014-07-11,22:41:07.930: 7E 98 10 05 F1 11 32 10 96 0F
|
||||
2014-07-11,22:41:07.940: 7E 98 10 01 F1 5A 00 12 96 F9
|
||||
2014-07-11,22:41:07.950: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:07.960: 7E 00
|
||||
2014-07-11,22:41:07.980: 7E 22
|
||||
2014-07-11,22:41:07.990: 7E 83
|
||||
2014-07-11,22:41:08.000: 7E E4
|
||||
2014-07-11,22:41:08.010: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:08.020: 7E 45
|
||||
2014-07-11,22:41:08.040: 7E C6
|
||||
2014-07-11,22:41:08.050: 7E 67
|
||||
2014-07-11,22:41:08.060: 7E E9
|
||||
2014-07-11,22:41:08.080: 7E 48 10 00 03 32 11 08 00 A1
|
||||
2014-07-11,22:41:08.090: 7E 6A
|
||||
2014-07-11,22:41:08.100: 7E CB
|
||||
2014-07-11,22:41:08.110: 7E AC
|
||||
2014-07-11,22:41:08.120: 7E 0D
|
||||
2014-07-11,22:41:08.130: 7E 8E
|
||||
2014-07-11,22:41:08.140: 7E 2F
|
||||
2014-07-11,22:41:08.160: 7E D0
|
||||
2014-07-11,22:41:08.170: 7E 71
|
||||
2014-07-11,22:41:08.180: 7E F2
|
||||
2014-07-11,22:41:08.190: 7E 53
|
||||
2014-07-11,22:41:08.200: 7E 34
|
||||
2014-07-11,22:41:08.220: 7E 95
|
||||
2014-07-11,22:41:08.230: 7E A1 10 00 03 30 0D 88 81 A5
|
||||
2014-07-11,22:41:08.240: 7E 16
|
||||
2014-07-11,22:41:08.250: 7E B7
|
||||
2014-07-11,22:41:08.270: 7E 39
|
||||
2014-07-11,22:41:08.280: 7E BA
|
||||
2014-07-11,22:41:08.290: 7E 1B
|
||||
2014-07-11,22:41:08.300: 7E 00
|
||||
2014-07-11,22:41:08.310: 7E 22
|
||||
2014-07-11,22:41:08.320: 7E 83
|
||||
2014-07-11,22:41:08.340: 7E E4
|
||||
2014-07-11,22:41:08.350: 7E 45
|
||||
2014-07-11,22:41:08.360: 7E 48
|
||||
2014-07-11,22:41:08.370: 10 00 03 30 15 50 01 56
|
||||
2014-07-11,22:41:08.380: 7E 98 10 05 F1 11 30 14 96 0D
|
||||
2014-07-11,22:41:08.390: 7E 98 10 01 F1 59 00 12 96 FA
|
||||
2014-07-11,22:41:08.400: 7E 98 10 04 F1 62 00 12 96 EE
|
||||
2014-07-11,22:41:08.410: 7E A1 10 00 03 32 34 08 00 7D 5E
|
||||
2014-07-11,22:41:08.420: 7E C6
|
||||
2014-07-11,22:41:08.430: 7E 67␍
|
||||
@@ -0,0 +1,77 @@
|
||||
Date,Time,SWR,RSSI,A1,A2,A3,A4,GPS Date,GPS Time,Long,Lat,Course,GPS Speed(kts),GPS Alt,Baro Alt(m),Vertical Speed,Air Speed(kts),Temp1,Temp2,RPM,Fuel,Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Cell 7,Cell 8,Cell 9,Cell 10,Cell 11,Cell 12,Current,Consumption,Vfas,AccelX,AccelY,AccelZ,Rud,Ele,Thr,Ail,S1,S2,S3,LS,RS,SA,SB,SC,SD,SE,SF,SG,SH
|
||||
2014-07-11,22:41:00.570,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:00.770,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-552,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:00.870,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:00.980,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-7,1024,1024,-1024,-552,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.080,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,1,-11,-1024,-2,1024,1024,-1024,-555,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.180,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.290,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.390,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.490,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-8,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.600,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.710,0,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.820,16,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,0.0,4.12,4.14,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:01.930,16,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.040,16,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.140,16,0,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.240,16,90,0.00,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.340,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.440,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,2,-11,-1024,-4,1024,1024,-1024,-556,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.540,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.640,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,1,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.750,17,91,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.850,17,91,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,2,-11,-1024,-5,1024,1024,-1024,-555,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:02.950,17,91,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.050,17,91,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.150,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.250,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.360,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.470,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.580,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.680,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.780,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.880,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:03.980,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.080,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.190,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,0.04,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.300,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,0.04,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-7,1024,1024,-1024,-551,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.400,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,0.04,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,2,-11,-1024,-4,1024,1024,-1024,-555,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.500,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,0.04,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-9,-1024,-8,1024,1024,-1024,-551,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.600,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,0.04,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.700,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,0.04,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-551,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.800,17,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:04.910,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-4,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.010,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-555,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.110,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,2,-9,-1024,-7,1024,1024,-1024,-552,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.210,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-7,1024,1024,-1024,-552,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.310,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-4,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.410,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-4,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.520,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-7,1024,1024,-1024,-552,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.630,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.730,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.840,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:05.940,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-7,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.050,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.160,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.260,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.360,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-555,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.460,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.560,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.660,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,4.13,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.760,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,4.13,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,1,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.860,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,4.13,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:06.960,16,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,4.13,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.060,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,4.13,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.160,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,20.7,4.12,4.14,4.20,4.13,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.270,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-4,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.370,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.470,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.570,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.670,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,5,-8,-1024,-10,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.770,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-11,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.870,16,89,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:07.970,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:08.070,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:08.170,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-553,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:08.270,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,24.8,4.12,4.14,4.20,4.13,4.13,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
2014-07-11,22:41:08.370,17,90,5.07,0.00,0.00,0.00,2000-00-00,00:00:00,002.0000-,002.0000-,000.00,0, 0.00, 0.00, 0.00,0.0,0,0,0,0,16.6,4.12,4.14,4.20,0.04,0.04,4.13,0.00,0.00,0.00,0.00,0.00,0.00,0.0,0,0.0,0,0,0,4,-9,-1024,-5,1024,1024,-1024,-554,1024,1,1,-1,0,-1,-1,-1,-1
|
||||
|
@@ -0,0 +1,11 @@
|
||||
This folder contains sample data files from various telemetry sensors
|
||||
|
||||
|
||||
Files:
|
||||
MODELE24-2014-07-11.csv
|
||||
MODELE24-2014-07-11-sport.log
|
||||
|
||||
Data from two FrSky FLVSS Smart Port LiPo Voltage Sensors one with
|
||||
default appid 0xA1 (physical ID 1), the other one has appid changed
|
||||
to 0x48 (physical ID 8). It shows a problem with some cell readings
|
||||
of second sensor.
|
||||
@@ -0,0 +1,31 @@
|
||||
/opentx.elf
|
||||
/simu
|
||||
/opentx.map
|
||||
/simu.d
|
||||
/snapshot_*.png
|
||||
/*.sh
|
||||
/*.bat
|
||||
/*.bin
|
||||
/*.bin.*
|
||||
/*.hex
|
||||
/*.lst
|
||||
/*.lss
|
||||
/SCRIPTS
|
||||
/TEMPLATES
|
||||
/SOUNDS
|
||||
/LOGS
|
||||
/allsrc.cpp
|
||||
/allsimusrc.cpp
|
||||
/BMP
|
||||
/traces
|
||||
/RADIO
|
||||
/MODELS
|
||||
/FIRMWARES
|
||||
/EEPROMS
|
||||
/gtests
|
||||
/gtest_main.a
|
||||
/gtests.d
|
||||
/lua_exports*
|
||||
/lua_fields*
|
||||
.directory
|
||||
|
||||
@@ -0,0 +1,809 @@
|
||||
include(CMakeForceCompiler)
|
||||
include(Bitmaps)
|
||||
|
||||
set(PCB_TYPES X9LITE X9LITES X7 XLITE XLITES X9D X9D+ X9E X10 X12S PL18 T15PRO ST16 PA01 TX15 TX16SMK3)
|
||||
set(RADIO_LANGUAGES CN CZ DA DE EN ES FI FR HE HU IT JP KO NL PL PT RU SE SK TW UA)
|
||||
set(TTS_LANGUAGES CN CZ DA DE EN ES FI FR HE HU IT JP KO NL PL PT RU SE SK TW UA)
|
||||
|
||||
set(PCB "X9D+" CACHE STRING "Radio type, one of: ${PCB_TYPES}")
|
||||
set_property(CACHE PCB PROPERTY STRINGS ${PCB_TYPES})
|
||||
set(TRANSLATIONS "EN" CACHE STRING "Radio language, one of: ${RADIO_LANGUAGES}")
|
||||
set_property(CACHE TRANSLATIONS PROPERTY STRINGS ${RADIO_LANGUAGES})
|
||||
set(DEFAULT_MODE "" CACHE STRING "Default sticks mode")
|
||||
set(POPUP_LEVEL 2 CACHE STRING "Popup level")
|
||||
|
||||
option(HELI "Heli menu" ON)
|
||||
option(FLIGHT_MODES "Flight Modes" ON)
|
||||
option(CURVES "Curves" ON)
|
||||
option(GVARS "Global variables" ON)
|
||||
option(GUI "GUI enabled" ON)
|
||||
option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" ON)
|
||||
option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF)
|
||||
option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" ON)
|
||||
option(DANGEROUS_MODULE_FUNCTIONS "Dangerous module functions (RangeCheck / Bind / Module OFF, etc.) available" OFF)
|
||||
option(FAI "Competition mode (no telemetry)" OFF)
|
||||
option(AUTOSOURCE "Automatic source detection in menus" ON)
|
||||
option(AUTOSWITCH "Automatic switch detection in menus" ON)
|
||||
option(SEMIHOSTING "Enable debugger semihosting" OFF)
|
||||
option(JITTER_MEASURE "Enable ADC jitter measurement" OFF)
|
||||
option(WATCHDOG "Enable hardware Watchdog" ON)
|
||||
option(ASTERISK "Enable asterisk icon (test only firmware)" OFF)
|
||||
option(LUA "Enable LUA support" ON)
|
||||
option(SIMU_DISKIO "Enable disk IO simulation in simulator. Simulator will use FatFs module and simulated IO layer that uses \"./sdcard.image\" file as image of SD card. This file must contain whole SD card from first to last sector" OFF)
|
||||
option(SIMU_LUA_COMPILER "Pre-compile and save Lua scripts in simulator." ON)
|
||||
option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF)
|
||||
option(RAS "RAS (SWR) enabled" ON)
|
||||
option(TEMPLATES "Model templates menu" OFF)
|
||||
option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF)
|
||||
option(TRACE_AUDIO "Traces audio enabled" OFF)
|
||||
option(DEBUG_SEGGER_RTT "Debug output to Segger RTT" OFF)
|
||||
option(DEBUG_WINDOWS "Turn on windows traces" OFF)
|
||||
option(DEBUG_YAML "Turn on YAML traces" OFF)
|
||||
option(DEBUG_LABELS "Turn on Labels traces" OFF)
|
||||
option(NANO "Use nano newlib and binalloc" ON)
|
||||
option(TEST_BUILD_WARNING "Warn this is a test build" OFF)
|
||||
option(MODULE_PROTOCOL_FCC "Add support for FCC modules" ON)
|
||||
option(MODULE_PROTOCOL_LBT "Add support for EU/LBT modules" ON)
|
||||
option(MODULE_PROTOCOL_D8 "Add support for D8 modules" ON)
|
||||
option(FRSKY_RELEASE "Used to build FrSky released firmware" OFF)
|
||||
option(TBS_RELEASE "Used to build TBS released firmware" OFF)
|
||||
option(IMRC_RELEASE "Used to build IMRC released firmware" OFF)
|
||||
option(HARDWARE_TRAINER_MULTI "Allow multi trainer" OFF)
|
||||
option(BOOTLOADER "Include Bootloader" ON)
|
||||
option(FWDRIVE "Attach also firmware drive with USB" OFF)
|
||||
option(DISABLE_MCUCHECK "Disable MCU check at start" OFF)
|
||||
option(LUA_MIXER "Enable LUA mixer/model scripts support" ON)
|
||||
if(PCB STREQUAL X9D+ AND PCBREV STREQUAL 2019)
|
||||
option(USBJ_EX "Enable USB Joystick Extension" OFF)
|
||||
else()
|
||||
option(USBJ_EX "Enable USB Joystick Extension" ON)
|
||||
endif()
|
||||
option(AUDIO "Enable audio" ON)
|
||||
option(EXFAT "Enable exFAT filesystem support in FatFs" OFF)
|
||||
|
||||
if(NATIVE_BUILD)
|
||||
option(ALL_LANGUAGES "Enable runtime language selection" ON)
|
||||
else()
|
||||
option(ALL_LANGUAGES "Enable runtime language selection" OFF)
|
||||
endif()
|
||||
|
||||
if(PCB STREQUAL X7 AND PCBREV STREQUAL LR3PRO)
|
||||
option(POWER_LED_BLUE "Override Power LED to be normally Blue" ON)
|
||||
else()
|
||||
option(POWER_LED_BLUE "Override Power LED to be normally Blue" OFF)
|
||||
endif()
|
||||
|
||||
# since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags.
|
||||
set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).")
|
||||
set(FIRMWARE_C_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c compiler (note: CMAKE_C_FLAGS_DEBUG is ignored for firmware/bootloader).")
|
||||
set(FIRMWARE_CXX_FLAGS "" CACHE STRING "Additional flags for firmware target c++ compiler (note: all CMAKE_CXX_FLAGS[_*] are ignored for firmware/bootloader).")
|
||||
set(FIRMWARE_CXX_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c++ compiler (note: CMAKE_CXX_FLAGS_DEBUG is ignored for firmware/bootloader).")
|
||||
|
||||
set(THIRDPARTY_DIR thirdparty)
|
||||
set(LUA_DIR ${THIRDPARTY_DIR}/Lua/src)
|
||||
set(RTOS_DIR ${THIRDPARTY_DIR}/FreeRTOS)
|
||||
set(FATFS_DIR ${THIRDPARTY_DIR}/FatFs)
|
||||
set(RADIO_BIN_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
configure_file(stamp.h.in stamp.h @ONLY)
|
||||
|
||||
if(PCB STREQUAL X12S OR PCB STREQUAL X10)
|
||||
include(targets/horus/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL PL18)
|
||||
include(targets/pl18/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL T15PRO)
|
||||
include(targets/t15pro/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL ST16)
|
||||
include(targets/st16/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL PA01)
|
||||
include(targets/pa01/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL TX15)
|
||||
include(targets/tx15/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL TX16SMK3)
|
||||
include(targets/tx16smk3/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL STM32H7S78_DK)
|
||||
include(targets/stm32h7s78-dk/CMakeLists.txt)
|
||||
elseif(PCB STREQUAL X9E OR PCB STREQUAL X9D+ OR PCB STREQUAL X9D OR PCB STREQUAL X7 OR PCB STREQUAL X9LITE OR PCB STREQUAL X9LITES OR PCB STREQUAL XLITE OR PCB STREQUAL XLITES)
|
||||
include(targets/taranis/CMakeLists.txt)
|
||||
else()
|
||||
message(FATAL_ERROR "Unknown PCB '${PCB}'")
|
||||
endif()
|
||||
|
||||
# Add RADIO_xxx definition
|
||||
string(TOUPPER ${FLAVOUR} RADIO_NAME)
|
||||
string(REPLACE "+" "P" RADIO_NAME ${RADIO_NAME})
|
||||
string(CONCAT RADIO_NAME "RADIO_" ${RADIO_NAME})
|
||||
add_definitions(-D${RADIO_NAME})
|
||||
set(${RADIO_NAME} YES)
|
||||
|
||||
add_definitions(
|
||||
-DCPU_TYPE=${CPU_TYPE} -DCPU_TYPE_FULL=${CPU_TYPE_FULL}
|
||||
)
|
||||
|
||||
set(HW_DESC_JSON ${FLAVOUR}.json)
|
||||
|
||||
include(hal/CMakeLists.txt)
|
||||
|
||||
add_subdirectory(bitmaps)
|
||||
add_subdirectory(fonts)
|
||||
|
||||
if(CPU_TYPE STREQUAL STM32H7 OR CPU_TYPE STREQUAL STM32H7RS)
|
||||
include(targets/common/arm/stm32/h7/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
if(CPU_TYPE STREQUAL STM32F4)
|
||||
include(targets/common/arm/stm32/f4/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
if(CPU_TYPE STREQUAL STM32F2)
|
||||
include(targets/common/arm/stm32/f2/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
if(CPU_FAMILY STREQUAL STM32)
|
||||
include(targets/common/arm/stm32/CMakeLists.txt)
|
||||
include(boards/generic_stm32/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
if(ARCH STREQUAL ARM)
|
||||
include(targets/common/arm/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
# Generate hardware definitions from hal.h
|
||||
# Must be after all add_definitions() so the preprocessor sees all flags
|
||||
AddHardwareDefTarget(${HW_DESC_JSON})
|
||||
add_custom_target(hardware_defs DEPENDS ${HW_DESC_JSON}.h)
|
||||
|
||||
include_directories(targets/${TARGET_DIR} ${THIRDPARTY_DIR})
|
||||
|
||||
if(NATIVE_BUILD)
|
||||
include_directories(targets/simu)
|
||||
endif()
|
||||
|
||||
foreach(LANGUAGE ${RADIO_LANGUAGES})
|
||||
if(TRANSLATIONS STREQUAL ${LANGUAGE})
|
||||
add_definitions(-DTRANSLATIONS_${LANGUAGE} -DTRANSLATIONS="${LANGUAGE}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(RTL_LANGUAGES HE)
|
||||
if(TRANSLATIONS IN_LIST RTL_LANGUAGES)
|
||||
set(TRANSLATION_IS_RTL 1)
|
||||
else()
|
||||
set(TRANSLATION_IS_RTL 0)
|
||||
endif()
|
||||
add_definitions(-DTRANSLATION_IS_RTL=${TRANSLATION_IS_RTL})
|
||||
|
||||
set(SRC ${SRC} debug.cpp)
|
||||
|
||||
add_definitions(-DFLAVOUR="${FLAVOUR}")
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/bitmaps/${BITMAPS_DIR})
|
||||
|
||||
include(gui/CMakeLists.txt)
|
||||
|
||||
# TODO: move to storage/
|
||||
set(SRC ${SRC} storage/storage_common.cpp)
|
||||
set(SRC ${SRC} storage/sdcard_common.cpp)
|
||||
set(SRC ${SRC} storage/sdcard_yaml.cpp)
|
||||
include(storage/yaml/CMakeLists.txt)
|
||||
if(STORAGE_MODELSLIST)
|
||||
set(SRC ${SRC} storage/modelslist.cpp)
|
||||
add_definitions(-DSTORAGE_MODELSLIST)
|
||||
endif()
|
||||
|
||||
if(RTC_BACKUP_RAM)
|
||||
add_definitions(-DRTC_BACKUP_RAM)
|
||||
|
||||
GenerateDataCopy(datastructs_private.h datacopy.inc)
|
||||
|
||||
set(SRC ${SRC}
|
||||
storage/rlc.cpp
|
||||
storage/rtc_backup.cpp
|
||||
${CMAKE_CURRENT_BINARY_DIR}/datacopy.inc
|
||||
)
|
||||
|
||||
# Add custom target for debugging
|
||||
add_custom_target(datacopy DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/datacopy.inc)
|
||||
endif()
|
||||
|
||||
if (LUA_MIXER AND NOT LUA)
|
||||
message(FATAL_ERROR "LUA_MIXER requires LUA!!")
|
||||
endif()
|
||||
|
||||
if(LUA)
|
||||
include(lua/CMakeLists.txt)
|
||||
endif()
|
||||
|
||||
if(HELI)
|
||||
add_definitions(-DHELI)
|
||||
endif()
|
||||
|
||||
if(FLIGHT_MODES)
|
||||
add_definitions(-DFLIGHT_MODES)
|
||||
endif()
|
||||
|
||||
if(CURVES)
|
||||
add_definitions(-DCURVES)
|
||||
set(SRC ${SRC} curves.cpp)
|
||||
endif()
|
||||
|
||||
if(GVARS)
|
||||
add_definitions(-DGVARS)
|
||||
set(SRC ${SRC} gvars.cpp)
|
||||
endif()
|
||||
|
||||
if(FAI STREQUAL YES)
|
||||
add_definitions(-DFAI)
|
||||
elseif(FAI STREQUAL CHOICE)
|
||||
add_definitions(-DFAI_CHOICE)
|
||||
endif()
|
||||
|
||||
if(NOT RAS)
|
||||
add_definitions(-DNO_RAS)
|
||||
endif()
|
||||
|
||||
if(FAS_PROTOTYPE)
|
||||
add_definitions(-DFAS_PROTOTYPE)
|
||||
endif()
|
||||
|
||||
if(AUTOSOURCE)
|
||||
add_definitions(-DAUTOSOURCE)
|
||||
endif()
|
||||
|
||||
if(AUTOSWITCH)
|
||||
add_definitions(-DAUTOSWITCH)
|
||||
endif()
|
||||
|
||||
if(JITTER_MEASURE)
|
||||
add_definitions(-DJITTER_MEASURE)
|
||||
endif()
|
||||
|
||||
if(ASTERISK)
|
||||
add_definitions(-DASTERISK)
|
||||
endif()
|
||||
|
||||
if(WATCHDOG AND NOT NATIVE_BUILD)
|
||||
add_definitions(-DUSE_WATCHDOG)
|
||||
endif()
|
||||
|
||||
if(SIMU_DISKIO)
|
||||
add_definitions(-DSIMU_DISKIO)
|
||||
endif()
|
||||
|
||||
set(SRC ${SRC} sdcard.cpp rtc.cpp logs.cpp lib_file.cpp)
|
||||
|
||||
if(BLUETOOTH)
|
||||
add_definitions(-DBLUETOOTH)
|
||||
set(SRC ${SRC} bluetooth.cpp)
|
||||
endif()
|
||||
|
||||
if(SHUTDOWN_CONFIRMATION)
|
||||
add_definitions(-DSHUTDOWN_CONFIRMATION)
|
||||
endif()
|
||||
|
||||
if(PPM_CENTER_ADJUSTABLE)
|
||||
add_definitions(-DPPM_CENTER_ADJUSTABLE)
|
||||
endif()
|
||||
|
||||
if(PPM_LIMITS_SYMETRICAL)
|
||||
add_definitions(-DPPM_LIMITS_SYMETRICAL)
|
||||
endif()
|
||||
|
||||
if(OVERRIDE_CHANNEL_FUNCTION)
|
||||
add_definitions(-DOVERRIDE_CHANNEL_FUNCTION)
|
||||
endif()
|
||||
|
||||
if(DANGEROUS_MODULE_FUNCTIONS)
|
||||
add_definitions(-DDANGEROUS_MODULE_FUNCTIONS)
|
||||
endif()
|
||||
|
||||
if(NOT DEFAULT_MODE STREQUAL "")
|
||||
add_definitions(-DDEFAULT_MODE=${DEFAULT_MODE})
|
||||
endif()
|
||||
|
||||
if(TRACE_SIMPGMSPACE)
|
||||
add_definitions(-DTRACE_SIMPGMSPACE)
|
||||
endif()
|
||||
|
||||
if(TRACE_LUA_INTERNALS)
|
||||
add_definitions(-DTRACE_LUA_INTERNALS_ENABLED)
|
||||
endif()
|
||||
|
||||
if(TRACE_AUDIO)
|
||||
add_definitions(-DTRACE_AUDIO)
|
||||
set(DEBUG ON)
|
||||
set(DEBUG_TRACE_BUFFER ON)
|
||||
endif()
|
||||
|
||||
if(DEBUG STREQUAL RTT)
|
||||
set(DEBUG ON)
|
||||
set(DEBUG_SEGGER_RTT ON)
|
||||
endif()
|
||||
|
||||
if(DEBUG STREQUAL RTT_NO_USB)
|
||||
set(DEBUG ON)
|
||||
set(DEBUG_SEGGER_RTT ON)
|
||||
add_definitions(-DDEBUG_DISABLE_USB)
|
||||
endif()
|
||||
|
||||
if(DEBUG STREQUAL RTT_SYSVIEW)
|
||||
set(DEBUG ON)
|
||||
set(DEBUG_SEGGER_RTT ON)
|
||||
set(DEBUG_SEGGER_SYSVIEW ON)
|
||||
endif()
|
||||
|
||||
if(DEBUG_SEGGER_RTT AND NOT NATIVE_BUILD)
|
||||
add_definitions(-DDEBUG_SEGGER_RTT -DSEGGER_RTT_BUFFER_SECTION=".ram")
|
||||
include_directories(${THIRDPARTY_DIR}/Segger/Config)
|
||||
include_directories(${THIRDPARTY_DIR}/Segger/Sample)
|
||||
include_directories(${THIRDPARTY_DIR}/Segger/SEGGER)
|
||||
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger/SEGGER/SEGGER_RTT.c)
|
||||
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger/SEGGER/SEGGER_RTT_ASM_ARMv7M.S)
|
||||
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger/SEGGER/SEGGER_RTT_printf.c)
|
||||
endif()
|
||||
|
||||
if(DEBUG_SEGGER_SYSVIEW AND NOT NATIVE_BUILD)
|
||||
add_definitions(-DDEBUG_SEGGER_SYSVIEW)
|
||||
include_directories(${THIRDPARTY_DIR}/Segger/Sample/FreeRTOSV11)
|
||||
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger/SEGGER/SEGGER_SYSVIEW.c)
|
||||
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger/Sample/FreeRTOSV11/SEGGER_SYSVIEW_FreeRTOS.c)
|
||||
set(SRC ${SRC} ${THIRDPARTY_DIR}/Segger/Sample/FreeRTOSV11/Config/Cortex-M/SEGGER_SYSVIEW_Config_FreeRTOS.c)
|
||||
endif()
|
||||
|
||||
if(DEBUG_WINDOWS)
|
||||
add_definitions(-DDEBUG_WINDOWS)
|
||||
endif()
|
||||
|
||||
if(DEBUG_YAML)
|
||||
add_definitions(-DDEBUG_YAML)
|
||||
endif()
|
||||
|
||||
if(DEBUG_LABELS)
|
||||
add_definitions(-DDEBUG_LABELS)
|
||||
endif()
|
||||
|
||||
if(IMU_LSM6DS33)
|
||||
add_definitions(-DIMU_LSM6DS33)
|
||||
endif()
|
||||
|
||||
if(TEST_BUILD_WARNING)
|
||||
add_definitions(-DTEST_BUILD_WARNING)
|
||||
endif()
|
||||
|
||||
if(MODULE_PROTOCOL_FCC)
|
||||
add_definitions(-DMODULE_PROTOCOL_FCC)
|
||||
endif()
|
||||
|
||||
if(MODULE_PROTOCOL_LBT)
|
||||
add_definitions(-DMODULE_PROTOCOL_LBT)
|
||||
endif()
|
||||
|
||||
if(MODULE_PROTOCOL_D8)
|
||||
add_definitions(-DMODULE_PROTOCOL_D8)
|
||||
endif()
|
||||
|
||||
if(JUMPER_RELEASE)
|
||||
add_definitions(-DJUMPER_RELEASE)
|
||||
endif()
|
||||
|
||||
if(RADIOMASTER_RELEASE)
|
||||
add_definitions(-DRADIOMASTER_RELEASE)
|
||||
endif()
|
||||
|
||||
if(RADIOMASTER_RTF_RELEASE)
|
||||
add_definitions(-DRADIOMASTER_RTF_RELEASE)
|
||||
endif()
|
||||
|
||||
if(TBS_RELEASE)
|
||||
add_definitions(-DTBS_RELEASE)
|
||||
endif()
|
||||
|
||||
if(IMRC_RELEASE)
|
||||
add_definitions(-DIMRC_RELEASE)
|
||||
endif()
|
||||
|
||||
if(FRSKY_RELEASE)
|
||||
add_definitions(-DFRSKY_RELEASE)
|
||||
set(POPUP_LEVEL 3)
|
||||
endif()
|
||||
|
||||
if(IFLIGHT_RELEASE)
|
||||
add_definitions(-DIFLIGHT_RELEASE)
|
||||
endif()
|
||||
|
||||
if(BETAFPV_RELEASE)
|
||||
add_definitions(-DBETAFPV_RELEASE)
|
||||
endif()
|
||||
|
||||
if(HARDWARE_TRAINER_MULTI)
|
||||
add_definitions(-DHARDWARE_TRAINER_MULTI)
|
||||
endif()
|
||||
|
||||
add_definitions(-DPOPUP_LEVEL=${POPUP_LEVEL})
|
||||
|
||||
if(INTERNAL_MODULE_MULTI OR INTERNAL_MODULE_CRSF)
|
||||
set(DEFAULT_TEMPLATE_SETUP 21 CACHE STRING "")
|
||||
else()
|
||||
set(DEFAULT_TEMPLATE_SETUP 0 CACHE STRING "")
|
||||
endif()
|
||||
add_definitions(-DDEFAULT_TEMPLATE_SETUP=${DEFAULT_TEMPLATE_SETUP})
|
||||
|
||||
if(FWDRIVE)
|
||||
add_definitions(-DFWDRIVE)
|
||||
endif()
|
||||
|
||||
if(DISABLE_MCUCHECK)
|
||||
add_definitions(-DDISABLE_MCUCHECK)
|
||||
endif()
|
||||
|
||||
if(SIZE_TARGET_MEM_DEFINE MATCHES 32768)
|
||||
add_definitions(-DSDRAM_32M)
|
||||
elseif(SIZE_TARGET_MEM_DEFINE MATCHES 16384)
|
||||
add_definitions(-DSDRAM_16M)
|
||||
else(SIZE_TARGET_MEM_DEFINE MATCHES 8192)
|
||||
add_definitions(-DSDRAM_8M)
|
||||
endif()
|
||||
|
||||
set(SRC
|
||||
${SRC}
|
||||
edgetx.cpp
|
||||
datastructs_model.cpp
|
||||
datastructs_radio.cpp
|
||||
functions.cpp
|
||||
strhelpers.cpp
|
||||
switches.cpp
|
||||
analogs.cpp
|
||||
mixes.cpp
|
||||
mixer.cpp
|
||||
mixer_scheduler.cpp
|
||||
stamp.cpp
|
||||
timers.cpp
|
||||
trainer.cpp
|
||||
model_init.cpp
|
||||
serial.cpp
|
||||
audio.cpp
|
||||
model_audio.cpp
|
||||
pdm_wav_recorder.cpp
|
||||
sbus.cpp
|
||||
input_mapping.cpp
|
||||
inactivity_timer.cpp
|
||||
tasks/mixer_task.cpp
|
||||
)
|
||||
|
||||
if(GUI)
|
||||
add_definitions(-DGUI)
|
||||
set(SRC
|
||||
${SRC}
|
||||
keys.cpp
|
||||
maths.cpp
|
||||
translations/translations.cpp
|
||||
cfn_sort.cpp
|
||||
gui/gui_common.cpp
|
||||
)
|
||||
foreach(FILE ${GUI_SRC})
|
||||
set(SRC ${SRC} gui/${GUI_DIR}/${FILE})
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(AUDIO)
|
||||
add_definitions(-DAUDIO)
|
||||
endif()
|
||||
|
||||
if(ALL_LANGUAGES)
|
||||
add_definitions(-DALL_LANGS)
|
||||
set(SRC
|
||||
${SRC}
|
||||
translations/sim/lang_cn.cpp
|
||||
translations/sim/lang_cz.cpp
|
||||
translations/sim/lang_da.cpp
|
||||
translations/sim/lang_de.cpp
|
||||
translations/sim/lang_en.cpp
|
||||
translations/sim/lang_es.cpp
|
||||
translations/sim/lang_fi.cpp
|
||||
translations/sim/lang_fr.cpp
|
||||
translations/sim/lang_he.cpp
|
||||
translations/sim/lang_it.cpp
|
||||
translations/sim/lang_jp.cpp
|
||||
translations/sim/lang_ko.cpp
|
||||
translations/sim/lang_nl.cpp
|
||||
translations/sim/lang_pl.cpp
|
||||
translations/sim/lang_pt.cpp
|
||||
translations/sim/lang_ru.cpp
|
||||
translations/sim/lang_se.cpp
|
||||
translations/sim/lang_tw.cpp
|
||||
translations/sim/lang_ua.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if(USBJ_EX)
|
||||
add_definitions(-DUSBJ_EX)
|
||||
set(SRC ${SRC}
|
||||
usb_joystick.cpp
|
||||
)
|
||||
endif()
|
||||
|
||||
if(POWER_LED_BLUE)
|
||||
add_definitions(-DPOWER_LED_BLUE)
|
||||
endif()
|
||||
|
||||
foreach(FILE ${TARGET_SRC})
|
||||
set(SRC targets/${TARGET_DIR}/${FILE} ${SRC})
|
||||
endforeach()
|
||||
|
||||
foreach(FILE ${FIRMWARE_TARGET_SRC})
|
||||
set(FIRMWARE_SRC ${FIRMWARE_SRC} targets/${TARGET_DIR}/${FILE})
|
||||
endforeach()
|
||||
|
||||
foreach(FILE ${PULSES_SRC})
|
||||
set(SRC ${SRC} pulses/${FILE})
|
||||
endforeach()
|
||||
|
||||
add_definitions(-DCORRECT_NEGATIVE_SHIFTS)
|
||||
|
||||
if(NOT MSVC)
|
||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-address-of-packed-member -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits")
|
||||
if(WARNINGS_AS_ERRORS)
|
||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Werror")
|
||||
endif(WARNINGS_AS_ERRORS)
|
||||
else()
|
||||
add_definitions(-DHAVE_STRUCT_TIMESPEC) # this is for pthread.h
|
||||
if(WARNINGS_AS_ERRORS)
|
||||
set(WARNING_FLAGS "${WARNING_FLAGS} /WX")
|
||||
endif(WARNINGS_AS_ERRORS)
|
||||
endif()
|
||||
|
||||
if(NATIVE_BUILD)
|
||||
set(RADIOLIB_NATIVE_SRC ${SRC})
|
||||
|
||||
# Pack all radio sources into an object lib
|
||||
add_library(radiolib_native OBJECT EXCLUDE_FROM_ALL
|
||||
${RADIOLIB_NATIVE_SRC}
|
||||
)
|
||||
|
||||
# Add SIMU and NATIVE_THREAD here PUBLIC, so it can be imported by other targets
|
||||
# via INTERFACE_COMPILE_OPTIONS
|
||||
target_compile_options(radiolib_native PUBLIC -DSIMU -DNATIVE_THREADS)
|
||||
target_sources(radiolib_native PUBLIC
|
||||
os/async_native.cpp
|
||||
os/sleep_native.cpp
|
||||
os/task_native.cpp
|
||||
os/time_native.cpp
|
||||
os/timer_native.cpp
|
||||
)
|
||||
add_dependencies(radiolib_native ${RADIO_DEPENDENCIES})
|
||||
set_property(TARGET radiolib_native PROPERTY POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
add_subdirectory(targets/simu)
|
||||
|
||||
if(NOT WASI)
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(SRC ${SRC} ${FIRMWARE_SRC})
|
||||
|
||||
##### firmware target #####
|
||||
|
||||
if(NATIVE_BUILD)
|
||||
message(STATUS "firmware target disabled")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Silence CMake 2.8+ warning about unused variable (ie. if specified when not relevant)
|
||||
set(ignore_USE_UNSUPPORTED_TOOLCHAIN "${USE_UNSUPPORTED_TOOLCHAIN}")
|
||||
|
||||
if(NOT USE_UNSUPPORTED_TOOLCHAIN AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "14.2.1")
|
||||
message("CPP Compiler: ${CMAKE_CXX_COMPILER}, version ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
message(FATAL_ERROR "Only Arm GNU Toolchain version 14.2.rel1 is supported!!")
|
||||
endif()
|
||||
|
||||
enable_language(ASM)
|
||||
|
||||
set(CMAKE_C_FLAGS "${FIRMWARE_C_FLAGS}")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${FIRMWARE_C_FLAGS_DEBUG}")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${FIRMWARE_C_FLAGS}")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${FIRMWARE_CXX_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${FIRMWARE_CXX_FLAGS_DEBUG}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${FIRMWARE_CXX_FLAGS}")
|
||||
|
||||
find_program(BASH bash
|
||||
HINTS "c:/cygwin/bin/" "c:/msys/bin/"
|
||||
DOC "bash shell for firmware size report (eg. c:/cygwin/bin/bash.exe on Windows)."
|
||||
)
|
||||
|
||||
set(OPT "s" CACHE STRING "Optimization mode (0/1/2/s)")
|
||||
|
||||
set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst")
|
||||
set(COMMON_FLAGS "${COMMON_FLAGS} -gdwarf-2 -fno-exceptions -fdata-sections -ffunction-sections")
|
||||
set(COMMON_FLAGS "${COMMON_FLAGS} -DHSE_VALUE=${HSE_VALUE}")
|
||||
set(COMMON_FLAGS "${COMMON_FLAGS} -O${OPT} ${FPU_FLAGS}")
|
||||
set(COMMON_FLAGS "${COMMON_FLAGS} ${WARNING_FLAGS}")
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS} -Wimplicit")
|
||||
|
||||
# "-Wno-register" because ${THIRDPARTY_DIR}/STM32F2xx_HAL_Driver uses invalid C++17 storage class specifier
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS} -fno-rtti -Wno-register")
|
||||
|
||||
if(SDRAM)
|
||||
# Target with SDRAM do not need a custom allocator for now
|
||||
# as the custom allocator has alignement issues
|
||||
message("Target has SDRAM, do not use BIN_ALLOCATOR")
|
||||
else()
|
||||
# Nano's malloc does work well with lua, use our own
|
||||
add_definitions(-DUSE_CUSTOM_ALLOCATOR)
|
||||
set(SRC ${SRC} lua/custom_allocator.cpp)
|
||||
endif()
|
||||
|
||||
# Bootloader
|
||||
if(BOOTLOADER)
|
||||
add_subdirectory(bootloader)
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}/bootloader)
|
||||
set(RADIO_DEPENDENCIES ${RADIO_DEPENDENCIES} bootloader)
|
||||
endif()
|
||||
|
||||
add_executable(firmware ${SRC})
|
||||
link_libraries(firmware -lstdc++)
|
||||
add_dependencies(firmware ${RADIO_DEPENDENCIES})
|
||||
set_target_properties(firmware PROPERTIES EXCLUDE_FROM_ALL TRUE)
|
||||
|
||||
if(ARCH STREQUAL ARM)
|
||||
target_link_libraries(firmware PRIVATE cmsis)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(board PUBLIC FREE_RTOS)
|
||||
target_compile_definitions(board_lib PUBLIC FREE_RTOS)
|
||||
target_compile_definitions(firmware PUBLIC FREE_RTOS)
|
||||
target_compile_definitions(stm32_drivers_w_dbg_fw PUBLIC FREE_RTOS)
|
||||
|
||||
target_sources(firmware PUBLIC
|
||||
os/async_freertos.cpp
|
||||
os/sleep_freertos.cpp
|
||||
os/task_freertos.cpp
|
||||
os/time_freertos.cpp
|
||||
os/timer_freertos.cpp
|
||||
)
|
||||
|
||||
if(DEBUG)
|
||||
target_compile_definitions(board PRIVATE -DDEBUG)
|
||||
target_compile_definitions(firmware PRIVATE -DDEBUG)
|
||||
target_compile_definitions(stm32_drivers_w_dbg_fw PRIVATE -DDEBUG)
|
||||
endif()
|
||||
|
||||
set(LINKER_SCRIPT firmware.ld)
|
||||
|
||||
if(USE_FW_LTO)
|
||||
message("-- Use LTO to compile firmware")
|
||||
target_compile_options(firmware PRIVATE -flto)
|
||||
target_link_options(firmware PRIVATE -Wl,-u,SystemCoreClockUpdate)
|
||||
endif()
|
||||
|
||||
target_link_options(firmware PRIVATE
|
||||
-lm -T${LINKER_DIR}/${LINKER_SCRIPT}
|
||||
-Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections
|
||||
)
|
||||
|
||||
if(NANO)
|
||||
target_link_options(firmware PRIVATE
|
||||
--specs=nano.specs
|
||||
)
|
||||
endif()
|
||||
|
||||
if (DEFINED TARGET_FLASH_SIZE)
|
||||
# message("TARGET_FLASH_SIZE = ${TARGET_FLASH_SIZE}")
|
||||
target_link_options(firmware PRIVATE
|
||||
-Wl,--defsym=__flash_size=${TARGET_FLASH_SIZE}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (DEFINED TARGET_EXTRAM_START)
|
||||
target_link_options(firmware PRIVATE
|
||||
-Wl,--defsym=__EXTRAM_START__=${TARGET_EXTRAM_START}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (DEFINED TARGET_EXTRAM_SIZE)
|
||||
target_link_options(firmware PRIVATE
|
||||
-Wl,--defsym=__EXTRAM_SIZE__=${TARGET_EXTRAM_SIZE}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (DEFINED TARGET_PSRAM_START)
|
||||
target_link_options(firmware PRIVATE
|
||||
-Wl,--defsym=__PSRAM_START__=${TARGET_PSRAM_START}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (LUA)
|
||||
# Lua needs %g and %f
|
||||
target_link_options(firmware PRIVATE
|
||||
"SHELL:-u _printf_float" "SHELL:-u _scanf_float"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(ACCESS_DENIED)
|
||||
add_subdirectory(thirdparty/AccessDenied)
|
||||
include_directories(thirdparty/AccessDenied)
|
||||
target_link_libraries(firmware PRIVATE AccessDenied)
|
||||
endif()
|
||||
|
||||
if(FIRMWARE_STRIP_BOOTLOADER)
|
||||
# Strip bootloader from binary
|
||||
message("-- Strip bootloader from firmware binary")
|
||||
set(OBJCOPY_ARGS -R .bootloader)
|
||||
else()
|
||||
message("-- Bootloader contained in firmware binary")
|
||||
endif()
|
||||
|
||||
if(FIRMWARE_FORMAT_UF2)
|
||||
if(VERSION_TAG)
|
||||
set(UF2_VERSION_STRING "edgetx-${VERSION_TAG} (${GIT_STR})")
|
||||
else()
|
||||
set(UF2_VERSION_STRING "edgetx-${VERSION_PREFIX}${VERSION}${VERSION_SUFFIX} (${GIT_STR})")
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
TARGET firmware POST_BUILD
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/elf2uf2.py
|
||||
--reboot auto --device "${FLAVOUR}"
|
||||
--version "${UF2_VERSION_STRING}"
|
||||
-i firmware.elf firmware.uf2
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
VERBATIM
|
||||
)
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
TARGET firmware POST_BUILD
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary ${OBJCOPY_ARGS} firmware.elf firmware.bin
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
|
||||
find_program(GAWK gawk
|
||||
HINTS "c:/cygwin/bin/" "c:/msys/bin/"
|
||||
DOC "gawk for firmware size report.") # OS X might only have "awk"
|
||||
|
||||
if (BASH AND GAWK)
|
||||
add_custom_target(firmware-size
|
||||
COMMAND ${BASH} -kc '${RADIO_DIRECTORY}/util/elf-size-report.sh --mcu=${CPU_TYPE_FULL} ${SIZE_TARGET_MEM_DEFINE} firmware.elf'
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
else()
|
||||
add_custom_target(firmware-size
|
||||
COMMAND ${CMAKE_SIZE_UTIL} -A firmware.elf
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CPU_FAMILY STREQUAL STM32)
|
||||
add_custom_target(flash
|
||||
COMMAND dfu-util --alt 0 --dfuse-address 0x08000000:leave -d 0483:df11 -D firmware.bin
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
add_custom_target(flash-bl
|
||||
COMMAND dfu-util --alt 0 --dfuse-address 0x08000000:leave -d 0483:df11 -D bootloader.bin
|
||||
DEPENDS bootloader
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
add_custom_target(flash-jtag
|
||||
COMMAND st-flash --reset write firmware.bin 0x8000000
|
||||
DEPENDS firmware
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
add_custom_target(flash-stlink
|
||||
COMMAND ST-LINK_CLI -c SWD -P firmware.bin 0x8000000 -Rst -Q
|
||||
DEPENDS firmware-size
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
endif()
|
||||
|
||||
PrintTargetReport("firmware")
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTx
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
// Avoid using any other header file
|
||||
#include <stdint.h>
|
||||
extern uint32_t SystemCoreClock;
|
||||
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_IDLE_HOOK 0
|
||||
#if defined(COLORLCD)
|
||||
#define configUSE_TICK_HOOK 1
|
||||
#else
|
||||
#define configUSE_TICK_HOOK 0
|
||||
#endif
|
||||
#define configCPU_CLOCK_HZ ( SystemCoreClock )
|
||||
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
|
||||
#define configMAX_PRIORITIES ( 5 )
|
||||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 30 )
|
||||
// static memory is used instead
|
||||
// #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 75 * 1024 ) )
|
||||
#define configUSE_16_BIT_TICKS 0
|
||||
#define configIDLE_SHOULD_YIELD 1
|
||||
// Use notifications
|
||||
#define configUSE_MUTEXES 1
|
||||
#define configQUEUE_REGISTRY_SIZE 0
|
||||
#define configUSE_RECURSIVE_MUTEXES 0
|
||||
#define configUSE_MALLOC_FAILED_HOOK 0
|
||||
#define configUSE_APPLICATION_TASK_TAG 0
|
||||
#define configUSE_COUNTING_SEMAPHORES 0
|
||||
#define configGENERATE_RUN_TIME_STATS 0
|
||||
#define configUSE_TIMERS 1
|
||||
|
||||
#if !defined(DEBUG)
|
||||
#define configMAX_TASK_NAME_LEN 4
|
||||
#define configUSE_TRACE_FACILITY 0
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||
#else
|
||||
#define configMAX_TASK_NAME_LEN 10
|
||||
#define configUSE_TRACE_FACILITY 1
|
||||
#define configCHECK_FOR_STACK_OVERFLOW 0
|
||||
#endif
|
||||
|
||||
#define configSUPPORT_DYNAMIC_ALLOCATION 0
|
||||
#define configSUPPORT_STATIC_ALLOCATION 1
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Software timer definitions. */
|
||||
#define configTIMER_TASK_PRIORITY ( 2 )
|
||||
#define configTIMER_QUEUE_LENGTH 20
|
||||
#define configTIMER_TASK_STACK_DEPTH ( 1024 )
|
||||
|
||||
/* Set the following definitions to 1 to include the API function, or zero
|
||||
to exclude the API function. */
|
||||
#define INCLUDE_vTaskDelete 1
|
||||
#define INCLUDE_vTaskSuspend 1
|
||||
#define INCLUDE_vTaskDelayUntil 1
|
||||
#define INCLUDE_vTaskDelay 1
|
||||
#define INCLUDE_xTimerPendFunctionCall 1
|
||||
#define INCLUDE_uxTaskGetStackHighWaterMark 1
|
||||
|
||||
#if defined(THREADSAFE_MALLOC)
|
||||
#define INCLUDE_xTaskGetSchedulerState 1
|
||||
#endif
|
||||
|
||||
#if defined(CLI)
|
||||
// required for stream buffers
|
||||
#define INCLUDE_xTaskGetCurrentTaskHandle 1
|
||||
#endif
|
||||
|
||||
/* Cortex-M specific definitions. */
|
||||
#ifdef __NVIC_PRIO_BITS
|
||||
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
|
||||
#define configPRIO_BITS __NVIC_PRIO_BITS
|
||||
#else
|
||||
#define configPRIO_BITS 4 /* 15 priority levels */
|
||||
#endif
|
||||
|
||||
/* The lowest interrupt priority that can be used in a call to a "set priority"
|
||||
function. */
|
||||
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf
|
||||
|
||||
/* The highest interrupt priority that can be used by any interrupt service
|
||||
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
|
||||
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
|
||||
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
|
||||
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
|
||||
|
||||
/* Interrupt priorities used by the kernel port layer itself. These are generic
|
||||
to all Cortex-M ports, and do not rely on any particular library functions. */
|
||||
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
|
||||
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
|
||||
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
|
||||
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
|
||||
|
||||
/* Normal assert() semantics without relying on the provision of an assert.h
|
||||
header file. */
|
||||
#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }
|
||||
|
||||
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
|
||||
standard names. */
|
||||
#define vPortSVCHandler SVC_Handler
|
||||
#define xPortPendSVHandler PendSV_Handler
|
||||
#define xPortSysTickHandler SysTick_Handler
|
||||
#if defined(DEBUG_SEGGER_SYSVIEW)
|
||||
#include "SEGGER_SYSVIEW_FreeRTOS.h"
|
||||
#endif
|
||||
@@ -0,0 +1,251 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
//
|
||||
// Data based on MPM firmware version 1.3.4.31 multi.txt
|
||||
//
|
||||
|
||||
#if defined(MULTIMODULE) or defined(SIMU)
|
||||
|
||||
#pragma once
|
||||
|
||||
//
|
||||
// Common list of supported Multi protocols
|
||||
//
|
||||
enum ModuleSubtypeMulti {
|
||||
MODULE_SUBTYPE_MULTI_FIRST = 0,
|
||||
MODULE_SUBTYPE_MULTI_FLYSKY = MODULE_SUBTYPE_MULTI_FIRST,
|
||||
MODULE_SUBTYPE_MULTI_HUBSAN, //1
|
||||
MODULE_SUBTYPE_MULTI_FRSKY, //2
|
||||
MODULE_SUBTYPE_MULTI_HISKY, //3
|
||||
MODULE_SUBTYPE_MULTI_V2X2, //4
|
||||
MODULE_SUBTYPE_MULTI_DSM2, //5
|
||||
MODULE_SUBTYPE_MULTI_DEVO,
|
||||
MODULE_SUBTYPE_MULTI_YD717,
|
||||
MODULE_SUBTYPE_MULTI_KN,
|
||||
MODULE_SUBTYPE_MULTI_SYMAX,
|
||||
MODULE_SUBTYPE_MULTI_SLT, //10
|
||||
MODULE_SUBTYPE_MULTI_CX10,
|
||||
MODULE_SUBTYPE_MULTI_CG023,
|
||||
MODULE_SUBTYPE_MULTI_BAYANG,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX,
|
||||
MODULE_SUBTYPE_MULTI_ESky, //15
|
||||
MODULE_SUBTYPE_MULTI_MT99XX,
|
||||
MODULE_SUBTYPE_MULTI_MJXQ,
|
||||
MODULE_SUBTYPE_MULTI_SHENQI,
|
||||
MODULE_SUBTYPE_MULTI_FY326,
|
||||
MODULE_SUBTYPE_MULTI_FUTABA, //20
|
||||
MODULE_SUBTYPE_MULTI_J6PRO,
|
||||
MODULE_SUBTYPE_MULTI_FQ777,
|
||||
MODULE_SUBTYPE_MULTI_ASSAN,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYV,
|
||||
MODULE_SUBTYPE_MULTI_HONTAI, //25
|
||||
MODULE_SUBTYPE_MULTI_OLRS,
|
||||
MODULE_SUBTYPE_MULTI_FS_AFHDS2A,
|
||||
MODULE_SUBTYPE_MULTI_Q2X2,
|
||||
MODULE_SUBTYPE_MULTI_WK_2X01,
|
||||
MODULE_SUBTYPE_MULTI_Q303, //30
|
||||
MODULE_SUBTYPE_MULTI_GW008,
|
||||
MODULE_SUBTYPE_MULTI_DM002,
|
||||
MODULE_SUBTYPE_MULTI_CABELL,
|
||||
MODULE_SUBTYPE_MULTI_ESKY150,
|
||||
MODULE_SUBTYPE_MULTI_H83D, //35
|
||||
MODULE_SUBTYPE_MULTI_CORONA,
|
||||
MODULE_SUBTYPE_MULTI_CFLIE,
|
||||
MODULE_SUBTYPE_MULTI_HITEC,
|
||||
MODULE_SUBTYPE_MULTI_WFLY,
|
||||
MODULE_SUBTYPE_MULTI_BUGS, //40
|
||||
MODULE_SUBTYPE_MULTI_BUGS_MINI,
|
||||
MODULE_SUBTYPE_MULTI_TRAXXAS,
|
||||
MODULE_SUBTYPE_MULTI_NCC1701,
|
||||
MODULE_SUBTYPE_MULTI_E01X,
|
||||
MODULE_SUBTYPE_MULTI_V911S, //45
|
||||
MODULE_SUBTYPE_MULTI_GD00X,
|
||||
MODULE_SUBTYPE_MULTI_V761,
|
||||
MODULE_SUBTYPE_MULTI_KF606,
|
||||
MODULE_SUBTYPE_MULTI_REDPINE,
|
||||
MODULE_SUBTYPE_MULTI_POTENSIC, //50
|
||||
MODULE_SUBTYPE_MULTI_ZSX,
|
||||
MODULE_SUBTYPE_MULTI_HEIGHT,
|
||||
MODULE_SUBTYPE_MULTI_SCANNER,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX_RX,
|
||||
MODULE_SUBTYPE_MULTI_AFHDS2A_RX, //55
|
||||
MODULE_SUBTYPE_MULTI_HOTT,
|
||||
MODULE_SUBTYPE_MULTI_FX,
|
||||
MODULE_SUBTYPE_MULTI_BAYANG_RX,
|
||||
MODULE_SUBTYPE_MULTI_PELIKAN,
|
||||
MODULE_SUBTYPE_MULTI_EAZYRC, //60
|
||||
MODULE_SUBTYPE_MULTI_XK,
|
||||
MODULE_SUBTYPE_MULTI_XN297DUMP,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX2,
|
||||
MODULE_SUBTYPE_MULTI_FRSKY_R9,
|
||||
MODULE_SUBTYPE_MULTI_PROPEL, //65
|
||||
MODULE_SUBTYPE_MULTI_FRSKYL,
|
||||
MODULE_SUBTYPE_MULTI_SKYARTEC,
|
||||
MODULE_SUBTYPE_MULTI_ESKY150V2,
|
||||
MODULE_SUBTYPE_MULTI_DSM_RX,
|
||||
MODULE_SUBTYPE_MULTI_JJRC345, //70
|
||||
MODULE_SUBTYPE_MULTI_Q90C,
|
||||
MODULE_SUBTYPE_MULTI_KYOSHO,
|
||||
MODULE_SUBTYPE_MULTI_RLINK,
|
||||
MODULE_SUBTYPE_MULTI_ELRS,
|
||||
MODULE_SUBTYPE_MULTI_REALACC, //75
|
||||
MODULE_SUBTYPE_MULTI_OMP,
|
||||
MODULE_SUBTYPE_MULTI_MLINK,
|
||||
MODULE_SUBTYPE_MULTI_WFLY2,
|
||||
MODULE_SUBTYPE_MULTI_E016HV2,
|
||||
MODULE_SUBTYPE_MULTI_E010R5, //80
|
||||
MODULE_SUBTYPE_MULTI_LOLI,
|
||||
MODULE_SUBTYPE_MULTI_E129,
|
||||
MODULE_SUBTYPE_MULTI_JOYSWAY,
|
||||
MODULE_SUBTYPE_MULTI_E016H,
|
||||
MODULE_SUBTYPE_MULTI_CONFIG, //85
|
||||
MODULE_SUBTYPE_MULTI_IKEAANSLUTA,
|
||||
MODULE_SUBTYPE_MULTI_WILLIFM,
|
||||
MODULE_SUBTYPE_MULTI_LOSI,
|
||||
MODULE_SUBTYPE_MULTI_MOULDKG,
|
||||
MODULE_SUBTYPE_MULTI_XERALL, //90
|
||||
MODULE_SUBTYPE_MULTI_MT99XX2,
|
||||
MODULE_SUBTYPE_MULTI_KYOSHO2,
|
||||
MODULE_SUBTYPE_MULTI_SCORPIO,
|
||||
MODULE_SUBTYPE_MULTI_BLUEFLY,
|
||||
MODULE_SUBTYPE_MULTI_BUMBLEB, //95
|
||||
MODULE_SUBTYPE_MULTI_SGF22,
|
||||
MODULE_SUBTYPE_MULTI_KYOSHO3,
|
||||
MODULE_SUBTYPE_MULTI_XK2,
|
||||
MODULE_SUBTYPE_MULTI_YUXIANG,
|
||||
MODULE_SUBTYPE_MULTI_PINECON, //100
|
||||
MODULE_SUBTYPE_MULTI_JIABAILE,
|
||||
MODULE_SUBTYPE_MULTI_H36,
|
||||
//
|
||||
// spare entries - don't touch,
|
||||
// just add to known protocols
|
||||
//
|
||||
MODULE_SUBTYPE_MULTI_NN1,
|
||||
MODULE_SUBTYPE_MULTI_NN2,
|
||||
MODULE_SUBTYPE_MULTI_NN3,
|
||||
MODULE_SUBTYPE_MULTI_NN4,
|
||||
MODULE_SUBTYPE_MULTI_NN5,
|
||||
MODULE_SUBTYPE_MULTI_NN6,
|
||||
MODULE_SUBTYPE_MULTI_NN7,
|
||||
MODULE_SUBTYPE_MULTI_NN8,
|
||||
MODULE_SUBTYPE_MULTI_NN9,
|
||||
MODULE_SUBTYPE_MULTI_NN10,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_NN10,
|
||||
//
|
||||
// Sentinel
|
||||
//
|
||||
MODULE_SUBTYPE_MULTI_SENTINEL = 0xfe,
|
||||
//
|
||||
// most likely no longer required
|
||||
//
|
||||
MM_RF_CUSTOM_SELECTED = 0xff
|
||||
};
|
||||
|
||||
//
|
||||
// Common list of Multi protocol names. Needs to match enum ModuleSubtypeMulti
|
||||
//
|
||||
#define KNOWN_PROTO_NAMES \
|
||||
"FlySky","Hubsan","FrSky D","Hisky","V2x2","DSM","Devo","YD717","KN","SymaX",\
|
||||
"SLT","CX10","CG023","Bayang","FrSky X","ESky","MT99XX","MJXq","Shenqi","FY326",\
|
||||
"Futaba","J6 Pro","FQ777","Assan","FrSky V","Hontai","OpenLrs","FlSky2A","Q2x2","Walkera", \
|
||||
"Q303","GW008","DM002","Cabell","Esky150","H8 3D","Corona","CFlie","Hitec","WFLY",\
|
||||
"Bugs","BugMini","Traxxas","NCC1701","E01X","V911S","GD00X","V761","KF606","Redpine",\
|
||||
"Potensi","ZSX","Height","Scanner","FrSkyRX","FS2A_RX","HoTT","FX","BayanRX","Pelikan",\
|
||||
"EazyRC", "XK","XN297DU","FrSkyX2","FrSkyR9","Propel","FrSky L","Skyartc","ESkyV2","DSM_RX",\
|
||||
"JJRC345","Q90C","Kyosho","RadLink","ExpLRS","Realacc","OMP","M-Link","WFLY2","E016Hv2",\
|
||||
"E010r5","LOLI","E129","JOYSWAY","E016H","Config","IKEA","WILLIFM","Losi","MouldKg",\
|
||||
"Xerall","MT99XX2","Kyosho2","Scorpio","BlueFly","BumbleB","SGF22","Kyosho3","XK2",\
|
||||
"YuXiang","Pinecon","JIABAILE","H36"
|
||||
#define SPARE_PROTO_NAMES \
|
||||
"NN 1","NN 2","NN 3","NN 4","NN 5","NN 6","NN 7","NN 8","NN 9","NN 10"
|
||||
#define SPARE_SUBTYPE_NAMES \
|
||||
"SUB 1","SUB 2","SUB 3","SUB 4","SUB 5","SUB 6","SUB 7","SUB 8"
|
||||
#define PROTO_NAMES KNOWN_PROTO_NAMES,SPARE_PROTO_NAMES
|
||||
|
||||
//
|
||||
// Common list of option names. Needs to match inline void getMultiOptionValues cases.
|
||||
//
|
||||
#define BAYANG_OPTION_TELEMETRY_NAMES "Off","On","Off+Aux","On+Aux"
|
||||
#define DSM2_OPTION_SERVOFREQ_NAMES "22ms","11ms"
|
||||
#define DSM_CLONE_NAMES "Normal","Cloned"
|
||||
|
||||
//
|
||||
// Common list of protocols the MPM doesn't allow to be selected (not sent by MPM protocol scan)
|
||||
//
|
||||
inline bool isMultiProtocolSelectable(int protocol)
|
||||
{
|
||||
return (protocol != MODULE_SUBTYPE_MULTI_CONFIG &&
|
||||
protocol != MODULE_SUBTYPE_MULTI_SCANNER
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Common protocol specific option values
|
||||
//
|
||||
inline void getMultiOptionValues(int8_t multi_proto, int8_t &min, int8_t &max) {
|
||||
switch (multi_proto) {
|
||||
case MODULE_SUBTYPE_MULTI_DSM2:
|
||||
min = 0; // STR_MULTI_SERVOFREQ: 22ms, 11ms
|
||||
max = 1;
|
||||
break;
|
||||
case MODULE_SUBTYPE_MULTI_BAYANG:
|
||||
min = 0; // STR_MULTI_TELEMETRY: Off, On, Off+AUX, On+Aux
|
||||
max = 3;
|
||||
break;
|
||||
case MODULE_SUBTYPE_MULTI_OLRS:
|
||||
min = -1;
|
||||
max = 7;
|
||||
break;
|
||||
case MODULE_SUBTYPE_MULTI_FS_AFHDS2A:
|
||||
min = 0; // STR_MULTI_SERVOFREQ: (50+optionvalue*5)ms
|
||||
max = 70;
|
||||
break;
|
||||
case MODULE_SUBTYPE_MULTI_XN297DUMP:
|
||||
min = -1;
|
||||
max = 84;
|
||||
break;
|
||||
default:
|
||||
min = -128; // all other option types, e.g STR_MULTI_RFTUNE
|
||||
max = 127;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Out of the ordinary max. numbers of model IDs
|
||||
//
|
||||
#define MODULE_SUBTYPE_MULTI_OLRS_RXNUM 4
|
||||
#define MODULE_SUBTYPE_MULTI_BUGS_RXNUM 15
|
||||
#define MODULE_SUBTYPE_MULTI_BUGS_MINI_RXNUM 15
|
||||
|
||||
//
|
||||
// subtypes for Radiomaster T8 bind key and Radiomaster RTF use.
|
||||
// see defines RTF, BIND_KEY and the protocol subtype list STRLIST()
|
||||
// in MultiSubTypeDefs.h
|
||||
//
|
||||
#define MULTI_FRSKYD_SUBTYPE_D8 0
|
||||
#define MULTI_FRSKYX_SUBTYPE_D16_FCC 0
|
||||
#define MULTI_FRSKYX_SUBTYPE_D16_LBT 2
|
||||
#define MULTI_FRSKYX2_SUBTYPE_D16_FCC 0
|
||||
#define MULTI_FRSKYX2_SUBTYPE_D16_LBT 2
|
||||
|
||||
#endif // MULTIMODULE
|
||||
@@ -0,0 +1,296 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
//
|
||||
// Data based on MPM firmware version 1.3.4.31 multi.txt
|
||||
//
|
||||
|
||||
#if defined(MULTIMODULE) or defined(SIMU)
|
||||
|
||||
#pragma once
|
||||
|
||||
//
|
||||
// Single source of Multi protocol defintions:
|
||||
// - MultiProtoDefs.h contains the protocol list and names as per Multi.txt
|
||||
// Widely used in Companion/Simulator and radio firmware code
|
||||
// - MutliSubtypesDef.h contains subtype definitions and generates data structurse
|
||||
// for Companion and Simulator/radio code in radio/src/gui/gui_common.cpp and
|
||||
// companion/src/firmwares/multiprotocols.cpp
|
||||
//
|
||||
|
||||
//
|
||||
// include list of Multi protocols
|
||||
//
|
||||
#include "MultiProtoDefs.h"
|
||||
|
||||
//
|
||||
// This distinction circumvents the different ways of handling translations of menu texts
|
||||
// and sets the defines STRLIST and PROTODEF such that the correct Companion/Simulator and radio code
|
||||
// data structures are generated
|
||||
//
|
||||
#if defined(CPN)
|
||||
#define STRLIST(x, ...) static const QStringList x __VA_ARGS__;
|
||||
#define PROTODEF const Multiprotocols multiProtocols
|
||||
|
||||
#define STR_MULTI_OPTION QT_TRANSLATE_NOOP("Multiprotocols", "Option value")
|
||||
#define STR_MULTI_RFTUNE QT_TRANSLATE_NOOP("Multiprotocols", "CC2500 frequency fine tune")
|
||||
#define STR_MULTI_VIDFREQ QT_TRANSLATE_NOOP("Multiprotocols", "Video TX frequency")
|
||||
#define STR_MULTI_FIXEDID QT_TRANSLATE_NOOP("Multiprotocols", "Fixed ID value")
|
||||
#define STR_MULTI_TELEMETRY QT_TRANSLATE_NOOP("Multiprotocols", "Telemetry")
|
||||
#define STR_MULTI_SERVOFREQ QT_TRANSLATE_NOOP("Multiprotocols", "Servo update rate")
|
||||
#define STR_MULTI_MAX_THROW QT_TRANSLATE_NOOP("Multiprotocols", "Enable max throw")
|
||||
#define STR_MULTI_RFCHAN QT_TRANSLATE_NOOP("Multiprotocols", "Select RF channel")
|
||||
#define STR_MULTI_RFPOWER QT_TRANSLATE_NOOP("Multiprotocols", "RF power")
|
||||
|
||||
#define STR_MULTI_DEFAULT QT_TRANSLATE_NOOP("Multiprotocols", "DEFAULT")
|
||||
STRLIST(NO_SUBTYPE, {STR_MULTI_DEFAULT})
|
||||
#define STR_DEF(x) x
|
||||
#elif defined(MULTIMODULE)
|
||||
#define STRLIST(x, ...) const char* const x[] = __VA_ARGS__;
|
||||
#define PROTODEF(...) const mm_protocol_definition multi_protocols[] = __VA_ARGS__
|
||||
|
||||
STR_TYP const mm_options_strings::options[] = {
|
||||
nullptr,
|
||||
STR_DEF(STR_MULTI_OPTION),
|
||||
STR_DEF(STR_MULTI_RFTUNE),
|
||||
STR_DEF(STR_MULTI_VIDFREQ),
|
||||
STR_DEF(STR_MULTI_FIXEDID),
|
||||
STR_DEF(STR_MULTI_TELEMETRY),
|
||||
STR_DEF(STR_MULTI_SERVOFREQ),
|
||||
STR_DEF(STR_MULTI_MAX_THROW),
|
||||
STR_DEF(STR_MULTI_RFCHAN),
|
||||
STR_DEF(STR_MULTI_RFPOWER),
|
||||
STR_DEF(STR_MULTI_WBUS) // probably not used by MPM anymore
|
||||
};
|
||||
|
||||
#define NO_SUBTYPE nullptr
|
||||
#else
|
||||
#define STRLIST(x, ...)
|
||||
#define PROTODEF(...)
|
||||
#endif
|
||||
|
||||
//
|
||||
// Common definitions of Multi protocol subtype options (only for protocols that do have subtypes)
|
||||
//
|
||||
STRLIST(STR_SUBTYPE_FLYSKY, {"Flysky","V9x9","V6x6","V912","CX20"})
|
||||
STRLIST(STR_SUBTYPE_HUBSAN, {"H107","H301","H501"})
|
||||
STRLIST(STR_SUBTYPE_FRSKYD, {"D8","Cloned"})
|
||||
STRLIST(STR_SUBTYPE_FRSKYX, {"CH_16","CH_8","EU_16","EU_8","Cloned","Clon_8"})
|
||||
STRLIST(STR_SUBTYPE_HISKY, {"Hisky","HK310"})
|
||||
STRLIST(STR_SUBTYPE_V2X2, {"Std","JXD506","MR101"})
|
||||
STRLIST(STR_SUBTYPE_DSM, {"DSM2_1F","DSM2_2F","DSMX_1F","DSMX_2F","AUTO","DSMR_1F","DSMR","DSM2_SFC"})
|
||||
STRLIST(STR_SUBTYPE_DEVO, {"8ch","10ch","12ch","6ch","7ch"})
|
||||
STRLIST(STR_SUBTYPE_YD717, {"Std","SkyWlkr","Syma X4","XINXUN","NIHUI"})
|
||||
STRLIST(STR_SUBTYPE_KN, {"WLtoys","FeiLun"})
|
||||
STRLIST(STR_SUBTYPE_SYMAX, {"Std","X5C"})
|
||||
STRLIST(STR_SUBTYPE_SLT, {"SLT_V1","SLT_V2","Q100","Q200","MR100","V1_4CH","RF_SIM"})
|
||||
STRLIST(STR_SUBTYPE_CX10, {"Green","Blue","DM007","-","JC3015a","JC3015b","MK33041"})
|
||||
STRLIST(STR_SUBTYPE_CG023, {"Std","YD829"})
|
||||
STRLIST(STR_SUBTYPE_BAYANG, {"Std","H8S3D","X16 AH","IRDrone","DHD D4","QX100"})
|
||||
STRLIST(STR_SUBTYPE_ESky, {"Std","ET4"})
|
||||
STRLIST(STR_SUBTYPE_MT99, {"MT","H7","YZ","LS","FY805","A180","Dragon","F949G"})
|
||||
STRLIST(STR_SUBTYPE_MJXQ, {"WLH08","X600","X800","H26D","E010","H26WH","PHOENIX"})
|
||||
STRLIST(STR_SUBTYPE_FY326, {"FY326","FY319"})
|
||||
STRLIST(STR_SUBTYPE_FUTABA, {"SFHSS"})
|
||||
STRLIST(STR_SUBTYPE_HONTAI, {"HONTAI","JJRCX1","X5C1","FQ777_951","XKK170"})
|
||||
STRLIST(STR_SUBTYPE_AFHDS2A, {"PWM_IBUS","PPM_IBUS","PWM_SBUS","PPM_SBUS","PWM_IB16","PPM_IB16","PWM_SB16","PPM_SB16"})
|
||||
STRLIST(STR_SUBTYPE_Q2X2, {"Q222","Q242","Q282"})
|
||||
STRLIST(STR_SUBTYPE_WK2x01, {"WK2801","WK2401","W6_5_1","W6_6_1","W6_HEL","W6_HEL_I"})
|
||||
STRLIST(STR_SUBTYPE_Q303, {"Q303","CX35","CX10D","CX10WD"})
|
||||
STRLIST(STR_SUBTYPE_CABELL, {"CAB_V3","C_TELEM","-","-","-","-","F_SAFE","UNBIND"})
|
||||
STRLIST(STR_SUBTYPE_ESKY150, {"4ch","7ch"})
|
||||
STRLIST(STR_SUBTYPE_H83D, {"H8_3D","H20H","H20Mini","H30Mini"})
|
||||
STRLIST(STR_SUBTYPE_CORONA, {"COR_V1","COR_V2","FD_V3"})
|
||||
STRLIST(STR_SUBTYPE_HITEC, {"OPT_FW","OPT_HUB","MINIMA"})
|
||||
STRLIST(STR_SUBTYPE_WFLY, {"WFR0x"})
|
||||
STRLIST(STR_SUBTYPE_BUGS_MINI, {"BUGSMINI","BUGS3H"})
|
||||
STRLIST(STR_SUBTYPE_TRAXXAS, {"TQ"})
|
||||
STRLIST(STR_SUBTYPE_E01X, {"E012","E015"})
|
||||
STRLIST(STR_SUBTYPE_V911S, {"V911S","E119"})
|
||||
STRLIST(STR_SUBTYPE_GD00X, {"GD_V1","GD_V2"})
|
||||
STRLIST(STR_SUBTYPE_V761, {"3ch","4ch","TOPRC"})
|
||||
STRLIST(STR_SUBTYPE_KF606, {"KF606","MIG320","ZCZ50"})
|
||||
STRLIST(STR_SUBTYPE_REDPINE, {"Fast","Slow"})
|
||||
STRLIST(STR_SUBTYPE_POTENSIC, {"A20"})
|
||||
STRLIST(STR_SUBTYPE_ZSX, {"280"})
|
||||
STRLIST(STR_SUBTYPE_HEIGHT, {"5ch","8ch"})
|
||||
STRLIST(STR_SUBTYPE_FRSKYX_RX, {"Multi","CloneTX","EraseTX","CPPM"})
|
||||
STRLIST(STR_SUBTYPE_HOTT, {"Sync","No_Sync"})
|
||||
STRLIST(STR_SUBTYPE_FX, {"816","620","9630","Q560"})
|
||||
STRLIST(STR_SUBTYPE_PELIKAN, {"Pro","Lite","SCX24"})
|
||||
STRLIST(STR_SUBTYPE_XK, {"X450","X420","Cars"})
|
||||
STRLIST(STR_SUBTYPE_XN297DUMP, {"250K","1M","2M","AUTO"})
|
||||
STRLIST(STR_SUBTYPE_FRSKYX2, {"CH_16","CH_8","EU_16","EU_8","Cloned"})
|
||||
STRLIST(STR_SUBTYPE_FRSKYR9, {"915MHz","868MHz","915_8ch","868_8ch","FCC","--","FCC_8ch","--_8ch"})
|
||||
STRLIST(STR_SUBTYPE_PROPEL, {"74-Z"})
|
||||
STRLIST(STR_SUBTYPE_FRSKYL, {"LR12","LR12_6ch"})
|
||||
STRLIST(STR_SUBTYPE_ESKY150V2, {"150V2"})
|
||||
STRLIST(STR_SUBTYPE_JJRC345, {"JJRC345","SkyTmblr"})
|
||||
STRLIST(STR_SUBTYPE_KYOSHO, {"FHSS","Hype"})
|
||||
STRLIST(STR_SUBTYPE_KYOSHO2, {"KT-17"})
|
||||
STRLIST(STR_SUBTYPE_RLINK, {"Surface","Air","DumboRC","RC4G"})
|
||||
STRLIST(STR_SUBTYPE_ELRS, {"N/A WIP"})
|
||||
STRLIST(STR_SUBTYPE_REALACC, {"R11"})
|
||||
STRLIST(STR_SUBTYPE_WFLY2, {"RF20x"})
|
||||
STRLIST(STR_SUBTYPE_E016HV2, {"E016Hv2"})
|
||||
STRLIST(STR_SUBTYPE_MOULDKG, {"Analog","Digital"})
|
||||
STRLIST(STR_SUBTYPE_MT992, {"PA18","SU35"})
|
||||
STRLIST(STR_SUBTYPE_RX, {"Multi","CPPM"})
|
||||
STRLIST(STR_SUBTYPE_DSM_RX, {"Multi","CloneTX","EraseTX","CPPM"})
|
||||
STRLIST(STR_SUBTYPE_E129, {"STD","C186"})
|
||||
STRLIST(STR_SUBTYPE_SFG22, {"F22","F22S","J20"})
|
||||
STRLIST(STR_SUBTYPE_XK2, {"X4","P10"})
|
||||
STRLIST(STR_SUBTYPE_JIABAILE, {"STD","GYRO"})
|
||||
|
||||
//
|
||||
// Generic subtypes for future use protocols - don't touch
|
||||
//
|
||||
STRLIST(STR_SUBTYPE_NN, { SPARE_SUBTYPE_NAMES })
|
||||
|
||||
//
|
||||
// Common data structure defining Multi protocol capabilites, i.e. number of subtypes,
|
||||
// failsafe support yes/no, channel map disabled yes/no, reference to the subtype options strings above
|
||||
// and further protocol options, e.g. RF tune, video frequency.
|
||||
//
|
||||
PROTODEF ({
|
||||
{MODULE_SUBTYPE_MULTI_FLYSKY, 4, false, true, STR_SUBTYPE_FLYSKY, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HUBSAN, 2, false, false, STR_SUBTYPE_HUBSAN, STR_DEF(STR_MULTI_VIDFREQ)},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKY, 1, false, false, STR_SUBTYPE_FRSKYD, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_HISKY, 1, true, true, STR_SUBTYPE_HISKY, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_V2X2, 2, false, false, STR_SUBTYPE_V2X2, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_DSM2, 7, false, true, STR_SUBTYPE_DSM, STR_DEF(STR_MULTI_MAX_THROW)},
|
||||
{MODULE_SUBTYPE_MULTI_DEVO, 4, true, true, STR_SUBTYPE_DEVO, STR_DEF(STR_MULTI_FIXEDID)},
|
||||
{MODULE_SUBTYPE_MULTI_YD717, 4, false, false, STR_SUBTYPE_YD717, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_KN, 1, false, false, STR_SUBTYPE_KN, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_SYMAX, 1, false, false, STR_SUBTYPE_SYMAX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_SLT, 6, false, true, STR_SUBTYPE_SLT, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_CX10, 6, false, false, STR_SUBTYPE_CX10, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_CG023, 1, false, false, STR_SUBTYPE_CG023, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_BAYANG, 5, false, false, STR_SUBTYPE_BAYANG, STR_DEF(STR_MULTI_TELEMETRY)},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX, 5, true, false, STR_SUBTYPE_FRSKYX, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_ESky, 1, false, true, STR_SUBTYPE_ESky, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_MT99XX, 7, false, false, STR_SUBTYPE_MT99, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_MJXQ, 6, false, false, STR_SUBTYPE_MJXQ, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_SHENQI, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FY326, 1, false, false, STR_SUBTYPE_FY326, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FUTABA, 0, true, true, STR_SUBTYPE_FUTABA, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_J6PRO, 0, false, true, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FQ777, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_ASSAN, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYV, 0, false, false, NO_SUBTYPE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_HONTAI, 4, false, false, STR_SUBTYPE_HONTAI, nullptr},
|
||||
// MODULE_SUBTYPE_MULTI_OLRS non selectable and masked out for selection
|
||||
{MODULE_SUBTYPE_MULTI_FS_AFHDS2A, 7, true, true, STR_SUBTYPE_AFHDS2A, STR_DEF(STR_MULTI_SERVOFREQ)},
|
||||
{MODULE_SUBTYPE_MULTI_Q2X2, 2, false, false, STR_SUBTYPE_Q2X2, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_WK_2X01, 5, true, true, STR_SUBTYPE_WK2x01, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_Q303, 3, false, false, STR_SUBTYPE_Q303, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_GW008, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_DM002, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_CABELL, 7, false, false, STR_SUBTYPE_CABELL, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_ESKY150, 1, false, false, STR_SUBTYPE_ESKY150, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_H83D, 3, false, false, STR_SUBTYPE_H83D, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_CORONA, 2, false, false, STR_SUBTYPE_CORONA, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
// MODULE_SUBTYPE_MULTI_CFLIE non selectable and masked out for selection
|
||||
{MODULE_SUBTYPE_MULTI_HITEC, 2, false, false, STR_SUBTYPE_HITEC, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_WFLY, 0, true, false, STR_SUBTYPE_WFLY, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_BUGS, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_BUGS_MINI, 1, false, false, STR_SUBTYPE_BUGS_MINI, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_TRAXXAS, 0, false, false, STR_SUBTYPE_TRAXXAS, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_NCC1701, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E01X, 1, false, false, STR_SUBTYPE_E01X, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_V911S, 1, false, false, STR_SUBTYPE_V911S, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_GD00X, 1, false, false, STR_SUBTYPE_GD00X, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_V761, 2, false, false, STR_SUBTYPE_V761, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_KF606, 2, false, false, STR_SUBTYPE_KF606, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_REDPINE, 1, false, false, STR_SUBTYPE_REDPINE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_POTENSIC, 0, false, false, STR_SUBTYPE_POTENSIC, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_ZSX, 0, false, false, STR_SUBTYPE_ZSX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HEIGHT, 1, false, false, STR_SUBTYPE_HEIGHT, nullptr},
|
||||
// MODULE_SUBTYPE_MULTI_SCANNER non selectable and masked out for selection
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX_RX, 3, false, false, STR_SUBTYPE_FRSKYX_RX, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_AFHDS2A_RX, 1, false, false, STR_SUBTYPE_RX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HOTT, 1, true, false, STR_SUBTYPE_HOTT, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_FX, 3, false, false, STR_SUBTYPE_FX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_BAYANG_RX, 1, false, false, STR_SUBTYPE_RX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_PELIKAN, 2, false, true, STR_SUBTYPE_PELIKAN, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_EAZYRC, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_XK, 2, false, false, STR_SUBTYPE_XK, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_XN297DUMP, 3, false, false, STR_SUBTYPE_XN297DUMP, STR_DEF(STR_MULTI_RFCHAN)},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX2, 4, true, false, STR_SUBTYPE_FRSKYX2, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKY_R9, 7, true, false, STR_SUBTYPE_FRSKYR9, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_PROPEL, 0, false, false, STR_SUBTYPE_PROPEL, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYL, 1, false, false, STR_SUBTYPE_FRSKYL, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_SKYARTEC, 0, false, true, NO_SUBTYPE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_ESKY150V2, 0, false, true, STR_SUBTYPE_ESKY150V2, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_DSM_RX, 3, false, true, STR_SUBTYPE_DSM_RX, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_JJRC345, 1, false, false, STR_SUBTYPE_JJRC345, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_Q90C, 0, false, false, NO_SUBTYPE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_KYOSHO, 1, false, true, STR_SUBTYPE_KYOSHO, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_RLINK, 3, false, false, STR_SUBTYPE_RLINK, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
// MODULE_SUBTYPE_MULTI_ELRS non selectable and masked out for selection
|
||||
{MODULE_SUBTYPE_MULTI_REALACC, 0, false, false, STR_SUBTYPE_REALACC, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_OMP, 0, false, false, NO_SUBTYPE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_MLINK, 0, true, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_WFLY2, 0, true, false, STR_SUBTYPE_WFLY2, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_E016HV2, 0, false, false, STR_SUBTYPE_E016HV2, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_E010R5, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_LOLI, 0, true, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E129, 1, false, false, STR_SUBTYPE_E129, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_JOYSWAY, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_E016H, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
// MODULE_SUBTYPE_MULTI_CONFIG non selectable and masked out for selection
|
||||
// MODULE_SUBTYPE_MULTI_IKEAANSLUTA non selectable and masked out for selection
|
||||
// MODULE_SUBTYPE_MULTI_WILLIFM non selectable and masked out for selection
|
||||
{MODULE_SUBTYPE_MULTI_LOSI, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_MOULDKG, 1, false, false, STR_SUBTYPE_MOULDKG, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_XERALL, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_MT99XX2, 1, false, false, STR_SUBTYPE_MT992, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_KYOSHO2, 0, false, false, STR_SUBTYPE_KYOSHO2, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_SCORPIO, 0, false, true, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_BLUEFLY, 0, false, false, NO_SUBTYPE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_BUMBLEB, 0, false, false, NO_SUBTYPE, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_SGF22, 2, false, false, STR_SUBTYPE_SFG22, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_KYOSHO3, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_XK2, 1, false, false, STR_SUBTYPE_XK2, STR_DEF(STR_MULTI_RFTUNE)},
|
||||
{MODULE_SUBTYPE_MULTI_YUXIANG, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
// MODULE_SUBTYPE_PINECONE non selectable and masked out for selection
|
||||
{MODULE_SUBTYPE_MULTI_JIABAILE, 1, false, false, STR_SUBTYPE_JIABAILE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_H36, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_NN1, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN2, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN3, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN4, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN5, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN6, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN7, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN8, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN9, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
{MODULE_SUBTYPE_MULTI_NN10, 7, true, true, STR_SUBTYPE_NN, STR_DEF(STR_MULTI_OPTION)},
|
||||
//
|
||||
// most likely no longer required
|
||||
//
|
||||
{MM_RF_CUSTOM_SELECTED, 0, true, false, NO_SUBTYPE, STR_DEF(STR_MULTI_OPTION)},
|
||||
|
||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||
{MODULE_SUBTYPE_MULTI_SENTINEL, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
});
|
||||
|
||||
#endif // MULTIMODULE
|
||||
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "analogs.h"
|
||||
#include "dataconstants.h"
|
||||
#include "edgetx_helpers.h"
|
||||
|
||||
#include "hal/adc_driver.h"
|
||||
|
||||
static char _custom_names[MAX_ANALOG_INPUTS][LEN_ANA_NAME + 1] = { 0 };
|
||||
|
||||
void analogSetCustomLabel(uint8_t type, uint8_t idx, const char* str, size_t len)
|
||||
{
|
||||
if (idx >= adcGetMaxInputs(type)) return;
|
||||
idx += adcGetInputOffset(type);
|
||||
|
||||
strncpy(_custom_names[idx], str, min<size_t>(LEN_ANA_NAME, len));
|
||||
_custom_names[idx][LEN_ANA_NAME] = '\0';
|
||||
}
|
||||
|
||||
const char* analogGetCustomLabel(uint8_t type, uint8_t idx)
|
||||
{
|
||||
if (idx >= adcGetMaxInputs(type)) return "";
|
||||
idx += adcGetInputOffset(type);
|
||||
|
||||
return _custom_names[idx];
|
||||
}
|
||||
|
||||
bool analogHasCustomLabel(uint8_t type, uint8_t idx)
|
||||
{
|
||||
return *analogGetCustomLabel(type, idx) != 0;
|
||||
}
|
||||
|
||||
static int _lookup_input_idx(uint8_t type, const char* name, size_t len,
|
||||
const char* (*fct)(uint8_t,uint8_t))
|
||||
{
|
||||
auto max_inputs = adcGetMaxInputs(type);
|
||||
if (!max_inputs) return -1;
|
||||
|
||||
for (uint8_t i = 0; i < max_inputs; i++) {
|
||||
if (!strncmp(fct(type, i), name, len)) return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int analogLookupPhysicalIdx(uint8_t type, const char* name, size_t len)
|
||||
{
|
||||
return _lookup_input_idx(type, name, len, adcGetInputName);
|
||||
}
|
||||
|
||||
static int analogLookupLabelIdx(uint8_t type, const char* name, size_t len)
|
||||
{
|
||||
return _lookup_input_idx(type, name, len, adcGetInputLabel);
|
||||
}
|
||||
|
||||
const char* analogGetPhysicalName(uint8_t type, uint8_t idx)
|
||||
{
|
||||
return adcGetInputName(type, idx);
|
||||
}
|
||||
|
||||
const char* analogGetCanonicalName(uint8_t type, uint8_t idx)
|
||||
{
|
||||
// Main controls are special cases here as
|
||||
// we use the label slot to place the specific names
|
||||
// (2-gimbal radios vs. surface radios)
|
||||
|
||||
if (type == ADC_INPUT_MAIN)
|
||||
return adcGetInputLabel(type, idx);
|
||||
|
||||
return adcGetInputName(type, idx);
|
||||
}
|
||||
|
||||
int analogLookupCanonicalIdx(uint8_t type, const char* name, size_t len)
|
||||
{
|
||||
if (type == ADC_INPUT_MAIN) {
|
||||
return analogLookupLabelIdx(type, name, len);
|
||||
}
|
||||
|
||||
return analogLookupPhysicalIdx(type, name, len);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void analogSetCustomLabel(uint8_t type, uint8_t idx, const char* str, size_t len);
|
||||
const char* analogGetCustomLabel(uint8_t type, uint8_t idx);
|
||||
bool analogHasCustomLabel(uint8_t type, uint8_t idx);
|
||||
|
||||
const char* analogGetPhysicalName(uint8_t type, uint8_t idx);
|
||||
int analogLookupPhysicalIdx(uint8_t type, const char* name, size_t len);
|
||||
|
||||
const char* analogGetCanonicalName(uint8_t type, uint8_t idx);
|
||||
int analogLookupCanonicalIdx(uint8_t type, const char* name, size_t len);
|
||||
@@ -0,0 +1,599 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ff.h"
|
||||
#include "edgetx_types.h"
|
||||
#include "dataconstants.h"
|
||||
|
||||
#include "hal/audio_driver.h"
|
||||
|
||||
/*
|
||||
Implements a bit field, number of bits is set by the template,
|
||||
each bit can be modified and read by the provided methods.
|
||||
*/
|
||||
template <unsigned int NUM_BITS> class BitField
|
||||
{
|
||||
private:
|
||||
uint8_t bits[(NUM_BITS + 7) / 8];
|
||||
public:
|
||||
BitField()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
memset(bits, 0, sizeof(bits));
|
||||
}
|
||||
|
||||
void setBit(unsigned int bitNo)
|
||||
{
|
||||
if (bitNo >= NUM_BITS) return;
|
||||
bits[bitNo >> 3] = bits[bitNo >> 3] | (1 << (bitNo & 0x07));
|
||||
}
|
||||
|
||||
bool getBit(unsigned int bitNo) const
|
||||
{
|
||||
if (bitNo >= NUM_BITS) return false;
|
||||
return bits[bitNo >> 3] & (1 << (bitNo & 0x07));
|
||||
}
|
||||
|
||||
unsigned int getSize() const
|
||||
{
|
||||
return NUM_BITS;
|
||||
}
|
||||
};
|
||||
|
||||
#define INDEX_LOGICAL_SWITCH_AUDIO_FILE(index, event) (2*(index)+(event))
|
||||
#define INDEX_PHASE_AUDIO_FILE(index, event) (2*(index)+(event))
|
||||
|
||||
// max length (example: /SOUNDS/fr/123456789012/1234567890-off.wav)
|
||||
constexpr uint8_t AUDIO_MODEL_FILENAME_MAXLEN = (sizeof("/SOUNDS/fr/") - 1) + LEN_MODEL_NAME + 1 + LEN_FLIGHT_MODE_NAME + (sizeof("-off.wav") - 1);
|
||||
constexpr uint8_t AUDIO_LUA_FILENAME_MAXLEN = 42; // Some scripts use long audio paths, even on 128x64 boards
|
||||
constexpr uint8_t AUDIO_FILENAME_MAXLEN = (AUDIO_LUA_FILENAME_MAXLEN > AUDIO_MODEL_FILENAME_MAXLEN ? AUDIO_LUA_FILENAME_MAXLEN : AUDIO_MODEL_FILENAME_MAXLEN);
|
||||
|
||||
#define AUDIO_QUEUE_LENGTH (16) // must be a power of 2!
|
||||
|
||||
#define AUDIO_BUFFER_DURATION (10)
|
||||
#define AUDIO_BUFFER_SIZE (AUDIO_SAMPLE_RATE*AUDIO_BUFFER_DURATION/1000)
|
||||
|
||||
#if !defined(AUDIO_SAMPLE_FMT)
|
||||
#if defined(SIMU) || defined(AUDIO_SPI)
|
||||
#define AUDIO_SAMPLE_FMT AUDIO_SAMPLE_FMT_S16
|
||||
#else
|
||||
#define AUDIO_SAMPLE_FMT AUDIO_SAMPLE_FMT_U16
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(SIMU)
|
||||
#define AUDIO_BUFFER_COUNT (10) // simulator needs more buffers for smooth audio
|
||||
#elif defined(AUDIO_SPI)
|
||||
#define AUDIO_BUFFER_COUNT (2) // smaller than Taranis since there is also a buffer on the ADC chip
|
||||
#elif defined(STORAGE_USE_SPI_FLASH)
|
||||
#define AUDIO_BUFFER_COUNT (10) // SPI Flash need more buffer for smooth audio
|
||||
#else
|
||||
#define AUDIO_BUFFER_COUNT (3)
|
||||
#endif
|
||||
|
||||
#define BEEP_MIN_FREQ (150)
|
||||
#define BEEP_MAX_FREQ (15000)
|
||||
#define BEEP_DEFAULT_FREQ (2250)
|
||||
|
||||
#define USE_SETTINGS_VOLUME (127)
|
||||
|
||||
#if AUDIO_SAMPLE_FMT == AUDIO_SAMPLE_FMT_S16
|
||||
typedef int16_t audio_data_t;
|
||||
#define AUDIO_DATA_SILENCE 0
|
||||
#elif AUDIO_SAMPLE_FMT == AUDIO_SAMPLE_FMT_U16
|
||||
typedef uint16_t audio_data_t;
|
||||
#define AUDIO_DATA_SILENCE 0x8000
|
||||
#else
|
||||
#error "Unknown audio sample format"
|
||||
#endif
|
||||
|
||||
struct AudioBuffer {
|
||||
audio_data_t data[AUDIO_BUFFER_SIZE];
|
||||
uint16_t size;
|
||||
};
|
||||
|
||||
extern AudioBuffer audioBuffers[AUDIO_BUFFER_COUNT];
|
||||
|
||||
enum FragmentTypes {
|
||||
FRAGMENT_EMPTY,
|
||||
FRAGMENT_TONE,
|
||||
FRAGMENT_FILE,
|
||||
};
|
||||
|
||||
struct Tone {
|
||||
uint16_t freq;
|
||||
uint16_t duration;
|
||||
uint16_t pause;
|
||||
int8_t freqIncr;
|
||||
uint8_t reset;
|
||||
uint8_t pure; // use the distortion-free sine LUT (e.g. CLI "beep")
|
||||
Tone() {};
|
||||
Tone(uint16_t freq, uint16_t duration, uint16_t pause, int8_t freqIncr, bool reset, bool pure):
|
||||
freq(freq),
|
||||
duration(duration),
|
||||
pause(pause),
|
||||
freqIncr(freqIncr),
|
||||
reset(reset),
|
||||
pure(pure)
|
||||
{};
|
||||
};
|
||||
|
||||
struct AudioFragment {
|
||||
uint8_t type;
|
||||
uint8_t id;
|
||||
uint8_t repeat;
|
||||
int8_t fragmentVolume;
|
||||
union {
|
||||
Tone tone;
|
||||
char file[AUDIO_FILENAME_MAXLEN+1];
|
||||
};
|
||||
|
||||
AudioFragment() { clear(); };
|
||||
|
||||
AudioFragment(uint16_t freq, uint16_t duration, uint16_t pause, uint8_t repeat, int8_t freqIncr, bool reset, int8_t fragmentVolume, bool pure=false, uint8_t id=0 ):
|
||||
type(FRAGMENT_TONE),
|
||||
id(id),
|
||||
repeat(repeat),
|
||||
fragmentVolume(fragmentVolume),
|
||||
tone(freq, duration, pause, freqIncr, reset, pure)
|
||||
{};
|
||||
|
||||
AudioFragment(const char * filename, uint8_t repeat, int8_t fragmentVolume, uint8_t id = 0):
|
||||
type(FRAGMENT_FILE),
|
||||
id(id),
|
||||
repeat(repeat),
|
||||
fragmentVolume(fragmentVolume)
|
||||
{
|
||||
strcpy(file, filename);
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
memset(reinterpret_cast<void*>(this), 0, sizeof(AudioFragment));
|
||||
|
||||
this->fragmentVolume = USE_SETTINGS_VOLUME;
|
||||
}
|
||||
};
|
||||
|
||||
class ToneContext {
|
||||
public:
|
||||
|
||||
inline void clear()
|
||||
{
|
||||
memset(reinterpret_cast<void*>(this), 0, sizeof(ToneContext));
|
||||
|
||||
fragment.fragmentVolume = USE_SETTINGS_VOLUME;
|
||||
}
|
||||
|
||||
bool isFree() const
|
||||
{
|
||||
return fragment.type == FRAGMENT_EMPTY;
|
||||
}
|
||||
|
||||
int mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade);
|
||||
|
||||
void setFragment(uint16_t freq, uint16_t duration, uint16_t pause, uint8_t repeat, int8_t freqIncr, bool reset, int8_t fragmentVolume, bool pure = false, uint8_t id = 0)
|
||||
{
|
||||
fragment = AudioFragment(freq, duration, pause, repeat, freqIncr, reset, fragmentVolume, pure, id);
|
||||
}
|
||||
|
||||
private:
|
||||
AudioFragment fragment;
|
||||
|
||||
struct {
|
||||
float step;
|
||||
float idx;
|
||||
float volume;
|
||||
uint16_t freq;
|
||||
uint16_t duration;
|
||||
uint16_t pause;
|
||||
} state;
|
||||
|
||||
};
|
||||
|
||||
class WavContext {
|
||||
public:
|
||||
|
||||
inline void clear() { fragment.clear(); };
|
||||
|
||||
int mixBuffer(AudioBuffer *buffer, int volume, unsigned int fade);
|
||||
bool hasPromptId(uint8_t id) const { return fragment.id == id; };
|
||||
|
||||
void setFragment(const char * filename, uint8_t repeat, int8_t fragmentVolume, uint8_t id)
|
||||
{
|
||||
fragment = AudioFragment(filename, repeat, fragmentVolume, id);
|
||||
}
|
||||
|
||||
void stop(uint8_t id)
|
||||
{
|
||||
if (fragment.id == id) {
|
||||
fragment.clear();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
AudioFragment fragment;
|
||||
|
||||
struct {
|
||||
FIL file;
|
||||
uint8_t codec;
|
||||
uint32_t freq;
|
||||
uint32_t size;
|
||||
uint8_t resampleRatio;
|
||||
uint16_t readSize;
|
||||
} state;
|
||||
};
|
||||
|
||||
class MixedContext {
|
||||
#if defined(CLI)
|
||||
friend void printAudioVars();
|
||||
#endif
|
||||
public:
|
||||
|
||||
MixedContext()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
void setFragment(const AudioFragment * frag)
|
||||
{
|
||||
if (frag) {
|
||||
fragment = *frag;
|
||||
}
|
||||
}
|
||||
|
||||
inline void clear()
|
||||
{
|
||||
tone.clear(); // the biggest member of the uninon
|
||||
}
|
||||
|
||||
bool isEmpty() const { return fragment.type == FRAGMENT_EMPTY; };
|
||||
bool isTone() const { return fragment.type == FRAGMENT_TONE; };
|
||||
bool isFile() const { return fragment.type == FRAGMENT_FILE; };
|
||||
bool hasPromptId(uint8_t id) const { return fragment.id == id; };
|
||||
|
||||
int mixBuffer(AudioBuffer *buffer, int toneVolume, int wavVolume, unsigned int fade)
|
||||
{
|
||||
if (isTone())
|
||||
return tone.mixBuffer(buffer, toneVolume, fade);
|
||||
else if (isFile())
|
||||
return wav.mixBuffer(buffer, wavVolume, fade);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
union {
|
||||
AudioFragment fragment; // a hack: fragment is used to access the fragment members of tone and wav
|
||||
ToneContext tone;
|
||||
WavContext wav;
|
||||
};
|
||||
};
|
||||
|
||||
class AudioBufferFifo {
|
||||
#if defined(CLI)
|
||||
friend void printAudioVars();
|
||||
#endif
|
||||
|
||||
private:
|
||||
volatile uint8_t readIdx;
|
||||
volatile uint8_t writeIdx;
|
||||
|
||||
inline uint8_t nextBufferIdx(uint8_t idx) const
|
||||
{
|
||||
return (idx >= AUDIO_BUFFER_COUNT - 1 ? 0 : idx + 1);
|
||||
}
|
||||
|
||||
bool full() const { return readIdx == nextBufferIdx(writeIdx); }
|
||||
bool empty() const { return readIdx == writeIdx; }
|
||||
uint8_t used() const { return (writeIdx - readIdx) % AUDIO_BUFFER_COUNT; }
|
||||
|
||||
public:
|
||||
AudioBufferFifo() : readIdx(0), writeIdx(0)
|
||||
{
|
||||
memset(audioBuffers, 0, sizeof(audioBuffers));
|
||||
}
|
||||
|
||||
// returns an empty buffer to be filled with data and put back into FIFO
|
||||
// with audioPushBuffer()
|
||||
AudioBuffer *getEmptyBuffer() const
|
||||
{
|
||||
return full() ? nullptr : &audioBuffers[writeIdx];
|
||||
}
|
||||
|
||||
// puts filled buffer into FIFO
|
||||
void audioPushBuffer() { writeIdx = nextBufferIdx(writeIdx); }
|
||||
|
||||
// frees the last played buffer
|
||||
void freeNextFilledBuffer() { readIdx = nextBufferIdx(readIdx); }
|
||||
|
||||
// returns a pointer to the audio buffer to be played
|
||||
const AudioBuffer *getNextFilledBuffer()
|
||||
{
|
||||
return empty() ? nullptr : &audioBuffers[readIdx];
|
||||
}
|
||||
|
||||
bool filledAtleast(int noBuffers) const { return used() >= noBuffers; }
|
||||
};
|
||||
|
||||
class AudioFragmentFifo
|
||||
{
|
||||
#if defined(CLI)
|
||||
friend void printAudioVars();
|
||||
#endif
|
||||
private:
|
||||
volatile uint8_t ridx;
|
||||
volatile uint8_t widx;
|
||||
AudioFragment fragments[AUDIO_QUEUE_LENGTH];
|
||||
|
||||
uint8_t nextIdx(uint8_t idx) const
|
||||
{
|
||||
return (idx + 1) & (AUDIO_QUEUE_LENGTH - 1);
|
||||
}
|
||||
|
||||
public:
|
||||
AudioFragmentFifo() : ridx(0), widx(0), fragments() {};
|
||||
|
||||
bool hasPromptId(uint8_t id)
|
||||
{
|
||||
uint8_t i = ridx;
|
||||
while (i != widx) {
|
||||
AudioFragment & fragment = fragments[i];
|
||||
if (fragment.id == id) return true;
|
||||
i = nextIdx(i);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool removePromptById(uint8_t id)
|
||||
{
|
||||
uint8_t i = ridx;
|
||||
while (i != widx) {
|
||||
AudioFragment & fragment = fragments[i];
|
||||
if (fragment.id == id) fragment.clear();
|
||||
i = nextIdx(i);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return ridx == widx;
|
||||
}
|
||||
|
||||
bool full() const
|
||||
{
|
||||
return ridx == nextIdx(widx);
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
widx = ridx; // clean the queue
|
||||
}
|
||||
|
||||
const AudioFragment * get()
|
||||
{
|
||||
if (!empty()) {
|
||||
const AudioFragment * result = &fragments[ridx];
|
||||
if (!fragments[ridx].repeat--) {
|
||||
// repeat is done, move to the next fragment
|
||||
ridx = nextIdx(ridx);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void push(const AudioFragment & fragment)
|
||||
{
|
||||
if (!full()) {
|
||||
// TRACE("fragment %d at %d", fragment.type, widx);
|
||||
fragments[widx] = fragment;
|
||||
widx = nextIdx(widx);
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class AudioQueue {
|
||||
|
||||
#if defined(CLI)
|
||||
friend void printAudioVars();
|
||||
#endif
|
||||
public:
|
||||
AudioQueue();
|
||||
void start() { _started = true; };
|
||||
void playTone(uint16_t freq, uint16_t len, uint16_t pause=0, uint8_t flags=0, int8_t freqIncr=0, int8_t fragmentVolume = USE_SETTINGS_VOLUME);
|
||||
void playFile(const char *filename, uint8_t flags=0, uint8_t id=0, int8_t fragmentVolume = USE_SETTINGS_VOLUME);
|
||||
void stopPlay(uint8_t id);
|
||||
void stopAll();
|
||||
void flush();
|
||||
void pause(uint16_t tLen);
|
||||
void stopSD();
|
||||
bool isPlaying(uint8_t id);
|
||||
bool isEmpty() const { return fragmentsFifo.empty(); };
|
||||
void wakeup();
|
||||
bool started() const { return _started; };
|
||||
#if defined(AUDIO_UNMUTE_DELAY)
|
||||
tmr10ms_t lastAudioPlayTime = 0;
|
||||
#endif
|
||||
|
||||
AudioBufferFifo buffersFifo;
|
||||
|
||||
private:
|
||||
volatile bool _started;
|
||||
MixedContext normalContext;
|
||||
WavContext backgroundContext;
|
||||
ToneContext priorityContext;
|
||||
ToneContext varioContext;
|
||||
AudioFragmentFifo fragmentsFifo;
|
||||
};
|
||||
|
||||
extern uint8_t currentSpeakerVolume;
|
||||
extern AudioQueue audioQueue;
|
||||
|
||||
enum {
|
||||
// IDs for special functions [0:64]
|
||||
// IDs for global functions [64:128]
|
||||
ID_PLAY_PROMPT_BASE = 128,
|
||||
ID_PLAY_FROM_SD_MANAGER = 255,
|
||||
};
|
||||
|
||||
void codecsInit();
|
||||
void audioEvent(unsigned int index);
|
||||
void audioPlay(unsigned int index, uint8_t id=0);
|
||||
|
||||
void onKeyError();
|
||||
|
||||
void audioKeyPress();
|
||||
void audioKeyError();
|
||||
void audioTrimPress(int value);
|
||||
void audioTimerCountdown(uint8_t timer, int value);
|
||||
|
||||
#if defined(AUDIO)
|
||||
|
||||
#define AUDIO_ERROR_MESSAGE(e) audioEvent(e)
|
||||
#define AUDIO_TIMER_MINUTE(t) playDuration(t, 0, 0)
|
||||
|
||||
#define AUDIO_KEY_PRESS() audioKeyPress()
|
||||
#define AUDIO_KEY_ERROR() audioKeyError()
|
||||
|
||||
#define AUDIO_HELLO() audioPlay(AUDIO_HELLO)
|
||||
#define AUDIO_BYE() audioPlay(AU_BYE, ID_PLAY_PROMPT_BASE + AU_BYE)
|
||||
#define AUDIO_WARNING1() audioEvent(AU_WARNING1)
|
||||
#define AUDIO_WARNING2() audioEvent(AU_WARNING2)
|
||||
#define AUDIO_TX_BATTERY_LOW() audioEvent(AU_TX_BATTERY_LOW)
|
||||
#define AUDIO_ERROR() audioEvent(AU_ERROR)
|
||||
#define AUDIO_TIMER_COUNTDOWN(idx, val) audioTimerCountdown(idx, val)
|
||||
#define AUDIO_TIMER_ELAPSED(idx) audioEvent(AU_TIMER1_ELAPSED+idx)
|
||||
#define AUDIO_INACTIVITY() audioEvent(AU_INACTIVITY)
|
||||
#define AUDIO_MIX_WARNING(x) audioEvent(AU_MIX_WARNING_1+x-1)
|
||||
#define AUDIO_POT_MIDDLE(x) audioEvent(AU_STICK1_MIDDLE+x)
|
||||
#define AUDIO_TRIM_MIDDLE() audioEvent(AU_TRIM_MIDDLE)
|
||||
#define AUDIO_TRIM_MIN() audioEvent(AU_TRIM_MIN)
|
||||
#define AUDIO_TRIM_MAX() audioEvent(AU_TRIM_MAX)
|
||||
#define AUDIO_TRIM_PRESS(val) audioTrimPress(val)
|
||||
#define AUDIO_PLAY(p) audioEvent(p)
|
||||
#define AUDIO_VARIO(fq, t, p, f) audioQueue.playTone(fq, t, p, f)
|
||||
#define AUDIO_RSSI_ORANGE() audioEvent(AU_RSSI_ORANGE)
|
||||
#define AUDIO_RSSI_RED() audioEvent(AU_RSSI_RED)
|
||||
#define AUDIO_RAS_RED() audioEvent(AU_RAS_RED)
|
||||
#define AUDIO_TELEMETRY_CONNECTED() audioEvent(AU_TELEMETRY_CONNECTED)
|
||||
#define AUDIO_TELEMETRY_LOST() audioEvent(AU_TELEMETRY_LOST)
|
||||
#define AUDIO_TELEMETRY_BACK() audioEvent(AU_TELEMETRY_BACK)
|
||||
#define AUDIO_TRAINER_CONNECTED() audioEvent(AU_TRAINER_CONNECTED)
|
||||
#define AUDIO_TRAINER_LOST() audioEvent(AU_TRAINER_LOST)
|
||||
#define AUDIO_TRAINER_BACK() audioEvent(AU_TRAINER_BACK)
|
||||
|
||||
#else // AUDIO
|
||||
|
||||
#define AUDIO_TIMER_COUNTDOWN(idx, val)
|
||||
#define AUDIO_TIMER_ELAPSED(idx)
|
||||
#define AUDIO_TRIM_MIN()
|
||||
#define AUDIO_TRIM_MAX()
|
||||
#define AUDIO_TRIM_PRESS(val)
|
||||
#define AUDIO_VARIO(fq, t, p, f)
|
||||
#define AUDIO_RSSI_ORANGE()
|
||||
#define AUDIO_RSSI_RED()
|
||||
#define AUDIO_RAS_RED()
|
||||
#define AUDIO_TELEMETRY_CONNECTED()
|
||||
#define AUDIO_TELEMETRY_LOST()
|
||||
#define AUDIO_TELEMETRY_BACK()
|
||||
#define AUDIO_TRAINER_CONNECTED()
|
||||
#define AUDIO_TRAINER_LOST()
|
||||
#define AUDIO_TRAINER_BACK()
|
||||
|
||||
#endif
|
||||
|
||||
enum AutomaticPromptsCategories {
|
||||
SYSTEM_AUDIO_CATEGORY,
|
||||
MODEL_AUDIO_CATEGORY,
|
||||
PHASE_AUDIO_CATEGORY,
|
||||
SWITCH_AUDIO_CATEGORY,
|
||||
LOGICAL_SWITCH_AUDIO_CATEGORY,
|
||||
};
|
||||
|
||||
enum AutomaticPromptsEvents {
|
||||
AUDIO_EVENT_OFF,
|
||||
AUDIO_EVENT_ON,
|
||||
AUDIO_EVENT_MID,
|
||||
};
|
||||
|
||||
void pushPrompt(uint16_t prompt, uint8_t id=0, uint8_t fragmentVolume = USE_SETTINGS_VOLUME);
|
||||
void pushUnit(uint8_t unit, uint8_t idx, uint8_t id, uint8_t fragmentVolume = USE_SETTINGS_VOLUME);
|
||||
void playModelName();
|
||||
|
||||
#define PUSH_NUMBER_PROMPT(p) pushPrompt((p), id, fragmentVolume)
|
||||
#define PUSH_UNIT_PROMPT(p, i) pushUnit((p), (i), id, fragmentVolume)
|
||||
#define PLAY_NUMBER(n, u, a) playNumber((n), (u), (a), id, fragmentVolume)
|
||||
#define PLAY_DURATION(d, att) playDuration((d), (att), id, fragmentVolume)
|
||||
#define PLAY_DURATION_ATT , uint8_t flags
|
||||
#define PLAY_TIME 1
|
||||
#define PLAY_LONG_TIMER 2
|
||||
#define LONG_TIMER_DURATION (10 * 60) // 10 minutes
|
||||
#define IS_PLAY_TIME() (flags & PLAY_TIME)
|
||||
#define IS_PLAY_LONG_TIMER() (flags & PLAY_LONG_TIMER)
|
||||
#define IS_PLAYING(id) audioQueue.isPlaying((id))
|
||||
#define PLAY_VALUE(v, id) playValue((v), (id), USE_SETTINGS_VOLUME)
|
||||
#define PLAY_FILE(f, flags, id) audioQueue.playFile((f), (flags), (id), USE_SETTINGS_VOLUME)
|
||||
#define STOP_PLAY(id) audioQueue.stopPlay((id))
|
||||
|
||||
#if defined(AUDIO)
|
||||
#define AUDIO_RESET() audioQueue.stopAll()
|
||||
#define AUDIO_FLUSH() audioQueue.flush()
|
||||
#endif
|
||||
|
||||
#if defined(AUDIO)
|
||||
extern tmr10ms_t timeAutomaticPromptsSilence;
|
||||
void playModelEvent(uint8_t category, uint8_t index, event_t event=0);
|
||||
#define PLAY_PHASE_OFF(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_OFF)
|
||||
#define PLAY_PHASE_ON(phase) playModelEvent(PHASE_AUDIO_CATEGORY, phase, AUDIO_EVENT_ON)
|
||||
#define PLAY_SWITCH_MOVED(sw) playModelEvent(SWITCH_AUDIO_CATEGORY, sw)
|
||||
#define PLAY_LOGICAL_SWITCH_OFF(sw) playModelEvent(LOGICAL_SWITCH_AUDIO_CATEGORY, sw, AUDIO_EVENT_OFF)
|
||||
#define PLAY_LOGICAL_SWITCH_ON(sw) playModelEvent(LOGICAL_SWITCH_AUDIO_CATEGORY, sw, AUDIO_EVENT_ON)
|
||||
#define PLAY_MODEL_NAME() playModelName()
|
||||
#define START_SILENCE_PERIOD() timeAutomaticPromptsSilence = get_tmr10ms()
|
||||
#define IS_SILENCE_PERIOD_ELAPSED() (get_tmr10ms()-timeAutomaticPromptsSilence > 50)
|
||||
#else
|
||||
#define PLAY_PHASE_OFF(phase)
|
||||
#define PLAY_PHASE_ON(phase)
|
||||
#define PLAY_SWITCH_MOVED(sw)
|
||||
#define PLAY_LOGICAL_SWITCH_OFF(sw)
|
||||
#define PLAY_LOGICAL_SWITCH_ON(sw)
|
||||
#define PLAY_MODEL_NAME()
|
||||
#define START_SILENCE_PERIOD()
|
||||
#define IS_SILENCE_PERIOD_ELAPSED() true
|
||||
#endif
|
||||
|
||||
char * getAudioPath(char * path);
|
||||
|
||||
void referenceSystemAudioFiles();
|
||||
void referenceModelAudioFiles();
|
||||
|
||||
bool isAudioFileReferenced(uint32_t i, char * filename/*at least AUDIO_FILENAME_MAXLEN+1 long*/);
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* libopenui - https://github.com/opentx/libopenui
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
// A set of bitfield handling macros
|
||||
|
||||
template <typename T>
|
||||
inline T bfBit(uint8_t n)
|
||||
{
|
||||
return T(1) << n;
|
||||
}
|
||||
|
||||
#define BFBIT_FLIP(y, mask) ( y ^= (mask) )
|
||||
|
||||
//! Create a bitmask of length 'len'.
|
||||
template <typename T>
|
||||
inline T bfBitmask(uint8_t len)
|
||||
{
|
||||
return bfBit<T>(len) - 1;
|
||||
}
|
||||
|
||||
//! Create a bitfield mask of length 'len' starting at bit 'start'.
|
||||
template <typename T>
|
||||
inline T bfMask(uint8_t start, uint8_t len)
|
||||
{
|
||||
return bfBitmask<T>(len) << start;
|
||||
}
|
||||
|
||||
//! Prepare a bitmask for insertion or combining.
|
||||
template <typename T>
|
||||
inline T bfPrep(T x, uint8_t start, uint8_t len)
|
||||
{
|
||||
return (x & bfBitmask<T>(len)) << start;
|
||||
}
|
||||
|
||||
//! Extract a bitfield of length 'len' starting at bit 'start' from 'y'.
|
||||
template <typename T>
|
||||
inline T bfGet(T y, uint8_t start, uint8_t len)
|
||||
{
|
||||
return ((y)>>(start)) & bfBitmask<T>(len);
|
||||
}
|
||||
|
||||
//! Insert 'len' bits of 'x 'into 'y', starting at bit 'start' from 'y'.
|
||||
template <class T>
|
||||
inline T bfSet(T to, T from, uint8_t start, uint8_t len)
|
||||
{
|
||||
return (to & ~bfMask<T>(start, len)) | bfPrep<T>(from, start, len);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline T bfBitGet(T y, T mask)
|
||||
{
|
||||
return (y & mask);
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline T bfSingleBitGet(T y, uint8_t i)
|
||||
{
|
||||
return bfBitGet(y, bfBit<T>(i));
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/*.lbm
|
||||
@@ -0,0 +1,10 @@
|
||||
set(FONT "STD" CACHE STRING "Choose font : STD or SQT5")
|
||||
set_property(CACHE FONT PROPERTY STRINGS "STD" "SQT5")
|
||||
string(TOLOWER "${FONT}" FONT_DIR)
|
||||
|
||||
set(STICKS_ARGS --rows 4)
|
||||
|
||||
add_bitmaps_target(9x_xbm_1bit ${RADIO_SRC_DIR}/bitmaps/sticks.xbm 1bit "${STICKS_ARGS}") # 1bit format, 1byte size, split into 4 rows
|
||||
add_bitmaps_target(9x_bitmaps ${RADIO_SRC_DIR}/bitmaps/128x64/*.png 1bit "") # 1bit format, 1byte size, 1 row
|
||||
add_fonts_target(9x_fonts_1bit ${RADIO_SRC_DIR}/fonts/${FONT_DIR}/*.png)
|
||||
add_dependencies(9x_bitmaps 9x_fonts_1bit 9x_xbm_1bit)
|
||||
|
After Width: | Height: | Size: 212 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 452 B |
@@ -0,0 +1 @@
|
||||
/mainmenu.png
|
||||
@@ -0,0 +1,10 @@
|
||||
set(FONT "STD" CACHE STRING "Choose font : STD or SQT5")
|
||||
set_property(CACHE FONT PROPERTY STRINGS "STD" "SQT5")
|
||||
string(TOLOWER "${FONT}" FONT_DIR)
|
||||
|
||||
set(STICKS_ARGS --rows 4)
|
||||
|
||||
add_bitmaps_target(taranis_xbm ${RADIO_SRC_DIR}/bitmaps/sticks.xbm 1bit "${STICKS_ARGS}") # 1bit format, 1byte size, split into 4 rows
|
||||
add_fonts_target(taranis_fonts ${RADIO_SRC_DIR}/fonts/${FONT_DIR}/*.png)
|
||||
add_bitmaps_target(taranis_bitmaps ${RADIO_SRC_DIR}/bitmaps/212x64/*.png 4bits "--rle")
|
||||
add_dependencies(taranis_bitmaps taranis_fonts taranis_xbm)
|
||||
|
After Width: | Height: | Size: 740 B |
|
After Width: | Height: | Size: 583 B |
|
After Width: | Height: | Size: 502 B |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 244 B |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 486 B |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 559 B |
|
After Width: | Height: | Size: 999 B |
|
After Width: | Height: | Size: 532 B |
|
After Width: | Height: | Size: 559 B |
|
After Width: | Height: | Size: 690 B |
|
After Width: | Height: | Size: 478 B |
|
After Width: | Height: | Size: 538 B |
|
After Width: | Height: | Size: 386 B |
|
After Width: | Height: | Size: 598 B |
|
After Width: | Height: | Size: 566 B |
|
After Width: | Height: | Size: 696 B |
|
After Width: | Height: | Size: 636 B |
|
After Width: | Height: | Size: 682 B |
|
After Width: | Height: | Size: 708 B |
|
After Width: | Height: | Size: 494 B |
|
After Width: | Height: | Size: 570 B |
|
After Width: | Height: | Size: 434 B |
|
After Width: | Height: | Size: 615 B |
|
After Width: | Height: | Size: 652 B |
|
After Width: | Height: | Size: 550 B |
|
After Width: | Height: | Size: 548 B |
|
After Width: | Height: | Size: 790 B |
|
After Width: | Height: | Size: 653 B |
|
After Width: | Height: | Size: 392 B |
@@ -0,0 +1,13 @@
|
||||
set(BITMAP_SIZE_ARGS --size-format 2)
|
||||
set(BITMAP_LZ4_ARGS ${BITMAP_SIZE_ARGS} --lz4)
|
||||
set(MASK_LZ4_ARGS ${BITMAP_SIZE_ARGS} --lz4)
|
||||
|
||||
add_bitmaps_target(bm320_bmps "${RADIO_SRC_DIR}/bitmaps/320x240/bmp_*.png" "4/4/4/4" "${BITMAP_LZ4_ARGS}")
|
||||
add_bitmaps_target(bm320_masks "${RADIO_SRC_DIR}/bitmaps/320x240/mask_*.png" 8bits "${MASK_LZ4_ARGS}")
|
||||
|
||||
add_custom_target(bm320_bitmaps)
|
||||
|
||||
add_dependencies(bm320_bitmaps
|
||||
bm320_bmps
|
||||
bm320_masks
|
||||
)
|
||||
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 646 B |
|
After Width: | Height: | Size: 934 B |
|
After Width: | Height: | Size: 621 B |
|
After Width: | Height: | Size: 578 B |
|
After Width: | Height: | Size: 799 B |
|
After Width: | Height: | Size: 757 B |
|
After Width: | Height: | Size: 470 B |
|
After Width: | Height: | Size: 948 B |
|
After Width: | Height: | Size: 619 B |
|
After Width: | Height: | Size: 822 B |
|
After Width: | Height: | Size: 1021 B |
|
After Width: | Height: | Size: 614 B |
|
After Width: | Height: | Size: 720 B |
|
After Width: | Height: | Size: 589 B |
|
After Width: | Height: | Size: 923 B |
|
After Width: | Height: | Size: 890 B |
|
After Width: | Height: | Size: 821 B |
|
After Width: | Height: | Size: 466 B |
|
After Width: | Height: | Size: 851 B |
|
After Width: | Height: | Size: 617 B |
|
After Width: | Height: | Size: 866 B |
|
After Width: | Height: | Size: 820 B |
|
After Width: | Height: | Size: 479 B |
|
After Width: | Height: | Size: 420 B |
|
After Width: | Height: | Size: 637 B |
|
After Width: | Height: | Size: 742 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 805 B |
|
After Width: | Height: | Size: 643 B |
|
After Width: | Height: | Size: 777 B |
|
After Width: | Height: | Size: 904 B |
|
After Width: | Height: | Size: 510 B |
|
After Width: | Height: | Size: 999 B |
|
After Width: | Height: | Size: 858 B |
|
After Width: | Height: | Size: 833 B |
|
After Width: | Height: | Size: 715 B |
|
After Width: | Height: | Size: 831 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 307 B |
|
After Width: | Height: | Size: 285 B |