diff --git a/.gitmodules b/.gitmodules
index 3292498..455984e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,3 @@
-[submodule "fw/Libs/--force"]
- path = fw/Libs/--force
- url = git@gitlab.com:VelesLabs/stm32libs/sht4x.git
[submodule "fw/Libs/sht4x"]
path = fw/Libs/sht4x
url = git@gitlab.com:VelesLabs/stm32libs/sht4x.git
@@ -10,3 +7,6 @@
[submodule "fw/Libs/sgp40"]
path = fw/Libs/sgp40
url = git@gitlab.com:VelesLabs/stm32libs/sgp40.git
+[submodule "fw/Libs/scd4x"]
+ path = fw/Libs/scd4x
+ url = git@gitlab.com:VelesLabs/stm32libs/scd4x.git
diff --git a/fw/.cproject b/fw/.cproject
index 0fe3c15..ba2b41d 100644
--- a/fw/.cproject
+++ b/fw/.cproject
@@ -33,6 +33,7 @@
+
@@ -63,6 +64,7 @@
+
@@ -92,6 +94,7 @@
+
@@ -128,6 +131,7 @@
+
@@ -157,6 +161,7 @@
+
diff --git a/fw/Core/Inc/scd4x.h b/fw/Core/Inc/scd4x.h
deleted file mode 100644
index 426ff74..0000000
--- a/fw/Core/Inc/scd4x.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * sht4x.h
- *
- * Created on: Jun 8, 2021
- * Author: user
- */
-
-#ifndef INC_SCD4X_H_
-#define INC_SCD4X_H_
-
-#include "stdint.h"
-#include "stm32l0xx_ll_i2c.h"
-#include "stm32l0xx_ll_utils.h"
-#include "i2c.h"
-#include "crc8.h"
-
-/*
- * Defines & macros
- */
-
-#define SCD4X_I2C_ADDRESS 0x62
-
-/*
- * Return values
- */
-
-#define SCD4X_OK 0
-#define SCD4X_ERROR -1 // generic error
-#define SCD4X_CRC8_ERROR -2 // checksum failed
-
-/*
- * Data types
- */
-
-typedef enum {
- SCD4X_START_PERIODIC_MEASUREMENT = 0x21B1,
- SCD4X_READ_MEASUREMENT = 0xEC05,
- SCD4X_STOP_PERIODIC_MEASUREMENT = 0x3F86,
- SCD4X_GET_DATA_READY_STATUS = 0xE4B8,
- SCD4X_PERFORM_FACTORY_RESET = 0x3632,
- SCD4X_GET_SERIAL_NUMBER = 0x3682
-} scd4x_cmd_t;
-
-/*
- * Function prototypes
- */
-
-int8_t scd4x_send_cmd(scd4x_cmd_t cmd);
-int8_t scd4x_read_data(uint8_t *buffer, int len);
-
-int8_t scd4x_start_periodic_measurement( void );
-int8_t scd4x_stop_periodic_measurement( void );
-
-int8_t scd4x_perform_factory_reset( void );
-
-int8_t scd4x_read_measurement(uint16_t * co2, int16_t *temperature, uint16_t *relative_humidity);
-
-#endif /* INC_SCD4X_H_ */
diff --git a/fw/Core/Src/main.c b/fw/Core/Src/main.c
index 7854de1..13b41ee 100644
--- a/fw/Core/Src/main.c
+++ b/fw/Core/Src/main.c
@@ -218,6 +218,26 @@ int8_t sgp40_enable_interrupts(void)
uart_enable_interrupts();
}
+int8_t scd4x_i2c_transmit(uint8_t address, uint8_t *buffer, int len)
+{
+ i2c_transmit(address, buffer, len);
+}
+
+int8_t scd4x_i2c_receive(uint8_t address, uint8_t *buffer, int len)
+{
+ i2c_receive(address, buffer, len);
+}
+
+int8_t scd4x_disable_interrupts(void)
+{
+ uart_disable_interrupts();
+}
+
+int8_t scd4x_enable_interrupts(void)
+{
+ uart_enable_interrupts();
+}
+
void delay_ms(int delay_ms)
{
LL_mDelay(delay_ms);
diff --git a/fw/Core/Src/scd4x.c b/fw/Core/Src/scd4x.c
deleted file mode 100644
index 330d74d..0000000
--- a/fw/Core/Src/scd4x.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * sht4x.c
- *
- * Created on: Jun 8, 2021
- * Author: user
- */
-
-#include "scd4x.h"
-#include "main.h" /* for uart_disable_interrupts() */
-
-int8_t scd4x_send_cmd(scd4x_cmd_t cmd)
-{
- uint8_t buffer[32];
- int result;
-
- // start measurement
- buffer[0] = cmd >> 8;
- buffer[1] = cmd & 0x00ff;
- result = i2c_transmit(SCD4X_I2C_ADDRESS<<1, buffer, 2);
- if (result == I2C_ERROR_TX_INCOMPLETE) {
- return SCD4X_ERROR;
- }
-
- /* Sensirion sensors return NACK after last byte (so NACK at the end is ok) */
- return SCD4X_OK;
-}
-
-int8_t scd4x_get_serial(uint8_t serial[6])
-{
- uint8_t buffer[16];
- int result;
-
- scd4x_send_cmd(SCD4X_GET_SERIAL_NUMBER);
- result = i2c_receive(SCD4X_I2C_ADDRESS << 1, buffer, 9);
- if (result != I2C_OK) {
- return SCD4X_ERROR;
- }
- return SCD4X_OK;
-}
-
-int8_t scd4x_read_data(uint8_t *buffer, int len)
-{
- return SCD4X_OK;
-}
-
-int8_t scd4x_start_periodic_measurement( void )
-{
- return scd4x_send_cmd(SCD4X_START_PERIODIC_MEASUREMENT);
-}
-
-int8_t scd4x_stop_periodic_measurement( void )
-{
- return scd4x_send_cmd(SCD4X_STOP_PERIODIC_MEASUREMENT);
-}
-
-int8_t scd4x_perform_factory_reset( void )
-{
- return scd4x_send_cmd(SCD4X_PERFORM_FACTORY_RESET);
-}
-
-int8_t scd4x_read_measurement(uint16_t *co2, int16_t *temperature, uint16_t *relative_humidity)
-{
- uint8_t buffer[32];
- int result;
-
- // start measurement
- // TODO: Check for data ready
- /*
- buffer[0] = GET_DATA_READY_STATUS >> 8;
- buffer[1] = GET_DATA_READY_STATUS & 0x00ff;
- result = i2c_transmit(SCD4X_I2C_ADDRESS<<1, buffer, 2);
- if (result != I2C_OK) {
- return SCD4X_ERROR;
- }
- LL_mDelay(100); // 10 ms should be enough
- // read out
- result = i2c_receive(SCD4X_I2C_ADDRESS<<1, buffer, 6);
- if (result != I2C_OK) {
- return SCD4X_ERROR;
- }*/
-
- // start measurement
- buffer[0] = SCD4X_READ_MEASUREMENT >> 8;
- buffer[1] = SCD4X_READ_MEASUREMENT & 0x00ff;
- // disable interrupts to prevent MODBUS/I2C conflict
- uart_disable_interrupts();
- result = i2c_transmit(SCD4X_I2C_ADDRESS<<1, buffer, 2);
- uart_enable_interrupts();
- if (result != I2C_OK) {
- return SCD4X_ERROR;
- }
- LL_mDelay(1); // 10 ms should be enough
- // read out
- uart_disable_interrupts();
- result = i2c_receive(SCD4X_I2C_ADDRESS<<1, buffer, 9);
- uart_enable_interrupts();
- if (result != I2C_OK)
- {
- return SCD4X_ERROR;
- }
- /* Convert to T and RH; taken directly from pseudocode in SHT4x datasheet, page 3 */
- uint32_t co2_ticks = (buffer[0] << 8) + buffer[1];
- uint8_t co2_crc = buffer[2];
- uint32_t t_ticks = (buffer[3] << 8) + buffer[4];
- uint8_t t_crc = buffer[5];
- uint32_t rh_ticks = (buffer[6] << 8) + buffer[7];
- uint8_t rh_crc = buffer[8];
- /* check CRC-8 checksum */
- uint8_t crc_correct = crc8_calculate(buffer, 2) == co2_crc;
- crc_correct &= crc8_calculate(buffer + 3, 2) == t_crc;
- crc_correct &= crc8_calculate(buffer + 6, 2) == rh_crc;
- if (!crc_correct) {
- return SCD4X_CRC8_ERROR;
- }
- /* copy to output variables */
- int t_degC = -450 + 10 * 175 * t_ticks / 65535;
- int rh_pRH = 100 * rh_ticks / 65535;
- if (rh_pRH > 100) {
- rh_pRH = 100;
- }
- if (rh_pRH < 0) {
- rh_pRH = 0;
- }
- *co2 = co2_ticks;
- *temperature = t_degC;
- *relative_humidity = rh_pRH;
-
- return SCD4X_OK;
-}
diff --git a/fw/Libs/scd4x b/fw/Libs/scd4x
new file mode 160000
index 0000000..3d2833d
--- /dev/null
+++ b/fw/Libs/scd4x
@@ -0,0 +1 @@
+Subproject commit 3d2833d2cd9d76e2b478bb48cc14035c96df4b06