This commit is contained in:
cfif 2026-05-29 15:09:13 +03:00
parent 7de6ea1a1d
commit 47757ea4ee
2 changed files with 187 additions and 89 deletions

View File

@ -9,32 +9,7 @@
#include "AsciiStringParsingUtils.h"
#include "memory.h"
#include <stdlib.h>
/*
void sendOk(tAtCmd *AtCmd) {
AtCmdPrepare(AtCmd);
AtCmdTxClear(AtCmd);
AtCmdTxAddStatic(AtCmd, "OK");
AtCmdTxSendLn(AtCmd);
AtCmdRxClear(AtCmd);
}
void sendError(tAtCmd *AtCmd) {
AtCmdPrepare(AtCmd);
AtCmdTxClear(AtCmd);
AtCmdTxAddStatic(AtCmd, "ERROR");
AtCmdTxSendLn(AtCmd);
AtCmdRxClear(AtCmd);
}
void sendVers(tAtCmd *AtCmd) {
AtCmdPrepare(AtCmd);
AtCmdTxClear(AtCmd);
AtCmdTxAddStatic(AtCmd, "v001");
AtCmdTxSendLn(AtCmd);
AtCmdRxClear(AtCmd);
}
*/
#include "dig_pot.h"
//начало ------------------------------Отправка без подтверждения-------------------------------------------------------
@ -45,7 +20,6 @@ void TaskSerialToCanCyclic0_Init(tTaskSerialToCanCyclic *env,
tSerialPortFrameIO *ioCAN
) {
// env->access = osMutexNew(NULL);
env->ioCAN = ioCAN;
env->txDataQueue = osMessageQueueNew(20, sizeof(can_rx_message_type), NULL);
@ -57,8 +31,6 @@ void TaskSerialToCanCyclic0_Init(tTaskSerialToCanCyclic *env,
static _Noreturn void Serial_ToCanCyclic0_Thread(tTaskSerialToCanCyclic *env) {
for (;;) {
// if (osMutexAcquire(env->access, 1000) == osOK) {
can_rx_message_type data;
if (osMessageQueueGet(env->txDataQueue, &data, NULL, 1000) == osOK) {
@ -71,18 +43,13 @@ static _Noreturn void Serial_ToCanCyclic0_Thread(tTaskSerialToCanCyclic *env) {
}
}
// osMutexRelease(env->access);
// }
}
}
uint32_t GetCountQueueCanCyclic0(tTaskSerialToCanCyclic *env) {
uint32_t count = 0;
// if (osMutexAcquire(env->access, 1000) == osOK) {
count = osMessageQueueGetCount(env->txDataQueue);
// osMutexRelease(env->access);
// }
return count;
}
@ -90,10 +57,7 @@ uint32_t GetCountQueueCanCyclic0(tTaskSerialToCanCyclic *env) {
osStatus_t PutQueueCanCyclic0(tTaskSerialToCanCyclic *env, can_rx_message_type *dataCan) {
osStatus_t status = osErrorTimeout;
// if (osMutexAcquire(env->access, 1000) == osOK) {
status = osMessageQueuePut(env->txDataQueue, dataCan, 0x0, 0U);
// osMutexRelease(env->access);
// }
return status;
}
@ -118,7 +82,6 @@ void TaskSerialToCanCyclic1_Init(tTaskSerialToCanCyclic *env,
) {
// env->access = osMutexNew(NULL);
env->ioCAN = ioCAN;
env->txDataQueue = osMessageQueueNew(20, sizeof(can_rx_message_type), NULL);
@ -130,8 +93,6 @@ void TaskSerialToCanCyclic1_Init(tTaskSerialToCanCyclic *env,
static _Noreturn void Serial_ToCanCyclic1_Thread(tTaskSerialToCanCyclic *env) {
for (;;) {
// if (osMutexAcquire(env->access, 1000) == osOK) {
can_rx_message_type data;
if (osMessageQueueGet(env->txDataQueue, &data, NULL, 1000) == osOK) {
@ -144,18 +105,13 @@ static _Noreturn void Serial_ToCanCyclic1_Thread(tTaskSerialToCanCyclic *env) {
}
}
// osMutexRelease(env->access);
// }
}
}
uint32_t GetCountQueueCanCyclic1(tTaskSerialToCanCyclic *env) {
uint32_t count = 0;
// if (osMutexAcquire(env->access, 1000) == osOK) {
count = osMessageQueueGetCount(env->txDataQueue);
// osMutexRelease(env->access);
// }
return count;
}
@ -163,10 +119,7 @@ uint32_t GetCountQueueCanCyclic1(tTaskSerialToCanCyclic *env) {
osStatus_t PutQueueCanCyclic1(tTaskSerialToCanCyclic *env, can_rx_message_type *dataCan) {
osStatus_t status = osErrorTimeout;
// if (osMutexAcquire(env->access, 1000) == osOK) {
status = osMessageQueuePut(env->txDataQueue, dataCan, 0x0, 0U);
// osMutexRelease(env->access);
// }
return status;
}
@ -193,7 +146,6 @@ void TaskSerialToCanSpontany_Init(tTaskSerialToCanSpontany *env,
) {
// env->access = osMutexNew(NULL);
env->ioCAN = ioCAN;
env->ioUSB1 = ioUSB1;
@ -209,8 +161,6 @@ void TaskSerialToCanSpontany_Init(tTaskSerialToCanSpontany *env,
static _Noreturn void Serial_ToCanSpontany_Thread(tTaskSerialToCanSpontany *env) {
for (;;) {
// if (osMutexAcquire(env->access, 1000) == osOK) {
can_rx_message_Spontany data;
if (osMessageQueueGet(env->txDataQueue, &data, NULL, 1000) == osOK) {
@ -254,18 +204,13 @@ static _Noreturn void Serial_ToCanSpontany_Thread(tTaskSerialToCanSpontany *env)
}
}
// osMutexRelease(env->access);
// }
}
}
osStatus_t PutQueueCanSpontany(tTaskSerialToCanSpontany *env, can_rx_message_Spontany *dataCan) {
osStatus_t status = osErrorTimeout;
// if (osMutexAcquire(env->access, 1000) == osOK) {
status = osMessageQueuePut(env->txDataQueue, dataCan, 0x0, 0U);
// osMutexRelease(env->access);
// }
return status;
}
@ -286,6 +231,50 @@ void TaskSerialToCanSpontany_StartThread(tTaskSerialToCanSpontany *env) {
//начало ------------------------------Парсер команд--------------------------------------------------------------------
//начало ------------------------------Парсер команд--------------------------------------------------------------------
//начало ------------------------------Парсер команд--------------------------------------------------------------------
static bool
setResistance(tTaskSerial *env, char *name, const TablePoint *table, int table_size, tSensorType sensorType,
tSensorAdr sensorAdr1, tSensorAdr sensorAdr2) {
char *start = env->At.rxBuffer.data + strlen(name);
int16_t temperature = atoi(start);
uint32_t resistance = get_resistance_by_temperature_linear(table, table_size, temperature);
uint8_t step100;
uint8_t step10;
find_steps_for_resistance(resistance, &step100, &step10);
step100 = 255 - step100;
step10 = 255 - step10;
bool result1 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr1, step100);
bool result2 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr2, step10);
if ((result1) && (result2)) {
env->ioUSB->transmit(env->ioUSB->env, (uint8_t *) "OK\r\n", sizeof("OK\r\n") - 1, 1000);
} else {
env->ioUSB->transmit(env->ioUSB->env, (uint8_t *) "ERROR\r\n", sizeof("ERROR\r\n") - 1, 1000);
}
return (result1 && result2);
}
static bool
setResistanceInit(tTaskSerial *env, char *name, int16_t temperature, const TablePoint *table, int table_size,
tSensorType sensorType,
tSensorAdr sensorAdr1, tSensorAdr sensorAdr2) {
uint32_t resistance = get_resistance_by_temperature_linear(table, table_size, temperature);
uint8_t step100;
uint8_t step10;
find_steps_for_resistance(resistance, &step100, &step10);
step100 = 255 - step100;
step10 = 255 - step10;
bool result1 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr1, step100);
bool result2 = setSpiSensor(env->sensorSPI, sensorType, sensorAdr2, step10);
return (result1 && result2);
}
void SerialCommand_Scheduler(tTaskSerial *env) {
@ -296,6 +285,7 @@ void SerialCommand_Scheduler(tTaskSerial *env) {
if (AtCmdRxBeginWithStatic(&env->At, "T")) {
uint8_t data[8];
memset(data, 0, sizeof(data));
uint8_t size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[1], 2);
uint8_t opt = data[0];
@ -345,16 +335,15 @@ void SerialCommand_Scheduler(tTaskSerial *env) {
if (AtCmdRxBeginWithStatic(&env->At, "t")) {
uint8_t data[8];
//uint32_t adr = iAsciiStringParseUnsignedLongDecimalNumber(&env->At.rxBuffer.data[1],
// &env->At.rxBuffer.data[9]);
memset(data, 0, sizeof(data));
uint8_t size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[0], 1);
uint8_t size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[1], 2);
uint8_t opt = data[0];
size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[1], 1);
size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[3], 2);
uint8_t remote = data[0];
size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[3], 8);
size = iAsciiStringParseHexBytes(data, &env->At.rxBuffer.data[5], 8);
uint32_t adr = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | (data[3] << 0);
uint8_t len = &env->At.rxBuffer.data[env->At.rxBuffer.len] - &env->At.rxBuffer.data[9] - 2;
@ -393,12 +382,76 @@ void SerialCommand_Scheduler(tTaskSerial *env) {
}
if (AtCmdRxBeginWithStatic(&env->At, "V")) {
env->ioUSB->transmit(env->ioUSB->env, (uint8_t *) "v001\r\n", sizeof("v001\r\n") - 1, 1000);
SystemDelayMs(1);
env->ioUSB->transmit(env->ioUSB->env, (uint8_t *) "OK\r\n", sizeof("OK\r\n") - 1, 1000);
env->ioUSB->transmit(env->ioUSB->env, (uint8_t *) "v001\r\nOK\r\n", sizeof("v001\r\nOK\r\n") - 1, 1000);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_FL_Upper")) {
setResistance(env, "Duct_FL_Upper", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_A,
SENSOR_ADR_1, SENSOR_ADR_2);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_FR_Upper")) {
setResistance(env, "Duct_FR_Upper", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_A,
SENSOR_ADR_3, SENSOR_ADR_4);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_FL_Lower")) {
setResistance(env, "Duct_FL_Lower", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_A,
SENSOR_ADR_5, SENSOR_ADR_6);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_FR_Lower")) {
setResistance(env, "Duct_FR_Lower", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_A,
SENSOR_ADR_7, SENSOR_ADR_8);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_FL_Side")) {
setResistance(env, "Duct_FL_Side", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_A,
SENSOR_ADR_9, SENSOR_ADR_10);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_FR_Side")) {
setResistance(env, "Duct_FR_Side", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_A,
SENSOR_ADR_11, SENSOR_ADR_12);
}
if (AtCmdRxBeginWithStatic(&env->At, "Sen_Eva_F")) {
setResistance(env, "Sen_Eva_F", duct_lookup_table_20000, size_duct_lookup_table_20000, SENSOR_TYPE_A,
SENSOR_ADR_13, SENSOR_ADR_14);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_RL_Side")) {
setResistance(env, "Duct_RL_Side", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
SENSOR_ADR_5, SENSOR_ADR_6);
continue;
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_RR_Side")) {
setResistance(env, "Duct_RR_Side", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
SENSOR_ADR_7, SENSOR_ADR_8);
continue;
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_RL")) {
setResistance(env, "Duct_RL", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
SENSOR_ADR_1, SENSOR_ADR_2);
}
if (AtCmdRxBeginWithStatic(&env->At, "Duct_RR")) {
setResistance(env, "Duct_RR", duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
SENSOR_ADR_3, SENSOR_ADR_4);
}
if (AtCmdRxBeginWithStatic(&env->At, "Sen_Eva_R")) {
setResistance(env, "Sen_Eva_R", duct_lookup_table_20000, size_duct_lookup_table_20000, SENSOR_TYPE_B,
SENSOR_ADR_9, SENSOR_ADR_10);
}
}
}
//конец ------------------------------Парсер команд--------------------------------------------------------------------
@ -416,15 +469,15 @@ void TaskSerialUSB1_Init(tTaskSerial *env,
tSerialPortIO *ioUSB1,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic0,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic1,
tTaskSerialToCanSpontany *TaskSerialToCanSpontany
tTaskSerialToCanSpontany *TaskSerialToCanSpontany,
tSensorSPI *sensorSPI
) {
// env->access = osMutexNew(NULL);
env->from_usb = from_usb;
env->ioUSB = ioUSB1;
env->sensorSPI = sensorSPI;
env->TaskSerialToCanCyclic0 = TaskSerialToCanCyclic0;
env->TaskSerialToCanCyclic1 = TaskSerialToCanCyclic1;
env->TaskSerialToCanSpontany = TaskSerialToCanSpontany;
@ -443,15 +496,60 @@ void TaskSerialUSB1_Init(tTaskSerial *env,
static _Noreturn void Serial_USB1_Thread(tTaskSerial *env) {
int16_t temperature = 250;
setResistanceInit(env, "Duct_FL_Upper", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_A,
SENSOR_ADR_1,
SENSOR_ADR_2);
setResistanceInit(env, "Duct_FR_Upper", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_A,
SENSOR_ADR_3,
SENSOR_ADR_4);
setResistanceInit(env, "Duct_FL_Lower", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_A,
SENSOR_ADR_5,
SENSOR_ADR_6);
setResistanceInit(env, "Duct_FR_Lower", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_A,
SENSOR_ADR_7,
SENSOR_ADR_8);
setResistanceInit(env, "Duct_FL_Side", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_A,
SENSOR_ADR_9,
SENSOR_ADR_10);
setResistanceInit(env, "Duct_FR_Side", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_A,
SENSOR_ADR_11,
SENSOR_ADR_12);
setResistanceInit(env, "Sen_Eva_F", temperature, duct_lookup_table_20000, size_duct_lookup_table_20000,
SENSOR_TYPE_A,
SENSOR_ADR_13,
SENSOR_ADR_14);
setResistanceInit(env, "Duct_RL_Side", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_B,
SENSOR_ADR_5,
SENSOR_ADR_6);
setResistanceInit(env, "Duct_RR_Side", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000,
SENSOR_TYPE_B,
SENSOR_ADR_7,
SENSOR_ADR_8);
setResistanceInit(env, "Duct_RL", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
SENSOR_ADR_1,
SENSOR_ADR_2);
setResistanceInit(env, "Duct_RR", temperature, duct_lookup_table_3000, size_duct_lookup_table_3000, SENSOR_TYPE_B,
SENSOR_ADR_3,
SENSOR_ADR_4);
setResistanceInit(env, "Sen_Eva_R", temperature, duct_lookup_table_20000, size_duct_lookup_table_20000,
SENSOR_TYPE_B,
SENSOR_ADR_9,
SENSOR_ADR_10);
for (;;) {
// if (osMutexAcquire(env->access, 1000) == osOK) {
SerialCommand_Scheduler(env);
// osMutexRelease(env->access);
// }
SystemDelayMs(1);
}
}
@ -476,12 +574,13 @@ void TaskSerialUSB2_Init(tTaskSerial *env,
tSerialPortIO *ioUSB2,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic0,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic1,
tTaskSerialToCanSpontany *TaskSerialToCanSpontany
tTaskSerialToCanSpontany *TaskSerialToCanSpontany,
tSensorSPI *sensorSPI
) {
// env->access = osMutexNew(NULL);
env->from_usb = from_usb;
env->sensorSPI = sensorSPI;
env->ioUSB = ioUSB2;
env->TaskSerialToCanCyclic0 = TaskSerialToCanCyclic0;
@ -504,13 +603,8 @@ void TaskSerialUSB2_Init(tTaskSerial *env,
static _Noreturn void Serial_USB2_Thread(tTaskSerial *env) {
for (;;) {
// if (osMutexAcquire(env->access, 1000) == osOK) {
SerialCommand_Scheduler(env);
// osMutexRelease(env->access);
// }
SystemDelayMs(1);
}
}
@ -657,7 +751,7 @@ void Task_RECEIVED_SerialUSB2_Init(tTaskReceivedSerial *env,
// env->access = osMutexNew(NULL);
env->from_usb = from_usb2;
env->ioUSB= ioUSB2;
env->ioUSB = ioUSB2;
env->ioCAN = ioCAN;
SerialPortClearRxBuffer(env->ioUSB);

View File

@ -9,7 +9,7 @@
#include "SerialPortIO.h"
#include "AtCmdCommon.h"
#include "CanSerialPortFrame.h"
#include "SensorSPI.h"
typedef enum {
FROM_USB1,
@ -70,6 +70,8 @@ typedef struct {
tTaskSerialToCanCyclic *TaskSerialToCanCyclic1;
tTaskSerialToCanSpontany *TaskSerialToCanSpontany;
tSensorSPI *sensorSPI;
struct {
osThreadId_t id;
uint32_t stack[1024];
@ -109,7 +111,8 @@ void TaskSerialUSB1_Init(tTaskSerial *env,
tSerialPortIO *ioUSB1,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic0,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic1,
tTaskSerialToCanSpontany *TaskSerialToCanSpontany
tTaskSerialToCanSpontany *TaskSerialToCanSpontany,
tSensorSPI *sensorSPI
);
void TaskSerialUSB1_StartThread(tTaskSerial *env);
@ -119,7 +122,8 @@ void TaskSerialUSB2_Init(tTaskSerial *env,
tSerialPortIO *ioUSB2,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic0,
tTaskSerialToCanCyclic *TaskSerialToCanCyclic1,
tTaskSerialToCanSpontany *TaskSerialToCanSpontany
tTaskSerialToCanSpontany *TaskSerialToCanSpontany,
tSensorSPI *sensorSPI
);