auto-sync

This commit is contained in:
rusEfi 2016-11-11 22:02:30 -05:00
parent 6de8a84543
commit e92f68c15b
6 changed files with 45 additions and 13 deletions

View File

@ -1,4 +1,4 @@
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Oct 19 10:36:24 EDT 2016
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Nov 11 21:53:11 EST 2016
// begin
#ifndef ENGINE_CONFIGURATION_GENERATED_H_
#define ENGINE_CONFIGURATION_GENERATED_H_
@ -624,6 +624,9 @@ typedef struct {
* Use rise or fall signal front
offset 376 bit 17 */
bool vvtCamSensorUseRise : 1;
/**
offset 376 bit 18 */
bool miataNb2 : 1;
/**
* offset 380
*/
@ -672,7 +675,11 @@ typedef struct {
/**
* offset 584
*/
int unusedJoy[2];
float nb2ratioFrom;
/**
* offset 588
*/
float nb2ratioTo;
/**
* This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
* offset 592
@ -1268,9 +1275,11 @@ typedef struct {
*/
idle_mode_e idleMode;
/**
* enable injection
offset 1500 bit 0 */
bool isInjectionEnabled : 1;
/**
* enable ignition
offset 1500 bit 1 */
bool isIgnitionEnabled : 1;
/**
@ -1287,6 +1296,7 @@ typedef struct {
offset 1500 bit 5 */
bool isMapAveragingEnabled : 1;
/**
* enable mil
offset 1500 bit 6 */
bool isMilEnabled : 1;
/**
@ -1302,6 +1312,7 @@ typedef struct {
offset 1500 bit 10 */
bool isIdleThreadEnabled : 1;
/**
* enable trigger_details
offset 1500 bit 11 */
bool isPrintTriggerSynchDetails : 1;
/**
@ -1982,4 +1993,4 @@ typedef struct {
#endif
// end
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Oct 19 10:36:24 EDT 2016
// this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Nov 11 21:53:11 EST 2016

View File

@ -426,6 +426,7 @@
#define onOffAlternatorLogic_offset 1000
#define isCJ125Enabled_offset 1000
#define vvtCamSensorUseRise_offset 1000
#define miataNb2_offset 1000
#define logicAnalyzerPins1_offset 1004
#define logicAnalyzerPins2_offset 1008
#define logicAnalyzerPins3_offset 1012
@ -507,7 +508,8 @@
#define consoleUartDevice_offset 1196
#define console_rx_pin_offset 1200
#define console_tx_pin_offset 1204
#define unusedJoy_offset 1208
#define nb2ratioFrom_offset 1208
#define nb2ratioTo_offset 1212
#define triggerErrorPin_offset 1216
#define triggerErrorPinMode_offset 1220
#define acRelayPin_offset 1224

View File

@ -502,6 +502,7 @@ bit is_enabled_spi_2
bit onOffAlternatorLogic;
bit isCJ125Enabled
bit vvtCamSensorUseRise;+Use rise or fall signal front
bit miataNb2;
brain_input_pin_e[LOGIC_ANALYZER_CHANNEL_COUNT iterate] logicAnalyzerPins;
uint8_t[LOGIC_ANALYZER_CHANNEL_COUNT] logicAnalyzerMode;default or inverted input
@ -521,7 +522,8 @@ custom uart_device_e 4 bits,U32, @OFFSET@, [0:1], "Off", "UART1", "UART2", "UA
uart_device_e consoleUartDevice;
brain_pin_e console_rx_pin;
brain_pin_e console_tx_pin;
int[2] unusedJoy;
float nb2ratioFrom;;"value", 1, 0, 0, 1000, 5
float nb2ratioTo;;"value", 1, 0, 0, 1000, 5
brain_pin_e triggerErrorPin;This pin is used for debugging - snap a logic analyzer on it and see if it's ever high
@ -604,18 +606,18 @@ bit hasFrequencyReportingMapSensor;
custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "false", "true"
idle_mode_e idleMode;
bit isInjectionEnabled
bit isIgnitionEnabled
bit isInjectionEnabled;+enable injection
bit isIgnitionEnabled;+enable ignition
bit isCylinderCleanupEnabled;+If TPS above 95% no fuel would be injected during cranking
bit secondTriggerChannelEnabled
bit needSecondTriggerInputDeprecated
bit isMapAveragingEnabled
bit isMilEnabled
bit isMilEnabled;+enable mil
bit isFuelPumpEnabled
bit isTunerStudioEnabled
bit isWaveAnalyzerEnabled
bit isIdleThreadEnabled
bit isPrintTriggerSynchDetails
bit isPrintTriggerSynchDetails;+enable trigger_details
bit isManualSpinningMode;Usually if we have no trigger events that means engine is stopped\nUnless we are troubleshooting and spinning the engine by hand - this case a longer\ndelay is needed
bit twoWireBatchInjection;+This is needed if batched injection and individual injector wiring\nenable two_wire_batch_injection
bit useOnlyRisingEdgeForTrigger;+VR sensors are only precise on rising front

View File

@ -42,7 +42,7 @@ enable2ndByteCanID = false
; see PAGE_0_SIZE in C source code
; CONFIG_DEFINITION_START
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Wed Oct 19 10:36:24 EDT 2016
; this section was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Nov 11 21:56:01 EST 2016
pageSize = 16376
page = 1
@ -292,6 +292,7 @@ page = 1
onOffAlternatorLogic = bits, U32, 1000, [15:15], "false", "true"
isCJ125Enabled = bits, U32, 1000, [16:16], "false", "true"
vvtCamSensorUseRise = bits, U32, 1000, [17:17], "false", "true"
miataNb2 = bits, U32, 1000, [18:18], "false", "true"
logicAnalyzerPins1 = bits, U32, 1004, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "INVALID", "INVALID", "PA8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "INVALID", "PE7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
logicAnalyzerPins2 = bits, U32, 1008, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "INVALID", "INVALID", "PA8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "INVALID", "PE7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
logicAnalyzerPins3 = bits, U32, 1012, [0:6], "INVALID", "INVALID", "PA2", "PA3", "INVALID", "PA5", "INVALID", "INVALID", "PA8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "INVALID", "PE7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
@ -343,7 +344,8 @@ page = 1
consoleUartDevice = bits,U32, 1196, [0:1], "Off", "UART1", "UART2", "UART3"
console_rx_pin = bits, U32, 1200, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
console_tx_pin = bits, U32, 1204, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
;skipping unusedJoy offset 1208
nb2ratioFrom = scalar, F32, 1208, "value", 1, 0, 0, 1000, 5
nb2ratioTo = scalar, F32, 1212, "value", 1, 0, 0, 1000, 5
triggerErrorPin = bits, U32, 1216, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
triggerErrorPinMode = bits, U32, 1220, [0:1], "default", "default inverted", "open collector", "open collector inverted"
acRelayPin = bits, U32, 1224, [0:6], "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
@ -711,7 +713,11 @@ page = 1
tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin."
vvtCamSensorUseRise = "Use rise or fall signal front"
sensorChartMode = "rusEfi console Sensor Sniffer mode"
isInjectionEnabled = "enable injection"
isIgnitionEnabled = "enable ignition"
isCylinderCleanupEnabled = "If TPS above 95% no fuel would be injected during cranking"
isMilEnabled = "enable mil"
isPrintTriggerSynchDetails = "enable trigger_details"
twoWireBatchInjection = "This is needed if batched injection and individual injector wiring\nenable two_wire_batch_injection"
useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front"
twoWireBatchIgnition = "This is needed if batched igniton (waster spark) and individual coil wiring"
@ -1510,6 +1516,9 @@ cmd_test_idle_valve = "w\x00\x17\x00\x01"
field = "Cam Sync/VVT input", camInput
field = "VVT mode", vvtMode, {trigger_type != 80}
field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80}
field = "Is NB2 Miata?", miataNb2
field = "NB2 from temp", nb2ratioFrom
field = "NB2 to temp", nb2ratioTo
field = "Trigger error LED", triggerErrorPin
field = "Trigger error LED mode", triggerErrorPinMode
dialog = triggerConfiguration

View File

@ -1482,6 +1482,9 @@ cmd_test_idle_valve = "w\x00\x17\x00\x01"
field = "Cam Sync/VVT input", camInput
field = "VVT mode", vvtMode, {trigger_type != 80}
field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80}
field = "Is NB2 Miata?", miataNb2
field = "NB2 from temp", nb2ratioFrom
field = "NB2 to temp", nb2ratioTo
field = "Trigger error LED", triggerErrorPin
field = "Trigger error LED mode", triggerErrorPinMode
dialog = triggerConfiguration

View File

@ -1,6 +1,6 @@
package com.rusefi.config;
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Tue Oct 18 15:59:38 EDT 2016
// this file was generated automatically by ConfigDefinition.jar based on rusefi_config.txt Fri Nov 11 21:53:11 EST 2016
public class Fields {
public static final int LE_COMMAND_LENGTH = 200;
public static final int FSIO_ADC_COUNT = 4;
@ -430,6 +430,7 @@ public class Fields {
public static final int onOffAlternatorLogic_offset = 1000;
public static final int isCJ125Enabled_offset = 1000;
public static final int vvtCamSensorUseRise_offset = 1000;
public static final int miataNb2_offset = 1000;
public static final int logicAnalyzerPins1_offset = 1004;
public static final int logicAnalyzerPins2_offset = 1008;
public static final int logicAnalyzerPins3_offset = 1012;
@ -511,7 +512,8 @@ public class Fields {
public static final int consoleUartDevice_offset = 1196;
public static final int console_rx_pin_offset = 1200;
public static final int console_tx_pin_offset = 1204;
public static final int unusedJoy_offset = 1208;
public static final int nb2ratioFrom_offset = 1208;
public static final int nb2ratioTo_offset = 1212;
public static final int triggerErrorPin_offset = 1216;
public static final int triggerErrorPinMode_offset = 1220;
public static final int acRelayPin_offset = 1224;
@ -1215,6 +1217,7 @@ public class Fields {
public static final Field ONOFFALTERNATORLOGIC = Field.create("ONOFFALTERNATORLOGIC", 1000, FieldType.BIT, 15);
public static final Field ISCJ125ENABLED = Field.create("ISCJ125ENABLED", 1000, FieldType.BIT, 16);
public static final Field VVTCAMSENSORUSERISE = Field.create("VVTCAMSENSORUSERISE", 1000, FieldType.BIT, 17);
public static final Field MIATANB2 = Field.create("MIATANB2", 1000, FieldType.BIT, 18);
public static final Field LOGICANALYZERPINS1 = Field.create("LOGICANALYZERPINS1", 1004, FieldType.INT, brain_input_pin_e);
public static final Field LOGICANALYZERPINS2 = Field.create("LOGICANALYZERPINS2", 1008, FieldType.INT, brain_input_pin_e);
public static final Field LOGICANALYZERPINS3 = Field.create("LOGICANALYZERPINS3", 1012, FieldType.INT, brain_input_pin_e);
@ -1265,6 +1268,8 @@ public class Fields {
public static final Field CONSOLEUARTDEVICE = Field.create("CONSOLEUARTDEVICE", 1196, FieldType.INT);
public static final Field CONSOLE_RX_PIN = Field.create("CONSOLE_RX_PIN", 1200, FieldType.INT, brain_pin_e);
public static final Field CONSOLE_TX_PIN = Field.create("CONSOLE_TX_PIN", 1204, FieldType.INT, brain_pin_e);
public static final Field NB2RATIOFROM = Field.create("NB2RATIOFROM", 1208, FieldType.FLOAT);
public static final Field NB2RATIOTO = Field.create("NB2RATIOTO", 1212, FieldType.FLOAT);
public static final Field TRIGGERERRORPIN = Field.create("TRIGGERERRORPIN", 1216, FieldType.INT, brain_pin_e);
public static final Field TRIGGERERRORPINMODE = Field.create("TRIGGERERRORPINMODE", 1220, FieldType.INT, pin_output_mode_e);
public static final Field ACRELAYPIN = Field.create("ACRELAYPIN", 1224, FieldType.INT, brain_pin_e);