Skip to content

Commit 987718a

Browse files
committed
AVRISP: allow configuring active-high/low reset programatically
1 parent a39ce29 commit 987718a

File tree

2 files changed

+8
-20
lines changed

2 files changed

+8
-20
lines changed

hardware/esp8266com/esp8266/libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,6 @@ extern "C" {
2626
#define malloc os_malloc
2727
#define free os_free
2828

29-
#ifdef AVRISP_ACTIVE_HIGH_RESET
30-
#define AVRISP_RESET_ON HIGH
31-
#define AVRISP_RESET_OFF LOW
32-
#else
33-
#define AVRISP_RESET_ON LOW
34-
#define AVRISP_RESET_OFF HIGH
35-
#endif
36-
37-
3829
// #define AVRISP_DEBUG(fmt, ...) os_printf("[AVRP] " fmt "\r\n", ##__VA_ARGS__ )
3930
#define AVRISP_DEBUG(...)
4031

@@ -47,8 +38,8 @@ extern "C" {
4738

4839
#define beget16(addr) (*addr * 256 + *(addr+1))
4940

50-
ESP8266AVRISP::ESP8266AVRISP(uint16_t port, uint8_t reset_pin, uint32_t spi_freq, bool reset_state):
51-
_reset_pin(reset_pin), _reset_state(reset_state), _spi_freq(spi_freq),
41+
ESP8266AVRISP::ESP8266AVRISP(uint16_t port, uint8_t reset_pin, uint32_t spi_freq, bool reset_state, bool reset_activehigh):
42+
_reset_pin(reset_pin), _reset_state(reset_state), _spi_freq(spi_freq), _reset_activehigh(reset_activehigh),
5243
_server(WiFiServer(port)), _state(AVRISP_STATE_IDLE)
5344
{
5445
pinMode(_reset_pin, OUTPUT);
@@ -68,11 +59,7 @@ void ESP8266AVRISP::setSpiFrequency(uint32_t freq) {
6859

6960
void ESP8266AVRISP::setReset(bool rst) {
7061
_reset_state = rst;
71-
if (_reset_state) {
72-
digitalWrite(_reset_pin, AVRISP_RESET_ON);
73-
} else {
74-
digitalWrite(_reset_pin, AVRISP_RESET_OFF);
75-
}
62+
digitalWrite(_reset_pin, _resetLevel(_reset_state));
7663
}
7764

7865
AVRISPState_t ESP8266AVRISP::update() {
@@ -230,9 +217,9 @@ void ESP8266AVRISP::start_pmode() {
230217

231218
// try to sync the bus
232219
SPI.transfer(0x00);
233-
digitalWrite(_reset_pin, AVRISP_RESET_OFF);
220+
digitalWrite(_reset_pin, _resetLevel(false));
234221
delayMicroseconds(50);
235-
digitalWrite(_reset_pin, AVRISP_RESET_ON);
222+
digitalWrite(_reset_pin, _resetLevel(true));
236223
delay(30);
237224

238225
spi_transaction(0xAC, 0x53, 0x00, 0x00);

hardware/esp8266com/esp8266/libraries/ESP8266AVRISP/src/ESP8266AVRISP.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ typedef struct {
4747

4848
class ESP8266AVRISP {
4949
public:
50-
ESP8266AVRISP(uint16_t port, uint8_t reset_pin, uint32_t spi_freq=AVRISP_SPI_FREQ, bool reset_state=false);
50+
ESP8266AVRISP(uint16_t port, uint8_t reset_pin, uint32_t spi_freq=AVRISP_SPI_FREQ, bool reset_state=false, bool reset_activehigh=false);
5151

5252
void begin();
5353

@@ -100,14 +100,15 @@ class ESP8266AVRISP {
100100
void start_pmode(void); // enter program mode
101101
void end_pmode(void); // exit program mode
102102

103-
103+
inline bool _resetLevel(bool reset_state) { return reset_state == _reset_activehigh; }
104104

105105
uint32_t _spi_freq;
106106
WiFiServer _server;
107107
WiFiClient _client;
108108
AVRISPState_t _state;
109109
uint8_t _reset_pin;
110110
bool _reset_state;
111+
bool _reset_activehigh;
111112

112113
// programmer settings, set by remote end
113114
AVRISP_parameter_t param;

0 commit comments

Comments
 (0)