/*
 * @file trigger_toyota.cpp
 *
 * https://thedeltaecho.wordpress.com/2010/03/14/2jz-ge-cam-crank-signals/
 *
 * @date Dec 14, 2015
 * @author Andrey Belomutskiy, (c) 2012-2016
 */

#include "trigger_toyota.h"

EXTERN_ENGINE;

void initialize2jzGE1_12(TriggerShape *s) {
	s->initialize(FOUR_STROKE_CAM_SENSOR, true);

	float crankD = 360 / 12 / 2; // 15

	float crankAngle = 10;
	s->addEvent(crankAngle, T_SECONDARY, TV_FALL, -1, 721); // 120

	for (int i = 0; i < 2; i++) {
		s->addEvent(crankAngle + crankD, T_SECONDARY, TV_RISE, -1, 721);
		crankAngle += crankD;
		s->addEvent(crankAngle + crankD, T_SECONDARY, TV_FALL, -1, 721); // 120
		crankAngle += crankD;
	}


	s->addEvent(75, T_PRIMARY, TV_FALL, -1, 721);

	for (int i = 0; i < 21; i++) {
		s->addEvent(crankAngle + crankD, T_SECONDARY, TV_RISE, -1, 721);
		crankAngle += crankD;
		s->addEvent(crankAngle + crankD, T_SECONDARY, TV_FALL, -1, 721); // 120
		crankAngle += crankD;
	}

	s->addEvent(crankAngle + crankD, T_SECONDARY, TV_RISE, -1, 721);
	crankAngle += crankD;


	s->addEvent(720, T_PRIMARY, TV_RISE, -1, 721);

	s->isSynchronizationNeeded = false;
}

void initialize2jzGE3_34(TriggerShape *s) {
	setToothedWheelConfiguration(s, 36, 2, FOUR_STROKE_CRANK_SENSOR);

//	s->initialize(FOUR_STROKE_CAM_SENSOR, true);
//
//	float camD = 720 / 6; // 120
//
//	float crankAngle = 20; // skipping two teeth
//
//	for (int i = 0; i < 10; i++) {
//		s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721);
//		s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120
//		crankAngle += 10;
//	} // 2 + 10
//
//	float camAngle = 0;
//	camAngle += camD;
//	s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 120
//
//	for (int i = 0; i < 12; i++) {
//		s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721);
//		s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120
//		crankAngle += 10;
//	} // 2 + 22
//
//
//	camAngle += camD;
//	s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 240
//
//	for (int i = 0; i < 12; i++) {
//		s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721);
//		s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120
//		crankAngle += 10;
//	} // 2 + 34
//
//	camAngle += camD;
//	s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 360
//
//	crankAngle += 20; // skipping two teeth one more time
//	for (int i = 0; i < 10; i++) {
//		s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721);
//		s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120
//		crankAngle += 10;
//	} // 2 + 10
//
//	camAngle += camD;
//	s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 480
//
//	for (int i = 0; i < 12; i++) {
//		s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721);
//		s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120
//		crankAngle += 10;
//	} // 2 + 22
//
//	camAngle += camD;
//	s->addEvent(camAngle, T_PRIMARY, TV_RISE, -1, 721); // 600
//
//
//	for (int i = 0; i < 12; i++) {
//		s->addEvent(crankAngle + 5, T_SECONDARY, TV_RISE, -1, 721);
//		s->addEvent(crankAngle + 9.9, T_SECONDARY, TV_FALL, -1, 721); // 120
//		crankAngle += 10;
//	} // 2 + 32
//	camAngle += camD;
//	s->addEvent(camAngle, T_PRIMARY, TV_FALL, -1, 721); // 720
//
//	s->isSynchronizationNeeded = false;

}
