Skip to content

Commit

Permalink
Merge branch 'leonardo'
Browse files Browse the repository at this point in the history
  • Loading branch information
henols committed Dec 13, 2024
2 parents e7e5a24 + 7e1594d commit 62e9b53
Show file tree
Hide file tree
Showing 13 changed files with 379 additions and 332 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@

.gitmodules
firestarter_app

.vscode/
10 changes: 0 additions & 10 deletions .vscode/extensions.json

This file was deleted.

33 changes: 0 additions & 33 deletions .vscode/settings.json

This file was deleted.

21 changes: 0 additions & 21 deletions include/config.h

This file was deleted.

4 changes: 0 additions & 4 deletions include/debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,8 @@

#ifndef __DEBUG_C__
#define __DEBUG_C__
#include "config.h"
#ifdef SERIAL_DEBUG
#include <Arduino.h>
#include "logging.h"
#define RX_DEBUG A0
#define TX_DEBUG A1

void debug_buf(const char* msg);

Expand Down
96 changes: 71 additions & 25 deletions include/rurp_shield.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,26 +13,10 @@ extern "C" {
#endif

#include <stdint.h>
#include "config.h"
#include <stddef.h>
#include <string.h>

// Constants
#define CONFIG_VERSION "VER05"

// Default configuration
#define ARDUINO_VCC 5.01
#define VALUE_R1 270000
#define VALUE_R2 44000

// Bit masks
#define LEAST_SIGNIFICANT_BYTE 0x01 // LEAST SIGNIFICANT BYTE
#define MOST_SIGNIFICANT_BYTE 0x02 // MOST SIGNIFICANT BYTE
#define OUTPUT_ENABLE 0x04 // OUTPUT ENABLE
#define CONTROL_REGISTER 0x08 // CONTROL REGISTER
#define USRBTN 0x10 // USER BUTTON
#define CHIP_ENABLE 0x20 // CHIP ENABLE


// CONTROL REGISTER
// CONTROL REGISTER
#ifndef HARDWARE_REVISION
#define VPE_TO_VPP 0x01
#define A16 VPE_TO_VPP
Expand Down Expand Up @@ -62,6 +46,54 @@ extern "C" {
#endif

#define A13 0x20
#ifdef HARDWARE_REVISION

// REV 1
#define REV_1_VPE_TO_VPP 0x01
#define REV_1_A9_VPP_ENABLE 0x02
#define REV_1_VPE_ENABLE 0x04
#define REV_1_P1_VPP_ENABLE 0x08
#define REV_1_RW 0x40
#define REV_1_REGULATOR 0x80

#define REV_1_A16 REV_1_VPE_TO_VPP
#define REV_1_A17 0x10
#define REV_1_A18 0x20

// REV 2
#define REV_2_VPE_TO_VPP 0x01
#define REV_2_A9_VPP_ENABLE 0x02
#define REV_2_VPE_ENABLE 0x04
#define REV_2_P1_VPP_ENABLE 0x08
#define REV_2_P30 0x10
#define REV_2_P2 0x20
#define REV_2_P31 0x40
#define REV_2_REGULATOR 0x80

#define REV_2_P1 P1_VPP_ENABLE
#define REV_2_RW REV_2_P31
#define REV_2_A16 REV_2_P2
#define REV_2_A17 REV_2_P30
#define REV_2_A18 P1_VPP_ENABLE
#endif


// Constants
#define CONFIG_VERSION "VER05"

// Default configuration
#define ARDUINO_VCC 5.01
#define VALUE_R1 270000
#define VALUE_R2 44000

// Bit masks
#define LEAST_SIGNIFICANT_BYTE 0x01 // LEAST SIGNIFICANT BYTE
#define MOST_SIGNIFICANT_BYTE 0x02 // MOST SIGNIFICANT BYTE
#define OUTPUT_ENABLE 0x04 // OUTPUT ENABLE
#define CONTROL_REGISTER 0x08 // CONTROL REGISTER
#define USRBTN 0x10 // USER BUTTON
#define CHIP_ENABLE 0x20 // CHIP ENABLE


#ifndef HARDWARE_REVISION
#define register_t uint8_t
Expand All @@ -70,21 +102,32 @@ extern "C" {
#endif

// Struct definition
typedef struct {
typedef struct rurp_configuration {
char version[6];
double vcc;
long r1;
long r2;
uint8_t hardware_revision;
uint8_t hardware_revision;
} rurp_configuration_t;

// Function prototypes
void rurp_setup();

#ifdef SERIAL_ON_IO
void rurp_set_programmer_mode();
void rurp_set_communication_mode();
#else
#define rurp_set_programmer_mode();
#define rurp_set_communication_mode();
#endif

int rurp_communication_available();
int rurp_communication_read();
size_t rurp_communication_write(const char* buffer, size_t size);
size_t rurp_communication_read_bytes(char* buffer, size_t length);

void rurp_log(const char* type, const char* msg);

void rurp_set_data_as_output();
void rurp_set_data_as_input();

Expand All @@ -101,13 +144,16 @@ extern "C" {
double rurp_get_voltage_average();
rurp_configuration_t* rurp_get_config();
void rurp_save_config();

void rurp_validate_config() ;
#ifdef HARDWARE_REVISION
int rurp_get_hardware_revision();
int rurp_get_physical_hardware_revision();
int rurp_get_hardware_revision();
int rurp_get_physical_hardware_revision();

#endif

#ifdef __cplusplus
}
}
#endif

#endif // RURP_SHIELD_H
71 changes: 71 additions & 0 deletions include/rurp_utils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#ifndef RURP_UTILS_H
#define RURP_UTILS_H

#include <stdint.h>
#include <EEPROM.h>
#include <string.h>

#include "rurp_shield.h"

#ifdef HARDWARE_REVISION
int rurp_get_hardware_revision();
int rurp_get_physical_hardware_revision();

uint8_t rurp_map_ctrl_reg_to_hardware_revision(uint16_t data) {
uint8_t ctrl_reg = 0;
int hw = rurp_get_hardware_revision();
switch (hw) {
case REVISION_2:
ctrl_reg = data & (A9_VPP_ENABLE | VPE_ENABLE | P1_VPP_ENABLE | A17 | RW | REGULATOR);
ctrl_reg |= data & VPE_TO_VPP ? REV_2_VPE_TO_VPP : 0;
ctrl_reg |= data & A16 ? REV_2_A16 : 0;
ctrl_reg |= data & A18 ? REV_2_A18 : 0;
break;
case REVISION_0:
case REVISION_1:
ctrl_reg = data;
ctrl_reg |= data & VPE_TO_VPP ? REV_1_VPE_TO_VPP : 0;
break;
default:
break;
}

return ctrl_reg;
}
#endif

#define CONFIG_START 48

void load_config() {
rurp_configuration_t *rurp_config = rurp_get_config();
EEPROM.get(CONFIG_START, rurp_config);
rurp_validate_config();
}

void rurp_save_config() {
rurp_configuration_t *rurp_config = rurp_get_config();
EEPROM.put(CONFIG_START, rurp_config);
}

void rurp_validate_config() {
rurp_configuration_t* rurp_config = rurp_get_config();
if (strcmp(rurp_config->version, "VER03") == 0 || strcmp(rurp_config->version, "VER04") == 0) {
strcpy(rurp_config->version, CONFIG_VERSION);
if (strcmp(rurp_config->version, "VER03") == 0 || rurp_config->hardware_revision == 0x00) {
rurp_config->hardware_revision = 0xFF;
}
rurp_save_config();
}
else if (strcmp(rurp_config->version, CONFIG_VERSION) != 0) {
strcpy(rurp_config->version, CONFIG_VERSION);
rurp_config->vcc = ARDUINO_VCC;
rurp_config->r1 = VALUE_R1;
rurp_config->r2 = VALUE_R2;
rurp_config->hardware_revision = 0xFF;
rurp_save_config();
}
}

#include <string.h>

#endif // RURP_UTILS_H
37 changes: 26 additions & 11 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,33 @@
; https://docs.platformio.org/page/projectconf.html

[env]
monitor_speed = 250000
build_flags =
-D MONITOR_SPEED=${env.monitor_speed}
-D BOARD_NAME=\"${this.board}\"
extra_scripts = pre:name_firmware.py
monitor_speed = 250000
build_flags =
-D MONITOR_SPEED=${env.monitor_speed}
-D EPROM_BLANK_CHECK
-D EPROM_WRITE_CHECK
-D TEST_VPP_BEFORE_WRITE
-D POWER_THROUGH_ADDRESS_LINES
-D HARDWARE_REVISION
; -D SERIAL_DEBUG
; -D DEBUG_ADDRESS

extra_scripts = pre:name_firmware.py

[env:uno]
platform = atmelavr
board = uno
framework = arduino
platform = atmelavr
board = uno
framework = arduino
build_flags =
${env.build_flags}
-D BOARD_NAME=\"${this.board}\"
-D SERIAL_ON_IO

[env:leonardo]
platform = atmelavr
board = leonardo
framework = arduino
platform = atmelavr
board = leonardo
framework = arduino
build_flags =
${env.build_flags}
-D BOARD_NAME=\"${this.board}\"

Loading

0 comments on commit 62e9b53

Please sign in to comment.