Skip to content

Commit 8662ea3

Browse files
authored
Merge pull request #454 from rosflight/ptt/cleanup
Ptt/cleanup
2 parents 59640d6 + e5da1c4 commit 8662ea3

File tree

107 files changed

+7060
-5232
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+7060
-5232
lines changed

.clang-format

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ IndentCaseLabels: true
4242
IndentPPDirectives: None
4343
IndentWidth: 2
4444
KeepEmptyLinesAtTheStartOfBlocks: true
45+
LineEnding: LF
4546
MaxEmptyLinesToKeep: 1
4647
NamespaceIndentation: None
4748
ObjCSpaceAfterProperty: false

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
cmake-build*
2020
*.map
2121
scripts/parameter-descriptions.md
22+
CMakeFiles/
23+
CMakeCache.txt
2224

2325
*.aux
2426
*.fdb_latexmk

boards/varmint_h7/.clang-format

Lines changed: 0 additions & 68 deletions
This file was deleted.

boards/varmint_h7/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ cmake_install.cmake
1616
varmint_11x/
1717
varmint_11x_test/
1818
varmint_12x/
19+
Liv4f.*

boards/varmint_h7/common/STM32H7LinkerScript.ld

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ ENTRY(Reset_Handler)
3737
/* Highest address of the user mode stack */
3838
_estack = ORIGIN(RAM_D1) + LENGTH(RAM_D1); /* end of RAM */
3939
/* Generate a link error if heap and stack don't fit into RAM */
40-
_Min_Heap_Size = 0x2000; /* required amount of heap */
41-
_Min_Stack_Size = 0x2000; /* required amount of stack */
40+
_Min_Heap_Size = 0x10000; /* required amount of heap note _user_heap_stack is one location */
41+
_Min_Stack_Size = 0x20000; /* required amount of stack */
4242

4343
/* Specify the memory areas */
4444
MEMORY

boards/varmint_h7/common/Varmint.cpp

