Jump to content

PiedDroit

Members
  • Posts

    1610
  • Joined

  • Last visited

  • Days Won

    1

Posts posted by PiedDroit

  1. Ive been flying (real life career + air force) for more than 15 years and this is the first time I hear something like this :)

     

    Have you ever seen a plane that behaves like you say? It goes against the conception of a HUD.

     

    THanks anyway for your kind reply.

    What I mean is that you will not have the FPM used as a pointer for a fixed point in the HUD.

    You will have either:

    - a fixed point in the HUD matched against HUD-centric cues, or

    - the FPM matched against FPM-centric cues.

    Not a mix of both.

     

    Your mileage may vary I guess (mine in that case). I also saw my share of flight directors, HUDs and stuff alike (I work with avionics, not for as long as you did though), never saw anything that requires you to put the FPM into something that is not relative to the FPM.

     

    Anyway, for the ILS we're talking about, what I'm saying is that the box is FPM-related, so asking to put the FPM in the box to obtain zero deviation is normal.

  2. Everything looks good,

     

    The manual clearly states that the box shows glideslope and course deviation.

     

    It indeed says that for a perfect approach you have to place the FPM inside the box, but you have to read this as "you have to maneuver so the FPM is inside the box".

    The box is not a flight director (also no flight director would work by using the FPM as pointer anyway, it would be a fixed point in the HUD).

     

    1. ILS Guide

    Visible only when both localizer and glideslope have been captured. It moves in

    relation to the FPM showing both glideslope and course deviation. To maintain a

    perfect approach, you have to place the FPM inside the box.

     

    If the deviation from either glideslope or course is too large, a flashing triangle (not

    shown) will appear indicating that a course/elevation change is required.

     

    Therefore placing the FPM inside the box makes no sense as the box will always be deviated as long as the localizer is; same for the vertical component (GS).

    Actually the box is displayed relatively to the FPM, so when the FPM is in the box, deviation is exactly zero, so you're on flight path.

  3. Ah, so you want TARGET device and the "natural" device working simultaneously. It is sort of possible in a very buggy way when the filter driver fails to correctly replace the standard driver. You would get natural device and TARGET device at the same time. But it is very buggy, the TARGET output was not doing anything despite the device being present. It's not practical.

     

    There is a way to do it, it's not buggy at all.

    https://forums.eagle.ru/showpost.php?p=3212573&postcount=8

     

    Hi all,

     

    Sorry I'm a bit late to the party.

    Yes, you can totally do that, using MODE_FILTERED.

     

    Here is a sample script that I'm using it for the P-51D (I just tweaked it so it doesn't depend on other includes), in which I set up:

    - a few special commands that call keyboard shortcuts (for snap views, teamspeak, trackIR)

    - a customized axis (MAP_RELATIVE) to use the ministick for target range

    - a virtual axis that is activated through the Coolie switch left and right (for target size)

    - a filtered slider (through an hysteresis) because my throttle slider is a bit jittery.

     

    I just launch the script, the "Combined" appears and the other two stay and work as usual.

    In game I map the zoom on the SLIDER1 axis of the "Combined", and the RY for target range, RX for size.

    Everything else I map it directly on the "Throttle" and "Joystick" devices, in DCS.

    Except I don't map anything on the Joystick's S1, H2L, H2R and Throttle's CSL, CSR, MSP and MSU because these will trigger some keypresses that I set up in the script, but this is just an example, if you use the A-10C just delete these lines from the script and map the keys to your liking (as in your originial question).

     

     

     

    include "target.tmh"
    
    // Standalone DX mappings
    
    int ThrottleMap1[]={
    
    SC,DX1,
    
    MSU,DX3, // Mike Switch
    MSD,DX5,
    MSL,DX6,
    MSR,DX4,
    MSP,DX2,
    
    SPDF,DX7, // Speed Brake
    SPDM,0,
    SPDB,DX8,
    
    BSF,DX9, // Boat Switch
    BSM,0,
    BSB,DX10,
    
    CHF,DX11, // China Hat
    CHB,DX12,
    
    PSF,DX13, // Pinky
    PSM,0,
    PSB,DX14,
    
    CSU,DXHATUP, // Coolie Switch
    CSD,DXHATDOWN,
    CSL,DXHATLEFT,
    CSR,DXHATRIGHT,
    
    LTB,DX15,
    
    EFLNORM,DX16,
    EFLOVER,0,
    
    EFRNORM,DX17,
    EFROVER,0,
    
    EOLIGN,DX31,
    EOLNORM,0,
    EOLMOTOR,DX18,
    
    EORIGN,DX32,
    EORNORM,0,
    EORMOTOR,DX19,
    
    APUON,DX20,
    APUOFF,0,
    
    LDGH,DX21,
    
    FLAPU,DX22,
    FLAPM,0,
    FLAPD,DX23,
    
    EACON,DX24,
    EACOFF,0,
    
    RDRNRM,DX25,
    RDRDIS,0,
    
    APPAT,DX27, // PATH
    APAH,0,     // ALT/HDG
    APALT,DX28, // ALT
    APENG,DX26,
    
    IDLELON,DX30,
    IDLERON,DX29
    };
    
    int JoystickMap1[]={ // Actually the same as JoystickMap
    
    TG1,DX1,
    
    S1,DX5, // Side
    S2,DX2, // Red
    S3,DX3, // Pinky
    S4,DX4, // Paddle
    
    TG2,DX6,
    
    H1U,DXHATUP, // Trims (upper right)
    H1D,DXHATDOWN,
    H1L,DXHATLEFT,
    H1R,DXHATRIGHT,
    
    H2U,DX7, // TMS (lower right)
    H2D,DX9,
    H2L,DX10,
    H2R,DX8,
    
    H3U,DX11, // DMS (lower left)
    H3D,DX13,
    H3L,DX14,
    H3R,DX12,
    
    H4U,DX15, // CMS (thumb)
    H4D,DX17,
    H4L,DX18,
    H4R,DX16,
    H4P,DX19
    };
    
    // empty maps
    
    int ThrottleMap0[]={
    
    SC,0,
    
    MSU,0,
    MSD,0,
    MSL,0,
    MSR,0,
    MSP,0,
    
    SPDF,0,
    SPDM,0,
    SPDB,0,
    
    BSF,0,
    BSM,0,
    BSB,0,
    
    CHF,0,
    CHB,0,
    
    PSF,0,
    PSM,0,
    PSB,0,
    
    CSU,0,
    CSD,0,
    CSL,0,
    CSR,0,
    
    LTB,0,
    
    EFLNORM,0,
    EFLOVER,0,
    
    EFRNORM,0,
    EFROVER,0,
    
    EOLIGN,0,
    EOLNORM,0,
    EOLMOTOR,0,
    
    EORIGN,0,
    EORNORM,0,
    EORMOTOR,0,
    
    APUON,0,
    APUOFF,0,
    
    LDGH,0,
    
    FLAPU,0,
    FLAPM,0,
    FLAPD,0,
    
    EACON,0,
    EACOFF,0,
    
    RDRNRM,0,
    RDRDIS,0,
    
    APPAT,0,
    APAH,0,
    APALT,0,
    APENG,0,
    
    IDLELON,0,
    IDLERON,0
    };
    
    int JoystickMap0[]={
    
    TG1,0,
    
    S1,0,
    S2,0,
    S3,0,
    S4,0,
    
    TG2,0,
    
    H1U,0,
    H1D,0,
    H1L,0,
    H1R,0,
    
    H2U,0,
    H2D,0,
    H2L,0,
    H2R,0,
    
    H3U,0,
    H3D,0,
    H3L,0,
    H3R,0,
    
    H4U,0,
    H4D,0,
    H4L,0,
    H4R,0,
    H4P,0
    };
    
    // Special keys
    define KPslash					USB[84]
    define KPstar					USB[85]
    define KPminus					USB[86]
    define KPplus					USB[87]
    
    define TeamSpeakPushToTalk		CAPS
    
    define TrackIrCenter			L_ALT+SCRLCK
    define TrackIrDisable			L_ALT+BRK
    
    ////////////////////////////////////////////////////////////
    
    define TPULSE 70
    define TDELAY 50
    define T (TPULSE+TDELAY)
    
    define SHORTTEMPO 300
    define LONGTEMPO 1500
    
    ////////////////////////////////////////////////////////////
    int hysteresis(alias dir, alias cur, int val, int delta){
    if (dir<0){
    	if      (val<cur      ){ cur=val;         }
    	else if (val>cur+delta){ cur=val; dir= 1; }
    }
    else if (dir>0){
    	if      (val>cur      ){ cur=val;         }
    	else if (val<cur-delta){ cur=val; dir=-1; }
    }
    else{
    	if (val>cur){ cur=val; dir= 1; }
    	else        { cur=val; dir=-1; }
    }
    return cur;
    }
    
    ////////////////////////////////////////////////////////////
    int s_THR_FC_dir=0;
    int s_THR_FC_cur=0;
    int hysteresis_THR_FC(int axis)
    {
    return TrimDXAxis(axis,
    	SET(
    		hysteresis(
    			&s_THR_FC_dir,
    			&s_THR_FC_cur,
    			Throttle[THR_FC],512
    		)/32
    	)
    );
    }
    
    ////////////////////////////////////////////////////////////
    int snapviewlist;
    int snapview(int s,int hold,int release)
    {
    snapviewlist = SEQ(KP0,KP1,KP2,KP3,KP4,KP5,KP6,KP7,KP8,KP9);
    
    if (hold)
    {
        ActKey(KEYON+CHAIN(
        	PULSE+R_CTL+KP0			,D(T),
        	PULSE+X(snapviewlist,s)	));
    }
    else
    {
    	if (release)
    	    ActKey(      L_WIN+X(snapviewlist,s));
    	else
    	    ActKey(KEYON+L_WIN+X(snapviewlist,s));
    }
    }
    
    ////////////////////////////////////////////////////////////
    
    int main()
    {
    /////////////////// Setup and initialisation ///////////////////
    Configure(&HCougar, MODE_EXCLUDED);
    Configure(&T16000, MODE_EXCLUDED);
    Configure(&LMFD, MODE_EXCLUDED);
    Configure(&RMFD, MODE_EXCLUDED);
    
    Configure(&Joystick, MODE_FILTERED);
    Configure(&Throttle, MODE_FILTERED);
    if(Init(&EventHandle)) return 1;
    
    SetKBRate(TPULSE, TDELAY); // Keyboard pulse and delay times in ms
    SetKBLayout(KB_ENG);
    
    /////////////////// Empty maps ///////////////////
    
    // Empty maps
    MapList(&Joystick,&JoystickMap0);
    MapList(&Throttle,&ThrottleMap0);
    
    /////////////////// Mappings ///////////////////
    
    //MapKey(&Throttle, CSU, REXEC(0, 75, "TrimDXAxis(DX_SLIDER_AXIS,  16);")); // DX_SLIDER_AXIS = slider2
    //MapKey(&Throttle, CSD, REXEC(0, 75, "TrimDXAxis(DX_SLIDER_AXIS, -16);"));
    
    MapKey (&Joystick, S1, EXEC("snapview(8,0,0);"));
    MapKeyR(&Joystick, S1, EXEC("snapview(8,0,1);"));
    
    //MapKey (&Joystick, H2D, EXEC("snapview(2,0,0);"));
    //MapKeyR(&Joystick, H2D, EXEC("snapview(2,0,1);"));
    MapKey (&Joystick, H2L, EXEC("snapview(1,0,0);"));
    MapKeyR(&Joystick, H2L, EXEC("snapview(1,0,1);"));
    MapKey (&Joystick, H2R, EXEC("snapview(3,0,0);"));
    MapKeyR(&Joystick, H2R, EXEC("snapview(3,0,1);"));
    
    /////////
    // TDC //
    /////////
    
    //MapAxis(&Throttle, SCX, DX_XROT_AXIS, AXIS_NORMAL, MAP_RELATIVE);
    //SetSCurve(&Throttle, SCX, 0, 40, 0, 0, -10);
    MapAxis(&Throttle, SCY, DX_YROT_AXIS, AXIS_NORMAL, MAP_RELATIVE);
    SetSCurve(&Throttle, SCY, 0, 40, 0, 0, -10);
    
    MapKey(&Throttle, CSL, REXEC(0, 50, "TrimDXAxis(DX_XROT_AXIS, -8);"));
    MapKey(&Throttle, CSR, REXEC(0, 50, "TrimDXAxis(DX_XROT_AXIS,  8);"));
    
    ////////////
    // Slider //
    ////////////
    
    KeyAxis(&Throttle,THR_FC,0,AXMAP1(512,
    	EXEC("hysteresis_THR_FC(DX_THROTTLE_AXIS);"),
    	EXEC("hysteresis_THR_FC(DX_THROTTLE_AXIS);"),
    	EXEC("hysteresis_THR_FC(DX_THROTTLE_AXIS);")
    ));
    
    /////////////
    // TrackIR //
    /////////////
    
    MapKey(&Throttle, MSP, TEMPO(TrackIrCenter,TrackIrDisable,SHORTTEMPO));
    
    /////////
    // Mic //
    /////////
    
    MapKey (&Throttle, MSU, TeamSpeakPushToTalk);
       
       return 0;
    
    }
    int EventHandle(int type, alias o, int x)
    {
       int rc = DefaultMapping(&o, x);
    
    if(&o == &Throttle & x == THR_FC) return rc;
    
    GameOutput(&o, x, o[x]);
    return rc;
    }
    

     

     

     

    P.S.:

     

    This snippet makes the thrustmaster combined silent by default (no DX generated by the combined on button actions):

    	MapList(&Joystick,&JoystickMap0);
    MapList(&Throttle,&ThrottleMap0);
    

    If you want the combined act as usual (by default, all joystick DX buttons available + a few of the throttle DX buttons), remove the lines entirely (this is default).

     

    If you want the combined to only act as the throttle (all throttle DX buttons available), replace with this:

    	MapList(&Joystick,&JoystickMap0);
    MapList(&Throttle,&ThrottleMap1);

     

    P.P.S.: Adding a simplified script that doesn't have all the gizmos, to serve as template:

     

     

    include "target.tmh"
    
    
    define TeamSpeakPushToTalk		CAPS
    
    define TrackIrCenter			L_ALT+SCRLCK
    define TrackIrDisable			L_ALT+BRK
    
    ////////////////////////////////////////////////////////////
    
    define TPULSE 70
    define TDELAY 50
    define T (TPULSE+TDELAY)
    
    define SHORTTEMPO 300
    define LONGTEMPO 1500
    
    ////////////////////////////////////////////////////////////
    
    int main()
    {
    /////////////////// Setup and initialisation ///////////////////
    Configure(&HCougar, MODE_EXCLUDED);
    Configure(&T16000, MODE_EXCLUDED);
    Configure(&LMFD, MODE_EXCLUDED);
    Configure(&RMFD, MODE_EXCLUDED);
    
    Configure(&Joystick, MODE_FILTERED);
    Configure(&Throttle, MODE_FILTERED);
    if(Init(&EventHandle)) return 1;
    
    SetKBRate(TPULSE, TDELAY); // Keyboard pulse and delay times in ms
    SetKBLayout(KB_ENG);
    
    /////////////////// Mappings ///////////////////
    
    /////////////
    // TrackIR //
    /////////////
    
    MapKey(&Throttle, MSP, TEMPO(TrackIrCenter,TrackIrDisable,SHORTTEMPO));
    
    /////////
    // Mic //
    /////////
    
    MapKey (&Throttle, MSU, TeamSpeakPushToTalk);
       
       return 0;
    
    }
    int EventHandle(int type, alias o, int x)
    {
       int rc = DefaultMapping(&o, x);
    //
    GameOutput(&o, x, o[x]);
    return rc;
    }
    

  4. correct me if i am wrong,

    but the "Same speed- not on scope" is because the a Pulse Doppler radar filters the contact out because it thinks its Groundclutter.

    No, I don't know what makes same speed contacts disappear from scope but this is not ground clutter filtering.

    Same speed makes you distinct from ground clutter.

    Only having the same relative speed as the ground will make you similar to ground clutter.

     

    Example, let's say your radar frequency is 100MHz, a ping to the ground will return a frequency higher than 100Mhz.

    The doppler formula will return a relative speed for this contact. Same return frequency makes relative speed 0, higher frequ makes relative speed >0 (closing in), lower frequ makes relative speed <0.

     

    The formula to calculate the ground speed (in one axis) of the contact is: [ownship ground speed] - [relative speed calculated with doppler formula].

    If the relative speed of the radar return is equal to your own ground speed, the result for the ground speed of the contact will be 0 (or lower than a certain threshold to account for inaccuracies), it means that you're pinging something that didn't move relative to the ground.

    That's why a defender will maneuver perpendicular to the attacker trajectory, to make a ground speed 0 so the radar rejects the return as ground clutter.

     

    If you ping something that has same speed as ownship, the frequency in return will be exactly 100Mhz, so the doppler formula will return 0 for the speed differential. So you can deduce that the ground speed of the contact is equal to your own ground speed, therefore it's a moving object relatively to the ground.

  5. There are good solutions for glasses wearers... instead of uncomfortably wearing your 'street glasses' you can have custom made prescription inserts that snap into your Rift and can easily be removed for non glasses wearers.

    I know there are solutions, and I also considered them for the Rift.

    I'm wearing rather expensive prescription lenses because I work all time on computer screens, and I don't want to use cheap lenses for flying nor pay the price for a second pair of lenses, just for VR.

    I can't wear contacts either, they suck my eyes dry.

     

    I'm just asking if the Odyssey's design includes sufficient room to accomodate for glasses, that's all. I consider that to be mandatory for any VR headset to be adopted by the masses, because I doubt that more than a small percentage of glasses wearers are willing to go through the hassles of making a custom pair just for that.

     

    Measurements would be even better, if someone can get some numbers that'd be great.

    Cheers,

    P

     

    I wear glasses. I tried VR with them on last night and was surprised by the difference. They fit well in the headset probably because they are rimless and extremely light weight (2.5 grams). They have a patented superwide progressive band and are also blue blocker.

    With them on I found that the sweet spot grew to cover about half the FOV and God days were considerably less. Maybe is the blue blocker feature or that the overall lens configuration is more like the OSVR lens that is supposed to be a superior lens. Does anyone else notice this when wearing glasses?

     

    Thanks for the info, may I ask what is the size of your glasses ?

    I'm due for a glasses change soon so I'll take the size into account when selecting the frame.

    Thanks 8)

  6. Out of curiosity, are you using USB 3.0 or USB 2.0 ?

    TrackIR has compatibility issues with USB 3.0.

    I personally used my TrackIR only on USB 2.0, through an unpowered usb 2.0 hub with on/off buttons without any issues (4 years), I'd unplug it throught the hub's on/off button when not in use.

    I've been using the latest s/w version all the time, no issues there.

     

    Before this one I had plugged my previous TIR5 on a USB3.0 hub and it just fried.. dead camera, I sent it back to Natural Point and got a new one.

  7. Based on your images that means that the hotspot detector can be used to try to find enemy aircraft in the sky.

    I don't know, only someone with first hand knowledge on the sensor could answer that. I'd naively say yes, as a FLIR is nothing more than a camera which detects IR gradients, so in theory it would be possible.

    But that's really something to be checked.

    There can be numerous factors, maybe the sensor will only react to a S/B ratio that cannot be obtained with an aircraft, or is only strong enough with land vehicles, lots of exhaust gaz, etc, large spots (like a thermal in the sky).

    Also, I know that depending on the maturity of a system (in general), there can be a rejection of targets that would appear above ground, maybe the version that is on the video doesn't have that but the one you're modelling has it (if at all).

  8. I don't like the random spots solution. If they are random, I cannot control where they are going to be displayed and some could be displayed in the air, which is a big no.

    For what it's worth, the V's can appear in the sky. It's not the most usual place but it can happen.

    See this video:

    at 23:09

    FLIRSky1.png.16c12d1ec8444bdefb11da02b756b5c5.png

    FLIRSky2.png.21914879dc8879ff91fc27bd8210dd71.png

  9. SDE or ScreenDoor Effect is actually, I will call it, physical resolution of display and it is masured by PPI Pixel Per Inch in diagonal.

    That's strange everyone here seem to link SDE to the PPI, am I missing something?

    I thought SDE was the space between pixels.

    So if you have the same PPI (number of pixel) comparing two displays, the one with smaller pixels (size of pixels), indicating un-filled space between them, will have more noticeable SDE?

  10. This is a short video I made in the A-10C. Please sub if you enjoy, as I plan on making more DCS vids, as well as some Squad and Project Reality :thumbup:

     

     

     

    P.S. this is the first video I ever made, and it really doesn't represent my best work. My more recent vids are much better :smilewink:

    Cool video but the title is a bit misleading :D

  11. Which means you have to work with the trim axis range along with the range of the in game simulated axis range to come up with the appropriate value.

     

    It's not that difficult to find if you use the device analyzer:

    - map trim to any axis (it's easier if you set the one you intend to use right away, as in my previous examples)

    - trim to take off position using this axis

    - start the device analyzer and pick the value that is outputted by this axis

    - divide it by 32 to get the corresponding trimming value.

     

    Example: I map the vertical trim to my throttle, trim to take off, check the device analyzer.

    The value is -1390.

    Divided by 32, this is -31.

    Now if I call TrimDXAxis(DX_YROT_AXIS, SET(-31));, it will set the axis to the same setting.

    After that I'll use the YROT axis for trim instead of throttle. I could have used YROT axis directly and trim with the buttons too.

  12. ^^^

    Those were intended for a sim without trim controls at all. They do work but since they do not manipulate the cockpit controls they will not allow you to, for example, set pitch trim to a give value for take-off.

     

    I used to use the first one as a cheat in another sim since WWI aircraft did not have trim controls.

     

    The second one is much less cheat-y, it uses the real trim axis but uses buttons to control it (if you're short of real axis on your stick) :D

     

    If you know what should be your trim setting for takeoff you can for example:

     

    MapKey(&Joystick, S4, EXEC("TrimDXAxis(DX_XROT_AXIS, SET(-21)); TrimDXAxis(DX_YROT_AXIS, SET(45));")); // Trim setting for take-off
    

    P.S.: Bear in mind that TrimDXAxis() range is -1024 to 1024

  13. Hi,

     

    There are two ways to handle the trim thing, you can use the example from the manual that allows to trim the output X,Y axis of the combined device (page 30 of 62 - Axis Trimming):

     

    	MapKey(&Joystick, H1L, REXEC(0, 100, "TrimDXAxis(DX_X_AXIS, -5);"));
    MapKey(&Joystick, H1R, REXEC(0, 100, "TrimDXAxis(DX_X_AXIS,  5);"));
    MapKey(&Joystick, H1U, REXEC(1, 100, "TrimDXAxis(DX_Y_AXIS, -5);"));
    MapKey(&Joystick, H1D, REXEC(1, 100, "TrimDXAxis(DX_Y_AXIS,  5);"));
    
    MapKey(&Joystick, S4, EXEC("TrimDXAxis(DX_X_AXIS, SET(0)); TrimDXAxis(DX_Y_AXIS, SET(0));")); // Trim reset
    

     

    The other option is to have an axis dedicated to trim (will work only if the game offers a trim

    axis), that you control through button pressed - RY/RX to be assigned on vertical/horizontal trim axis (adjust the speed and repetition to your liking, I didn't try it so I'm not sure if the values make sense):

     

    	MapKey(&Joystick, H1L, REXEC(0, 100, "TrimDXAxis(DX_XROT_AXIS, -5);"));
    MapKey(&Joystick, H1R, REXEC(0, 100, "TrimDXAxis(DX_XROT_AXIS,  5);"));
    MapKey(&Joystick, H1U, REXEC(1, 100, "TrimDXAxis(DX_YROT_AXIS, -5);"));
    MapKey(&Joystick, H1D, REXEC(1, 100, "TrimDXAxis(DX_YROT_AXIS,  5);"));
    

    It's the same as above except it trims a separate axis (RX, RY) instead of the stick axis directly (X, Y).

  14. personally i'd love to see some more flaming cliffs style modules [...]

     

    Hi,

    I would personally not buy FC3 style aircraft, but I would definitely support something that makes current full-fidelity aircraft feel like FC3-Style aircraft.

     

    Something that keeps the depth of system simulation while allowing some ease of use for people who don't want to learn everything for each aircraft, I was thinking about the easy startup (Win+Home), applied to basic operations that are done during flight.

     

    Example, in MiG-21Bis, have a "next weapon" shortcut, when you press it to select IR missile, then all the selector will be activated in order, just like if the game does it for you and tells you what it's doing:

    "- Selecting pylon 1

    - Selecting type IR

    - Setting sight mode to missiles"

     

    To me that would be the ideal solution, because everyone would be flying with the same systems and cope with the same limitations. In a sense it would be also more realistic, as when in the cockpit the pilot does not need to look at switches, this is something that is not well transposed in a computer sim.

    This kind of feature would require more than mere "macros", because it would need the knowlegde of the loadout and the systems state to press the correct sequence of buttons to achieve the desired effect.

  15. You said make sure the, "assignment works using the keyboard directly." I checked and after 3 assignments (one using LCtrl + H, one with LShift + LCtrl + Insert and the last was simply the "I" key) none worked.

    This something in DCS... What happens if you unplug all your devices, and try LCtrl+H again?

     

    Not only that but my throttle's thrust axis (Z) didn't move the plane's throttle but the rudder on the throttle did move the plane's floor pedals. I think we've found the issue as I've cleared the rudder axis on the throttle in settings and it isn't paying attention. That Warthog HOTAS made something in there stop paying attention to my (and DCS' vanilla in game commands) and it's reading something else as the master. I guess TARGET? Can I just stop TARGET from interfering?

    TARGET can't interfere on it's own, the only thing it can do is create a virtual device called "Thrustmaster Combined" and also generate keyboard keys.

     

    Looks like you have controller conflicts, make sure an axis is not assigned on two different controllers, if you never used TARGET before, I assume the default axis are mapped on the Thrustmaster Combined device, which you need to remove in DCS control panel.

     

    Only once you sorted out the issues with DCS you can start fiddling with your TARGET profile.

  16. Pied, I have a TM16000 stick and throttle combo. I use Voice attack with most of my FC planes. I just bought the A-10C and use the A-10C Sim controls. For actions/commands without an already assigned keyboard push/input I've added one, which wasn't used by something else. For example, to turn the battery switch on I assigned LCtrl + H. However, that won't turn the power switch on via Voice Attack. Pressing LCtrl + H on the keyboard won't even turn it on. Some things do work, however. Saying F1 puts me in the cockpit.

     

    I've read all the way through from the OP and do have TARGET but you guys might as well be speaking Aztec. Do you have any simple ways I could solve this issue?

     

    Hi,

    Before going any further you should make sure that your new keyboard assignment works, using the keyboard directly.

    If it doesn't work in DCS, anything you try (TARGET profile, VoiceAttack) will not work, even if it generates LCtrl+H correctly, because DCS won't even take it.

     

    Is it possible you made the keyboard shortcut assignment in "Game" instead of "Sim" controls section?

  17. At the beginning I was also doing crazy stuff with the TARGET software (chained defer calls, complicated logics and whatnot) for testing and exploring, but I quickly stopped doing that as nothing beats the good old K.I.S.S. principle (and time tinkering is time you don't fly).

    Also having clickable cockpits greatly reduces the need for complicated things in joystick profiles.

    With the FC3 ships you have no choice but mapping everything if you don't want to use the keyboard...

     

    I wonder why the filtered mode does not appear in the documentation, I guess it would allow too many thing that would break the scripts and it was not needed for the normal user, or maybe it was not fully tested. In the end it is the most useful feature of TARGET in my opinion, I don't have any issues with it as long as I keep things simple.

  18. Cool. I just installed TARGET on one of my non-simming machines. I will do some digging through the tmh files and look closer at your attached files. Thanks.

     

    Have fun, this all looks simple but there is a lot of sweat, swearing, trial and error behind it :D

     

    Also, to observe the result of your script, you can run the "Device Analyzer", then click on the topleft icon, select "Thrusmaster Combined".

    This gives you a nice view of both your normal devices and the thrustmaster combined.

    • Like 1
  19. I am sure this is basic stuff, but I already have a question. What does MODE_FILTERED do? Once I understand that I will probably be able to comprehend the rest with a little research, and the purchase of a good C book.

     

    I like TARGET but I have obviously been missing out on some cool stuff.

     

    This mode is not documented, I found after some obscure nights of tinkering and net digging.

    As far as I understand, it activates the Thrustmaster Combined the same way as the normal mode, except the regular devices are still visible.

    Then it allows you to control the output (in my demo script, I prevent the throttle slider axis to generate any output because I'm handling it through a function, using TrimDXAxis).

     

    It's no pure C syntax, it's a bit confusing, so the best advice I can give is to try stuff and read the support files that comes with TARGET (the .tmh files that are included) :D

    I advise to avoid putting any fancy logic in EventHandle(), as it might break things big time.

     

    Note that I added a simpler file to be used at template, in my previous post, the demo one is still there, both are of use I think.

  20. Hi there

     

    I would like to know if it's possible to use TARGET to bind only some keys on TM Warthog ?

     

    For example : center view, TS speak, Voice Attack

     

    Because when I use TARGET, default DCS profile doesn't work anymore

     

    Thanks a lot

     

    Hi all,

     

    Sorry I'm a bit late to the party.

    Yes, you can totally do that, using MODE_FILTERED.

     

    Here is a sample script that I'm using it for the P-51D (I just tweaked it so it doesn't depend on other includes), in which I set up:

    - a few special commands that call keyboard shortcuts (for snap views, teamspeak, trackIR)

    - a customized axis (MAP_RELATIVE) to use the ministick for target range

    - a virtual axis that is activated through the Coolie switch left and right (for target size)

    - a filtered slider (through an hysteresis) because my throttle slider is a bit jittery.

     

    I just launch the script, the "Combined" appears and the other two stay and work as usual.

    In game I map the zoom on the SLIDER1 axis of the "Combined", and the RY for target range, RX for size.

    Everything else I map it directly on the "Throttle" and "Joystick" devices, in DCS.

    Except I don't map anything on the Joystick's S1, H2L, H2R and Throttle's CSL, CSR, MSP and MSU because these will trigger some keypresses that I set up in the script, but this is just an example, if you use the A-10C just delete these lines from the script and map the keys to your liking (as in your originial question).

     

     

     

    include "target.tmh"
    
    // Standalone DX mappings
    
    int ThrottleMap1[]={
    
    SC,DX1,
    
    MSU,DX3, // Mike Switch
    MSD,DX5,
    MSL,DX6,
    MSR,DX4,
    MSP,DX2,
    
    SPDF,DX7, // Speed Brake
    SPDM,0,
    SPDB,DX8,
    
    BSF,DX9, // Boat Switch
    BSM,0,
    BSB,DX10,
    
    CHF,DX11, // China Hat
    CHB,DX12,
    
    PSF,DX13, // Pinky
    PSM,0,
    PSB,DX14,
    
    CSU,DXHATUP, // Coolie Switch
    CSD,DXHATDOWN,
    CSL,DXHATLEFT,
    CSR,DXHATRIGHT,
    
    LTB,DX15,
    
    EFLNORM,DX16,
    EFLOVER,0,
    
    EFRNORM,DX17,
    EFROVER,0,
    
    EOLIGN,DX31,
    EOLNORM,0,
    EOLMOTOR,DX18,
    
    EORIGN,DX32,
    EORNORM,0,
    EORMOTOR,DX19,
    
    APUON,DX20,
    APUOFF,0,
    
    LDGH,DX21,
    
    FLAPU,DX22,
    FLAPM,0,
    FLAPD,DX23,
    
    EACON,DX24,
    EACOFF,0,
    
    RDRNRM,DX25,
    RDRDIS,0,
    
    APPAT,DX27, // PATH
    APAH,0,     // ALT/HDG
    APALT,DX28, // ALT
    APENG,DX26,
    
    IDLELON,DX30,
    IDLERON,DX29
    };
    
    int JoystickMap1[]={ // Actually the same as JoystickMap
    
    TG1,DX1,
    
    S1,DX5, // Side
    S2,DX2, // Red
    S3,DX3, // Pinky
    S4,DX4, // Paddle
    
    TG2,DX6,
    
    H1U,DXHATUP, // Trims (upper right)
    H1D,DXHATDOWN,
    H1L,DXHATLEFT,
    H1R,DXHATRIGHT,
    
    H2U,DX7, // TMS (lower right)
    H2D,DX9,
    H2L,DX10,
    H2R,DX8,
    
    H3U,DX11, // DMS (lower left)
    H3D,DX13,
    H3L,DX14,
    H3R,DX12,
    
    H4U,DX15, // CMS (thumb)
    H4D,DX17,
    H4L,DX18,
    H4R,DX16,
    H4P,DX19
    };
    
    // empty maps
    
    int ThrottleMap0[]={
    
    SC,0,
    
    MSU,0,
    MSD,0,
    MSL,0,
    MSR,0,
    MSP,0,
    
    SPDF,0,
    SPDM,0,
    SPDB,0,
    
    BSF,0,
    BSM,0,
    BSB,0,
    
    CHF,0,
    CHB,0,
    
    PSF,0,
    PSM,0,
    PSB,0,
    
    CSU,0,
    CSD,0,
    CSL,0,
    CSR,0,
    
    LTB,0,
    
    EFLNORM,0,
    EFLOVER,0,
    
    EFRNORM,0,
    EFROVER,0,
    
    EOLIGN,0,
    EOLNORM,0,
    EOLMOTOR,0,
    
    EORIGN,0,
    EORNORM,0,
    EORMOTOR,0,
    
    APUON,0,
    APUOFF,0,
    
    LDGH,0,
    
    FLAPU,0,
    FLAPM,0,
    FLAPD,0,
    
    EACON,0,
    EACOFF,0,
    
    RDRNRM,0,
    RDRDIS,0,
    
    APPAT,0,
    APAH,0,
    APALT,0,
    APENG,0,
    
    IDLELON,0,
    IDLERON,0
    };
    
    int JoystickMap0[]={
    
    TG1,0,
    
    S1,0,
    S2,0,
    S3,0,
    S4,0,
    
    TG2,0,
    
    H1U,0,
    H1D,0,
    H1L,0,
    H1R,0,
    
    H2U,0,
    H2D,0,
    H2L,0,
    H2R,0,
    
    H3U,0,
    H3D,0,
    H3L,0,
    H3R,0,
    
    H4U,0,
    H4D,0,
    H4L,0,
    H4R,0,
    H4P,0
    };
    
    // Special keys
    define KPslash					USB[84]
    define KPstar					USB[85]
    define KPminus					USB[86]
    define KPplus					USB[87]
    
    define TeamSpeakPushToTalk		CAPS
    
    define TrackIrCenter			L_ALT+SCRLCK
    define TrackIrDisable			L_ALT+BRK
    
    ////////////////////////////////////////////////////////////
    
    define TPULSE 70
    define TDELAY 50
    define T (TPULSE+TDELAY)
    
    define SHORTTEMPO 300
    define LONGTEMPO 1500
    
    ////////////////////////////////////////////////////////////
    int hysteresis(alias dir, alias cur, int val, int delta){
    if (dir<0){
    	if      (val<cur      ){ cur=val;         }
    	else if (val>cur+delta){ cur=val; dir= 1; }
    }
    else if (dir>0){
    	if      (val>cur      ){ cur=val;         }
    	else if (val<cur-delta){ cur=val; dir=-1; }
    }
    else{
    	if (val>cur){ cur=val; dir= 1; }
    	else        { cur=val; dir=-1; }
    }
    return cur;
    }
    
    ////////////////////////////////////////////////////////////
    int s_THR_FC_dir=0;
    int s_THR_FC_cur=0;
    int hysteresis_THR_FC(int axis)
    {
    return TrimDXAxis(axis,
    	SET(
    		hysteresis(
    			&s_THR_FC_dir,
    			&s_THR_FC_cur,
    			Throttle[THR_FC],512
    		)/32
    	)
    );
    }
    
    ////////////////////////////////////////////////////////////
    int snapviewlist;
    int snapview(int s,int hold,int release)
    {
    snapviewlist = SEQ(KP0,KP1,KP2,KP3,KP4,KP5,KP6,KP7,KP8,KP9);
    
    if (hold)
    {
        ActKey(KEYON+CHAIN(
        	PULSE+R_CTL+KP0			,D(T),
        	PULSE+X(snapviewlist,s)	));
    }
    else
    {
    	if (release)
    	    ActKey(      L_WIN+X(snapviewlist,s));
    	else
    	    ActKey(KEYON+L_WIN+X(snapviewlist,s));
    }
    }
    
    ////////////////////////////////////////////////////////////
    
    int main()
    {
    /////////////////// Setup and initialisation ///////////////////
    Configure(&HCougar, MODE_EXCLUDED);
    Configure(&T16000, MODE_EXCLUDED);
    Configure(&LMFD, MODE_EXCLUDED);
    Configure(&RMFD, MODE_EXCLUDED);
    
    Configure(&Joystick, MODE_FILTERED);
    Configure(&Throttle, MODE_FILTERED);
    if(Init(&EventHandle)) return 1;
    
    SetKBRate(TPULSE, TDELAY); // Keyboard pulse and delay times in ms
    SetKBLayout(KB_ENG);
    
    /////////////////// Empty maps ///////////////////
    
    // Empty maps
    MapList(&Joystick,&JoystickMap0);
    MapList(&Throttle,&ThrottleMap0);
    
    /////////////////// Mappings ///////////////////
    
    //MapKey(&Throttle, CSU, REXEC(0, 75, "TrimDXAxis(DX_SLIDER_AXIS,  16);")); // DX_SLIDER_AXIS = slider2
    //MapKey(&Throttle, CSD, REXEC(0, 75, "TrimDXAxis(DX_SLIDER_AXIS, -16);"));
    
    MapKey (&Joystick, S1, EXEC("snapview(8,0,0);"));
    MapKeyR(&Joystick, S1, EXEC("snapview(8,0,1);"));
    
    //MapKey (&Joystick, H2D, EXEC("snapview(2,0,0);"));
    //MapKeyR(&Joystick, H2D, EXEC("snapview(2,0,1);"));
    MapKey (&Joystick, H2L, EXEC("snapview(1,0,0);"));
    MapKeyR(&Joystick, H2L, EXEC("snapview(1,0,1);"));
    MapKey (&Joystick, H2R, EXEC("snapview(3,0,0);"));
    MapKeyR(&Joystick, H2R, EXEC("snapview(3,0,1);"));
    
    /////////
    // TDC //
    /////////
    
    //MapAxis(&Throttle, SCX, DX_XROT_AXIS, AXIS_NORMAL, MAP_RELATIVE);
    //SetSCurve(&Throttle, SCX, 0, 40, 0, 0, -10);
    MapAxis(&Throttle, SCY, DX_YROT_AXIS, AXIS_NORMAL, MAP_RELATIVE);
    SetSCurve(&Throttle, SCY, 0, 40, 0, 0, -10);
    
    MapKey(&Throttle, CSL, REXEC(0, 50, "TrimDXAxis(DX_XROT_AXIS, -8);"));
    MapKey(&Throttle, CSR, REXEC(0, 50, "TrimDXAxis(DX_XROT_AXIS,  8);"));
    
    ////////////
    // Slider //
    ////////////
    
    KeyAxis(&Throttle,THR_FC,0,AXMAP1(512,
    	EXEC("hysteresis_THR_FC(DX_THROTTLE_AXIS);"),
    	EXEC("hysteresis_THR_FC(DX_THROTTLE_AXIS);"),
    	EXEC("hysteresis_THR_FC(DX_THROTTLE_AXIS);")
    ));
    
    /////////////
    // TrackIR //
    /////////////
    
    MapKey(&Throttle, MSP, TEMPO(TrackIrCenter,TrackIrDisable,SHORTTEMPO));
    
    /////////
    // Mic //
    /////////
    
    MapKey (&Throttle, MSU, TeamSpeakPushToTalk);
       
       return 0;
    
    }
    int EventHandle(int type, alias o, int x)
    {
       int rc = DefaultMapping(&o, x);
    
    if(&o == &Throttle & x == THR_FC) return rc;
    
    GameOutput(&o, x, o[x]);
    return rc;
    }
    

     

     

     

    P.S.:

     

    This snippet makes the thrustmaster combined silent by default (no DX generated by the combined on button actions):

    	MapList(&Joystick,&JoystickMap0);
    MapList(&Throttle,&ThrottleMap0);
    

    If you want the combined act as usual (by default, all joystick DX buttons available + a few of the throttle DX buttons), remove the lines entirely (this is default).

     

    If you want the combined to only act as the throttle (all throttle DX buttons available), replace with this:

    	MapList(&Joystick,&JoystickMap0);
    MapList(&Throttle,&ThrottleMap1);

     

    P.P.S.: Adding a simplified script that doesn't have all the gizmos, to serve as template:

    include "target.tmh"
    
    
    define TeamSpeakPushToTalk		CAPS
    
    define TrackIrCenter			L_ALT+SCRLCK
    define TrackIrDisable			L_ALT+BRK
    
    ////////////////////////////////////////////////////////////
    
    define TPULSE 70
    define TDELAY 50
    define T (TPULSE+TDELAY)
    
    define SHORTTEMPO 300
    define LONGTEMPO 1500
    
    ////////////////////////////////////////////////////////////
    
    int main()
    {
    /////////////////// Setup and initialisation ///////////////////
    Configure(&HCougar, MODE_EXCLUDED);
    Configure(&T16000, MODE_EXCLUDED);
    Configure(&LMFD, MODE_EXCLUDED);
    Configure(&RMFD, MODE_EXCLUDED);
    
    Configure(&Joystick, MODE_FILTERED);
    Configure(&Throttle, MODE_FILTERED);
    if(Init(&EventHandle)) return 1;
    
    SetKBRate(TPULSE, TDELAY); // Keyboard pulse and delay times in ms
    SetKBLayout(KB_ENG);
    
    /////////////////// Mappings ///////////////////
    
    /////////////
    // TrackIR //
    /////////////
    
    MapKey(&Throttle, MSP, TEMPO(TrackIrCenter,TrackIrDisable,SHORTTEMPO));
    
    /////////
    // Mic //
    /////////
    
    MapKey (&Throttle, MSU, TeamSpeakPushToTalk);
       
       return 0;
    
    }
    int EventHandle(int type, alias o, int x)
    {
       int rc = DefaultMapping(&o, x);
    //
    GameOutput(&o, x, o[x]);
    return rc;
    }
    

    DCS_demo_filtered.tmc.txt

    DCS-template_filtered.tmc.txt

  21. Thanks, I'm still not consistently managing my speed well in this lesson. so this is very helpful. I see that you stay between +-10 and allow the director circle to come to you, I guess that's what you mean by not chasing it? I go up to +-20, which might explain why I get stall warnings. It's much easier to learn from experience having an example.

     

    Maybe there is a confusion?

     

    The AoA is your angle relatively to the air flow, it is indicated by the analog gauge on the top left of the intrument panel, if you look closely the 15-20 zone is yellow and there is a dashed block at 20, which indicates it's pretty much a no-go zone.

    If you go F2 view you will see the AoA as well on the bottom of the screen.

     

    The scale you see on the HUD (on the right, increments of 10) is your pitch angle relative to the horizon, it doesn't take the airflow in account.

     

    There are two circles, one is the deviation with approach path (small), the other one is your flight director (large), you should try to follow the large circle, as it tells you how to fly the aircraft, just not too aggressively, if the flight director is above, pull smoothly towards it a little then release, let it come to the center (increase thrust slightly to take the pull in account).

×
×
  • Create New...