From bc7d8418568b553bcf431257e7eb75435fc8df64 Mon Sep 17 00:00:00 2001 From: Mark <markboldyrev@gmail.com> Date: Mon, 19 Jun 2023 21:51:32 +0300 Subject: [PATCH] Replace target reset with power control. 3v3 used for compatibility with the unbrick mode. --- minichlink/ardulink.c | 39 +++++++++++++++++++++------------------ minichlink/minichlink.c | 5 ----- minichlink/minichlink.h | 2 -- 3 files changed, 21 insertions(+), 25 deletions(-) diff --git a/minichlink/ardulink.c b/minichlink/ardulink.c index 82284c6..cd28635 100644 --- a/minichlink/ardulink.c +++ b/minichlink/ardulink.c @@ -9,8 +9,9 @@ void * TryInit_Ardulink(const init_hints_t*); static int ArdulinkWriteReg32(void * dev, uint8_t reg_7_bit, uint32_t command); static int ArdulinkReadReg32(void * dev, uint8_t reg_7_bit, uint32_t * commandresp); static int ArdulinkFlushLLCommands(void * dev); +static int ArdulinkDelayUS(void * dev, int microseconds); +static int ArdulinkControl3v3(void * dev, int power_on); static int ArdulinkExit(void * dev); -static int ArdulinkTargetReset(void * dev, int reset); typedef struct { struct ProgrammerStructBase psb; @@ -64,20 +65,12 @@ int ArdulinkFlushLLCommands(void * dev) return 0; } -int ArdulinkExit(void * dev) -{ - serial_dev_close(&((ardulink_ctx_t*)dev)->serial); - free(dev); - return 0; -} - -int ArdulinkTargetReset(void * dev, int reset) { +int ArdulinkControl3v3(void * dev, int power_on) { char c; - fprintf(stderr, "Ardulink: target reset %d\n", reset); + fprintf(stderr, "Ardulink: target power %d\n", power_on); - // Assert reset. - c = reset ? 'a' : 'A'; + c = power_on ? 'p' : 'P'; if (serial_dev_write(&((ardulink_ctx_t*)dev)->serial, &c, 1) == -1) return -errno; @@ -91,6 +84,20 @@ int ArdulinkTargetReset(void * dev, int reset) { return 0; } +int ArdulinkDelayUS(void * dev, int microseconds) { + //fprintf(stderr, "Ardulink: faking delay %d\n", microseconds); + //usleep(microseconds); + return 0; +} + +int ArdulinkExit(void * dev) +{ + serial_dev_close(&((ardulink_ctx_t*)dev)->serial); + free(dev); + return 0; +} + + void * TryInit_Ardulink(const init_hints_t* hints) { ardulink_ctx_t *ctx; @@ -149,18 +156,14 @@ void * TryInit_Ardulink(const init_hints_t* hints) return NULL; } - if (ArdulinkTargetReset(ctx, 1) != 0) { - fprintf(stderr, "Ardulink: target reset failed.\n"); - return NULL; - } - fprintf(stderr, "Ardulink: synced.\n"); MCF.WriteReg32 = ArdulinkWriteReg32; MCF.ReadReg32 = ArdulinkReadReg32; MCF.FlushLLCommands = ArdulinkFlushLLCommands; + MCF.Control3v3 = ArdulinkControl3v3; + MCF.DelayUS = ArdulinkDelayUS; MCF.Exit = ArdulinkExit; - MCF.TargetReset = ArdulinkTargetReset; return ctx; } diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 2bb7a04..efbda9d 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -1575,11 +1575,6 @@ static int DefaultHaltMode( void * dev, int mode ) } #endif - // pull reset line back to 0 again (NO RESET) - if (MCF.TargetReset) { - MCF.TargetReset(dev, 0); - } - iss->processor_in_mode = mode; return 0; } diff --git a/minichlink/minichlink.h b/minichlink/minichlink.h index 77310ef..c5f3bcb 100644 --- a/minichlink/minichlink.h +++ b/minichlink/minichlink.h @@ -78,8 +78,6 @@ struct MiniChlinkFunctions int (*WriteByte)( void * dev, uint32_t address_to_write, uint8_t data ); int (*ReadByte)( void * dev, uint32_t address_to_read, uint8_t * data ); - - int (*TargetReset)( void * dev, int reset ); }; /** If you are writing a driver, the minimal number of functions you can implement are: -- GitLab