mirror of
https://github.com/DashyFox/StackSport.git
synced 2025-05-04 07:10:17 +00:00
134 lines
3.4 KiB
C
134 lines
3.4 KiB
C
#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{
|
|
HardwareInit_t hwInfo;
|
|
Statistics statInfo;
|
|
}InfoBlock;
|
|
|
|
|
|
MemoryStatus FLASH_WriteBlock(uint16_t startAddr, uint8_t number, uint8_t *writeData, uint8_t dataSize);
|
|
MemoryStatus FLASH_ReadBlock(uint16_t startAddr, uint8_t number, uint8_t *readData, uint8_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_ */
|