#include "stm32f1xx_hal.h" #ifndef INC_EEPROM_H_ #define INC_EEPROM_H_ #define AT24C_ADRESS 0x50 // i2c slave adress EEPROM #define START_ADR_STAT 0x0000 //00000 #define STAT_BLOCKSIZE sizeof(InfoBlock) #define START_ADR_SHOT (START_ADR_STAT+STAT_BLOCKSIZE) #define SHOT_BLOCKSIZE 10 #define MAX_NUMBER_SHOTS 255 #define START_ADR_PROGRAM (START_ADR_SHOT + (SHOT_BLOCKSIZE*MAX_NUMBER_SHOTS)) #define PROGRAM_BLOCKSIZE 203 #define MAX_NUMBER_PROGRAMS 100 #define MAX_NUMBER_SHOTS_IN_PROGRAMS \ (PROGRAM_BLOCKSIZE-sizeof(ProgramHeader)) /sizeof(ProgramShot) // 100 #define START_ADR_MACRO (START_ADR_PROGRAM + (PROGRAM_BLOCKSIZE*MAX_NUMBER_PROGRAMS)) #define MACRO_BLOCKSIZE 81 #define MAX_NUMBER_MACRO 100 #define MAX_NUMBER_PROGRAMS_IN_MACRO \ (MACRO_BLOCKSIZE-sizeof(MacroHeader)) /sizeof(MacroProgram) // 20 #define MEMORY_END (START_ADR_MACRO + (MACRO_BLOCKSIZE*MAX_NUMBER_MACRO)) typedef enum MemoryStatus { EEPROM_FAIL, EEPROM_MISSING_ELEMENT, EEPROM_OUT_OF_RANGE, EEPROM_WRONG_STARTADDR, EEPROM_OK } MemoryStatus; typedef struct Shot { unsigned char isExist; unsigned char countRepeatShot; // 0 = inf unsigned char speedRollerTop; // 0 .. 100 .. 200 unsigned char speedRollerBottom; // 0 .. 100 .. 200 unsigned char speedScrew; // 0 .. 100 unsigned char rotationAxial; // 0 .. 90 .. 180 unsigned char rotationHorizontal; // 0 .. 90 .. 180 unsigned char rotationVertical; // 0 .. 90 .. 180 } Shot; typedef struct ProgramHeader { unsigned char isExist; unsigned char countRepeat; unsigned char options; } ProgramHeader; typedef struct ProgramShot { unsigned char id; unsigned char speedScrew; } ProgramShot; typedef struct Program { ProgramHeader header; ProgramShot shots[MAX_NUMBER_SHOTS_IN_PROGRAMS]; } Program; typedef struct MacroHeader { unsigned char isExist; } MacroHeader; typedef struct MacroProgram { unsigned char id; unsigned char speedScrew; unsigned char countRepeat; unsigned char options; } MacroProgram; typedef struct Macro { MacroHeader header; MacroProgram programs[MAX_NUMBER_PROGRAMS_IN_MACRO]; } Macro; typedef struct ServoSetting { uint8_t invert; uint16_t min; uint16_t def; uint16_t max; } ServoSetting; typedef struct DelayTimes{ uint16_t preRun; }DelayTimes; typedef struct Motors{ uint16_t speed_Rollers_min; // uint16_t speed_Rollers_max; uint16_t speed_Screw_min; // uint16_t speed_Screw_max; }Motors; typedef struct HardwareInit_t{ DelayTimes timings; ServoSetting servos[3]; Motors motors; }HardwareInit_t; typedef struct Statistics{ uint32_t totalShots; uint32_t totalPrograms; uint32_t totalMacros; }Statistics; typedef struct InfoBlock{ char init_uid[11]; HardwareInit_t hwInfo; Statistics statInfo; }InfoBlock; extern InfoBlock infoBlock; MemoryStatus EEPROM_INIT(); MemoryStatus EEPROM_EARSE(); MemoryStatus FLASH_WriteBlock(uint16_t startAddr, uint8_t number, uint8_t *writeData, uint16_t dataSize); MemoryStatus FLASH_ReadBlock(uint16_t startAddr, uint8_t number, uint8_t *readData, uint16_t dataSize); MemoryStatus saveShot(unsigned char number, Shot *shot); MemoryStatus getShot(unsigned char number, Shot *shot); MemoryStatus saveProg(unsigned char number, Program *prog); MemoryStatus getProg(unsigned char number, Program *prog); MemoryStatus saveMacro(unsigned char number, Macro *macro); MemoryStatus getMacro(unsigned char number, Macro *macro); MemoryStatus saveInfoBlock(InfoBlock *infoBlock); MemoryStatus getInfoBlock(InfoBlock *infoBlock); #endif /* INC_EEPROM_H_ */