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");
|
printf("failed to get current serial parameters");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dcbSerialParameters.BaudRate = CBR_9600;
|
dcbSerialParameters.BaudRate = CBR_115200;
|
||||||
dcbSerialParameters.ByteSize = 8;
|
dcbSerialParameters.ByteSize = 8;
|
||||||
dcbSerialParameters.StopBits = ONESTOPBIT;
|
dcbSerialParameters.StopBits = ONESTOPBIT;
|
||||||
dcbSerialParameters.Parity = NOPARITY;
|
dcbSerialParameters.Parity = NOPARITY;
|
||||||
|
|||||||
@ -13,12 +13,18 @@ values potValues;
|
|||||||
int sizeOfDataToSendToFSX = 0;
|
int sizeOfDataToSendToFSX = 0;
|
||||||
bool ready = false;
|
bool ready = false;
|
||||||
bool hasPropeller = false;
|
bool hasPropeller = false;
|
||||||
|
bool onGround = true;
|
||||||
|
|
||||||
engineAll eAOne;
|
engineAll eAOne;
|
||||||
engineAll eATwo;
|
engineAll eATwo;
|
||||||
engineAll eAThree;
|
engineAll eAThree;
|
||||||
engineAll eAFour;
|
engineAll eAFour;
|
||||||
|
|
||||||
|
engineAll lastSaveOne;
|
||||||
|
engineAll lastSaveTwo;
|
||||||
|
engineAll lastSaveThree;
|
||||||
|
engineAll lastSaveFour;
|
||||||
|
|
||||||
void setupDefinitions() {
|
void setupDefinitions() {
|
||||||
printf("\nSetting up ... ");
|
printf("\nSetting up ... ");
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
@ -224,8 +230,11 @@ void setupDefinitions() {
|
|||||||
sizeOfDataToSendToFSX = sizeof(engineAll);
|
sizeOfDataToSendToFSX = sizeof(engineAll);
|
||||||
}
|
}
|
||||||
printf("done!");
|
printf("done!");
|
||||||
|
arduino->writeSerialPort("r", 1);
|
||||||
arduino->writeSerialPort("i", 1);
|
arduino->writeSerialPort("i", 1);
|
||||||
arduino->writeSerialPort((char *)&init, sizeof(initialization));
|
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;
|
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;
|
SIMCONNECT_RECV_SIMOBJECT_DATA *data = (SIMCONNECT_RECV_SIMOBJECT_DATA *)pData;
|
||||||
|
|
||||||
switch (data->dwRequestID) {
|
switch (data->dwRequestID) {
|
||||||
|
case AC_ON_GROUND_REQUEST:
|
||||||
|
{
|
||||||
|
printf("\nOn ground: %f", &data->dwData);
|
||||||
|
onGround = (int)&data->dwData;
|
||||||
|
break;
|
||||||
|
}
|
||||||
case AC_DATA_REQUEST:
|
case AC_DATA_REQUEST:
|
||||||
{
|
{
|
||||||
printf("Aircraft data retrieved.");
|
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, "NUMBER OF ENGINES", "number");
|
||||||
hr = SimConnect_AddToDataDefinition(hSimConnect, DEFINITION_AC_DATA, "THROTTLE LOWER LIMIT", "percent");
|
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
|
// Request a simulation started event
|
||||||
hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");
|
hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_SIM_START, "SimStart");
|
||||||
@ -345,15 +361,19 @@ void throttleControl()
|
|||||||
lastSymbol = 'T';
|
lastSymbol = 'T';
|
||||||
switch (currentEngine) {
|
switch (currentEngine) {
|
||||||
case 1:
|
case 1:
|
||||||
|
lastSaveOne.throttlePercent = eAOne.throttlePercent;
|
||||||
eAOne.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eAOne.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
lastSaveTwo.throttlePercent = eATwo.throttlePercent;
|
||||||
eATwo.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eATwo.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
lastSaveThree.throttlePercent = eAThree.throttlePercent;
|
||||||
eAThree.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eAThree.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
lastSaveFour.throttlePercent = eAFour.throttlePercent;
|
||||||
eAFour.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eAFour.throttlePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -364,15 +384,19 @@ void throttleControl()
|
|||||||
lastSymbol = 'P';
|
lastSymbol = 'P';
|
||||||
switch (currentEngine) {
|
switch (currentEngine) {
|
||||||
case 1:
|
case 1:
|
||||||
|
lastSaveOne.propellerPrecent = eAOne.propellerPrecent;
|
||||||
eAOne.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eAOne.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
lastSaveTwo.propellerPrecent = eATwo.propellerPrecent;
|
||||||
eATwo.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eATwo.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
lastSaveThree.propellerPrecent = eAThree.propellerPrecent;
|
||||||
eAThree.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eAThree.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
lastSaveFour.propellerPrecent = eAFour.propellerPrecent;
|
||||||
eAFour.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eAFour.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -383,28 +407,44 @@ void throttleControl()
|
|||||||
lastSymbol = 'M';
|
lastSymbol = 'M';
|
||||||
switch (currentEngine) {
|
switch (currentEngine) {
|
||||||
case 1:
|
case 1:
|
||||||
if (hasPropeller)
|
if (hasPropeller) {
|
||||||
|
lastSaveOne.mixturePercent = eAOne.mixturePercent;
|
||||||
eAOne.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eAOne.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
lastSaveOne.mixturePercent = eAOne.propellerPrecent;
|
||||||
eAOne.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eAOne.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (hasPropeller)
|
if (hasPropeller) {
|
||||||
|
lastSaveTwo.mixturePercent = eATwo.mixturePercent;
|
||||||
eATwo.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eATwo.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
lastSaveTwo.mixturePercent = eATwo.propellerPrecent;
|
||||||
eATwo.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eATwo.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (hasPropeller)
|
if (hasPropeller) {
|
||||||
|
lastSaveThree.mixturePercent = eAThree.mixturePercent;
|
||||||
eAThree.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eAThree.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
lastSaveThree.mixturePercent = eAThree.propellerPrecent;
|
||||||
eAThree.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eAThree.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
if (hasPropeller)
|
if (hasPropeller) {
|
||||||
|
lastSaveFour.mixturePercent = eAFour.mixturePercent;
|
||||||
eAFour.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
eAFour.mixturePercent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
|
lastSaveFour.mixturePercent = eAFour.mixturePercent;
|
||||||
eAFour.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
eAFour.propellerPrecent = (double)potValues.leverValuesInPercent[3 - i];
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
currentEngine++;
|
currentEngine++;
|
||||||
@ -414,22 +454,52 @@ void throttleControl()
|
|||||||
switch (numEngines)
|
switch (numEngines)
|
||||||
{
|
{
|
||||||
case 1:
|
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;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
|
(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;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
|
(hasPropeller && (lastSaveOne.propellerPrecent != eAOne.propellerPrecent || lastSaveOne.mixturePercent != eAOne.mixturePercent)) ||
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_THREE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAThree);
|
(!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;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_ONE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAOne);
|
if (lastSaveOne.throttlePercent != eAOne.throttlePercent ||
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_TWO, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eATwo);
|
(hasPropeller && (lastSaveOne.propellerPrecent != eAOne.propellerPrecent || lastSaveOne.mixturePercent != eAOne.mixturePercent)) ||
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_THREE, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAThree);
|
(!hasPropeller && (lastSaveOne.mixturePercent != eAOne.propellerPrecent)))
|
||||||
hr = SimConnect_SetDataOnSimObject(hSimConnect, DEFINITION_ENGINE_FOUR, SIMCONNECT_OBJECT_ID_USER, 0, 0, sizeOfDataToSendToFSX, &eAFour);
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -456,7 +526,7 @@ int __cdecl _tmain(int argc, _TCHAR* argv[])
|
|||||||
int hasRead = arduino->readSerialPort(&ready, 1);
|
int hasRead = arduino->readSerialPort(&ready, 1);
|
||||||
while (hasRead != 1 && ready != 'r')
|
while (hasRead != 1 && ready != 'r')
|
||||||
{
|
{
|
||||||
|
// EMPTY WAIT FOR CALIBRATION
|
||||||
}
|
}
|
||||||
// Start TQ
|
// Start TQ
|
||||||
throttleControl();
|
throttleControl();
|
||||||
|
|||||||
@ -40,6 +40,7 @@ static enum EVENT_ID {
|
|||||||
|
|
||||||
// Data definition IDs, engines dynamically added
|
// Data definition IDs, engines dynamically added
|
||||||
static enum DATA_DEFINE_ID {
|
static enum DATA_DEFINE_ID {
|
||||||
|
DEFINITION_AC_ON_GROUND,
|
||||||
DEFINITION_AC_DATA,
|
DEFINITION_AC_DATA,
|
||||||
DEFINITION_ENGINE_ONE,
|
DEFINITION_ENGINE_ONE,
|
||||||
DEFINITION_ENGINE_TWO,
|
DEFINITION_ENGINE_TWO,
|
||||||
@ -50,6 +51,7 @@ static enum DATA_DEFINE_ID {
|
|||||||
// Request IDs
|
// Request IDs
|
||||||
static enum REQUEST_ID {
|
static enum REQUEST_ID {
|
||||||
AC_DATA_REQUEST,
|
AC_DATA_REQUEST,
|
||||||
|
AC_ON_GROUND_REQUEST,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Struct for ac data
|
// Struct for ac data
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user