Beispiel #1
0
//draw icons and set status by current mode.   
void drawIconsByMode(int iTotalPage)
{
    // freeze toolbar 
    tbDisableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID);
    
    // clear the toolbar
    tbClearIconSet(toolbarChannel, ER_SCRIBBLE_UA_ID);
    switch ( getOperationMode() )
    {
        case MODE_INVALID:
            addIconsByListMode(ICONS_FLDALL);
            break;
        case MODE_DRAW:
            addIconsByListMode(ICONS_FLDALL);
            activeIcon( iconID_pen );           
            break;
        case MODE_SELSIZE:
            addIconsByListMode(ICONLIST_UNFLDSIZE);
            activeIcon( getIconfromPenSize(getPenSize(), LIST_INDEX_ICONLOW) ); 
            activeIcon( iconID_pen );          
            break;
        case MODE_SELCOLOR:
            addIconsByListMode(ICONLIST_UNFLDCOLOR);
            activeIcon( getIconfromPenColor(getPenColor(), LIST_INDEX_ICONLOW) );
            activeIcon( iconID_pen );           
            break;
        case MODE_ERASE:
            addIconsByListMode(ICONS_FLDALL);
            activeIcon( iconID_eraseline );           
            break;
        case MODE_DELPAGE:
            addIconsByListMode(ICONS_FLDALL);
            activeIcon( iconID_trashcan );           
            break;
        default:
            SB_ERRORPRINTF("Error Mode[%d]\n", getOperationMode());
            return;
    }
    if( iTotalPage<=1 )
    {
        disableIcon(iconID_trashcan);
    }
    
    // redraw toolbar now
    tbEnableUpdate(toolbarChannel, ER_SCRIBBLE_UA_ID);
}
Beispiel #2
0
//reinit the toolbar,reset all the status,include the pages
void toolbar_reinit(int iTotalPage)
{
    //change the current mode only if current is mode_draw or erase.
    if( MODE_DELPAGE==getOperationMode() )
    {
        setOperationMode(MODE_DRAW);
    }
    drawIconsByMode(iTotalPage);
}
Beispiel #3
0
void TriggerCentral::handleShaftSignal(trigger_event_e signal DECLARE_ENGINE_PARAMETER_S) {
	efiAssertVoid(engine!=NULL, "configuration");

	nowNt = getTimeNowNt();

	efiAssertVoid(engine->engineConfiguration!=NULL, "engineConfiguration");
	efiAssertVoid(engine->engineConfiguration2!=NULL, "engineConfiguration2");

	engine->onTriggerEvent(nowNt);

#if EFI_HISTOGRAMS && EFI_PROD_CODE
	int beforeCallback = hal_lld_get_counter_value();
#endif
	int eventIndex = (int) signal;
	efiAssertVoid(eventIndex >= 0 && eventIndex < HW_EVENT_TYPES, "signal type");
	hwEventCounters[eventIndex]++;

	if (nowNt - previousShaftEventTimeNt > US2NT(US_PER_SECOND_LL)) {
		/**
		 * We are here if there is a time gap between now and previous shaft event - that means the engine is not runnig.
		 * That means we have lost synchronization since the engine is not running :)
		 */
		triggerState.shaft_is_synchronized = false;
	}
	previousShaftEventTimeNt = nowNt;

	/**
	 * This invocation changes the state of triggerState
	 */
	triggerState.decodeTriggerEvent(signal, nowNt PASS_ENGINE_PARAMETER);

	if (!triggerState.shaft_is_synchronized) {
		// we should not propagate event if we do not know where we are
		return;
	}

	/**
	 * If we only have a crank position sensor, here we are extending crank revolutions with a 360 degree
	 * cycle into a four stroke, 720 degrees cycle. TODO
	 */
	int triggerIndexForListeners;
	if (getOperationMode(engine->engineConfiguration) == FOUR_STROKE_CAM_SENSOR) {
		// That's easy - trigger cycle matches engine cycle
		triggerIndexForListeners = triggerState.getCurrentIndex();
	} else {
		bool isEven = triggerState.getTotalRevolutionCounter() & 1;

		triggerIndexForListeners = triggerState.getCurrentIndex() + (isEven ? 0 : TRIGGER_SHAPE(size));
	}
	reportEventToWaveChart(signal, triggerIndexForListeners);

	if (triggerState.current_index >= TRIGGER_SHAPE(size)) {
		warning(OBD_PCM_Processor_Fault, "unexpected eventIndex=%d", triggerState.current_index);
	} else {

		/**
		 * Here we invoke all the listeners - the main engine control logic is inside these listeners
		 */
		for (int i = 0; i < triggerListeneres.currentListenersCount; i++) {
			ShaftPositionListener listener = (ShaftPositionListener) triggerListeneres.callbacks[i];
			(listener)(signal, triggerIndexForListeners PASS_ENGINE_PARAMETER);
		}

	}
#if EFI_HISTOGRAMS && EFI_PROD_CODE
	int afterCallback = hal_lld_get_counter_value();
	int diff = afterCallback - beforeCallback;
	// this counter is only 32 bits so it overflows every minute, let's ignore the value in case of the overflow for simplicity
	if (diff > 0) {
		hsAdd(&triggerCallback, diff);
	}
#endif /* EFI_HISTOGRAMS */
}
Beispiel #4
0
/**
 * Trigger event count equals engine cycle event count if we have a cam sensor.
 * Two trigger cycles make one engine cycle in case of a four stroke engine If we only have a cranksensor.
 */
