Skip to content

Commit b06ebca

Browse files
committed
updated liearlite drivers
1 parent caad062 commit b06ebca

File tree

8 files changed

+96
-70
lines changed

8 files changed

+96
-70
lines changed

boards/varmint_h7/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ cmake_install.cmake
1717
varmint_11x_test/
1818
varmint_12x/
1919
Liv4f.*
20+
language.settings.xml

boards/varmint_h7/common/drivers/Lidarlitev3hp.cpp

Lines changed: 82 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ extern Time64 time64;
4545
#define ROLLOVER_US 10000
4646

4747
#define LIDARLITE_STATE_IDLE 0
48-
#define LIDARLITE_STATE_CHK_STATUS 1
49-
#define LIDARLITE_STATE_READ_RANGE 2
50-
#define LIDARLITE_STATE_DONE_READ 3
51-
#define LIDARLITE_STATE_START 4
52-
#define LIDARLITE_STATE_ERROR 0xF
53-
//#define LIDARLITE_STATE_CHK_STATUS 1
54-
48+
#define LIDARLITE_STATE_POLLING 1
49+
#define LIDARLITE_STATE_STATUS_CMD 2
50+
#define LIDARLITE_STATE_STATUS_READ 3
51+
#define LIDARLITE_STATE_DATA_CMD 4
52+
#define LIDARLITE_STATE_DATA_READ 5
53+
#define LIDARLITE_STATE_MEASURE_CMD 6
54+
#define LIDARLITE_STATE_ERROR 7
5555

5656
// Control Register List - Address Definitions
5757
#define ACQ_COMMAND 0x00 // Device command
@@ -96,7 +96,6 @@ uint32_t Lidarlitev3hp::init(
9696
address_ = i2c_address << 1;
9797

9898
i2cState_ = LIDARLITE_STATE_IDLE;
99-
dmaRunning_ = false;
10099

101100
double_buffer_.init(lidarlite_double_buffer, sizeof(lidarlite_double_buffer));
102101

@@ -206,37 +205,84 @@ bool Lidarlitev3hp::poll(uint64_t poll_counter)
206205
PollingState poll_state = (PollingState) (poll_counter % (ROLLOVER_US / POLLING_PERIOD_US));
207206

208207
if( poll_state == 0) {
209-
startDrdyQuery(); // Read most recent measurement
208+
i2cState_ = LIDARLITE_STATE_POLLING;
209+
stateMachine();
210210
}
211211

212212
return true;
213213
}
214214

