Correct serial speed
On ground check Reset of arduino on ac change send only if changed
This commit is contained in:
parent
3187bf00e9
commit
14c6361fbd
@ -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;
|
||||
|
||||
@ -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,22 +454,52 @@ void throttleControl()
|
||||
switch (numEngines)
|
||||
{
|
||||
case 1:
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
||||
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:
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
|
||||
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:
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_THREE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAThree);
|
||||
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:
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_THREE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAThree);
|
||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_FOUR, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAFour);
|
||||
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:
|
||||
break;
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user