Correct serial speed

On ground check
Reset of arduino on ac change
send only if changed
This commit is contained in:
Kilian Kurt Hofmann 2017-01-15 15:18:32 +01:00
parent 3187bf00e9
commit 14c6361fbd
3 changed files with 92 additions and 20 deletions

View File

@ -34,7 +34,7 @@ SerialPort::SerialPort(char *portName)
printf("failed to get current serial parameters");
}
else {
dcbSerialParameters.BaudRate = CBR_9600;
dcbSerialParameters.BaudRate = CBR_115200;
dcbSerialParameters.ByteSize = 8;
dcbSerialParameters.StopBits = ONESTOPBIT;
dcbSerialParameters.Parity = NOPARITY;

View File

@ -13,12 +13,18 @@ values potValues;
int sizeOfDataToSendToFSX = 0;
bool ready = false;
bool hasPropeller = false;
bool onGround = true;
engineAll eAOne;
engineAll eATwo;
engineAll eAThree;
engineAll eAFour;
engineAll lastSaveOne;
engineAll lastSaveTwo;
engineAll lastSaveThree;
engineAll lastSaveFour;
void setupDefinitions() {
printf("\nSetting up ... ");
HRESULT hr;
@ -224,8 +230,11 @@ void setupDefinitions() {
sizeOfDataToSendToFSX = sizeof(engineAll);
}
printf("done!");
arduino->writeSerialPort("r", 1);
arduino->writeSerialPort("i", 1);
arduino->writeSerialPort((char *)&init, sizeof(initialization));
// Request AC_ON_GROUND data every frame for rev engagement
hr = SimConnect_RequestDataOnSimObject(hSimConnect, AC_ON_GROUND_REQUEST, DEFINITION_AC_ON_GROUND, SIMCONNECT_OBJECT_ID_USER, SIMCONNECT_PERIOD_SIM_FRAME);
ready = true;
}
@ -241,6 +250,12 @@ void CALLBACK MyDispatchProcTC(SIMCONNECT_RECV* pData, DWORD cbData, void *pCont
SIMCONNECT_RECV_SIMOBJECT_DATA *data = (SIMCONNECT_RECV_SIMOBJECT_DATA *)pData;
switch (data->dwRequestID) {
case AC_ON_GROUND_REQUEST:
{
printf("\nOn ground: %f", &data->dwData);
onGround = (int)&data->dwData;
break;
}
case AC_DATA_REQUEST:
{
printf("Aircraft data retrieved.");
@ -323,6 +338,7 @@ void throttleControl()
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_AC_DATA, "NUMBER OF ENGINES", "number");
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_AC_DATA, "THROTTLE LOWER LIMIT", "percent");
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_AC_ON_GROUND, "SIM ON GROUND", "bool");
// Request a simulation started event
hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");
@ -345,15 +361,19 @@ void throttleControl()
lastSymbol = 'T';
switch (currentEngine) {
case 1:
lastSaveOne.throttlePercent = eAOne.throttlePercent;
eAOne.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
break;
case 2:
lastSaveTwo.throttlePercent = eATwo.throttlePercent;
eATwo.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
break;
case 3:
lastSaveThree.throttlePercent = eAThree.throttlePercent;
eAThree.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
break;
case 4:
lastSaveFour.throttlePercent = eAFour.throttlePercent;
eAFour.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
break;
}
@ -364,15 +384,19 @@ void throttleControl()
lastSymbol = 'P';
switch (currentEngine) {
case 1:
lastSaveOne.propellerPrecent = eAOne.propellerPrecent;
eAOne.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
break;
case 2:
lastSaveTwo.propellerPrecent = eATwo.propellerPrecent;
eATwo.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
break;
case 3:
lastSaveThree.propellerPrecent = eAThree.propellerPrecent;
eAThree.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
break;
case 4:
lastSaveFour.propellerPrecent = eAFour.propellerPrecent;
eAFour.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
break;
}
@ -383,28 +407,44 @@ void throttleControl()
lastSymbol = 'M';
switch (currentEngine) {
case 1:
if (hasPropeller)
if (hasPropeller) {
lastSaveOne.mixturePercent = eAOne.mixturePercent;
eAOne.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
else
}
else {
lastSaveOne.mixturePercent = eAOne.propellerPrecent;
eAOne.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
}
break;
case 2:
if (hasPropeller)
if (hasPropeller) {
lastSaveTwo.mixturePercent = eATwo.mixturePercent;
eATwo.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
else
}
else {
lastSaveTwo.mixturePercent = eATwo.propellerPrecent;
eATwo.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
}
break;
case 3:
if (hasPropeller)
if (hasPropeller) {
lastSaveThree.mixturePercent = eAThree.mixturePercent;
eAThree.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
else
}
else {
lastSaveThree.mixturePercent = eAThree.propellerPrecent;
eAThree.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
}
break;
case 4:
if (hasPropeller)
if (hasPropeller) {
lastSaveFour.mixturePercent = eAFour.mixturePercent;
eAFour.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
else
}
else {
lastSaveFour.mixturePercent = eAFour.mixturePercent;
eAFour.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
}
break;
}
currentEngine++;
@ -414,21 +454,51 @@ void throttleControl()
switch (numEngines)
{
case 1:
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
(hasPropeller && (lastSaveOne.propellerPrecent != eAOne.propellerPrecent || lastSaveOne.mixturePercent != eAOne.mixturePercent)) ||
(!hasPropeller && (lastSaveOne.mixturePercent != eAOne.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
break;
case 2:
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
(hasPropeller && (lastSaveOne.propellerPrecent != eAOne.propellerPrecent || lastSaveOne.mixturePercent != eAOne.mixturePercent)) ||
(!hasPropeller && (lastSaveOne.mixturePercent != eAOne.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
if (lastSaveTwo.throttlePercent != eATwo.throttlePercent ||
(hasPropeller && (lastSaveTwo.propellerPrecent != eATwo.propellerPrecent || lastSaveTwo.mixturePercent != eATwo.mixturePercent)) ||
(!hasPropeller && (lastSaveTwo.mixturePercent != eATwo.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
break;
case 3:
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
(hasPropeller && (lastSaveOne.propellerPrecent != eAOne.propellerPrecent || lastSaveOne.mixturePercent != eAOne.mixturePercent)) ||
(!hasPropeller && (lastSaveOne.mixturePercent != eAOne.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
if (lastSaveTwo.throttlePercent != eATwo.throttlePercent ||
(hasPropeller && (lastSaveTwo.propellerPrecent != eATwo.propellerPrecent || lastSaveTwo.mixturePercent != eATwo.mixturePercent)) ||
(!hasPropeller && (lastSaveTwo.mixturePercent != eATwo.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
if (lastSaveThree.throttlePercent != eAThree.throttlePercent ||
(hasPropeller && (lastSaveThree.propellerPrecent != eAThree.propellerPrecent || lastSaveThree.mixturePercent != eAThree.mixturePercent)) ||
(!hasPropeller && (lastSaveThree.mixturePercent != eAThree.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_THREE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAThree);
break;
case 4:
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
(hasPropeller && (lastSaveOne.propellerPrecent != eAOne.propellerPrecent || lastSaveOne.mixturePercent != eAOne.mixturePercent)) ||
(!hasPropeller && (lastSaveOne.mixturePercent != eAOne.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
if (lastSaveTwo.throttlePercent != eATwo.throttlePercent ||
(hasPropeller && (lastSaveTwo.propellerPrecent != eATwo.propellerPrecent || lastSaveTwo.mixturePercent != eATwo.mixturePercent)) ||
(!hasPropeller && (lastSaveTwo.mixturePercent != eATwo.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
if (lastSaveThree.throttlePercent != eAThree.throttlePercent ||
(hasPropeller && (lastSaveThree.propellerPrecent != eAThree.propellerPrecent || lastSaveThree.mixturePercent != eAThree.mixturePercent)) ||
(!hasPropeller && (lastSaveThree.mixturePercent != eAThree.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_THREE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAThree);
if (lastSaveFour.throttlePercent != eAFour.throttlePercent ||
(hasPropeller && (lastSaveFour.propellerPrecent != eAFour.propellerPrecent || lastSaveFour.mixturePercent != eAFour.mixturePercent)) ||
(!hasPropeller && (lastSaveFour.mixturePercent != eAFour.propellerPrecent)))
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_FOUR, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAFour);
break;
default:
@ -456,7 +526,7 @@ int __cdecl _tmain(int argc, _TCHAR* argv[])
int hasRead = arduino->readSerialPort(&ready, 1);
while (hasRead != 1 && ready != 'r')
{
// EMPTY WAIT FOR CALIBRATION
}
// Start TQ
throttleControl();

View File

@ -40,6 +40,7 @@ static enum EVENT_ID {
// Data definition IDs, engines dynamically added
static enum DATA_DEFINE_ID {
DEFINITION_AC_ON_GROUND,
DEFINITION_AC_DATA,
DEFINITION_ENGINE_ONE,
DEFINITION_ENGINE_TWO,
@ -50,6 +51,7 @@ static enum DATA_DEFINE_ID {
// Request IDs
static enum REQUEST_ID {
AC_DATA_REQUEST,
AC_ON_GROUND_REQUEST,
};
// Struct for ac data