Skip to content

Commit

Permalink
Imported api v0.7.0
Browse files Browse the repository at this point in the history
  • Loading branch information
scaryghost committed Nov 16, 2016
1 parent 7659beb commit 80028ad
Show file tree
Hide file tree
Showing 28 changed files with 1,272 additions and 206 deletions.
2 changes: 1 addition & 1 deletion Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ PROJECT_NAME = "MetaWear C++ API"
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER = 0.6.0
PROJECT_NUMBER = 0.7.0

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ dist/
└── lib
└── x64
├── libmetawear.so -> libmetawear.so.0
├── libmetawear.so.0 -> libmetawear.so.0.6.0
└── libmetawear.so.0.6.0
├── libmetawear.so.0 -> libmetawear.so.0.7.0
└── libmetawear.so.0.7.0

```

Expand Down Expand Up @@ -92,9 +92,9 @@ python3 -m unittest discover -s test
................................................................................
................................................................................
................................................................................
...
.........
----------------------------------------------------------------------
Ran 323 tests in 6.104s
Ran 329 tests in 6.292s

OK

Expand Down Expand Up @@ -125,9 +125,9 @@ Test:
python3 -m unittest discover -s test
.....................................................................................................................
.....................................................................................................................
.........................................................................................
...............................................................................................
----------------------------------------------------------------------
Ran 323 tests in 6.104s
Ran 329 tests in 6.292s
OK
Expand All @@ -139,4 +139,4 @@ Build succeeded.
0 Error(s)
Time Elapsed 00:00:07.68
```
```
4 changes: 2 additions & 2 deletions project_version.mk
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VERSION=0.6.0
VERSION=0.7.0
VERSION_MAJOR=0
VERSION_MINOR=6
VERSION_MINOR=7
VERSION_STEP=0
7 changes: 6 additions & 1 deletion src/metawear/core/cpp/datainterpreter.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@ enum class DataInterpreter : uint8_t {
BMI160_ROTATION_UNSIGNED_SINGLE_AXIS,
BOSCH_ACCELERATION_UNSIGNED_SINGLE_AXIS,
MMA8452Q_ACCELERATION_UNSIGNED_SINGLE_AXIS,
BMM150_B_FIELD_UNSIGNED_SINGLE_AXIS
BMM150_B_FIELD_UNSIGNED_SINGLE_AXIS,
SENSOR_FUSION_QUATERION,
SENSOR_FUSION_EULER_ANGLE,
SENSOR_FUSION_CORRECTED_FLOAT_VECTOR3,
SENSOR_FUSION_FLOAT_VECTOR3,
SENSOR_FUSION_CORRECTED_ACC
};

enum class FirmwareConverter : uint8_t {
Expand Down
5 changes: 4 additions & 1 deletion src/metawear/core/data.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ typedef enum {
MBL_MW_DT_ID_INT32, ///< Data is a signed integer
MBL_MW_DT_ID_BYTE_ARRAY, ///< Data is a byte array
MBL_MW_DT_ID_BATTERY_STATE, ///< Data is a BatteryState
MBL_MW_DT_ID_TCS34725_ADC ///< Data is a Tcs34725ColorAdc
MBL_MW_DT_ID_TCS34725_ADC, ///< Data is a Tcs34725ColorAdc
MBL_MW_DT_ID_EULER_ANGLE,
MBL_MW_DT_ID_QUATERNION,
MBL_MW_DT_ID_CORRECTED_CARTESIAN_FLOAT
} MblMwDataTypeId;

/**
Expand Down
1 change: 1 addition & 0 deletions src/metawear/core/module.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,6 @@ typedef enum {
MBL_MW_MODULE_HUMIDITY,
MBL_MW_MODULE_COLOR_DETECTOR,
MBL_MW_MODULE_PROXIMITY,
MBL_MW_MODULE_SENSOR_FUSION,
MBL_MW_MODULE_DEBUG = 0xfe
} MblMwModule;
30 changes: 30 additions & 0 deletions src/metawear/core/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,33 @@ typedef struct {
uint16_t green; ///< ADC value from a green filtered diode
uint16_t blue; ///< ADC value from a blue filtered diode
} MblMwTcs34725ColorAdc;

/**
* 4-element float vector holding Euler angles, all values are in degrees
*/
typedef struct {
float heading;
float pitch;
float roll;
float yaw;
} MblMwEulerAngles;

/**
* 4-element float vector containing a normalized quaternion value
*/
typedef struct {
float w;
float x;
float y;
float z;
} MblMwQuaternion;

/**
* Variant of the MblMwCartesianFloat struct that also reports data accuracy
*/
typedef struct {
float x;
float y;
float z;
uint8_t accuracy;
} MblMwCorrectedCartesianFloat;
147 changes: 57 additions & 90 deletions src/metawear/impl/cpp/datainterpreter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,24 @@ struct CartesianShort {
msg->length= sizeof(*value);\
return msg

static const float BOSCH_BARO_SCALE= 256.f, TEMPERATURE_SCALE= 8.f, MMA8452Q_ACC_SCALE= 1000.f, BMM150_SCALE= 16.f, BME280_HUMIDITY_SCALE= 1024.f,
Q16_16_SCALE= 0x10000;
#define CONVERT_TO_FLOAT(name, raw_type, scale) static MblMwData* name(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {\
raw_type unscaled;\
CAST_INT32(unscaled)\
\
float *value= (float*) malloc(sizeof(float));\
*value= unscaled / scale;\
\
CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);\
}\

#define RAW_CONVERT(name, type, type_id) static MblMwData* name(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {\
type* value = (type*) malloc(sizeof(type));\
memcpy(value, response, sizeof(type));\
CREATE_MESSAGE(type_id);\
}\

const float BOSCH_BARO_SCALE= 256.f, TEMPERATURE_SCALE= 8.f, MMA8452Q_ACC_SCALE= 1000.f, BMM150_SCALE= 16.f, BME280_HUMIDITY_SCALE= 1024.f,
Q16_16_SCALE= 0x10000, SENSOR_FUSION_ACC_SCALE = 1000.f, MSS_TO_G_SCALE = 9.80665f;

static MblMwData* convert_to_int32(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
int32_t *value = (int32_t*) malloc(sizeof(int32_t));
Expand All @@ -57,36 +73,6 @@ static MblMwData* convert_to_uint32(bool log_data, const MblMwDataSignal* signal
CREATE_MESSAGE(MBL_MW_DT_ID_UINT32);
}

static MblMwData* convert_to_temperature(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
int32_t unscaled;
CAST_INT32(unscaled)

float *value= (float*) malloc(sizeof(float));
*value= unscaled / TEMPERATURE_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_bmp280_pressure(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
uint32_t unscaled;
memcpy(&unscaled, response, sizeof(unscaled));

float *value= (float*) malloc(sizeof(float));
*value= unscaled / BOSCH_BARO_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_bmp280_altitude(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
int32_t unscaled;
memcpy(&unscaled, response, sizeof(unscaled));

float *value= (float*) malloc(sizeof(float));
*value= unscaled / BOSCH_BARO_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_mma8452q_acceleration(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
CartesianShort milliG;
memcpy(&milliG, response, sizeof(milliG));
Expand All @@ -99,26 +85,6 @@ static MblMwData* convert_to_mma8452q_acceleration(bool log_data, const MblMwDat
CREATE_MESSAGE(MBL_MW_DT_ID_CARTESIAN_FLOAT);
}

static MblMwData* convert_to_mma8452q_acceleration_single_axis(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
int32_t unscaled;
CAST_INT32(unscaled)

float *value = (float*) malloc(sizeof(float));
*value = unscaled / MMA8452Q_ACC_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_mma8452q_acceleration_unsigned_single_axis(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
uint32_t unscaled= 0;
CAST_UINT32(unscaled)

float *value= (float*) malloc(sizeof(float));
*value = unscaled / MMA8452Q_ACC_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_bosch_acceleration(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
CartesianShort unscaled;
memcpy(&unscaled, response, sizeof(unscaled));
Expand Down Expand Up @@ -210,26 +176,6 @@ static MblMwData* convert_to_bmm150_b_field(bool log_data, const MblMwDataSignal
CREATE_MESSAGE(MBL_MW_DT_ID_CARTESIAN_FLOAT);
}

static MblMwData* convert_to_bmm150_b_field_single_axis(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
int32_t unscaled;
CAST_INT32(unscaled)

float *value = (float*) malloc(sizeof(float));
*value = unscaled / BMM150_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_bmm150_b_field_unsigned_single_axis(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
uint32_t unscaled= 0;
CAST_UINT32(unscaled)

float *value= (float*) malloc(sizeof(float));
*value = unscaled / BMM150_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
}

static MblMwData* convert_to_battery_state(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
MblMwBatteryState *value= (MblMwBatteryState*) malloc(sizeof(MblMwBatteryState));
memcpy(&value->voltage, response + 1, 2);
Expand All @@ -238,31 +184,47 @@ static MblMwData* convert_to_battery_state(bool log_data, const MblMwDataSignal*
CREATE_MESSAGE(MBL_MW_DT_ID_BATTERY_STATE);
}

static MblMwData* convert_to_tcs34725_adc(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
MblMwTcs34725ColorAdc *value= (MblMwTcs34725ColorAdc*) malloc(sizeof(MblMwTcs34725ColorAdc));
memcpy(value, response, sizeof(MblMwTcs34725ColorAdc));
CONVERT_TO_FLOAT(convert_to_temperature, int32_t, TEMPERATURE_SCALE)

CREATE_MESSAGE(MBL_MW_DT_ID_TCS34725_ADC);
}
CONVERT_TO_FLOAT(convert_to_mma8452q_acceleration_single_axis, int32_t, MMA8452Q_ACC_SCALE)
CONVERT_TO_FLOAT(convert_to_mma8452q_acceleration_unsigned_single_axis, uint32_t, MMA8452Q_ACC_SCALE)

static MblMwData* convert_to_bme280_humidity(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
uint32_t unscaled;
memcpy(&unscaled, response, sizeof(unscaled));
CONVERT_TO_FLOAT(convert_to_bmp280_pressure, uint32_t, BOSCH_BARO_SCALE)
CONVERT_TO_FLOAT(convert_to_bmp280_altitude, int32_t, BOSCH_BARO_SCALE)

float *value= (float*) malloc(sizeof(float));
*value= unscaled / BME280_HUMIDITY_SCALE;
CONVERT_TO_FLOAT(convert_to_bmm150_b_field_single_axis, int32_t, BMM150_SCALE)
CONVERT_TO_FLOAT(convert_to_bmm150_b_field_unsigned_single_axis, uint32_t, BMM150_SCALE)

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
CONVERT_TO_FLOAT(convert_to_bme280_humidity, uint32_t, BME280_HUMIDITY_SCALE)
CONVERT_TO_FLOAT(convert_to_q16_16_fixed_point, int32_t, MBL_MW_DT_ID_FLOAT)

RAW_CONVERT(convert_to_tcs34725_adc, MblMwTcs34725ColorAdc, MBL_MW_DT_ID_TCS34725_ADC)

RAW_CONVERT(convert_to_quaternion, MblMwQuaternion, MBL_MW_DT_ID_QUATERNION)
RAW_CONVERT(convert_to_euler_angles, MblMwEulerAngles, MBL_MW_DT_ID_EULER_ANGLE)
RAW_CONVERT(convert_to_corrected_vector3, MblMwCorrectedCartesianFloat, MBL_MW_DT_ID_CORRECTED_CARTESIAN_FLOAT)

static MblMwData* convert_to_vector3(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
MblMwCartesianFloat *unscaled = (MblMwCartesianFloat*) response,
*value = (MblMwCartesianFloat*) malloc(sizeof(MblMwCartesianFloat));

value->x = unscaled->x / MSS_TO_G_SCALE;
value->y = unscaled->y / MSS_TO_G_SCALE;
value->z = unscaled->z / MSS_TO_G_SCALE;

CREATE_MESSAGE(MBL_MW_DT_ID_CARTESIAN_FLOAT);
}

static MblMwData* convert_to_q16_16_fixed_point(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
int32_t unscaled;
memcpy(&unscaled, response, sizeof(unscaled));
static MblMwData* convert_to_corrected_acc(bool log_data, const MblMwDataSignal* signal, const uint8_t *response, uint8_t len) {
MblMwCorrectedCartesianFloat *unscaled = (MblMwCorrectedCartesianFloat*) response,
*value = (MblMwCorrectedCartesianFloat*) malloc(sizeof(MblMwCorrectedCartesianFloat));

float *value= (float*) malloc(sizeof(float));
*value = unscaled / Q16_16_SCALE;
value->x = unscaled->x / SENSOR_FUSION_ACC_SCALE;
value->y = unscaled->y / SENSOR_FUSION_ACC_SCALE;
value->z = unscaled->z / SENSOR_FUSION_ACC_SCALE;
value->accuracy = unscaled->accuracy;

CREATE_MESSAGE(MBL_MW_DT_ID_FLOAT);
CREATE_MESSAGE(MBL_MW_DT_ID_CORRECTED_CARTESIAN_FLOAT);
}

unordered_map<DataInterpreter, DataInterpreter> signed_to_unsigned= {
Expand Down Expand Up @@ -305,7 +267,12 @@ unordered_map<DataInterpreter, FnBoolDataSignalByteArray> data_response_converte
{ DataInterpreter::SETTINGS_BATTERY_STATE , convert_to_battery_state },
{ DataInterpreter::TCS34725_COLOR_ADC , convert_to_tcs34725_adc },
{ DataInterpreter::BME280_HUMIDITY , convert_to_bme280_humidity },
{ DataInterpreter::Q16_16_FIXED_POINT , convert_to_q16_16_fixed_point }
{ DataInterpreter::Q16_16_FIXED_POINT , convert_to_q16_16_fixed_point },
{ DataInterpreter::SENSOR_FUSION_QUATERION , convert_to_quaternion },
{ DataInterpreter::SENSOR_FUSION_EULER_ANGLE , convert_to_euler_angles },
{ DataInterpreter::SENSOR_FUSION_CORRECTED_FLOAT_VECTOR3 , convert_to_corrected_vector3 },
{ DataInterpreter::SENSOR_FUSION_FLOAT_VECTOR3 , convert_to_vector3 },
{ DataInterpreter::SENSOR_FUSION_CORRECTED_ACC , convert_to_corrected_acc }
};

static float bosch_acc_to_firmware(const MblMwDataSignal* signal, float value) {
Expand Down
5 changes: 4 additions & 1 deletion src/metawear/impl/cpp/metawearboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include "metawear/sensor/cpp/proximity_tsl2671_private.h"
#include "metawear/sensor/cpp/serialpassthrough_private.h"
#include "metawear/sensor/cpp/serialpassthrough_register.h"
#include "metawear/sensor/cpp/sensor_fusion_private.h"
#include "metawear/sensor/cpp/switch_private.h"

using std::chrono::duration_cast;
Expand Down Expand Up @@ -139,7 +140,8 @@ const vector<void(*)(MblMwMetaWearBoard*)> INITIALIZE_FNS = {
init_dataprocessor_module,
init_gpio_module,
init_serialpassthrough_module,
init_switch_module
init_switch_module,
init_sensor_fusion_module
};

const uint8_t READ_INFO_REGISTER= READ_REGISTER(0x0);
Expand Down Expand Up @@ -167,6 +169,7 @@ const vector<vector<uint8_t>> MODULE_DISCOVERY_CMDS= {
{MBL_MW_MODULE_HUMIDITY, READ_INFO_REGISTER},
{MBL_MW_MODULE_COLOR_DETECTOR, READ_INFO_REGISTER},
{MBL_MW_MODULE_PROXIMITY, READ_INFO_REGISTER},
{MBL_MW_MODULE_SENSOR_FUSION, READ_INFO_REGISTER},
{MBL_MW_MODULE_DEBUG, READ_INFO_REGISTER}
};

Expand Down
Loading

0 comments on commit 80028ad

Please sign in to comment.