From 47757ea4eea9a1a3a37c681044274040bb3b938d Mon Sep 17 00:00:00 2001 From: cfif Date: Fri, 29 May 2026 15:09:13 +0300 Subject: [PATCH] Init --- ArbiterCommand.c | 266 ++++++++++++++++++++++++++++++++--------------- ArbiterCommand.h | 10 +- 2 files changed, 187 insertions(+), 89 deletions(-) diff --git a/ArbiterCommand.c b/ArbiterCommand.c index bceddbc..b1219e0 100644 --- a/ArbiterCommand.c +++ b/ArbiterCommand.c @@ -9,32 +9,7 @@ #include "AsciiStringParsingUtils.h" #include "memory.h" #include - -/* -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); } } @@ -473,15 +571,16 @@ void TaskSerialUSB1_StartThread(tTaskSerial *env) { void TaskSerialUSB2_Init(tTaskSerial *env, tFrom_usb from_usb, - tSerialPortIO *ioUSB2, - tTaskSerialToCanCyclic *TaskSerialToCanCyclic0, - tTaskSerialToCanCyclic *TaskSerialToCanCyclic1, - tTaskSerialToCanSpontany *TaskSerialToCanSpontany + tSerialPortIO *ioUSB2, + tTaskSerialToCanCyclic *TaskSerialToCanCyclic0, + tTaskSerialToCanCyclic *TaskSerialToCanCyclic1, + 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); } } @@ -651,13 +745,13 @@ void Task_RECEIVED_SerialUSB1_StartThread(tTaskReceivedSerial *env) { //начало ------------------------------Обработчик очереди ВХОДЯЩИХ USB2 команд------------------------------------------------------- void Task_RECEIVED_SerialUSB2_Init(tTaskReceivedSerial *env, - tSerialPortFrameIO *ioCAN, - tFrom_usb from_usb2, - tSerialPortIO *ioUSB2) { + tSerialPortFrameIO *ioCAN, + tFrom_usb from_usb2, + tSerialPortIO *ioUSB2) { // env->access = osMutexNew(NULL); env->from_usb = from_usb2; - env->ioUSB= ioUSB2; + env->ioUSB = ioUSB2; env->ioCAN = ioCAN; SerialPortClearRxBuffer(env->ioUSB); diff --git a/ArbiterCommand.h b/ArbiterCommand.h index c94145b..7de6513 100644 --- a/ArbiterCommand.h +++ b/ArbiterCommand.h @@ -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 );