|
17 | 17 | #include "../Helpers/Misc.h" |
18 | 18 | #include "../Helpers/StringParser.h" |
19 | 19 |
|
| 20 | +#if FEATURE_I2C_MULTIPLE |
| 21 | +#include "../Helpers/Hardware_device_info.h" |
| 22 | +#endif |
20 | 23 |
|
21 | 24 | #if ESP_IDF_VERSION_MAJOR >= 5 |
22 | 25 | #include <driver/gpio.h> |
@@ -963,16 +966,170 @@ bool SettingsStruct_tmpl<N_TASKS>::isSPI_valid() const { |
963 | 966 | template<unsigned int N_TASKS> |
964 | 967 | bool SettingsStruct_tmpl<N_TASKS>::isI2C_pin(int8_t pin) const { |
965 | 968 | if (pin < 0) { return false; } |
966 | | - return Pin_i2c_sda == pin || Pin_i2c_scl == pin; |
| 969 | + return Pin_i2c_sda == pin || Pin_i2c_scl == pin |
| 970 | + #if FEATURE_I2C_MULTIPLE |
| 971 | + || ((getI2CBusCount() >= 2) && (Pin_i2c2_sda == pin || Pin_i2c2_scl == pin)) |
| 972 | + #if FEATURE_I2C_INTERFACE_3 |
| 973 | + || ((getI2CBusCount() >= 3) && (Pin_i2c3_sda == pin || Pin_i2c3_scl == pin)) |
| 974 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 975 | + #endif // if FEATURE_I2C_MULTIPLE |
| 976 | + ; |
| 977 | +} |
| 978 | + |
| 979 | +template<unsigned int N_TASKS> |
| 980 | +bool SettingsStruct_tmpl<N_TASKS>::isI2CEnabled(uint8_t i2cBus) const { |
| 981 | + if (0 == i2cBus) { |
| 982 | + return (Pin_i2c_sda != -1) && |
| 983 | + (Pin_i2c_scl != -1) && |
| 984 | + (I2C_clockSpeed > 0) && |
| 985 | + (I2C_clockSpeed_Slow > 0); |
| 986 | + #if FEATURE_I2C_MULTIPLE |
| 987 | + } else if (1 == i2cBus) { |
| 988 | + return (Pin_i2c2_sda != -1) && |
| 989 | + (Pin_i2c2_scl != -1) && |
| 990 | + (I2C2_clockSpeed > 0) && |
| 991 | + (I2C2_clockSpeed_Slow > 0); |
| 992 | + #if FEATURE_I2C_INTERFACE_3 |
| 993 | + } else { |
| 994 | + return (Pin_i2c3_sda != -1) && |
| 995 | + (Pin_i2c3_scl != -1) && |
| 996 | + (I2C3_clockSpeed > 0) && |
| 997 | + (I2C3_clockSpeed_Slow > 0); |
| 998 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 999 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1000 | + } |
| 1001 | + return false; |
| 1002 | +} |
| 1003 | + |
| 1004 | +template<unsigned int N_TASKS> |
| 1005 | +int8_t SettingsStruct_tmpl<N_TASKS>::getI2CSdaPin(uint8_t i2cBus) const { |
| 1006 | + if (0 == i2cBus) { |
| 1007 | + return Pin_i2c_sda; |
| 1008 | + #if FEATURE_I2C_MULTIPLE |
| 1009 | + } else if (1 == i2cBus) { |
| 1010 | + return Pin_i2c2_sda; |
| 1011 | + #if FEATURE_I2C_INTERFACE_3 |
| 1012 | + } else { |
| 1013 | + return Pin_i2c3_sda; |
| 1014 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1015 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1016 | + } |
| 1017 | + return -1; |
| 1018 | +} |
| 1019 | + |
| 1020 | +template<unsigned int N_TASKS> |
| 1021 | +int8_t SettingsStruct_tmpl<N_TASKS>::getI2CSclPin(uint8_t i2cBus) const { |
| 1022 | + if (0 == i2cBus) { |
| 1023 | + return Pin_i2c_scl; |
| 1024 | + #if FEATURE_I2C_MULTIPLE |
| 1025 | + } else if (1 == i2cBus) { |
| 1026 | + return Pin_i2c2_scl; |
| 1027 | + #if FEATURE_I2C_INTERFACE_3 |
| 1028 | + } else { |
| 1029 | + return Pin_i2c3_scl; |
| 1030 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1031 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1032 | + } |
| 1033 | + return -1; |
| 1034 | +} |
| 1035 | + |
| 1036 | +template<unsigned int N_TASKS> |
| 1037 | +uint32_t SettingsStruct_tmpl<N_TASKS>::getI2CClockSpeed(uint8_t i2cBus) const { |
| 1038 | + if (0 == i2cBus) { |
| 1039 | + return I2C_clockSpeed; |
| 1040 | + #if FEATURE_I2C_MULTIPLE |
| 1041 | + } else if (1 == i2cBus) { |
| 1042 | + return I2C2_clockSpeed; |
| 1043 | + #if FEATURE_I2C_INTERFACE_3 |
| 1044 | + } else { |
| 1045 | + return I2C3_clockSpeed; |
| 1046 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1047 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1048 | + } |
| 1049 | + return 0u; |
967 | 1050 | } |
968 | 1051 |
|
969 | 1052 | template<unsigned int N_TASKS> |
970 | | -bool SettingsStruct_tmpl<N_TASKS>::isI2CEnabled() const { |
971 | | - return (Pin_i2c_sda != -1) && |
972 | | - (Pin_i2c_scl != -1) && |
973 | | - (I2C_clockSpeed > 0) && |
974 | | - (I2C_clockSpeed_Slow > 0); |
| 1053 | +uint32_t SettingsStruct_tmpl<N_TASKS>::getI2CClockSpeedSlow(uint8_t i2cBus) const { |
| 1054 | + if (0 == i2cBus) { |
| 1055 | + return I2C_clockSpeed_Slow; |
| 1056 | + #if FEATURE_I2C_MULTIPLE |
| 1057 | + } else if (1 == i2cBus) { |
| 1058 | + return I2C2_clockSpeed_Slow; |
| 1059 | + #if FEATURE_I2C_INTERFACE_3 |
| 1060 | + } else { |
| 1061 | + return I2C3_clockSpeed_Slow; |
| 1062 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1063 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1064 | + } |
| 1065 | + return 0u; |
| 1066 | +} |
| 1067 | + |
| 1068 | +template<unsigned int N_TASKS> |
| 1069 | +uint32_t SettingsStruct_tmpl<N_TASKS>::getI2CClockStretch(uint8_t i2cBus) const { |
| 1070 | + if (0 == i2cBus) { |
| 1071 | + return WireClockStretchLimit; |
| 1072 | + #if FEATURE_I2C_MULTIPLE |
| 1073 | + } else if (1 == i2cBus) { |
| 1074 | + return Wire2ClockStretchLimit; |
| 1075 | + #if FEATURE_I2C_INTERFACE_3 |
| 1076 | + } else { |
| 1077 | + return Wire3ClockStretchLimit; |
| 1078 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1079 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1080 | + } |
| 1081 | + return 0u; |
| 1082 | +} |
| 1083 | + |
| 1084 | +#if FEATURE_I2CMULTIPLEXER |
| 1085 | +template<unsigned int N_TASKS> |
| 1086 | +int8_t SettingsStruct_tmpl<N_TASKS>::getI2CMultiplexerType(uint8_t i2cBus) const { |
| 1087 | + if (0 == i2cBus) { |
| 1088 | + return I2C_Multiplexer_Type; |
| 1089 | + #if FEATURE_I2C_MULTIPLE |
| 1090 | + } else if (1 == i2cBus) { |
| 1091 | + return I2C2_Multiplexer_Type; |
| 1092 | + #if FEATURE_I2C_INTERFACE_3 |
| 1093 | + } else { |
| 1094 | + return I2C3_Multiplexer_Type; |
| 1095 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1096 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1097 | + } |
| 1098 | + return -1; |
| 1099 | +} |
| 1100 | + |
| 1101 | +template<unsigned int N_TASKS> |
| 1102 | +int8_t SettingsStruct_tmpl<N_TASKS>::getI2CMultiplexerAddr(uint8_t i2cBus) const { |
| 1103 | + if (0 == i2cBus) { |
| 1104 | + return I2C_Multiplexer_Addr; |
| 1105 | + #if FEATURE_I2C_MULTIPLE |
| 1106 | + } else if (1 == i2cBus) { |
| 1107 | + return I2C2_Multiplexer_Addr; |
| 1108 | + #if FEATURE_I2C_INTERFACE_3 |
| 1109 | + } else { |
| 1110 | + return I2C3_Multiplexer_Addr; |
| 1111 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1112 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1113 | + } |
| 1114 | + return -1; |
| 1115 | +} |
| 1116 | + |
| 1117 | +template<unsigned int N_TASKS> |
| 1118 | +int8_t SettingsStruct_tmpl<N_TASKS>::getI2CMultiplexerResetPin(uint8_t i2cBus) const { |
| 1119 | + if (0 == i2cBus) { |
| 1120 | + return I2C_Multiplexer_ResetPin; |
| 1121 | + #if FEATURE_I2C_MULTIPLE |
| 1122 | + } else if (1 == i2cBus) { |
| 1123 | + return I2C2_Multiplexer_ResetPin; |
| 1124 | + #if FEATURE_I2C_INTERFACE_3 |
| 1125 | + } else { |
| 1126 | + return I2C3_Multiplexer_ResetPin; |
| 1127 | + #endif // if FEATURE_I2C_INTERFACE_3 |
| 1128 | + #endif // if FEATURE_I2C_MULTIPLE |
| 1129 | + } |
| 1130 | + return -1; |
975 | 1131 | } |
| 1132 | +#endif // if FEATURE_I2CMULTIPLEXER |
976 | 1133 |
|
977 | 1134 | template<unsigned int N_TASKS> |
978 | 1135 | bool SettingsStruct_tmpl<N_TASKS>::isEthernetPin(int8_t pin) const { |
|
0 commit comments