HVAC_DEV_V2_DebugTesting/MainModesArbiter.c

139 lines
3.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by cfif on 05.05.23.
//
#include "MainModesArbiter_Private.h"
void Mma_Init(
tMma *env,
tGpios *gpios,
tSerialPorts *serialPorts,
tCanPorts *canPorts,
tSpiPorts *spiPorts,
tRtcs *rtcs
) {
env->gpios = gpios;
env->serialPorts = serialPorts;
env->canPorts = canPorts;
env->spiPorts = spiPorts;
env->rtcs = rtcs;
InitThreadAtrStatic(&env->thread.attr, "Mma", env->thread.controlBlock, env->thread.stack, osPriorityNormal);
env->thread.id = 0;
}
static _Noreturn void Mma_Thread(tMma *env) {
// Запуск устройства
Mma_InitStage(env);
bool result;
/*
uint32_t step_100 = 100000 / 256; // ОМ
uint32_t R100 = 100000;
uint32_t R2 = 100000 - R100; // Для записи в регистр
uint32_t steps = R2 / step_100;
uint32_t step_10 = 10000 / 256; // ОМ
uint32_t R10 = 10000;
uint32_t R3 = 10000 - R10; // Для записи в регистр
uint32_t steps2 = R3 / step_10;
*/
float Rwa = 60.0f;
float R100 = 21000.0f; // Это сколько нужно
float R100ab = 100000.0f;
int32_t D100 = (int32_t) (256.0f - (((R100 - Rwa) / R100ab) * 256.0f));
if (D100 > 255)
D100 = 255;
if (D100 < 0)
D100 = 0;
float R10 = 3000.0f; // Это сколько нужно
float R10ab = 10000.0f;
int32_t D10 = (int32_t) (256.0f - (((R10 - Rwa) / R10ab) * 256.0f));
if (D10 > 255)
D10 = 255;
if (D10 < 0)
D10 = 0;
for (;;) {
/*
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
*/
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_1, D100);
asm("nop");
result = setSpiSensor(&env->sensorSPI, SENSOR_TYPE_A, SENSOR_ADR_2, D10);
asm("nop");
/*
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
data = 0;
result = setSpiSensor(&env->sensorSPI, data);
*/
/*
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
uint16_t data = 255;
bool result = setSpiSensor(&env->sensorSPI, data);
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
data = 128;
result = setSpiSensor(&env->sensorSPI, data);
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
data = 1;
result = setSpiSensor(&env->sensorSPI, data);
GpioPinSet(&env->gpios->Led.ledR1, true);
SystemDelayMs(1000);
GpioPinSet(&env->gpios->Led.ledR1, false);
SystemDelayMs(1000);
data = 0;
result = setSpiSensor(&env->sensorSPI, data);
*/
}
}
void Mma_StartThread(tMma *env) {
if (!env->thread.id) {
env->thread.id = osThreadNew((osThreadFunc_t) (Mma_Thread), (void *) (env), &env->thread.attr);
} else {
osThreadResume(env->thread.id);
}
}