mirror of
https://github.com/RfidResearchGroup/ChameleonMini.git
synced 2026-05-12 11:20:37 -07:00
Merge pull request #47 from ceres-c/elf-sections-fix-rrg
Elf sections size check before flashing
This commit is contained in:
@@ -505,10 +505,14 @@ void ConfigurationSetById(ConfigurationEnum Configuration) {
|
||||
&ConfigurationTable[Configuration], sizeof(ConfigurationType));
|
||||
|
||||
// Configure antenna load as appropriate
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
if (Configuration == CONFIG_ISO14443A_READER)
|
||||
PORTC.OUTCLR = PIN7_bm;
|
||||
else
|
||||
PORTC.OUTSET = PIN7_bm;
|
||||
#else
|
||||
PORTC.OUTSET = PIN7_bm;
|
||||
#endif
|
||||
|
||||
CodecInit();
|
||||
ApplicationInit();
|
||||
@@ -523,7 +527,11 @@ bool ConfigurationSetByName(const char *Configuration) {
|
||||
|
||||
if (MapTextToId(ConfigurationMap, ARRAY_COUNT(ConfigurationMap), Configuration, &Id)) {
|
||||
// The last configuration can only be configured as a reader
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
if (GlobalSettings.ActiveSettingIdx >= SETTINGS_COUNT && Id != CONFIG_ISO14443A_READER) {
|
||||
#else
|
||||
if (GlobalSettings.ActiveSettingIdx >= SETTINGS_COUNT) {
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
ConfigurationSetById(Id);
|
||||
|
||||
@@ -15,13 +15,13 @@ SETTINGS += -DCONFIG_MF_CLASSIC_1K_7B_SUPPORT
|
||||
SETTINGS += -DCONFIG_MF_CLASSIC_4K_SUPPORT
|
||||
SETTINGS += -DCONFIG_MF_CLASSIC_4K_7B_SUPPORT
|
||||
SETTINGS += -DCONFIG_MF_ULTRALIGHT_SUPPORT
|
||||
SETTINGS += -DCONFIG_ISO14443A_SNIFF_SUPPORT
|
||||
SETTINGS += -DCONFIG_ISO14443A_READER_SUPPORT
|
||||
SETTINGS += -DCONFIG_VICINITY_SUPPORT
|
||||
SETTINGS += -DCONFIG_SL2S2002_SUPPORT
|
||||
SETTINGS += -DCONFIG_TITAGITSTANDARD_SUPPORT
|
||||
SETTINGS += -DCONFIG_ISO15693_SNIFF_SUPPORT
|
||||
SETTINGS += -DCONFIG_EM4233_SUPPORT
|
||||
# SETTINGS += -DCONFIG_ISO14443A_SNIFF_SUPPORT
|
||||
# SETTINGS += -DCONFIG_ISO14443A_READER_SUPPORT
|
||||
SETTINGS += -DCONFIG_VICINITY_SUPPORT
|
||||
SETTINGS += -DCONFIG_SL2S2002_SUPPORT
|
||||
SETTINGS += -DCONFIG_TITAGITSTANDARD_SUPPORT
|
||||
# SETTINGS += -DCONFIG_ISO15693_SNIFF_SUPPORT
|
||||
SETTINGS += -DCONFIG_EM4233_SUPPORT
|
||||
|
||||
#Support magic mode on mifare classic configuration
|
||||
SETTINGS += -DSUPPORT_MF_CLASSIC_MAGIC_MODE
|
||||
@@ -134,6 +134,7 @@ AVRDUDE_FLAGS = -p $(AVRDUDE_MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
|
||||
AVRDUDE_WRITE_APP_LATEST = -U application:w:Latest/Chameleon-RevG.hex
|
||||
AVRDUDE_WRITE_EEPROM_LATEST = -U eeprom:w:Latest/Chameleon-RevG.eep
|
||||
|
||||
.PHONY: program program-latest dfu-flip dfu-prog check_size style
|
||||
|
||||
# Default target
|
||||
all:
|
||||
@@ -165,27 +166,41 @@ spmhelper: $(TARGET).elf
|
||||
$(CROSS)-objcopy -O ihex -j .spmhelper $(SPM_HELPER_OBJCOPY) $(TARGET).elf $(TARGET).hex
|
||||
|
||||
# Program the device using avrdude
|
||||
program: $(TARGET).hex $(TARGET).eep
|
||||
program: $(TARGET).hex $(TARGET).eep check_size
|
||||
avrdude $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_APP) $(AVRDUDE_WRITE_EEPROM)
|
||||
|
||||
# Program the device using avrdude with the latest official firmware
|
||||
program-latest:
|
||||
program-latest: check_size
|
||||
avrdude $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_APP_LATEST) $(AVRDUDE_WRITE_EEPROM_LATEST)
|
||||
|
||||
# Program the device using batchisp and the DFU bootloader
|
||||
# Note that the device has to be in bootloader mode already
|
||||
dfu-flip: $(TARGET).hex $(TARGET).eep
|
||||
dfu-flip: $(TARGET).hex $(TARGET).eep check_size
|
||||
cp $(TARGET).eep EEPROM.hex
|
||||
batchisp -hardware usb -device $(MCU) -operation erase f memory FLASH loadbuffer $(TARGET).hex program verify memory EEPROM loadbuffer EEPROM.hex program verify start reset 0
|
||||
rm EEPROM.hex
|
||||
|
||||
# Program the device using dfu-programmer
|
||||
dfu-prog: $(TARGET).hex $(TARGET).eep
|
||||
dfu-prog: $(TARGET).hex $(TARGET).eep check_size
|
||||
dfu-programmer $(MCU) erase
|
||||
dfu-programmer $(MCU) flash-eeprom $(TARGET).eep
|
||||
dfu-programmer $(MCU) flash $(TARGET).hex
|
||||
dfu-programmer $(MCU) reset
|
||||
|
||||
check_size:
|
||||
@{ \
|
||||
set -e; \
|
||||
if [ ! -f $(TARGET).elf ]; then \
|
||||
exit 0; \
|
||||
fi; \
|
||||
PROGMEM_SIZE=$$(avr-size $(TARGET).elf | grep -oP "\d+" | sed -n 4p); \
|
||||
MAX_PRGMEM_SIZE=$$(printf "%d\n" $(FLASH_DATA_ADDR)); \
|
||||
if [ $$PROGMEM_SIZE -gt $$MAX_PRGMEM_SIZE ]; then \
|
||||
echo "make: *** $(TARGET).elf Application Section size $$PROGMEM_SIZE excedes maximum allowed $$MAX_PRGMEM_SIZE. Please disable some features in Makefile"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
}
|
||||
|
||||
style:
|
||||
# Make sure astyle is installed
|
||||
@which astyle >/dev/null || ( echo "Please install 'astyle' package first" ; exit 1 )
|
||||
|
||||
@@ -172,10 +172,15 @@ INLINE void FRAMWrite(const void *Buffer, uint16_t Address, uint16_t ByteCount)
|
||||
SPIWriteBlock(Buffer, ByteCount);
|
||||
|
||||
FRAM_PORT.OUTSET = FRAM_CS;
|
||||
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
if (0 == Address && GlobalSettings.ActiveSettingPtr->Configuration != CONFIG_ISO14443A_READER) {
|
||||
ConfigurationSetById(GlobalSettings.ActiveSettingPtr->Configuration);
|
||||
}
|
||||
#else
|
||||
if (0 == Address) {
|
||||
ConfigurationSetById(GlobalSettings.ActiveSettingPtr->Configuration);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
INLINE void FlashRead(void *Buffer, uint32_t Address, uint16_t ByteCount) {
|
||||
@@ -421,8 +426,10 @@ void MemoryRecall(void) {
|
||||
if (GlobalSettings.ActiveSettingIdx < SETTINGS_COUNT)
|
||||
FlashToFRAM((uint32_t) GlobalSettings.ActiveSettingIdx * MEMORY_SIZE_PER_SETTING, ActiveConfiguration.MemorySize);
|
||||
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
if (GlobalSettings.ActiveSettingPtr->Configuration != CONFIG_ISO14443A_READER)
|
||||
ActiveConfiguration.ApplicationInitFunc();
|
||||
#endif
|
||||
|
||||
SystemTickClearFlag();
|
||||
}
|
||||
|
||||
@@ -39,7 +39,9 @@ SettingsType EEMEM StoredSettings = {
|
||||
.PendingTaskTimeout = DEFAULT_PENDING_TASK_TIMEOUT,
|
||||
.ReaderThreshold = DEFAULT_READER_THRESHOLD,
|
||||
.bSakMode = 0,
|
||||
},
|
||||
}
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
,
|
||||
// In the last configuration, there is no storage space. This is used as the card reader mode only
|
||||
[SETTINGS_COUNT] =
|
||||
{
|
||||
@@ -55,6 +57,7 @@ SettingsType EEMEM StoredSettings = {
|
||||
.ReaderThreshold = DEFAULT_READER_THRESHOLD,
|
||||
.bSakMode = 0,
|
||||
}
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
@@ -77,7 +80,9 @@ void SettingsLoad(void) {
|
||||
GlobalSettings.Settings[i].PendingTaskTimeout = DEFAULT_PENDING_TASK_TIMEOUT;
|
||||
GlobalSettings.Settings[i].ReaderThreshold = DEFAULT_READER_THRESHOLD;
|
||||
}
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
GlobalSettings.Settings[SETTINGS_COUNT].Configuration = CONFIG_ISO14443A_READER;
|
||||
#endif
|
||||
|
||||
SettingsSave();
|
||||
}
|
||||
|
||||
@@ -260,6 +260,7 @@ const PROGMEM CommandEntryType CommandTable[] = {
|
||||
.SetFunc = NO_FUNCTION,
|
||||
.GetFunc = CommandGetSysTick
|
||||
},
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
{
|
||||
.Command = COMMAND_SEND_RAW,
|
||||
.ExecFunc = NO_FUNCTION,
|
||||
@@ -302,6 +303,7 @@ const PROGMEM CommandEntryType CommandTable[] = {
|
||||
.SetFunc = NO_FUNCTION,
|
||||
.GetFunc = NO_FUNCTION
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.Command = COMMAND_TIMEOUT,
|
||||
.ExecFunc = NO_FUNCTION,
|
||||
@@ -330,6 +332,7 @@ const PROGMEM CommandEntryType CommandTable[] = {
|
||||
.SetFunc = CommandSetField,
|
||||
.GetFunc = CommandGetField
|
||||
},
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
{
|
||||
.Command = COMMAND_CLONE,
|
||||
.ExecFunc = CommandExecClone,
|
||||
@@ -337,6 +340,7 @@ const PROGMEM CommandEntryType CommandTable[] = {
|
||||
.SetFunc = NO_FUNCTION,
|
||||
.GetFunc = NO_FUNCTION
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.Command = COMMAND_SETUIDMODE,
|
||||
.ExecFunc = NO_FUNCTION,
|
||||
|
||||
@@ -458,6 +458,7 @@ CommandStatusIdType CommandGetSysTick(char *OutParam) {
|
||||
return COMMAND_INFO_OK_WITH_TEXT_ID;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
CommandStatusIdType CommandExecParamSend(char *OutMessage, const char *InParams) {
|
||||
if (GlobalSettings.ActiveSettingPtr->Configuration != CONFIG_ISO14443A_READER)
|
||||
return COMMAND_ERR_INVALID_USAGE_ID;
|
||||
@@ -583,6 +584,7 @@ CommandStatusIdType CommandExecIdentifyCard(char *OutMessage) {
|
||||
CommandLinePendingTaskTimeout = &Reader14443AAppTimeout;
|
||||
return TIMEOUT_COMMAND;
|
||||
}
|
||||
#endif
|
||||
|
||||
CommandStatusIdType CommandGetTimeout(char *OutParam) {
|
||||
snprintf_P(OutParam, TERMINAL_BUFFER_SIZE, PSTR("%u ms"), GlobalSettings.ActiveSettingPtr->PendingTaskTimeout * 100);
|
||||
@@ -647,6 +649,7 @@ CommandStatusIdType CommandGetField(char *OutMessage) {
|
||||
|
||||
|
||||
CommandStatusIdType CommandExecAutocalibrate(char *OutMessage) {
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
if (GlobalSettings.ActiveSettingPtr->Configuration == CONFIG_ISO14443A_READER) {
|
||||
ApplicationReset();
|
||||
|
||||
@@ -655,19 +658,22 @@ CommandStatusIdType CommandExecAutocalibrate(char *OutMessage) {
|
||||
Reader14443ACodecStart();
|
||||
CommandLinePendingTaskTimeout = &Reader14443AAppTimeout;
|
||||
return TIMEOUT_COMMAND;
|
||||
} else if (GlobalSettings.ActiveSettingPtr->Configuration == CONFIG_ISO14443A_SNIFF) {
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_ISO14443A_SNIFF_SUPPORT
|
||||
if (GlobalSettings.ActiveSettingPtr->Configuration == CONFIG_ISO14443A_SNIFF) {
|
||||
ApplicationReset();
|
||||
|
||||
Sniff14443CurrentCommand = Sniff14443_Autocalibrate;
|
||||
Sniff14443AAppInit();
|
||||
CommandLinePendingTaskTimeout = &Sniff14443AAppTimeout;
|
||||
return TIMEOUT_COMMAND;
|
||||
} else {
|
||||
return COMMAND_ERR_INVALID_USAGE_ID;
|
||||
}
|
||||
|
||||
#endif
|
||||
return COMMAND_ERR_INVALID_USAGE_ID;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ISO14443A_READER_SUPPORT
|
||||
CommandStatusIdType CommandExecClone(char *OutMessage) {
|
||||
ConfigurationSetById(CONFIG_ISO14443A_READER);
|
||||
|
||||
@@ -680,6 +686,7 @@ CommandStatusIdType CommandExecClone(char *OutMessage) {
|
||||
|
||||
return TIMEOUT_COMMAND;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern uint32_t dwBaudRate;
|
||||
CommandStatusIdType CommandGetBaudrate(char *OutParam) {
|
||||
|
||||
Reference in New Issue
Block a user