diff --git a/Core/Inc/EEPROM.h b/Core/Inc/EEPROM.h index 6392109..42b4de5 100644 --- a/Core/Inc/EEPROM.h +++ b/Core/Inc/EEPROM.h @@ -127,6 +127,7 @@ MemoryStatus getProg(unsigned char number, Program *prog); MemoryStatus saveMacro(unsigned char number, Macro *macro); MemoryStatus getMacro(unsigned char number, Macro *macro); -MemoryStatus getHardwareInit(); +MemoryStatus saveInfoBlock(InfoBlock *infoBlock); +MemoryStatus getInfoBlock(InfoBlock *infoBlock); #endif /* INC_EEPROM_H_ */ diff --git a/Core/Src/EEPROM.c b/Core/Src/EEPROM.c index fd38fbb..d7d0a24 100644 --- a/Core/Src/EEPROM.c +++ b/Core/Src/EEPROM.c @@ -4,6 +4,21 @@ #include "Print.h" +MemoryStatus saveInfoBlock(InfoBlock *infoBlock) { + return FLASH_WriteBlock(START_ADR_STAT, 0, (uint8_t *)infoBlock, sizeof(InfoBlock)); +} + +MemoryStatus getInfoBlock(InfoBlock *infoBlock) { + MemoryStatus status = FLASH_ReadBlock(START_ADR_STAT, 0, (uint8_t *)infoBlock, sizeof(InfoBlock)); + + if (status != EEPROM_OK) { + return EEPROM_FAIL; + } + + return EEPROM_OK; +} + + MemoryStatus saveShot(unsigned char number, Shot* shot) { if (FLASH_WriteBlock(START_ADR_SHOT, number, (uint8_t*)shot, SHOT_BLOCKSIZE) == EEPROM_OK) { @@ -116,7 +131,10 @@ MemoryStatus FLASH_WriteBlock(uint16_t startAddr, uint8_t number, uint8_t *write result = HAL_I2C_Master_Transmit(&hi2c1, (AT24C_ADRESS << 1), Buf, (dataSize + 2), 10); HAL_Delay(1); - return result; + if(result != HAL_OK){ + return EEPROM_FAIL; + } + return EEPROM_OK; } MemoryStatus FLASH_ReadBlock(uint16_t startAddr, uint8_t number, uint8_t *readData, uint8_t dataSize) @@ -137,7 +155,10 @@ MemoryStatus FLASH_ReadBlock(uint16_t startAddr, uint8_t number, uint8_t *readDa result = HAL_I2C_Master_Transmit(&hi2c1, (AT24C_ADRESS << 1), blockAddr, 2, 10); HAL_Delay(1); - result = HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1), readData, dataSize, 10); + result = HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1) | 1, readData, dataSize, 10); HAL_Delay(1); - return result; + if(result != HAL_OK){ + return EEPROM_FAIL; + } + return EEPROM_OK; } diff --git a/Core/Src/IR_CMD_HandlerLogic.c b/Core/Src/IR_CMD_HandlerLogic.c index 24632b8..84ed680 100644 --- a/Core/Src/IR_CMD_HandlerLogic.c +++ b/Core/Src/IR_CMD_HandlerLogic.c @@ -72,27 +72,67 @@ void IR_Home_Process() { onHoldRepeat = IR_Home_Process; break; - case IR_F_BTN: -// { -// Shot testShot = GetShot(3); -// if(!testShot.isExist){ -// testShot.countRepeatShot = 1; -// testShot.speedRollerTop = 200; -// testShot.speedRollerBottom = 200; -// testShot.speedScrew = 100; -// testShot.rotationAxial = 90; -// testShot.rotationHorizontal = 90; -// testShot.rotationVertical = 90; -// -// SaveShot(3, &testShot); -// doShot(&testShot); -// } -// } - break; + case IR_F_BTN: { + InfoBlock infoBlock; + + // Чтение структуры InfoBlock из EEPROM + MemoryStatus status = getInfoBlock(&infoBlock); + if (status != EEPROM_OK) { + char errorMsg[] = "Error reading InfoBlock from EEPROM\n"; + CDC_Transmit_FS((uint8_t*)errorMsg, strlen(errorMsg)); + break; + } + + // Буфер для строки вывода + char buffer[128]; + + // Вывод информации о HardwareInit_t + snprintf(buffer, sizeof(buffer), "Hardware Initialization:\n"); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Servo 1: Invert=%u, Min=%u, Default=%u, Max=%u\n", + infoBlock.hwInfo.servos[0].invert, infoBlock.hwInfo.servos[0].min, + infoBlock.hwInfo.servos[0].def, infoBlock.hwInfo.servos[0].max); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Servo 2: Invert=%u, Min=%u, Default=%u, Max=%u\n", + infoBlock.hwInfo.servos[1].invert, infoBlock.hwInfo.servos[1].min, + infoBlock.hwInfo.servos[1].def, infoBlock.hwInfo.servos[1].max); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Servo 3: Invert=%u, Min=%u, Default=%u, Max=%u\n", + infoBlock.hwInfo.servos[2].invert, infoBlock.hwInfo.servos[2].min, + infoBlock.hwInfo.servos[2].def, infoBlock.hwInfo.servos[2].max); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Motors: Speed_Rollers_Min=%u, Speed_Screw_Min=%u\n", + infoBlock.hwInfo.motors.speed_Rollers_min, infoBlock.hwInfo.motors.speed_Screw_min); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + // Вывод информации о DelayTimes + snprintf(buffer, sizeof(buffer), "Timings: PreRun=%u\n", infoBlock.hwInfo.timings.preRun); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + // Вывод информации о Statistics + snprintf(buffer, sizeof(buffer), "Statistics:\n"); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Total Shots: %lu\n", infoBlock.statInfo.totalShots); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Total Programs: %lu\n", infoBlock.statInfo.totalPrograms); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + snprintf(buffer, sizeof(buffer), "Total Macros: %lu\n", infoBlock.statInfo.totalMacros); + CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); + + break; + } + case IR_PAUSE: { - uint8_t buf[128]; // Буфер для чтения данных размером 128 байт + uint8_t buf[8]; // Буфер для чтения данных размером 128 байт uint16_t blockAddr16 = 0; // Начальный адрес EEPROM uint8_t blockAddr[2] = { (uint8_t)(blockAddr16 >> 8), (uint8_t)(blockAddr16 & 0xFF) }; // Адрес в формате 2 байта int max_attempts = 15; // Максимальное количество попыток для операции @@ -108,7 +148,7 @@ void IR_Home_Process() { continue; // Переход к следующей попытке } - HAL_Delay(1); // Небольшая задержка + HAL_Delay(5); // Небольшая задержка // Читаем 128 байт данных из EEPROM status = HAL_I2C_Master_Receive(&hi2c1, (AT24C_ADRESS << 1) | 1, buf, sizeof(buf), 1000); @@ -119,7 +159,7 @@ void IR_Home_Process() { if (i % 8 == 0) print(" "); if (i % 32 == 0) print("\n"); -// snprintf(buffer, sizeof(buffer), "%02X ", buf[i]); // Преобразуем байт в шестнадцатеричную строку + snprintf(buffer, sizeof(buffer), "%02X ", buf[i]); // Преобразуем байт в шестнадцатеричную строку CDC_Transmit_FS((uint8_t*)buffer, strlen(buffer)); } break; // Выход из попыток, если чтение успешно