Обновление

This commit is contained in:
cfif 2025-11-11 14:30:29 +03:00
parent d81f98ed8b
commit 9cde8e5ead
2 changed files with 45 additions and 19 deletions

View File

@ -218,14 +218,21 @@ typedef struct __attribute__ ((packed)) {
#define MAX_CTO 8
#define MAX_DTO 8
#define MAX_DAO 6
#define MAX_ODT 20
#define MAX_ODT_ENTRIES_SIZE 6
#define BODY_MAX_LEN (MAX_DTO - 2)
#define MAX_DAO 20
#define MAX_ODT 10
#define MAX_ODT_ENTRIES_SIZE 7
#define MAX_EVENT_CHANNEL 1
typedef struct {
uint8_t DATA[BODY_MAX_LEN];
} tXCP_DATA_STIM;
typedef struct {
uint8_t ODT_ENTRIES_COUNT;
tXCP_DATA_STIM DATA_STM[MAX_ODT_ENTRIES_SIZE];
uint8_t BIT_OFFSET[MAX_ODT_ENTRIES_SIZE];
uint8_t ADR_EXT[MAX_ODT_ENTRIES_SIZE];
uint8_t ODT_ENTRIES_SIZE[MAX_ODT_ENTRIES_SIZE];
@ -453,6 +460,8 @@ typedef struct {
uint8_t downloadRemaining;
uint8_t response[8];
uint8_t DATA[MAX_ODT_ENTRIES_SIZE * BODY_MAX_LEN];
//tXCP_EVENT_CHANNEL EVENT_CHANNEL[MAX_EVENT_CHANNEL];
tXCP_DAQ DAQ[MAX_DAO];
uint16_t DAQ_COUNT;

View File

@ -312,17 +312,18 @@ uint8_t XCP_GET_DAQ_LIST_INFO_216(tCanSerialPortFrameXCP *env) {
uint8_t XCP_FREE_DAQ_214(tCanSerialPortFrameXCP *env) {
env->DAQ_COUNT = 0;
memset(env->DAQ, 0, sizeof(env->DAQ));
for (uint16_t i = 0; i < MAX_DAO; ++i) {
// for (uint16_t i = 0; i < MAX_DAO; ++i) {
env->DAQ[i].SELECTED = 0;
env->DAQ[i].RUNNING = 0;
env->DAQ[i].ODT_COUNT = 0;
// env->DAQ[i].SELECTED = 0;
// env->DAQ[i].RUNNING = 0;
// env->DAQ[i].ODT_COUNT = 0;
for (uint8_t j = 0; j < MAX_ODT; ++j) {
env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_COUNT = 0;
}
}
// for (uint8_t j = 0; j < MAX_ODT; ++j) {
// env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_COUNT = 0;
// }
// }
env->response[0] = XCP_COMMAND_CONNECT;
return 1;
@ -903,7 +904,7 @@ uint8_t vCanSerialPortFrameXcpReceive(tCanSerialPortFrameXCP *env, uint32 timeou
}
_Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) {
uint8_t response_size;
uint8_t size;
while (1) {
@ -922,33 +923,49 @@ _Noreturn void CanXcpProcessing_ServiceTask(tCanSerialPortFrameXCP *env) {
env->response[0] = j; // ODT
env->response[1] = i; // DAQ
response_size = 0;
size = 0;
for (uint8_t k = 0; k < env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_COUNT; ++k) {
memcpy(&env->response[2] + response_size,
memcpy(&env->DATA[size],
(uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k],
env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]);
response_size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k];
size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k];
}
if (response_size) {
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, response_size, 1000);
uint8_t count_size = size / BODY_MAX_LEN;
uint8_t count_size_tail = size % BODY_MAX_LEN;
size = 0;
for (uint8_t k = 0; k < count_size; ++k) {
memcpy(&env->response[2], &env->DATA[size], BODY_MAX_LEN);
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, MAX_DTO, 1000);
size += 6;
}
if (count_size_tail) {
memcpy(&env->response[2], &env->DATA[size], count_size_tail);
env->ioCanFrame->transmit(env->ioCanFrame->env, env->response, count_size_tail, 1000);
}
}
} else { // STIM - DTO
for (uint8_t j = 0; j < env->DAQ[i].ODT_COUNT; ++j) {
size = 0;
for (uint8_t k = 0; k < env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_COUNT; ++k) {
memcpy(&env->response[2] + response_size,
(uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k],
memcpy((uint8_t *) env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_ADR[k],
&env->DAQ[i].ODT_NUMBER[j].DATA_STM[size],
env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k]);
size += env->DAQ[i].ODT_NUMBER[j].ODT_ENTRIES_SIZE[k];
}
}