int getEngineCycleEventCount(engine_configuration_s const *engineConfiguration, trigger_shape_s * s) {
    return getEngineCycleEventCount2(getOperationMode(engineConfiguration), s);
}
Beispiel #5
0
/**
 * External logger is needed because at this point our logger is not yet initialized
 */
void initializeTriggerShape(Logging *logger, engine_configuration_s *engineConfiguration,
		engine_configuration2_s *engineConfiguration2) {
#if EFI_PROD_CODE
	scheduleMsg(logger, "initializeTriggerShape()");
#endif
	trigger_config_s *triggerConfig = &engineConfiguration->triggerConfig;
	trigger_shape_s *triggerShape = &engineConfiguration2->triggerShape;

	setTriggerSynchronizationGap(triggerShape, 2);
	triggerShape->useRiseEdge = TRUE;

	switch (triggerConfig->triggerType) {

	case TT_TOOTHED_WHEEL:
		// todo: move to into configuration definition		engineConfiguration2->triggerShape.needSecondTriggerInput = false;

		engineConfiguration2->triggerShape.isSynchronizationNeeded =
				engineConfiguration->triggerConfig.customIsSynchronizationNeeded;

		initializeSkippedToothTriggerShapeExt(triggerShape, triggerConfig->customTotalToothCount,
				triggerConfig->customSkippedToothCount, getOperationMode(engineConfiguration));
		return;

	case TT_MAZDA_MIATA_NA:
		initializeMazdaMiataNaShape(triggerShape);
		return;

	case TT_MAZDA_MIATA_NB:
		initializeMazdaMiataNbShape(triggerShape);
		return;

	case TT_DODGE_NEON:
		configureNeonTriggerShape(triggerShape);
		return;

	case TT_FORD_ASPIRE:
		configureFordAspireTriggerShape(triggerConfig, triggerShape);
		return;

	case TT_GM_7X:
		configureGmTriggerShape(triggerConfig, triggerShape);
		return;

	case TT_FORD_ESCORT_GT:
		configureMazdaProtegeLx(triggerShape);
		return;

	case TT_MINI_COOPER_R50:
		configureMiniCooperTriggerShape(triggerShape);
		return;

	case TT_TOOTHED_WHEEL_60_2:
		setToothedWheelConfiguration(triggerShape, 60, 2, engineConfiguration);
		setTriggerSynchronizationGap(triggerShape, 2.5);
		return;

	case TT_TOOTHED_WHEEL_36_1:
		setToothedWheelConfiguration(triggerShape, 36, 1, engineConfiguration);
		return;

	case TT_HONDA_ACCORD_CD_TWO_WIRES:
		configureHondaAccordCD(triggerShape, false);
		return;

	case TT_HONDA_ACCORD_CD:
		configureHondaAccordCD(triggerShape, true);
		return;

	case TT_HONDA_ACCORD_CD_DIP:
		configureHondaAccordCDDip(triggerShape);
		return;

	case TT_MITSU:
		initializeMitsubishi4g18(triggerShape);
		return;

	default:
		firmwareError("initializeTriggerShape() not implemented: %d", triggerConfig->triggerType);
		;
	}
	if (engineConfiguration2->triggerShape.shaftPositionEventCount != engineConfiguration2->triggerShape.getSize())
		firmwareError("trigger size or shaftPositionEventCount?");
}
Beispiel #6
0
void toolbar_key_selected(int iconID, int iconState,PScribbleUICtx pScribbleUICtx)
{
    if( iconState_grey==iconState )
    {
        return;//donothing.
    }
    
    SB_IPCPRINTF("\n====iconID=%d[mode=%d,pensize=%d,color=%d]\n",
                 iconID,getOperationMode(),getPenSize(),getPenColor());
  
    gboolean bNeedFlushWithFullQlt=FALSE;
    //need full update when return from erase mode.
    if( getOperationMode()== MODE_ERASE)
    {
        //every erase stroke ,we do it, so it's useless
        //core_redrawBgAndStrks(pScribbleUICtx);
        bNeedFlushWithFullQlt=TRUE;
    }		
    //we should add deal to pageup/pagedown
    switch (iconID)
    {
        case iconID_pen:
            //we switch by whether or not user is drawing
            if( !toolbar_is_drawing() ) 
            {
                setOperationMode(MODE_DRAW);
            }
            else 
            {
                setOperationMode(MODE_INVALID);
            } 
            break;
        case iconID_pen1pixel:
        case iconID_pen3pixel:
        case iconID_pen5pixel:
        case iconID_pen7pixel:
            //enter select mode
            setOperationMode(MODE_SELSIZE);
            break;
        case iconID_pen1pixelLow:
        case iconID_pen3pixelLow:
        case iconID_pen5pixelLow:
        case iconID_pen7pixelLow:
            //confirm the select                
            setPenSize(getPenSizefromIcon(iconID));
            setOperationMode(MODE_DRAW);
            break;
        case iconID_penwhite://WHITE
        case iconID_penlightgrey://LIGHT_GRAY
        case iconID_pendarkgrey://DARK_GRAY
        case iconID_penblack://BLACK
            //enter select mode
            setOperationMode(MODE_SELCOLOR);
            break;
        case iconID_penwhiteLow://WHITE
        case iconID_penlightgreyLow://LIGHT_GRAY
        case iconID_pendarkgreyLow://DARK_GRAY
        case iconID_penblackLow://BLACK
            //confirm the select                
            setPenColor(getPenColorfromIcon(iconID));
            setOperationMode(MODE_DRAW);
            break;
        case iconID_eraseline:
            if( MODE_ERASE==getOperationMode())
            {
                setOperationMode(MODE_DRAW);
            }
            else
            {
                setOperationMode(MODE_ERASE);
            }             
            break;
        case iconID_trashcan://delete page
            if(MODE_DELPAGE==getOperationMode())
            {                
                setOperationMode(MODE_DRAW);
                if(ispagedel_confirmed)
                {
		            //delete page
                    delOnepage(pScribbleUICtx);   
                    ispagedel_confirmed=FALSE;                    
                    return;//tool bar will be updated when jumping
                }  
                ispagedel_confirmed=FALSE;                  
            }
            else
            {
                SB_IPCPRINTF("enter MODE_DELPAGE\n");
                setOperationMode(MODE_DELPAGE);
                ispagedel_confirmed=FALSE;
            }
            break;
        case iconID_npage:
            addOnepage(pScribbleUICtx);
            return;//tool bar will be updated when jumping
        default:
            SB_IPCPRINTF("Unknown iconID [%d]\n", iconID);
            return;
    }
    
    drawIconsByMode(getTotalPage(&pScribbleUICtx->fileManager));
    //flush the pixmap to gdk_buffer,but now every stroke is flush,so it's useless.
    //flushPixMap(pScribbleUICtx);
    if(bNeedFlushWithFullQlt)
    {
        display_update_request_screen_refresh
                (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQFull);
    }
    else
    {
        display_update_request_screen_refresh
                (MAIN_WINDOW_EXPOSE_LEVEL,(gpointer)dmQTyping);
    }
    SB_IPCPRINTF("\n===end===[mode=%d,pensize=%d,color=%d]\n",
                 getOperationMode(),getPenSize(),getPenColor());
    return;
}