|
|
@@ -24,7 +24,8 @@ nBusAppInterface_t mcu_spi_driver = {
|
|
|
mcu_spi_setParam,
|
|
|
mcu_spi_start,
|
|
|
mcu_spi_stop,
|
|
|
- mcu_spi_readData
|
|
|
+ mcu_spi_readData,
|
|
|
+ mcu_spi_store,
|
|
|
};
|
|
|
|
|
|
|
|
|
@@ -37,6 +38,109 @@ nBusAppInterface_t *getImuDriver(){
|
|
|
return &mcu_spi_driver;
|
|
|
}
|
|
|
|
|
|
+static accel_samplerate getAccelParamSamplerate(int32_t value){
|
|
|
+
|
|
|
+ switch(value){
|
|
|
+ case ACCEL_samplerate_0_27Hz:
|
|
|
+ case ACCEL_samplerate_0_55Hz:
|
|
|
+ case ACCEL_samplerate_102_3Hz:
|
|
|
+ case ACCEL_samplerate_140_6Hz:
|
|
|
+ case ACCEL_samplerate_17_6Hz:
|
|
|
+ case ACCEL_samplerate_187_5Hz:
|
|
|
+ case ACCEL_samplerate_1_1Hz:
|
|
|
+ case ACCEL_samplerate_281_3Hz:
|
|
|
+ case ACCEL_samplerate_2_2Hz:
|
|
|
+ case ACCEL_samplerate_35_2Hz:
|
|
|
+ case ACCEL_samplerate_48_9Hz:
|
|
|
+ case ACCEL_samplerate_4_4Hz:
|
|
|
+ case ACCEL_samplerate_562_5Hz:
|
|
|
+ case ACCEL_samplerate_70_3Hz:
|
|
|
+ case ACCEL_samplerate_8_8Hz:
|
|
|
+ return (accel_samplerate)value;
|
|
|
+ }
|
|
|
+ return ACCEL_samplerate_None;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static accel_full_scale getAccelParamFullScale(int32_t value){
|
|
|
+ switch(value){
|
|
|
+ case ACCEL_FS_2g:
|
|
|
+ case ACCEL_FS_4g:
|
|
|
+ case ACCEL_FS_8g:
|
|
|
+ case ACCEL_FS_16g:
|
|
|
+ return (accel_full_scale)value;
|
|
|
+ }
|
|
|
+ return ACCEL_FS_NoneG;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+static accel_dlp_cfg getAccelParamLowPassFilter(int32_t value){
|
|
|
+ switch(value){
|
|
|
+ case ACCEL_lpf_005_7Hz:
|
|
|
+ case ACCEL_lpf_011_5Hz:
|
|
|
+ case ACCEL_lpf_023_9Hz:
|
|
|
+ case ACCEL_lpf_050_4Hz:
|
|
|
+ case ACCEL_lpf_114_4Hz:
|
|
|
+ case ACCEL_lpf_246Hz:
|
|
|
+ case ACCEL_lpf_473Hz:
|
|
|
+ case ACCEL_lpf_OFF:
|
|
|
+ return (accel_dlp_cfg)value;
|
|
|
+ }
|
|
|
+ return ACCEL_lpf_None;
|
|
|
+}
|
|
|
+
|
|
|
+static gyro_samplerate getGyroParamSamplerate(int32_t value){
|
|
|
+
|
|
|
+ switch(value){
|
|
|
+ case GYRO_samplerate_004_4Hz:
|
|
|
+ case GYRO_samplerate_017_3Hz:
|
|
|
+ case GYRO_samplerate_017_6Hz:
|
|
|
+ case GYRO_samplerate_034_1Hz:
|
|
|
+ case GYRO_samplerate_035_2Hz:
|
|
|
+ case GYRO_samplerate_048_9Hz:
|
|
|
+ case GYRO_samplerate_066_2Hz:
|
|
|
+ case GYRO_samplerate_070_3Hz:
|
|
|
+ case GYRO_samplerate_102_3Hz:
|
|
|
+ case GYRO_samplerate_125_0Hz:
|
|
|
+ case GYRO_samplerate_140_6Hz:
|
|
|
+ case GYRO_samplerate_187_5Hz:
|
|
|
+ case GYRO_samplerate_225_0Hz:
|
|
|
+ case GYRO_samplerate_281_3Hz:
|
|
|
+ case GYRO_samplerate_375_0Hz:
|
|
|
+ case GYRO_samplerate_562_5Hz:
|
|
|
+ return (gyro_samplerate)value;
|
|
|
+ }
|
|
|
+ return GYRO_samplerate_None;
|
|
|
+}
|
|
|
+
|
|
|
+static gyro_full_scale getGyroParamFullScale(int32_t value){
|
|
|
+ switch(value){
|
|
|
+ case GYRO_FS_1000dps:
|
|
|
+ case GYRO_FS_2000dps:
|
|
|
+ case GYRO_FS_250dps:
|
|
|
+ case GYRO_FS_500dps:
|
|
|
+ return (gyro_full_scale)value;
|
|
|
+ }
|
|
|
+ return GYRO_FS_None;
|
|
|
+}
|
|
|
+
|
|
|
+static gyro_dlp_cfg getGyroParamLowPassFilter(int32_t value){
|
|
|
+ switch(value){
|
|
|
+ case GYRO_low_pass_OFF:
|
|
|
+ case GYRO_lpf_005_7Hz:
|
|
|
+ case GYRO_lpf_011_6Hz:
|
|
|
+ case GYRO_lpf_023_9Hz:
|
|
|
+ case GYRO_lpf_051_2Hz:
|
|
|
+ case GYRO_lpf_119_5Hz:
|
|
|
+ case GYRO_lpf_151_8Hz:
|
|
|
+ case GYRO_lpf_196_6Hz:
|
|
|
+ case GYRO_lpf_361_4Hz:
|
|
|
+ return (gyro_dlp_cfg)value;
|
|
|
+ }
|
|
|
+ return GYRO_lpf_None;
|
|
|
+}
|
|
|
+
|
|
|
void mcu_spi_init(void *hw_interface, void *hw_config){
|
|
|
manager = new IcmSpiManager((SPI_HandleTypeDef*)hw_interface); // TODO toto ma byt o uroven vyssie, ale je to c subor
|
|
|
sensor = new Icm20948(manager, (icm20948_Config*)hw_config);
|
|
|
@@ -99,17 +203,156 @@ uint8_t mcu_spi_getData(uint8_t sensor_index, uint8_t *data){
|
|
|
}
|
|
|
|
|
|
uint8_t mcu_spi_setData(uint8_t *data){
|
|
|
- return 0;
|
|
|
+ return 1; // ILLEGAL_FUNCTION;
|
|
|
}
|
|
|
|
|
|
-uint8_t mcu_spi_getParam(uint8_t sensor_index, nBus_param_t param){
|
|
|
- return 0x00;
|
|
|
+int32_t mcu_spi_getParam(uint8_t sensor_index, nBus_param_t param){
|
|
|
+ uint32_t param_value = PARAM_VALUE_NONE;
|
|
|
+ // to module
|
|
|
+ if(sensor_index == 0) {
|
|
|
+ param_value = PARAM_VALUE_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sensor_index == 1) {
|
|
|
+ switch(param){
|
|
|
+ case PARAM_SAMPLERATE:
|
|
|
+ param_value = sensor->accSensor->GetSampleRate();
|
|
|
+ break;
|
|
|
+ case PARAM_RANGE:
|
|
|
+ param_value = sensor->accSensor->GetRange();
|
|
|
+ break;
|
|
|
+ case PARAM_FILTER:
|
|
|
+ param_value = sensor->accSensor->GetLowPassFilter();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ param_value = PARAM_VALUE_NONE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sensor_index == 2) {
|
|
|
+ switch(param){
|
|
|
+ case PARAM_SAMPLERATE:
|
|
|
+ param_value = sensor->gyroSensor->GetSampleRate();
|
|
|
+ break;
|
|
|
+ case PARAM_RANGE:
|
|
|
+ param_value = sensor->gyroSensor->GetRange();
|
|
|
+ break;
|
|
|
+ case PARAM_FILTER:
|
|
|
+ param_value = sensor->gyroSensor->GetLowPassFilter();
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ param_value = PARAM_VALUE_NONE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return param_value;
|
|
|
}
|
|
|
|
|
|
uint8_t mcu_spi_hasParam(uint8_t sensor_index, nBus_param_t param){
|
|
|
+ if(sensor_index == 1 || sensor_index == 2){
|
|
|
+ switch(param){
|
|
|
+ case PARAM_SAMPLERATE:
|
|
|
+ case PARAM_RANGE:
|
|
|
+ case PARAM_FILTER:
|
|
|
+ return 1;
|
|
|
+ default:
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-nBus_param_t mcu_spi_setParam(uint8_t sensor_index, nBus_param_t param, uint8_t value){
|
|
|
- return PARAM_NONE;
|
|
|
+nBus_param_t mcu_spi_setParam(uint8_t sensor_index, nBus_param_t param, int32_t value) {
|
|
|
+ // to module
|
|
|
+ if(sensor_index == 0) {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sensor_index == 1) {
|
|
|
+ switch(param){
|
|
|
+ case PARAM_SAMPLERATE:
|
|
|
+ {
|
|
|
+ accel_samplerate sr = getAccelParamSamplerate(value);
|
|
|
+ if(sr != ACCEL_samplerate_None) {
|
|
|
+ sensor->accSensor->SetSampleRate(sr);
|
|
|
+ } else {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case PARAM_RANGE:
|
|
|
+ {
|
|
|
+ accel_full_scale fs = getAccelParamFullScale(value);
|
|
|
+ if(fs != ACCEL_FS_NoneG) {
|
|
|
+ sensor->accSensor->SetRange(fs);
|
|
|
+ } else {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case PARAM_FILTER:
|
|
|
+ {
|
|
|
+ accel_dlp_cfg lpf = getAccelParamLowPassFilter(value);
|
|
|
+ if(lpf != ACCEL_lpf_None) {
|
|
|
+ sensor->accSensor->SetLowPassFilter(lpf);
|
|
|
+ } else {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(sensor_index == 2) {
|
|
|
+ switch(param){
|
|
|
+ case PARAM_SAMPLERATE:
|
|
|
+ {
|
|
|
+ gyro_samplerate sr = getGyroParamSamplerate(value);
|
|
|
+ if(sr != GYRO_samplerate_None) {
|
|
|
+ sensor->gyroSensor->SetSampleRate(sr);
|
|
|
+ } else {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case PARAM_RANGE:
|
|
|
+ {
|
|
|
+ gyro_full_scale fs = getGyroParamFullScale(value);
|
|
|
+ if(fs != GYRO_FS_None) {
|
|
|
+ sensor->gyroSensor->SetRange(fs);
|
|
|
+ } else {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case PARAM_FILTER:
|
|
|
+ {
|
|
|
+ gyro_dlp_cfg lpf = getGyroParamLowPassFilter(value);
|
|
|
+ if(lpf != GYRO_lpf_None) {
|
|
|
+ sensor->gyroSensor->SetLowPassFilter(lpf);
|
|
|
+ } else {
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return PARAM_NONE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return param;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+uint8_t mcu_spi_store(void){
|
|
|
+ return 0;
|
|
|
}
|