215-
void Lidarlitev3hp::startDrdyQuery(void) {
216-
lidarlite_i2c_dma_buf[0] = 0;
217-
if (HAL_I2C_Mem_Read_DMA(hi2c_, address_, STATUS, I2C_MEMADD_SIZE_8BIT, lidarlite_i2c_dma_buf, 1) == HAL_OK)
215+
void Lidarlitev3hp::stateMachine(void)
216+
{
217+
switch(i2cState_)
218218
{
219-
i2cState_ = LIDARLITE_STATE_CHK_STATUS;
219+
case LIDARLITE_STATE_IDLE:
220+
{
221+
i2cState_ = LIDARLITE_STATE_ERROR;
222+
break; // pedantic.
223+
}
224+
case LIDARLITE_STATE_POLLING:
225+
{
226+
lidarlite_i2c_dma_buf[0] = STATUS;
227+
if (HAL_I2C_Master_Transmit_DMA(hi2c_, address_, lidarlite_i2c_dma_buf, 1)==HAL_OK) {
228+
i2cState_ = LIDARLITE_STATE_STATUS_CMD;
220229
} else {
221230
i2cState_ = LIDARLITE_STATE_ERROR;
222231
}
223-
return;
232+
break;
224233
}
225-
226-
void Lidarlitev3hp::endRxDma(void)
234+
case LIDARLITE_STATE_STATUS_CMD:
227235
{
228-
if (i2cState_ == LIDARLITE_STATE_CHK_STATUS )
236+
// Start read of Status
237+
lidarlite_i2c_dma_buf[0] = 0;
238+
if (HAL_I2C_Master_Receive_DMA(hi2c_, address_, lidarlite_i2c_dma_buf,1) == HAL_OK) {
239+
i2cState_ = LIDARLITE_STATE_STATUS_READ;
240+
} else {
241+
i2cState_ = LIDARLITE_STATE_ERROR;
242+
}
243+
break;
244+
}
245+
case LIDARLITE_STATE_STATUS_READ:
229246
{
247+
// Check status
230248
status_ = lidarlite_i2c_dma_buf[0];
231-
if ((status_ & 0x01)==0x00) {
249+
if ((status_ & 0x01)==0x00)
250+
{
232251
drdy_ = time64.Us();
233252
// status good, start a read
234-
startDataRead();
253+
lidarlite_i2c_dma_buf[0] = FULL_DELAY_HIGH;
254+
255+
if (HAL_I2C_Master_Transmit_DMA(hi2c_, address_, lidarlite_i2c_dma_buf,1) == HAL_OK) {
256+
i2cState_ = LIDARLITE_STATE_DATA_CMD;
257+
} else {
258+
i2cState_ = LIDARLITE_STATE_ERROR;
259+
}
260+
} else {
261+
// Give up and start a new measurement
262+
lidarlite_i2c_dma_buf[0] = ACQ_COMMAND;
263+
lidarlite_i2c_dma_buf[1] = 0x04;
264+
if (HAL_I2C_Master_Transmit_DMA(hi2c_, address_, lidarlite_i2c_dma_buf, 2) == HAL_OK) {
265+
i2cState_ = LIDARLITE_STATE_MEASURE_CMD;
266+
} else {
267+
i2cState_ = LIDARLITE_STATE_ERROR;
268+
}
269+
}
270+
break;
271+
}
272+
case LIDARLITE_STATE_DATA_CMD:
273+
{
274+
// status good, start a read
275+
lidarlite_i2c_dma_buf[0] = 0;
276+
lidarlite_i2c_dma_buf[1] = 0;
277+
if (HAL_I2C_Master_Receive_DMA(hi2c_, address_, lidarlite_i2c_dma_buf,2) == HAL_OK) {
278+
i2cState_ = LIDARLITE_STATE_DATA_READ;
235279
} else {
236-
// status not jump to command next read
237-
startMeasure();
280+
i2cState_ = LIDARLITE_STATE_ERROR;
281+
}
282+
break;
238283
}
239-
} else if (i2cState_ == LIDARLITE_STATE_READ_RANGE ) {
284+
case LIDARLITE_STATE_DATA_READ:
285+
{
240286
// Reading range data complete
241287
uint16_t urange = (lidarlite_i2c_dma_buf[0]<<8) | lidarlite_i2c_dma_buf[1]; // cm
242288

@@ -251,48 +297,32 @@ void Lidarlitev3hp::endRxDma(void)
251297
// no specific check for status because we did that before starting the read.
252298
write((uint8_t *) &p, sizeof(p));
253299

254-
// Command next read
255-
startMeasure();
300+
// Start Next Measurement
301+
lidarlite_i2c_dma_buf[0] = ACQ_COMMAND;
302+
lidarlite_i2c_dma_buf[1] = 0x04;
303+
if (HAL_I2C_Master_Transmit_DMA(hi2c_, address_, lidarlite_i2c_dma_buf, 2)==HAL_OK) {
304+
i2cState_ = LIDARLITE_STATE_MEASURE_CMD;
256305
} else {
257306
i2cState_ = LIDARLITE_STATE_ERROR;
258307
}
259-
return;
308+
break;
260309
}
261-
262-
void Lidarlitev3hp::startDataRead(void) {
263-
lidarlite_i2c_dma_buf[0] = 0;
264-
lidarlite_i2c_dma_buf[1] = 0;
265-
if (HAL_I2C_Mem_Read_DMA(hi2c_, address_, FULL_DELAY_HIGH, I2C_MEMADD_SIZE_8BIT, lidarlite_i2c_dma_buf,2) == HAL_OK)
310+
case LIDARLITE_STATE_MEASURE_CMD:
266311
{
267-
i2cState_ = LIDARLITE_STATE_READ_RANGE;
268-
} else {
269-
i2cState_ = LIDARLITE_STATE_ERROR;
312+
i2cState_ = LIDARLITE_STATE_IDLE;
313+
break;
270314
}
315+
case LIDARLITE_STATE_ERROR:
316+
{
317+
break;
271318
}
272-
273-
void Lidarlitev3hp::startMeasure(void)
319+
default:
274320
{
275-
lidarlite_i2c_dma_buf[0] = ACQ_COMMAND;
276-
lidarlite_i2c_dma_buf[1] = 0x04;
277-
if ((dmaRunning_ = (HAL_OK == HAL_I2C_Master_Transmit_DMA(hi2c_, address_, lidarlite_i2c_dma_buf, 2)))) {
278-
i2cState_ = LIDARLITE_STATE_START;
279-
} else {
280321
i2cState_ = LIDARLITE_STATE_ERROR;
322+
break; // pedantic.
281323
}
282-
return;
283324
}
284-
285-
void Lidarlitev3hp::endTxDma(void)
286-
{
287-
if ( i2cState_ == LIDARLITE_STATE_START ) {
288-
// Do nothing
289-
} else {
290-
i2cState_ = LIDARLITE_STATE_ERROR;
291325
}
292-
return;
293-
}
294-
295-
296326

297327
bool Lidarlitev3hp::display(void)
298328
{

boards/varmint_h7/common/drivers/Lidarlitev3hp.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ class Lidarlitev3hp : public Status
5858
);
5959

6060
bool poll(uint64_t poll_counter);
61-
void endRxDma(void);
62-
void endTxDma(void);
61+
62+
void stateMachine(void);
6363

6464
bool display(void);
6565
bool isMy(I2C_HandleTypeDef * hi2c) { return hi2c_ == hi2c; }
@@ -71,11 +71,10 @@ class Lidarlitev3hp : public Status
7171
DoubleBuffer double_buffer_;
7272
uint16_t sampleRateHz_;
7373
uint64_t drdy_;
74-
bool dmaRunning_;
7574
uint8_t status_;
7675

7776
I2C_HandleTypeDef * hi2c_;
78-
PollingState i2cState_;
77+
uint32_t i2cState_;
7978
uint16_t address_;
8079
uint8_t cmdByte_;
8180
double dtMs_;

boards/varmint_h7/pixracer_pro/.settings/language.settings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
66
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
77
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
8-
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1163799389998725836" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
8+
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1779376512594220948" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
99
<language-scope id="org.eclipse.cdt.core.gcc"/>
1010
<language-scope id="org.eclipse.cdt.core.g++"/>
1111
</provider>
@@ -16,7 +16,7 @@
1616
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
1717
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
1818
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
19-
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1163799615928075855" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
19+
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1779379388940500081" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
2020
<language-scope id="org.eclipse.cdt.core.gcc"/>
2121
<language-scope id="org.eclipse.cdt.core.g++"/>
2222
</provider>

boards/varmint_h7/varmint_10X/.settings/language.settings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
66
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
77
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
8-
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1163799389998725836" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
8+
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1779376512594220948" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
99
<language-scope id="org.eclipse.cdt.core.gcc"/>
1010
<language-scope id="org.eclipse.cdt.core.g++"/>
1111
</provider>
@@ -16,7 +16,7 @@
1616
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
1717
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
1818
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
19-
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1163799841857425874" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
19+
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1779378137823207758" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
2020
<language-scope id="org.eclipse.cdt.core.gcc"/>
2121
<language-scope id="org.eclipse.cdt.core.g++"/>
2222
</provider>

boards/varmint_h7/varmint_10X/specific/BoardConfig.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@
4040

4141
#include "CommonConfig.h"
4242

43-
#define SANDBOX false
44-
#define BOARD_STATUS_PRINT false
43+
#define SANDBOX true
44+
#define BOARD_STATUS_PRINT true
4545
#define USE_TELEM 0 // 1 = use UART, 0 = use VCP for link to companion computer.
4646

4747
// UART used for printf's

boards/varmint_h7/varmint_10X/specific/Callbacks.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,12 @@ void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef * hspi) // All spi dma rx interr
115115
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef * hi2c)
116116
{
117117
if (varmint.pitot_.isMy(hi2c)) varmint.pitot_.endDma();
118-
}
119-
120-
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c)
121-
{
122-
if (varmint.range_.isMy(hi2c)) varmint.range_.endRxDma();
118+
if (varmint.range_.isMy(hi2c)) varmint.range_.stateMachine();
123119
}
124120

125121
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
126122
{
127-
if (varmint.range_.isMy(hi2c)) varmint.range_.endTxDma();
123+
if (varmint.range_.isMy(hi2c)) varmint.range_.stateMachine();
128124
}
129125

130126
//////////////////////////////////////////////////////////////////////////////////////////

boards/varmint_h7/varmint_11X/.settings/language.settings.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
66
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
77
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
8-
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1163799389998725836" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
8+
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1779376512594220948" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
99
<language-scope id="org.eclipse.cdt.core.gcc"/>
1010
<language-scope id="org.eclipse.cdt.core.g++"/>
1111
</provider>
@@ -16,7 +16,7 @@
1616
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
1717
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
1818
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
19-
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1163799841857425874" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
19+
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-1779378137823207758" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
2020
<language-scope id="org.eclipse.cdt.core.gcc"/>
2121
<language-scope id="org.eclipse.cdt.core.g++"/>
2222
</provider>

0 commit comments

Comments
 (0)