示例#1
0
void SwitchPanel::updateDisplay()
{
	// 0x00 off
	// 0x07 green
	// 0x38 red

	static unsigned char buf[2];

	if (!handle)
	{
		return;
	}

	buf[0]=0x00;
	buf[1]=0x00;

	VESSEL *vessel = oapiGetFocusInterface(); // Get current vessel


	if (vessel!=NULL) // check if pointer is valid
	{

		if (XRVesselCtrl::IsXRVesselCtrl(vessel))
		{
			// is XR vessel
			XRVesselCtrl * xrVessel = static_cast<XRVesselCtrl *>(vessel);
			if (xrVessel->GetCtrlAPIVersion() >= THIS_XRVESSELCTRL_API_VERSION)
			{
				XRDoorState doorState = xrVessel->GetDoorState(XRD_Gear,NULL);
				switch (doorState)
				{
				case XRDS_Open:
					// green
					buf[1]=0x07;
					break;
				case XRDS_Opening:
				case XRDS_Closing:
					// red
					buf[1]=0x38;
					break;
				default:
					// off
					buf[1]=0x00;
					break;
				}
			}
		}
		else if(strcmp(vessel->GetClassNameA(),"DeltaGlider")==0 || strcmp(vessel->GetClassNameA(),"DG-S")==0)
		{
			DeltaGlider * dgVessel = static_cast<DeltaGlider *>(vessel);
			switch (dgVessel->gear_status)
			{
			case DeltaGlider::DOOR_OPEN:
				// green
				buf[1]=0x07;
				break;
			case DeltaGlider::DOOR_OPENING:
			case DeltaGlider::DOOR_CLOSING:
				// red
				buf[1]=0x38;
				break;
			default:
				// off
				buf[1]=0x00;
				break;
			}
		}
	}

	int res = hid_send_feature_report(handle, buf, 2);	

}