From 502bc8c72ddcb92828a4016546439674b2a74d5d Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Thu, 20 Aug 2020 12:33:52 +0200 Subject: [PATCH] Isolate more pat9125 code Remove probing from Marlin_main and move it into pat9125_probe so that it can support the various variants. --- Firmware/Marlin_main.cpp | 15 ++++----------- Firmware/config.h | 4 +++- Firmware/pat9125.c | 39 +++++++++++++++++++++++++++++---------- Firmware/pat9125.h | 1 + 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 2a261db2..e3be3dfb 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -88,18 +88,13 @@ #include "la10compat.h" #endif -#ifdef SWSPI -#include "swspi.h" -#endif //SWSPI - #include "spi.h" -#ifdef SWI2C -#include "swi2c.h" -#endif //SWI2C - #ifdef FILAMENT_SENSOR #include "fsensor.h" +#ifdef IR_SENSOR +#include "pat9125.h" // for pat9125_probe +#endif #endif //FILAMENT_SENSOR #ifdef TMC2130 @@ -864,9 +859,7 @@ static void check_if_fw_is_on_right_printer(){ #ifdef FILAMENT_SENSOR if((PRINTER_TYPE == PRINTER_MK3) || (PRINTER_TYPE == PRINTER_MK3S)){ #ifdef IR_SENSOR - swi2c_init(); - const uint8_t pat9125_detected = swi2c_readByte_A8(PAT9125_I2C_ADDR,0x00,NULL); - if (pat9125_detected){ + if (pat9125_probe()){ lcd_show_fullscreen_message_and_wait_P(_i("MK3S firmware detected on MK3 printer"));}////c=20 r=3 #endif //IR_SENSOR diff --git a/Firmware/config.h b/Firmware/config.h index 1a0a9700..b7705584 100644 --- a/Firmware/config.h +++ b/Firmware/config.h @@ -23,7 +23,6 @@ #define ADC_CALLBACK adc_ready //callback function () //SWI2C configuration -#define SWI2C //#define SWI2C_SDA 20 //SDA on P3 //#define SWI2C_SCL 21 //SCL on P3 #define SWI2C_A8 @@ -31,7 +30,10 @@ #define SWI2C_TMO 2048 //2048 cycles timeout //PAT9125 configuration +//#define PAT9125_SWSPI #define PAT9125_SWI2C +//#define PAT9125_I2C + #define PAT9125_I2C_ADDR 0x75 //ID=LO //#define PAT9125_I2C_ADDR 0x79 //ID=HI //#define PAT9125_I2C_ADDR 0x73 //ID=NC diff --git a/Firmware/pat9125.c b/Firmware/pat9125.c index de4693d2..10b06b3e 100644 --- a/Firmware/pat9125.c +++ b/Firmware/pat9125.c @@ -26,12 +26,15 @@ #define PAT9125_BANK_SELECTION 0x7f -#ifdef PAT9125_SWSPI +#if defined(PAT9125_SWSPI) #include "swspi.h" -#endif //PAT9125_SWSPI -#ifdef PAT9125_SWI2C +#elif defined(PAT9125_SWI2C) #include "swi2c.h" -#endif //PAT9125_SWI2C +#elif defined(PAT9125_I2C) +#error not implemented +#else +#error unknown PAT9125 communication method +#endif uint8_t pat9125_PID1 = 0; @@ -103,14 +106,30 @@ extern FILE _uartout; #define uartout (&_uartout) +uint8_t pat9125_probe() +{ +#if defined(PAT9125_SWSPI) + swspi_init(); + //#error not implemented +#elif defined(PAT9125_SWI2C) + swi2c_init(); + return swi2c_readByte_A8(PAT9125_I2C_ADDR,0x00,NULL); +#elif defined(PAT9125_I2C) + twi_init(); + #ifdef IR_SENSOR + // NOTE: this is called from the MK3S variant, so it should be kept minimal + #error not implemented + #else + return pat9125_rd_reg(PAT9125_PID1) != 0; + #endif +#endif +} + uint8_t pat9125_init(void) { -#ifdef PAT9125_SWSPI - swspi_init(); -#endif //PAT9125_SWSPI -#ifdef PAT9125_SWI2C - swi2c_init(); -#endif //PAT9125_SWI2C + if (!pat9125_probe()) + return 0; + // Verify that the sensor responds with its correct product ID. pat9125_PID1 = pat9125_rd_reg(PAT9125_PID1); pat9125_PID2 = pat9125_rd_reg(PAT9125_PID2); diff --git a/Firmware/pat9125.h b/Firmware/pat9125.h index 12f7fe94..1fb2539f 100755 --- a/Firmware/pat9125.h +++ b/Firmware/pat9125.h @@ -18,6 +18,7 @@ extern int16_t pat9125_y; extern uint8_t pat9125_b; extern uint8_t pat9125_s; +extern uint8_t pat9125_probe(void); // Return non-zero if PAT9125 can be trivially detected extern uint8_t pat9125_init(void); extern uint8_t pat9125_update(void); // update all sensor data extern uint8_t pat9125_update_y(void); // update _y only