HVAC_DEV_Sensor/SensorSPI.c

137 lines
4.0 KiB
C

//
// Created by cfif on 03.06.2024.
//
#include "SensorSPI.h"
#include "SystemDelayInterface.h"
static void setSensorTypeAdr(tSensorSPI *env, tConABC *connABC, uint8_t adr) {
switch (adr) {
case 0: {
GpioPinSet(&connABC->A, false);
GpioPinSet(&connABC->B, false);
GpioPinSet(&connABC->C, false);
break;
}
case 1: {
GpioPinSet(&connABC->A, true);
GpioPinSet(&connABC->B, false);
GpioPinSet(&connABC->C, false);
break;
}
case 2: {
GpioPinSet(&connABC->A, false);
GpioPinSet(&connABC->B, true);
GpioPinSet(&connABC->C, false);
break;
}
case 3: {
GpioPinSet(&connABC->A, true);
GpioPinSet(&connABC->B, true);
GpioPinSet(&connABC->C, false);
break;
}
case 4: {
GpioPinSet(&connABC->A, false);
GpioPinSet(&connABC->B, false);
GpioPinSet(&connABC->C, true);
break;
}
case 5: {
GpioPinSet(&connABC->A, true);
GpioPinSet(&connABC->B, false);
GpioPinSet(&connABC->C, true);
break;
}
case 6: {
GpioPinSet(&connABC->A, false);
GpioPinSet(&connABC->B, true);
GpioPinSet(&connABC->C, true);
break;
}
case 7: {
GpioPinSet(&connABC->A, true);
GpioPinSet(&connABC->B, true);
GpioPinSet(&connABC->C, true);
break;
}
}
}
bool setSpiSensor(tSensorSPI *env, tSensorType sensorType, tSensorAdr sensorAdr, uint16_t data) {
switch (sensorType) {
case SENSOR_TYPE_A: {
if (sensorAdr >= SENSOR_ADR_9) {
GpioPinSet(&env->conns->COON_A_B9_B10.En1, true);
GpioPinSet(&env->conns->COON_A_B9_B10.En2, false);
setSensorTypeAdr(env, &env->conns->COON_A_B9_B10.Con, sensorAdr - 8);
} else {
GpioPinSet(&env->conns->COON_A_B9_B10.En1, false);
GpioPinSet(&env->conns->COON_A_B9_B10.En2, true);
setSensorTypeAdr(env, &env->conns->COON_A_B9_B10.Con, sensorAdr);
}
SystemDelayMs(1);
bool result = SpiPortTransmit(&env->spiPorts->Spi1_IO, &data, 1000);
SystemDelayMs(1);
GpioPinSet(&env->conns->COON_A_B9_B10.En1, true);
GpioPinSet(&env->conns->COON_A_B9_B10.En2, true);
return result;
}
case SENSOR_TYPE_B: {
if ((sensorAdr == SENSOR_ADR_8) || (sensorAdr == SENSOR_ADR_9)) {
GpioPinSet(&env->conns->COON_A_B9_B10.En1, true);
GpioPinSet(&env->conns->COON_A_B9_B10.En2, false);
if (sensorAdr == SENSOR_ADR_8) {
setSensorTypeAdr(env, &env->conns->COON_A_B9_B10.Con, SENSOR_ADR_8 - 1);
}
if (sensorAdr == SENSOR_ADR_9) {
setSensorTypeAdr(env, &env->conns->COON_A_B9_B10.Con, SENSOR_ADR_9 - 1);
}
bool result = SpiPortTransmit(&env->spiPorts->Spi1_IO, &data, 1000);
GpioPinSet(&env->conns->COON_A_B9_B10.En1, true);
GpioPinSet(&env->conns->COON_A_B9_B10.En2, true);
return result;
} else {
GpioPinSet(&env->conns->COON_B.En1, false);
setSensorTypeAdr(env, &env->conns->COON_B.Con, sensorAdr);
bool result = SpiPortTransmit(&env->spiPorts->Spi1_IO, &data, 1000);
GpioPinSet(&env->conns->COON_B.En1, true);
return result;
}
break;
}
case SENSOR_TYPE_C: {
break;
}
case SENSOR_TYPE_D: {
break;
}
}
return false;
}
void SensorSpi_Init(tSensorSPI *env, tSpiPorts *spiPorts, tConns *conns) {
env->spiPorts = spiPorts;
env->conns = conns;
}