Lines changed: 18 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ uint16_t Varmint::sensors_init_message(char * message, uint16_t size, uint16_t i
148148
bool Varmint::imu_read(rosflight_firmware::ImuStruct * imu)
149149
{
150150
ImuPacket p;
151-
if (imu0_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
151+
if (imu0_.read((uint8_t *) &p, sizeof(p))) {
152152
imu->header = p.header;
153153
imu->accel[0] = p.accel[0];
154154
imu->accel[1] = p.accel[1];
@@ -167,7 +167,7 @@ bool Varmint::imu_read(rosflight_firmware::ImuStruct * imu)
167167
bool Varmint::mag_read(rosflight_firmware::MagStruct * mag)
168168
{
169169
MagPacket p;
170-
if (mag_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
170+
if (mag_.read((uint8_t *) &p, sizeof(p))) {
171171
mag->header = p.header;
172172
mag->flux[0] = p.flux[0];
173173
mag->flux[1] = p.flux[1];
@@ -183,7 +183,7 @@ bool Varmint::mag_read(rosflight_firmware::MagStruct * mag)
183183
bool Varmint::baro_read(rosflight_firmware::PressureStruct * baro)
184184
{
185185
PressurePacket p;
186-
if (baro_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
186+
if (baro_.read((uint8_t *) &p, sizeof(p))) {
187187
baro->header = p.header;
188188
baro->pressure = p.pressure;
189189
baro->temperature = p.temperature;
@@ -197,7 +197,7 @@ bool Varmint::baro_read(rosflight_firmware::PressureStruct * baro)
197197
bool Varmint::diff_pressure_read(rosflight_firmware::PressureStruct * diff_pressure)
198198
{
199199
PressurePacket p;
200-
if (pitot_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
200+
if (pitot_.read((uint8_t *) &p, sizeof(p))) {
201201
diff_pressure->header = p.header;
202202
diff_pressure->pressure = p.pressure;
203203
diff_pressure->temperature = p.temperature;
@@ -219,7 +219,7 @@ bool Varmint::sonar_read(rosflight_firmware::RangeStruct * sonar)
219219
bool Varmint::battery_read(rosflight_firmware::BatteryStruct * batt)
220220
{
221221
AdcPacket p;
222-
if (adc_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
222+
if (adc_.read((uint8_t *) &p, sizeof(p))) {
223223
batt->header = p.header;
224224
batt->current = p.volts[ADC_BATTERY_CURRENT];
225225
batt->voltage = p.volts[ADC_BATTERY_VOLTS];
@@ -245,57 +245,24 @@ bool Varmint::gnss_read(rosflight_firmware::GnssStruct * gnss)
245245
{
246246
UbxPacket p;
247247

248-
if (gps_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
248+
if (gps_.read((uint8_t *) &p, sizeof(p))) {
249249
gnss->header = p.header;
250250
gnss->pps = p.pps;
251251
gnss->unix_seconds = p.unix_seconds; // Unix time
252-
gnss->t_acc = p.pvt.tAcc;
253-
gnss->time_of_week = p.pvt.iTOW;
254-
gnss->year = p.pvt.year;
255-
gnss->month = p.pvt.month;
256-
gnss->day = p.pvt.day;
257-
gnss->hour = p.pvt.hour;
258-
gnss->min = p.pvt.min;
259-
gnss->sec = p.pvt.sec;
260-
gnss->nano = p.pvt.nano;
261-
gnss->lon = p.pvt.lon;
262-
gnss->lat = p.pvt.lat;
263-
gnss->height_ellipsoid = p.pvt.height;
264-
gnss->height_msl = p.pvt.hMSL;
265-
gnss->h_acc = p.pvt.hAcc;
266-
gnss->v_acc = p.pvt.vAcc;
267-
gnss->vel_n = p.pvt.velN;
268-
gnss->vel_e = p.pvt.velE;
269-
gnss->vel_d = p.pvt.velD;
270-
gnss->mag_var = p.pvt.magDec;
271-
gnss->ground_speed = p.pvt.gSpeed;
272-
gnss->course = p.pvt.headMot;
273-
gnss->course_accy = p.pvt.headAcc;
274-
gnss->vel_n = p.pvt.velN;
275-
gnss->vel_e = p.pvt.velE;
276-
gnss->vel_d = p.pvt.velD;
277-
gnss->speed_accy = p.pvt.sAcc;
278-
gnss->mag_var = p.pvt.magDec;
279-
gnss->valid = ((p.pvt.flags & 0x01) != 0);
280-
gnss->num_sat = p.pvt.numSV;
281-
gnss->dop = p.pvt.pDOP;
252+
gnss->unix_nanos = p.unix_nanos;
282253
gnss->fix_type = p.pvt.fixType;
283-
284-
// These are not available from standard NMEA messages
285-
// from ublox Class 0x01, ID 0x20
286-
gnss->ecef.x = p.ecefp.ecefX;
287-
gnss->ecef.y = p.ecefp.ecefY;
288-
gnss->ecef.z = p.ecefp.ecefZ;
289-
gnss->ecef.p_acc = p.ecefp.pAcc;
290-
// from ublox Class 0x01, ID 0x11
291-
gnss->ecef.vx = p.ecefv.ecefVX;
292-
gnss->ecef.vy = p.ecefv.ecefVY;
293-
gnss->ecef.vz = p.ecefv.ecefVZ;
294-
gnss->ecef.s_acc = p.ecefv.sAcc;
295-
254+
gnss->num_sat = p.pvt.numSV;
255+
gnss->lon = (double)p.pvt.lon* 1e-7; // Convert 100's of nanodegs into deg (DDS format)
256+
gnss->lat = (double)p.pvt.lat* 1e-7; // Convert 100's of nanodegs into deg (DDS format)
257+
gnss->height_msl = (float)p.pvt.hMSL* 1e-3; //mm to m
258+
gnss->vel_n = (float)p.pvt.velN* 1e-3; // mm/s to m/s
259+
gnss->vel_e = (float)p.pvt.velE* 1e-3; // mm/s to m/s
260+
gnss->vel_d = (float)p.pvt.velD* 1e-3; // mm/s to m/s
261+
gnss->h_acc = (float)p.pvt.hAcc* 1e-3; //mm to m
262+
gnss->v_acc = (float)p.pvt.vAcc* 1e-3; //mm to m
263+
gnss->speed_accy = (float)p.pvt.sAcc* 1e-3; // mm/s to m/s
296264
return true;
297265
}
298-
299266
return false;
300267
}
301268

@@ -306,7 +273,7 @@ bool Varmint::rc_read(rosflight_firmware::RcStruct * rc_struct)
306273
{
307274
RcPacket p;
308275

309-
if (rc_.rxFifoReadMostRecent((uint8_t *) &p, sizeof(p))) {
276+
if (rc_.read((uint8_t *) &p, sizeof(p))) {
310277
rc_struct->header = p.header;
311278
uint16_t len = RC_STRUCT_CHANNELS < RC_PACKET_CHANNELS ? RC_STRUCT_CHANNELS : RC_PACKET_CHANNELS;
312279
for (uint16_t i = 0; i < len; i++) { rc_struct->chan[i] = p.chan[i]; }

boards/varmint_h7/common/drivers/Adc.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ extern Time64 time64;
4949
#define ADC_DMA_BUF_SIZE_EXT (ADC_CHANNELS_EXT * sizeof(uint32_t))
5050
#define ADC_DMA_BUF_SIZE_MAX (16 * sizeof(uint32_t)) // 16 channels is max for the ADC sequencer
5151

52-
DTCM_RAM uint8_t adc_fifo_rx_buffer[ADC_FIFO_BUFFERS * sizeof(AdcPacket)];
52+
DTCM_RAM uint8_t adc_double_buffer[2 * sizeof(AdcPacket)];
53+
5354
DTCM_RAM uint32_t adc_counts[ADC_CHANNELS];
5455

5556
ADC_EXT_DMA_RAM uint32_t adc_dma_buf_ext[ADC_DMA_BUF_SIZE_MAX / 4];
@@ -70,9 +71,7 @@ uint32_t Adc::init(uint16_t sample_rate_hz, ADC_HandleTypeDef * hadc_ext,
7071
hadcInt_ = hadc_int;
7172
cfg_ = adc_cfg;
7273

73-
groupDelay_ = 1000000 / sampleRateHz_;
74-
75-
rxFifo_.init(ADC_FIFO_BUFFERS, sizeof(AdcPacket), adc_fifo_rx_buffer);
74+
double_buffer_.init(adc_double_buffer, sizeof(adc_double_buffer));
7675

7776
if (DRIVER_OK != configAdc(hadcExt_, adc_instance_ext, cfg_, ADC_CHANNELS_EXT)) {
7877
initializationStatus_ = DRIVER_HAL_ERROR;
@@ -189,14 +188,12 @@ void Adc::endDma(ADC_HandleTypeDef * hadc)
189188
double vcc = p.vRef;
190189
#endif
191190
for (int i = 0; i < ADC_CHANNELS; i++) {
192-
// p.volts[i] = ((double)(adc_counts[i]&0xFFFF)/65535.0 - cfg_[i].offset) * p.vRef * cfg_[i].scaleFactor;
193-
p.volts[i] = ((double) (adc_counts[i] & 0xFFFF) / 65535.0 * p.vRef - vcc * cfg_[i].offset) * cfg_[i].scaleFactor;
191+
p.volts[i] = ((double) (adc_counts[i] & 0xFFFF) / 65535.0 * vcc - cfg_[i].offset) * cfg_[i].scaleFactor;
194192
}
195193

196-
p.header.timestamp = time64.Us();
197-
p.drdy = drdy_;
198-
p.groupDelay = groupDelay_;
199-
rxFifo_.write((uint8_t *) &p, sizeof(p));
194+
p.header.complete = time64.Us();
195+
p.header.timestamp = (drdy_+p.header.complete)/2;
196+
write((uint8_t *) &p, sizeof(p));
200197
ext_read = 0;
201198
int_read = 0;
202199
}
@@ -207,8 +204,8 @@ bool Adc::display(void)
207204
AdcPacket p;
208205
char name[] = "Adc (adc)";
209206

210-
if (rxFifo_.readMostRecent((uint8_t *) &p, sizeof(p))) {
211-
misc_header(name, p.drdy, p.header.timestamp, p.groupDelay);
207+
if (read((uint8_t *) &p, sizeof(p))) {
208+
misc_header(name, p.header);
212209
misc_printf("\n");
213210

214211
misc_printf(" %-8s : ", "STM");

boards/varmint_h7/common/drivers/Adc.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@
3838
#ifndef ADC_H_
3939
#define ADC_H_
4040

41+
#include "DoubleBuffer.h"
4142
#include "BoardConfig.h"
42-
#include "Driver.h"
43+
4344

4445
typedef struct __attribute__((__packed__))
4546
{
@@ -52,7 +53,7 @@ typedef struct __attribute__((__packed__))
5253
/*
5354
*
5455
*/
55-
class Adc : public Driver
56+
class Adc : public Status
5657
{
5758
public:
5859
uint32_t init(uint16_t sample_rate_hz, ADC_HandleTypeDef * hadc_ext,
@@ -64,11 +65,19 @@ class Adc : public Driver
6465
bool poll(uint64_t poll_offset);
6566
void endDma(ADC_HandleTypeDef * hadc);
6667

67-
bool display(void) override;
68+
bool display(void);
6869
bool isMy(ADC_HandleTypeDef * hadc) { return (hadcExt_ == hadc) || (hadcInt_ == hadc); }
6970
void setScaleFactor(uint16_t n, float scale_factor);
7071

72+
bool read(uint8_t * data, uint16_t size) { return double_buffer_.read(data, size)==DoubleBufferStatus::OK; }
73+
7174
private:
75+
bool write(uint8_t * data, uint16_t size) { return double_buffer_.write(data, size)==DoubleBufferStatus::OK; }
76+
DoubleBuffer double_buffer_;
77+
uint16_t sampleRateHz_;
78+
uint64_t drdy_;
79+
80+
7281
uint32_t configChan(ADC_HandleTypeDef * hadc, ADC_ChannelConfTypeDef * sConfig, AdcChannelCfg * cfg);
7382
uint32_t configAdc(ADC_HandleTypeDef * hadc, ADC_TypeDef * adc_instance, AdcChannelCfg * cfg, uint16_t cfg_channels);
7483
ADC_HandleTypeDef *hadcExt_, *hadcInt_; // The shared SPI handle

0 commit comments

Comments
 (0)