Home AMX User Forum NetLinx Studio

GET_LAST: New Firmware

Okay, who's going to test this out? Per the newest firmware release today:
Fixed I2C communications issue for RS232/485 communication errors
Fixed Java based logging to ensure consistent log output
Added security profile configuration
Fixed HTTPS interface to be more reliable
Fixed GET_LAST so it works within a HOLD event for both dev array and channel array

I can see the temptation to run out and upgrade your firmware just so you can do this - but someone's gotta test this out before I jump on board. Specifically - what happens when one user is ramping the volume, and another panel comes in and ramps as well? Or one panel is setting a preset, and then someone else comes in and goes to set a preset that calls a function - which value gets passed to the function? To me, this was one of the GET_LAST's biggest drawback, and because of it - in my code there are VERY few HOLD events.

I can't test as I'm without a master. Anxious for the results.

Comments

  • a_riot42a_riot42 Posts: 1,624
    jjames wrote: »
    To me, this was one of the GET_LAST's biggest drawback, and because of it - in my code there are VERY few HOLD events.

    Very cool. I knew if I was lazy enough this problem would just go away without me ever having to do anything but upgrade firmware.

    Thank goodness they also fixed that 7th IR port that refuses to light up during the startup light show. That's been pissing me off for months.
    Paul
  • ColzieColzie Posts: 470
    This is huge. For some reason I thought this bug was one of those things that could never get fixed. Yay! (Hope it works!)
  • viningvining Posts: 4,368
    I'm curious to know what they've done. GET_LAST has always work inside a hold you just couldn't trust what the get last would return since it's a system wide function and as soon as someone hits a button on any TP that pointer will change to that button channel.

    So do they store the GET_LAST value in a hold in a var specifically for that event table? If this is what they do, do they also create an array to hold the GET_LAST value for every TP that is declared for that event table? If it's just a single "HOLD" var for each event table I'm not sure if that's a good enough solution.

    So does GET_LAST in a hold just return the last channel to trigger an event for that event table or does it return the last channel to trigger an event for a specific TP in that event table? If the event table is created for 6 TP's can we have 6 simultaneous HOLDs?
  • DHawthorneDHawthorne Posts: 4,584
    vining wrote: »
    I'm curious to know what they've done. GET_LAST has always work inside a hold you just couldn't trust what the get last would return since it's a system wide function and as soon as someone hits a button on any TP that pointer will change to that button channel.

    So do they store the GET_LAST value in a hold in a var specifically for that event table? If this is what they do, do they also create an array to hold the GET_LAST value for every TP that is declared for that event table? If it's just a single "HOLD" var for each event table I'm not sure if that's a good enough solution.

    So does GET_LAST in a hold just return the last channel to trigger an event for that event table or does it return the last channel to trigger an event for a specific TP in that event table? If the event table is created for 6 TP's can we have 6 simultaneous HOLDs?

    Instead of acting on the HOLD with the previous PUSH data, they are holding off the event generation until the HOLD parameters are met. That would be how I figure it.
  • jjamesjjames Posts: 2,908
    DHawthorne wrote: »
    Instead of acting on the HOLD with the previous PUSH data, they are holding off the event generation until the HOLD parameters are met. That would be how I figure it.
    Sounds like a very reasonable solution and makes sense.
  • viningvining Posts: 4,368
    DHawthorne wrote:
    they are holding off the event generation until the HOLD parameters are met.
    But by the time the hold parameters are met the GET_LAST value may have already been changed. I would think upon each push that channel value is stored and cleared upon release. Then if the hold reaches it's "hold value" it acts upon this stored value. Possible using a stored value for each TP in that event table which would allow multiple holds to operate at the same time using a single HOLD in a button event.

    This is basically I do my holds presently. In the PUSH based on the GET_LAST TP index and GET_LAST channel index I add that last channel number to the TP's index position of a nDevHOLDArray. I clear it upon the release, again by use of the GET_LAST TP index and then in the hold if at least one array postion has a value I'll loop through the array and act on the channel number contained there in for each index position if it holds a value other than 0.
  • DHawthorneDHawthorne Posts: 4,584
    vining wrote: »
    DHawthorne wrote:

    But by the time the hold parameters are met the GET_LAST value may have already been changed. I would think upon each push that channel value is stored and cleared upon release. Then if the hold reaches it's "hold value" it acts upon this stored value. Possible using a stored value for each TP in that event table which would allow multiple holds to operate at the same time using a single HOLD in a button event.

    This is basically I do my holds presently. In the PUSH based on the GET_LAST TP index and GET_LAST channel index I add that last channel number to the TP's index position of a nDevHOLDArray. I clear it upon the release, again by use of the GET_LAST TP index and then in the hold if at least one array postion has a value I'll loop through the array and act on the channel number contained there in for each index position if it holds a value other than 0.

    But that's what I'm saying ... the event itself doesn't actually fire until the parameters are met. No stored value at all. That's why it required a firmware update, the hardware has to be able to know what the HOLD timer is to do this.
  • ericmedleyericmedley Posts: 4,177
    DHawthorne wrote: »
    But that's what I'm saying ... the event itself doesn't actually fire until the parameters are met. No stored value at all. That's why it required a firmware update, the hardware has to be able to know what the HOLD timer is to do this.

    Perhaps, I'm not understanding something here. This is how I expect to do this under the new firmware.
    button_event[TP1,button_array]
    {
    push:
      {
      stack_var button_id
      button_id=get_last(button_array)
      // do some amazing stuff
      }
    release:
      {
      stack_var button_id
      button_id=get_last(button_array)
      // do some amazing stuff
      }
    hold[20,repeat]:
      {
      stack_var button_id
      button_id=get_last(button_array)
      // do some amazing stuff
      }
    } // end button_event
    
    

    I'm not sure what the issue is. A hold event is just another event. In the scheme of things, it's no different from an push or a release. Isn't the stack_var remade each time the particular event fires? So, even on a repeat, it's just made anew each time. isn't this so? A hold occurs because you haven't let go of the button yet. You should still have that info available, even if you hold it for a long long time. The hardware isn't what creates the hold event. It's the software on the master knowing that it hasn't seen a release from device X yet. Isn't this so?
  • viningvining Posts: 4,368
    ericmedley wrote:
    Perhaps, I'm not understanding something here.
    The problem is the GET_LAST is a system wide function and doesn't return last channel that is fired for a particular event table but the last channel that is fired for any and all event tables. So in the .2 second HOLD wait time if anything else in the entire system is pushed when that hold executes that's the channel value that GET_LAST will return not the one that was pushed & being held.
  • viningvining Posts: 4,368
    This is the last method I used for hold events. Although is isn't really all that likely that multiple panels would require a hold at the same time this method I used allows that ability. This also allows the hold times to trigger based of individual count values held for each TP.

    I'd be interested to know if this new GET_LAST modification allows the same functionality w/o all the extra code or is it just a change in the GET_LAST scope from global to local?

    This example is just a 3 second hold to set a TPs permissions. It uses the repeat just to allow a counter to control event triggering for each TP that may hold. Again not very likely but.....
    BUTTON_EVENT[dvTP_TiVoArry,0]  
         
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nBtn ;
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nTiVoIndx ;
    	   
    	  nBtn    = BUTTON.INPUT.CHANNEL ;
    	  nTPIndx  = GET_LAST(dvTP_TiVoArry) ;
    	  nTiVoIndx = nTiVoActiveTPArry[nTPIndx] ;	       
    	       
    	       
    	  SELECT
    	       {
    	       ///
    	       ACTIVE(nBtn > 93 && nBtn < 98)://PERMISSIONS BUTTONS
    		    {//TIVO_CONTROL_OK = 0 ;TIVO_CONTROL_VIEW_ONLY = 1 ;TIVO_CONTROL_TEMP_LOCK = 2 ;TIVO_CONTROL_PERM_LOCK = 3 ;
    		    if(nTiVoUserAccess[nTiVoIndx][TIVO_TP_INCHARGE] == nTPIndx)//only allow TP w/ control authority to modify!!
    			 {
    			 TO[dvTP_TiVoArry[nTPIndx],nBtn] ;
    			 nTPHoldArry[nTPIndx][TIVO_HOLDBTN_INDXPOS] = nBtn ;
    			 nHoldActive ++ ;
    			 }
    		    }
    	       
    	       
         HOLD[5,REPEAT]://if time changed the count below must change also
    	  {
    	  if(nHoldActive)//prevent running for buttons other than button which use holds in case they're held anyway.
    	       {
    	       STACK_VAR INTEGER i ;
    	       
    	       nHoldActive = 0 ;//reset for recount
    	       for(i = 1 ; i <= TIVO_NUM_TPs ; i ++)
    		    {
    		    if(nTPHoldArry[i][TIVO_HOLDBTN_INDXPOS])
    			 {
    			 nHoldActive ++ ;//recount current holds, ensures an accurate count.
    			 nTPHoldArry[i][TIVO_HOLDCNT_INDXPOS] ++ ;
    			 if(nTPHoldArry[i][TIVO_HOLDCNT_INDXPOS] > 5)//3 seconds (change if hold time change)
    			      {
    			      nTiVoUserAccess[nTiVoActiveTPArry[i]][TIVO_TP_PERMISSIONS] = nTPHoldArry[i][TIVO_HOLDBTN_INDXPOS] - 94 ;
    			      nTPHoldArry[i][TIVO_HOLDBTN_INDXPOS] = 0 ;//STOPS FROM REPEATING IF HOLD CONTINUES
    			      nTPHoldArry[i][TIVO_HOLDCNT_INDXPOS] = 0 ;
    			      nHoldActive -- ;
    			      }
    			 }
    		    }
    	       }
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nBtn ;
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nTiVoIndx ;
    	  	  
    	  nBtn    = BUTTON.INPUT.CHANNEL ;
    	  nTPIndx  = GET_LAST(dvTP_TiVoArry) ;
    	  nTiVoIndx = nTiVoActiveTPArry[nTPIndx] ;
    	  fnTiVo_DeBug("fnDEV_TO_STRING(dvTP_TiVoArry[nTPIndx]),', RELEASED_CHANNEL-',itoa(nBtn),
    					     ', Control of TiVo ',ITOA(nTiVoIndx),'.   >-Line-<',ITOA(__LINE__),'>',CRLF",0) ;
    	  if(nTiVoIndx)
    	       {
    	       if(nBtn > 93 && nBtn < 98)//PERMISSION LEVELS 
    		    {
    		    if(nTPHoldArry[nTPIndx][TIVO_HOLDBTN_INDXPOS])//RESETS TO 0 IF NOT A FULL HOLD TIME, OTHERWISE ALREADY SET TO 0
    			 {//occurs when the button isn't held for the full duration
    			 nTPHoldArry[nTPIndx][TIVO_HOLDBTN_INDXPOS] = 0 ;
    			 nTPHoldArry[nTPIndx][TIVO_HOLDCNT_INDXPOS] = 0 ;
    			 if(nHoldActive)//just to prevent rollover to 65535
    			      {
    			      nHoldActive -- ;
    			      }
    			 }
    		    else//button was held for the full duration so do feedback
    			 {
    			 //fnTiVo_DoPermissionFB(nTiVoIndx) ;
    			 }
    		    fnTiVo_DoPermissionFB(nTiVoIndx) ;
    	       
    

    Now if I don't have to go through this anymore I'll be very happy.
  • ericmedleyericmedley Posts: 4,177
    vining wrote: »
    ericmedley wrote:

    The problem is the GET_LAST is a system wide function and doesn't return last channel that is fired for a particular event table but the last channel that is fired for any and all event tables. So in the .2 second HOLD wait time if anything else in the entire system is pushed when that hold executes that's the channel value that GET_LAST will return not the one that was pushed & being held.

    Okay, now I see. I knew that too. I don't know what my confusion was. Oh well.

    Perhaps they need a Get_Last_This_Button_Event() keyword. :D
  • HedbergHedberg Posts: 671
    ericmedley wrote: »
    Okay, now I see. I knew that too. I don't know what my confusion was. Oh well.

    Perhaps they need a Get_Last_This_Button_Event() keyword. :D

    Isn't that what this firmware change does?
  • viningvining Posts: 4,368
    Hedberg wrote:
    Isn't that what this firmware change does?
    Well that's what we're assuming, that it in essence went from global to local in scope. Now is that one per event table or possibly what it should be is one per TP associated with an event table? It would be nice to know.

    Most of the time I think 1 per event table would be sufficient but there are times when multiple TPs/users will be on the same device page pushing different buttons at the same time so one users get_last shouldn't affect another user.

    Hopefully one of those smart fellas from AMX will shed us some light. :)
  • viningvining Posts: 4,368
    Works Great!

    Test Code:
    DEFINE_DEVICE
    
    dvTP1_Test_1		= 10001:6:0 ;
    dvTP2_Test_1		= 10002:6:0 ;
    dvTP3_Test_1		= 10003:6:0 ;
    dvTP4_Test_1		= 10004:6:0 ;
    
    dvTP1_Test_2		= 10001:7:0 ;
    dvTP2_Test_2		= 10002:7:0 ;
    dvTP3_Test_2		= 10003:7:0 ;
    dvTP4_Test_2		= 10004:7:0 ;
    
    dvTP1_Test_3		= 10001:8:0 ;
    dvTP2_Test_3		= 10002:8:0 ;
    dvTP3_Test_3		= 10003:8:0 ;
    dvTP4_Test_3		= 10004:8:0 ;
    
    DEFINE_VARIABLE
    
    VOLATILE INTEGER nHold_BtnArry[] = {1,2,3,4,5,6,7,8,9,10}
    VOLATILE DEV dvTP_TestArry_1[] = {dvTP1_Test_1,dvTP2_Test_1,dvTP3_Test_1,dvTP4_Test_1}
    VOLATILE DEV dvTP_TestArry_2[] = {dvTP1_Test_2,dvTP2_Test_2,dvTP3_Test_2,dvTP4_Test_2}
    VOLATILE DEV dvTP_TestArry_3[] = {dvTP1_Test_3,dvTP2_Test_3,dvTP3_Test_3,dvTP4_Test_3}
    
    DEFINE_EVENT //
    
    BUTTON_EVENT[dvTP_TestArry_1,nHold_BtnArry]
    
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_1) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'PUSH TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         HOLD[6,REPEAT]:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_1) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'HOLD TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_1) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'RELEASE TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         }
         
    BUTTON_EVENT[dvTP_TestArry_2,nHold_BtnArry]
    
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_2) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'PUSH TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         HOLD[2,REPEAT]:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_2) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'HOLD TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_2) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'RELEASE TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         }
         
    BUTTON_EVENT[dvTP_TestArry_3,nHold_BtnArry]
    
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_3) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'PUSH TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         HOLD[4,REPEAT]:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_3) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'HOLD TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_3) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'RELEASE TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx)") ;
    	  }
         }
      
    DEFINE_PROGRAM
    
    if(nRunHoldTest1)
         {
         CANCEL_WAIT 'RUN_TEST_1' ;
         CANCEL_WAIT 'END_TEST_1' ;
         DO_PUSH_TIMED(dvTP_TestArry_1[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 20 'RUN_TEST_1'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_1[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 20 'RUN_TEST_1'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_1[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 20 'RUN_TEST_1'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_1[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_1' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_1[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_1[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_1[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_1[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest1 = 0 ;
         } 
    if(nRunHoldTest2)
         {
         CANCEL_WAIT 'RUN_TEST_2' ;
         CANCEL_WAIT 'END_TEST_2' ;
         DO_PUSH_TIMED(dvTP_TestArry_2[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 20 'RUN_TEST_2'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_2[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 20 'RUN_TEST_2'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_2[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 20 'RUN_TEST_2'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_2[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_2' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_2[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_2[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_2[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_2[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest2 = 0 ;
         } 
    if(nRunHoldTest3)
         {
         CANCEL_WAIT 'RUN_TEST_3' ;
         CANCEL_WAIT 'END_TEST_3' ;
         DO_PUSH_TIMED(dvTP_TestArry_3[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 20 'RUN_TEST_3'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_3[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 20 'RUN_TEST_3'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_3[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 20 'RUN_TEST_3'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_3[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_3' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_3[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_3[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_3[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_3[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest3 = 0 ;
         }           
    
    if(nRunHoldTest4)
         {
         CANCEL_WAIT 'RUN_TEST_4' ;
         CANCEL_WAIT 'END_TEST_4' ;
         DO_PUSH_TIMED(dvTP_TestArry_1[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 20 'RUN_TEST_4'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_2[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 20 'RUN_TEST_4'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_3[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 20 'RUN_TEST_4'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_1[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_4' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_1[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_2[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_3[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_1[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest4 = 0 ;
         }           
    
    

    When I set the variable in debug to run the code I should get index returns of 1 for TP 10001, 2 for 10002, 3 for 10003 & 4 for 10004.

    Test 1 which ran just test 1:
    Line      1 (17:58:49)::  Get_Last Test: PUSH TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      2 (17:58:50)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      3 (17:58:51)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      4 (17:58:51)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      5 (17:58:51)::  Get_Last Test: PUSH TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line      6 (17:58:52)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      7 (17:58:52)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line      8 (17:58:52)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      9 (17:58:53)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     10 (17:58:53)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     11 (17:58:53)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     12 (17:58:53)::  Get_Last Test: PUSH TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     13 (17:58:54)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     14 (17:58:54)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     15 (17:58:54)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     16 (17:58:54)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     17 (17:58:54)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     18 (17:58:55)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     19 (17:58:55)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     20 (17:58:55)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     21 (17:58:55)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     22 (17:58:55)::  Get_Last Test: PUSH TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     23 (17:58:55)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     24 (17:58:56)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     25 (17:58:56)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     26 (17:58:56)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     27 (17:58:56)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     28 (17:58:56)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     29 (17:58:56)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     30 (17:58:57)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     31 (17:58:57)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     32 (17:58:57)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     33 (17:58:57)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     34 (17:58:57)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     35 (17:58:57)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     36 (17:58:57)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     37 (17:58:58)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     38 (17:58:58)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     39 (17:58:58)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     40 (17:58:58)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     41 (17:58:58)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     42 (17:58:58)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     43 (17:58:58)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     44 (17:58:59)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     45 (17:58:59)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     46 (17:58:59)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     47 (17:58:59)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     48 (17:58:59)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     49 (17:58:59)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     50 (17:58:59)::  Get_Last Test: RELEASE TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     51 (17:58:59)::  Get_Last Test: RELEASE TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     52 (17:58:59)::  Get_Last Test: RELEASE TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     53 (17:58:59)::  Get_Last Test: RELEASE TP:10004:6:2, TP Index: 4, Btn Index: 4
    
    Works great!

    Run Test 1 & 2 at the same time:
    Line      1 (18:09:05)::  Get_Last Test: PUSH TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      2 (18:09:05)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      3 (18:09:05)::  Get_Last Test: PUSH TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      4 (18:09:05)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      5 (18:09:06)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      6 (18:09:06)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      7 (18:09:06)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      8 (18:09:06)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      9 (18:09:06)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     10 (18:09:06)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     11 (18:09:06)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     12 (18:09:07)::  Get_Last Test: PUSH TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     13 (18:09:07)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     14 (18:09:07)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     15 (18:09:07)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     16 (18:09:07)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     17 (18:09:07)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     18 (18:09:07)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     19 (18:09:07)::  Get_Last Test: PUSH TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     20 (18:09:07)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     21 (18:09:07)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     22 (18:09:08)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     23 (18:09:08)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     24 (18:09:08)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     25 (18:09:08)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     26 (18:09:08)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     27 (18:09:08)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     28 (18:09:08)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     29 (18:09:08)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     30 (18:09:08)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     31 (18:09:08)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     32 (18:09:08)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     33 (18:09:08)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     34 (18:09:08)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     35 (18:09:08)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     36 (18:09:09)::  Get_Last Test: PUSH TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     37 (18:09:09)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     38 (18:09:09)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     39 (18:09:09)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     40 (18:09:09)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     41 (18:09:09)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     42 (18:09:09)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     43 (18:09:09)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     44 (18:09:09)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     45 (18:09:09)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     46 (18:09:09)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     47 (18:09:09)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     48 (18:09:09)::  Get_Last Test: PUSH TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     49 (18:09:09)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     50 (18:09:09)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     51 (18:09:09)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     52 (18:09:09)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     53 (18:09:10)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     54 (18:09:10)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     55 (18:09:10)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     56 (18:09:10)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     57 (18:09:10)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     58 (18:09:10)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     59 (18:09:10)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     60 (18:09:10)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     61 (18:09:10)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     62 (18:09:10)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     63 (18:09:10)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     64 (18:09:10)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     65 (18:09:10)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     66 (18:09:10)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     67 (18:09:10)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     68 (18:09:10)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     69 (18:09:10)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     70 (18:09:10)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     71 (18:09:10)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     72 (18:09:10)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     73 (18:09:11)::  Get_Last Test: PUSH TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     74 (18:09:11)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     75 (18:09:11)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     76 (18:09:11)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     77 (18:09:11)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     78 (18:09:11)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     79 (18:09:11)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     80 (18:09:11)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     81 (18:09:11)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     82 (18:09:11)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     83 (18:09:11)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     84 (18:09:11)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     85 (18:09:11)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     86 (18:09:11)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     87 (18:09:11)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     88 (18:09:11)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     89 (18:09:11)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     90 (18:09:11)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     91 (18:09:11)::  Get_Last Test: PUSH TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line     92 (18:09:11)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     93 (18:09:11)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     94 (18:09:11)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     95 (18:09:11)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     96 (18:09:11)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line     97 (18:09:12)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     98 (18:09:12)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     99 (18:09:12)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    100 (18:09:12)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    101 (18:09:12)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    102 (18:09:12)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    103 (18:09:12)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    104 (18:09:12)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    105 (18:09:12)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    106 (18:09:12)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    107 (18:09:12)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    108 (18:09:12)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    109 (18:09:12)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    110 (18:09:12)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    111 (18:09:12)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    112 (18:09:12)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    113 (18:09:12)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    114 (18:09:12)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    115 (18:09:12)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    116 (18:09:12)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    117 (18:09:12)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    118 (18:09:13)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    119 (18:09:13)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    120 (18:09:13)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    121 (18:09:13)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    122 (18:09:13)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    123 (18:09:13)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    124 (18:09:13)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    125 (18:09:13)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    126 (18:09:13)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    127 (18:09:13)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    128 (18:09:13)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    129 (18:09:13)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    130 (18:09:13)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    131 (18:09:13)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    132 (18:09:13)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    133 (18:09:13)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    134 (18:09:13)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    135 (18:09:13)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    136 (18:09:13)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    137 (18:09:13)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    138 (18:09:13)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    139 (18:09:13)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    140 (18:09:13)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    141 (18:09:13)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    142 (18:09:13)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    143 (18:09:13)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    144 (18:09:13)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    145 (18:09:14)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    146 (18:09:14)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    147 (18:09:14)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    148 (18:09:14)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    149 (18:09:14)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    150 (18:09:14)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    151 (18:09:14)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    152 (18:09:14)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    153 (18:09:14)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    154 (18:09:14)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    155 (18:09:14)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    156 (18:09:14)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    157 (18:09:14)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    158 (18:09:14)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    159 (18:09:14)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    160 (18:09:14)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    161 (18:09:14)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    162 (18:09:14)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    163 (18:09:14)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    164 (18:09:14)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    165 (18:09:14)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    166 (18:09:14)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    167 (18:09:14)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    168 (18:09:14)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    169 (18:09:14)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    170 (18:09:14)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    171 (18:09:14)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    172 (18:09:15)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    173 (18:09:15)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    174 (18:09:15)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    175 (18:09:15)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    176 (18:09:15)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    177 (18:09:15)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    178 (18:09:15)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    179 (18:09:15)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    180 (18:09:15)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    181 (18:09:15)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    182 (18:09:15)::  Get_Last Test: RELEASE TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    183 (18:09:15)::  Get_Last Test: RELEASE TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    184 (18:09:15)::  Get_Last Test: RELEASE TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    185 (18:09:15)::  Get_Last Test: RELEASE TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    186 (18:09:15)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    187 (18:09:15)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    188 (18:09:15)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    189 (18:09:15)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    190 (18:09:15)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    191 (18:09:15)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    192 (18:09:15)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    193 (18:09:15)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    194 (18:09:15)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    195 (18:09:15)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    196 (18:09:15)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    197 (18:09:15)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    198 (18:09:15)::  Get_Last Test: RELEASE TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    199 (18:09:15)::  Get_Last Test: RELEASE TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    200 (18:09:15)::  Get_Last Test: RELEASE TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    201 (18:09:15)::  Get_Last Test: RELEASE TP:10004:7:2, TP Index: 4, Btn Index: 4
    
    Let's run all 4 tests:
    Line      1 (18:10:22)::  Get_Last Test: PUSH TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      2 (18:10:22)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      3 (18:10:23)::  Get_Last Test: PUSH TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      4 (18:10:23)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      5 (18:10:23)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      6 (18:10:23)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line      7 (18:10:23)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      8 (18:10:23)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line      9 (18:10:24)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     10 (18:10:24)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     11 (18:10:24)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     12 (18:10:24)::  Get_Last Test: PUSH TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     13 (18:10:24)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     14 (18:10:24)::  Get_Last Test: PUSH TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     15 (18:10:24)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     16 (18:10:24)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     17 (18:10:24)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     18 (18:10:24)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     19 (18:10:25)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     20 (18:10:25)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     21 (18:10:25)::  Get_Last Test: PUSH TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     22 (18:10:25)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     23 (18:10:25)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     24 (18:10:25)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     25 (18:10:25)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     26 (18:10:25)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     27 (18:10:25)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     28 (18:10:25)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     29 (18:10:25)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     30 (18:10:25)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     31 (18:10:25)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     32 (18:10:25)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     33 (18:10:25)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     34 (18:10:25)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     35 (18:10:26)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     36 (18:10:26)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     37 (18:10:26)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     38 (18:10:26)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     39 (18:10:26)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     40 (18:10:26)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     41 (18:10:26)::  Get_Last Test: PUSH TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     42 (18:10:26)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     43 (18:10:26)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     44 (18:10:26)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     45 (18:10:26)::  Get_Last Test: PUSH TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line     46 (18:10:26)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     47 (18:10:26)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     48 (18:10:26)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     49 (18:10:26)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     50 (18:10:26)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     51 (18:10:26)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     52 (18:10:27)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     53 (18:10:27)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line     54 (18:10:27)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     55 (18:10:27)::  Get_Last Test: PUSH TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     56 (18:10:27)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     57 (18:10:27)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     58 (18:10:27)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     59 (18:10:27)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     60 (18:10:27)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     61 (18:10:27)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     62 (18:10:27)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     63 (18:10:27)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line     64 (18:10:27)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     65 (18:10:27)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     66 (18:10:27)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     67 (18:10:27)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     68 (18:10:27)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     69 (18:10:27)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     70 (18:10:27)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     71 (18:10:27)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     72 (18:10:27)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     73 (18:10:27)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line     74 (18:10:27)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     75 (18:10:27)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     76 (18:10:27)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     77 (18:10:27)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     78 (18:10:27)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     79 (18:10:28)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     80 (18:10:28)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     81 (18:10:28)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     82 (18:10:28)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line     83 (18:10:28)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line     84 (18:10:28)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     85 (18:10:28)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     86 (18:10:28)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     87 (18:10:28)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     88 (18:10:28)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line     89 (18:10:28)::  Get_Last Test: PUSH TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line     90 (18:10:28)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     91 (18:10:28)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     92 (18:10:28)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line     93 (18:10:28)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line     94 (18:10:28)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line     95 (18:10:28)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line     96 (18:10:28)::  Get_Last Test: PUSH TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line     97 (18:10:28)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line     98 (18:10:28)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line     99 (18:10:28)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    100 (18:10:28)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    101 (18:10:28)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    102 (18:10:28)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    103 (18:10:28)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    104 (18:10:29)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    105 (18:10:29)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    106 (18:10:29)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    107 (18:10:29)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    108 (18:10:29)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    109 (18:10:29)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    110 (18:10:29)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    111 (18:10:29)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    112 (18:10:29)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    113 (18:10:29)::  Get_Last Test: PUSH TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    114 (18:10:29)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    115 (18:10:29)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    116 (18:10:29)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    117 (18:10:29)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    118 (18:10:29)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    119 (18:10:29)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    120 (18:10:29)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    121 (18:10:29)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    122 (18:10:29)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    123 (18:10:29)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    124 (18:10:29)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    125 (18:10:29)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    126 (18:10:29)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    127 (18:10:29)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    128 (18:10:29)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    129 (18:10:29)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    130 (18:10:29)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    131 (18:10:29)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    132 (18:10:29)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    133 (18:10:29)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    134 (18:10:29)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    135 (18:10:29)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    136 (18:10:29)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    137 (18:10:29)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    138 (18:10:29)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    139 (18:10:30)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    140 (18:10:30)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    141 (18:10:30)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    142 (18:10:30)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    143 (18:10:30)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    144 (18:10:30)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    145 (18:10:30)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    146 (18:10:30)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    147 (18:10:30)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    148 (18:10:30)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    149 (18:10:30)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    150 (18:10:30)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    151 (18:10:30)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    152 (18:10:30)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    153 (18:10:30)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    154 (18:10:30)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    155 (18:10:30)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    156 (18:10:30)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    157 (18:10:30)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    158 (18:10:30)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    159 (18:10:30)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    160 (18:10:30)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    161 (18:10:30)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    162 (18:10:30)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    163 (18:10:30)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    164 (18:10:30)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    165 (18:10:30)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    166 (18:10:30)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    167 (18:10:30)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    168 (18:10:30)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    169 (18:10:30)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    170 (18:10:30)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    171 (18:10:30)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    172 (18:10:30)::  Get_Last Test: PUSH TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    173 (18:10:30)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    174 (18:10:30)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    175 (18:10:31)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    176 (18:10:31)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    177 (18:10:31)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    178 (18:10:31)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    179 (18:10:31)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    180 (18:10:31)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    181 (18:10:31)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    182 (18:10:31)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    183 (18:10:31)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    184 (18:10:31)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    185 (18:10:31)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    186 (18:10:31)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    187 (18:10:31)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    188 (18:10:31)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    189 (18:10:31)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    190 (18:10:31)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    191 (18:10:31)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    192 (18:10:31)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    193 (18:10:31)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    194 (18:10:31)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    195 (18:10:31)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    196 (18:10:31)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    197 (18:10:31)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    198 (18:10:32)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    199 (18:10:32)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    200 (18:10:32)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    201 (18:10:32)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    202 (18:10:32)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    203 (18:10:32)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    204 (18:10:32)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    205 (18:10:32)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    206 (18:10:32)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    207 (18:10:32)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    208 (18:10:32)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    209 (18:10:32)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    210 (18:10:32)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    211 (18:10:32)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    212 (18:10:32)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    213 (18:10:32)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    214 (18:10:32)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    215 (18:10:32)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    216 (18:10:32)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    217 (18:10:32)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    218 (18:10:32)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    219 (18:10:32)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    220 (18:10:32)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    221 (18:10:32)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    222 (18:10:32)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    223 (18:10:32)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    224 (18:10:32)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    225 (18:10:32)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    226 (18:10:32)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    227 (18:10:32)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    228 (18:10:32)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    229 (18:10:32)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    230 (18:10:32)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    231 (18:10:32)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    232 (18:10:32)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    233 (18:10:32)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    234 (18:10:32)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    235 (18:10:32)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    236 (18:10:32)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    237 (18:10:32)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    238 (18:10:32)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    239 (18:10:32)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    240 (18:10:32)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    241 (18:10:32)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    242 (18:10:33)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    243 (18:10:33)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    244 (18:10:33)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    245 (18:10:33)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    246 (18:10:33)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    247 (18:10:33)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    248 (18:10:33)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    249 (18:10:33)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    250 (18:10:33)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    251 (18:10:33)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    252 (18:10:33)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    253 (18:10:33)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    254 (18:10:33)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    255 (18:10:33)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    256 (18:10:33)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    257 (18:10:33)::  Get_Last Test: RELEASE TP:10001:6:2, TP Index: 1, Btn Index: 1
    Line    258 (18:10:33)::  Get_Last Test: RELEASE TP:10002:6:2, TP Index: 2, Btn Index: 2
    Line    259 (18:10:33)::  Get_Last Test: RELEASE TP:10003:6:2, TP Index: 3, Btn Index: 3
    Line    260 (18:10:33)::  Get_Last Test: RELEASE TP:10004:6:2, TP Index: 4, Btn Index: 4
    Line    261 (18:10:33)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    262 (18:10:33)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    263 (18:10:33)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    264 (18:10:33)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    265 (18:10:33)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    266 (18:10:33)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    267 (18:10:33)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    268 (18:10:33)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    269 (18:10:33)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    270 (18:10:33)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    271 (18:10:33)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    272 (18:10:33)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    273 (18:10:33)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    274 (18:10:33)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    275 (18:10:33)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    276 (18:10:33)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    277 (18:10:33)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    278 (18:10:34)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    279 (18:10:34)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    280 (18:10:34)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    281 (18:10:34)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    282 (18:10:34)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    283 (18:10:34)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    284 (18:10:34)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    285 (18:10:34)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    286 (18:10:34)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    287 (18:10:34)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    288 (18:10:34)::  Get_Last Test: RELEASE TP:10001:7:2, TP Index: 1, Btn Index: 1
    Line    289 (18:10:34)::  Get_Last Test: RELEASE TP:10002:7:2, TP Index: 2, Btn Index: 2
    Line    290 (18:10:34)::  Get_Last Test: RELEASE TP:10003:7:2, TP Index: 3, Btn Index: 3
    Line    291 (18:10:34)::  Get_Last Test: RELEASE TP:10004:7:2, TP Index: 4, Btn Index: 4
    Line    292 (18:10:34)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    293 (18:10:34)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    294 (18:10:34)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    295 (18:10:34)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    296 (18:10:34)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    297 (18:10:34)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    298 (18:10:34)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    299 (18:10:34)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    300 (18:10:35)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    301 (18:10:35)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    302 (18:10:35)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    303 (18:10:35)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    304 (18:10:35)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    305 (18:10:35)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    306 (18:10:35)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    307 (18:10:35)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    308 (18:10:35)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4
    Line    309 (18:10:35)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    310 (18:10:35)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    311 (18:10:35)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    312 (18:10:35)::  Get_Last Test: RELEASE TP:10001:8:2, TP Index: 1, Btn Index: 1
    Line    313 (18:10:35)::  Get_Last Test: RELEASE TP:10002:8:2, TP Index: 2, Btn Index: 2
    Line    314 (18:10:35)::  Get_Last Test: RELEASE TP:10003:8:2, TP Index: 3, Btn Index: 3
    Line    315 (18:10:35)::  Get_Last Test: RELEASE TP:10004:8:2, TP Index: 4, Btn Index: 4
    
    As you can see it works freakin great! Tracks the last pushed or currently held button for each TP in an event table, while all are running at the same time. Multiple holds in each event table and multiple holds in several event tables.

    I can't imagine there being any issues using this now in a hold.

    Good job guys!!!!!!!!!! :):):):):)
    This deserves 5 smiley faces.
  • jazzwyldjazzwyld Posts: 199
    That is a beautiful thing
  • jjamesjjames Posts: 2,908
    I'll definitely need to try this out next week, and test to my liking. Your results look good & promising - but this is one of those things that I need to test thoroughly before completely jumping on board, after all, we're talking about major code changes and ditching parts of code.

    Looks good though - this could be a very nice thing!
  • ericmedleyericmedley Posts: 4,177
    jjames wrote: »
    I'll definitely need to try this out next week, and test to my liking. Your results look good & promising - but this is one of those things that I need to test thoroughly before completely jumping on board, after all, we're talking about major code changes and ditching parts of code.

    Looks good though - this could be a very nice thing!

    Yeah, me too. To me this sounds like a 'going forward' type thing. Not an 'updating the old stuff all at once' thing.
  • viningvining Posts: 4,368
    Looking at the test results and realizing I used BUTTON.INPUT.DEVICE in the hold to determine which TP was executing the hold that was currently firing made me wonder. I wouldn't think the the B.I.C. would return the correct TP since that is also a global value that contains the last B.I.C. value for the last TP that issued an event. Makes me think they completely restructured how the holds work and the holds are processed elsewhere in code and fire off just like a DO_PUSH but maybe instead a secret command DO_HOLD (so it runs the hold code) and now actually creates an event like a push or release so that GET_LAST is actually getting the last event that fired and so is B.I.D. So they didn't change the way GET_LAST works in a hold they changed the way the HOLD works and it's now an event driven player like PUSH & RELEASE as opposed to the "WAIT" driven method it was.

    Does that make any sense?
  • jjamesjjames Posts: 2,908
    vining, could you do something like so?
    DEFINE_DEVICE
    dvTP1					= 10001:01:00
    dvTP2					= 10002:01:00
    
    DEFINE_CONSTANT
    DEV dv_TP[]=
    {
    	 dvTP1
    	,dvTP2
    }
    
    INTEGER nVOL_BTNS[]=
    {
    	 24
    	,25
    	,26
    }
    
    DEFINE_VARIABLE
    INTEGER nVOLUME_LEVEL[2] = {50,50};
    
    BUTTON_EVENT[dv_TP,nVOL_BTNS]
    {
    	PUSH:
    	{
    		STACK_VAR INTEGER nPNL;
    		STACK_VAR INTEGER nIND;
    		
    		nPNL = GET_LAST(dv_TP);
    		nIND = GET_LAST(nVOL_BTNS);
    		
    		SEND_STRING 0, "'PUSH: PANEL (',ITOA(nPNL),') - BUTTON (',ITOA(nIND),')'";
    	}
    	
    	HOLD[2,REPEAT]
    	{
    		STACK_VAR INTEGER nPNL;
    		STACK_VAR INTEGER nIND;
    		
    		nPNL = GET_LAST(dv_TP);
    		nIND = GET_LAST(nVOL_BTNS);
    		
    		SWITCH(nIND)
    		{
    			CASE 1:{nVOLUME_LEVEL[nPNL]++;}
    			CASE 2:{nVOLUME_LEVEL[nPNL]--}
    		}
    		
    		SEND_STRING 0,"'PANEL = ',ITOA(nPNL),' - BUTTON = ',ITOA(nIND)";
    		SEND_STRING 0,"'PANEL ',ITOA(nPNL),' VOLUME = ',ITOA(nVOLUME_LEVEL[nPNL])";
    		SEND_STRING 0,"'		PANEL ',ITOA(1),' VOLUME = ',ITOA(nVOLUME_LEVEL[1])";
    		SEND_STRING 0,"'		PANEL ',ITOA(2),' VOLUME = ',ITOA(nVOLUME_LEVEL[2])";
    	}
    }
    
    Obviously untested, but the idea is to see if the correct variables are incremented & decremented. In order to see - have one panel go up, the other go down.
  • viningvining Posts: 4,368
    I'll take a look see & run it when I get back.
  • viningvining Posts: 4,368
    DEFINE_VARIABLE
    
    VOLATILE INTEGER nRunHoldTest1 = 0 ;
    VOLATILE INTEGER nRunHoldTest2 = 0 ;
    VOLATILE INTEGER nRunHoldTest3 = 0 ;
    
    VOLATILE INTEGER nHold_BtnArry[] = {1,2,3,4,5,6,7,8,9,10}
    VOLATILE INTEGER nTest1_Value[] = {1100,2100,3100,4100}
    VOLATILE INTEGER nTest2_Value[] = {1200,2200,3200,4200}
    VOLATILE INTEGER nTest3_Value[] = {1300,2300,3300,4300}
    
    
    DEFINE_EVENT //
    
    BUTTON_EVENT[dvTP_TestArry_1,nHold_BtnArry]
    
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_1) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'PUSH TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest1_Value[nTPIndx])") ;
    	  }
         HOLD[5,REPEAT]:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  LOCAL_VAR INTEGER nTestCount[4] ;
    	  LOCAL_VAR INTEGER nDirection[4] ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_1) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'HOLD TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest1_Value[nTPIndx])") ;
    	  if(nTestCount[nTPIndx] < 10 && !nDirection[nTPIndx])
    	       {
    	       nTestCount[nTPIndx]++ ;
    	       nTest1_Value[nTPIndx]++ ;
    	       }
    	  else if(nTestCount[nTPIndx])
    	       {
    	       nDirection[nTPIndx] = 1 ;
    	       nTestCount[nTPIndx]-- ;
    	       nTest1_Value[nTPIndx]-- ;
    	       if(!nTestCount[nTPIndx])
    	            {
    		    nDirection[nTPIndx] = 0 ;
    		    }
    	       }
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_1) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'RELEASE TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest1_Value[nTPIndx])") ;
    	  }
         }
         
    BUTTON_EVENT[dvTP_TestArry_2,nHold_BtnArry]
    
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_2) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'PUSH TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest2_Value[nTPIndx])") ;
    	  }
         HOLD[5,REPEAT]:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  LOCAL_VAR INTEGER nTestCount[4] ;
    	  LOCAL_VAR INTEGER nDirection[4] ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_2) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'HOLD TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest2_Value[nTPIndx])") ;
    	  if(nTestCount[nTPIndx] < 10 && !nDirection[nTPIndx])
    	       {
    	       nTestCount[nTPIndx]++ ;
    	       nTest2_Value[nTPIndx]++ ;
    	       }
    	  else if(nTestCount[nTPIndx])
    	       {
    	       nDirection[nTPIndx] = 1 ;
    	       nTestCount[nTPIndx]-- ;
    	       nTest2_Value[nTPIndx]-- ;
    	       if(!nTestCount[nTPIndx])
    	            {
    		    nDirection[nTPIndx] = 0 ;
    		    }
    	       }
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_2) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'RELEASE TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest2_Value[nTPIndx])") ;
    	  nTest3_Value[nTPIndx]++ ;
    	  }
         }
         
    BUTTON_EVENT[dvTP_TestArry_3,nHold_BtnArry]
    
         {
         PUSH:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  LOCAL_VAR INTEGER nDirection ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_3) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'PUSH TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest3_Value[nTPIndx])") ;
    	  }
         HOLD[5,REPEAT]:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  LOCAL_VAR INTEGER nTestCount[4] ;
    	  LOCAL_VAR INTEGER nDirection[4] ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_3) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'HOLD TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest3_Value[nTPIndx])") ;
    	  if(nTestCount[nTPIndx] < 10 && !nDirection[nTPIndx])
    	       {
    	       nTestCount[nTPIndx]++ ;
    	       nTest3_Value[nTPIndx]++ ;
    	       }
    	  else if(nTestCount[nTPIndx])
    	       {
    	       nDirection[nTPIndx] = 1 ;
    	       nTestCount[nTPIndx]-- ;
    	       nTest3_Value[nTPIndx]-- ;
    	       if(!nTestCount[nTPIndx])
    	            {
    		    nDirection[nTPIndx] = 0 ;
    		    }
    	       }
    	  }
         RELEASE:
    	  {
    	  STACK_VAR INTEGER nTPIndx ;
    	  STACK_VAR INTEGER nBtnIndx ;
    	  
    	  nTPIndx  = GET_LAST(dvTP_TestArry_3) ;
    	  nBtnIndx = GET_LAST(nHold_BtnArry) ;
    	  fnGetLastDeBug("'RELEASE TP:',fnDEV_TO_STRING(BUTTON.INPUT.DEVICE),', TP Index: ',itoa(nTPIndx),', Btn Index: ',itoa(nBtnIndx),', Value: ',itoa(nTest3_Value[nTPIndx])") ;
    	  }
         }
    
    DEFINE_PROGRAM
    
    if(nRunHoldTest1)
         {
         CANCEL_WAIT 'RUN_TEST_1' ;
         CANCEL_WAIT 'END_TEST_1' ;
         
         DO_PUSH_TIMED(dvTP_TestArry_1[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 10 'RUN_TEST_1'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_1[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 10 'RUN_TEST_1'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_1[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 10 'RUN_TEST_1'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_1[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_1' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_1[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_1[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_1[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_1[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest1 = 0 ;
         } 
    if(nRunHoldTest2)
         {
         CANCEL_WAIT 'RUN_TEST_2' ;
         CANCEL_WAIT 'END_TEST_2' ;
        
         DO_PUSH_TIMED(dvTP_TestArry_2[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 10 'RUN_TEST_2'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_2[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 10 'RUN_TEST_2'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_2[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 10 'RUN_TEST_2'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_2[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_2' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_2[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_2[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_2[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_2[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest2 = 0 ;
         } 
    if(nRunHoldTest3)
         {
         CANCEL_WAIT 'RUN_TEST_3' ;
         CANCEL_WAIT 'END_TEST_3' ;
         
         DO_PUSH_TIMED(dvTP_TestArry_3[1],nHold_BtnArry[1],DO_PUSH_TIMED_INFINITE) ;
         WAIT 10 'RUN_TEST_3'
    	  {
    	  DO_PUSH_TIMED(dvTP_TestArry_3[2],nHold_BtnArry[2],DO_PUSH_TIMED_INFINITE) ;
    	  WAIT 10 'RUN_TEST_3'
    	       {
    	       DO_PUSH_TIMED(dvTP_TestArry_3[3],nHold_BtnArry[3],DO_PUSH_TIMED_INFINITE) ;
    	       WAIT 10 'RUN_TEST_3'
    		    {
    		    DO_PUSH_TIMED(dvTP_TestArry_3[4],nHold_BtnArry[4],DO_PUSH_TIMED_INFINITE) ;
    		    }
    	       }
    	  }
         WAIT 100 'END_TEST_3' 
    	  {
    	  DO_RELEASE(dvTP_TestArry_3[1],nHold_BtnArry[1]) ;
    	  DO_RELEASE(dvTP_TestArry_3[2],nHold_BtnArry[2]) ;
    	  DO_RELEASE(dvTP_TestArry_3[3],nHold_BtnArry[3]) ;
    	  DO_RELEASE(dvTP_TestArry_3[4],nHold_BtnArry[4]) ;
    	  }
         nRunHoldTest3 = 0 ;
         }           
    

    Results when running test 1:
    Line      1 (16:16:59)::  Get_Last Test: PUSH TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1100
    Line      2 (16:16:59)::  Get_Last Test: PUSH TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2100
    Line      3 (16:16:59)::  Get_Last Test: PUSH TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3100
    Line      4 (16:16:59)::  Get_Last Test: PUSH TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4100
    Line      5 (16:16:59)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1100
    Line      6 (16:16:59)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2100
    Line      7 (16:17:00)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3100
    Line      8 (16:17:00)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4100
    Line      9 (16:17:00)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1101
    Line     10 (16:17:00)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2101
    Line     11 (16:17:00)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3101
    Line     12 (16:17:00)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4101
    Line     13 (16:17:00)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1102
    Line     14 (16:17:00)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2102
    Line     15 (16:17:01)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3102
    Line     16 (16:17:01)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4102
    Line     17 (16:17:01)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1103
    Line     18 (16:17:01)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2103
    Line     19 (16:17:01)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3103
    Line     20 (16:17:01)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4103
    Line     21 (16:17:01)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1104
    Line     22 (16:17:01)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2104
    Line     23 (16:17:02)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3104
    Line     24 (16:17:02)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4104
    Line     25 (16:17:02)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1105
    Line     26 (16:17:02)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2105
    Line     27 (16:17:02)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3105
    Line     28 (16:17:02)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4105
    Line     29 (16:17:02)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1106
    Line     30 (16:17:02)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2106
    Line     31 (16:17:03)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3106
    Line     32 (16:17:03)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4106
    Line     33 (16:17:03)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1107
    Line     34 (16:17:03)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2107
    Line     35 (16:17:03)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3107
    Line     36 (16:17:03)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4107
    Line     37 (16:17:03)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1108
    Line     38 (16:17:03)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2108
    Line     39 (16:17:04)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3108
    Line     40 (16:17:04)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4108
    Line     41 (16:17:04)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1109
    Line     42 (16:17:04)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2109
    Line     43 (16:17:04)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3109
    Line     44 (16:17:04)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4109
    Line     45 (16:17:04)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1110
    Line     46 (16:17:04)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2110
    Line     47 (16:17:05)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3110
    Line     48 (16:17:05)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4110
    Line     49 (16:17:05)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1109
    Line     50 (16:17:05)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2109
    Line     51 (16:17:05)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3109
    Line     52 (16:17:05)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4109
    Line     53 (16:17:05)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1108
    Line     54 (16:17:05)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2108
    Line     55 (16:17:06)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3108
    Line     56 (16:17:06)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4108
    Line     57 (16:17:06)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1107
    Line     58 (16:17:06)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2107
    Line     59 (16:17:06)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3107
    Line     60 (16:17:06)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4107
    Line     61 (16:17:06)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1106
    Line     62 (16:17:06)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2106
    Line     63 (16:17:07)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3106
    Line     64 (16:17:07)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4106
    Line     65 (16:17:07)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1105
    Line     66 (16:17:07)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2105
    Line     67 (16:17:07)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3105
    Line     68 (16:17:07)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4105
    Line     69 (16:17:07)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1104
    Line     70 (16:17:07)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2104
    Line     71 (16:17:08)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3104
    Line     72 (16:17:08)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4104
    Line     73 (16:17:08)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1103
    Line     74 (16:17:08)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2103
    Line     75 (16:17:08)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3103
    Line     76 (16:17:08)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4103
    Line     77 (16:17:08)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1102
    Line     78 (16:17:08)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2102
    Line     79 (16:17:09)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3102
    Line     80 (16:17:09)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4102
    Line     81 (16:17:09)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1101
    Line     82 (16:17:09)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2101
    Line     83 (16:17:09)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3101
    Line     84 (16:17:09)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4101
    Line     85 (16:17:09)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1100
    Line     86 (16:17:09)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2100
    Line     87 (16:17:10)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3100
    Line     88 (16:17:10)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4100
    Line     89 (16:17:10)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1101
    Line     90 (16:17:10)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2101
    Line     91 (16:17:10)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3101
    Line     92 (16:17:10)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4101
    Line     93 (16:17:10)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1102
    Line     94 (16:17:10)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2102
    Line     95 (16:17:11)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3102
    Line     96 (16:17:11)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4102
    Line     97 (16:17:11)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1103
    Line     98 (16:17:11)::  Get_Last Test: RELEASE TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1104
    Line     99 (16:17:11)::  Get_Last Test: RELEASE TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2103
    Line    100 (16:17:11)::  Get_Last Test: RELEASE TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3103
    Line    101 (16:17:11)::  Get_Last Test: RELEASE TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4103
    
    Running the 3 test at the same time:
    Line      1 (16:32:52)::  Get_Last Test: PUSH TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1100
    Line      2 (16:32:52)::  Get_Last Test: PUSH TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2100
    Line      3 (16:32:52)::  Get_Last Test: PUSH TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3100
    Line      4 (16:32:52)::  Get_Last Test: PUSH TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4100
    Line      5 (16:32:52)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1100
    Line      6 (16:32:52)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2100
    Line      7 (16:32:52)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3100
    Line      8 (16:32:53)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4100
    Line      9 (16:32:53)::  Get_Last Test: PUSH TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1200
    Line     10 (16:32:53)::  Get_Last Test: PUSH TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2200
    Line     11 (16:32:53)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1101
    Line     12 (16:32:53)::  Get_Last Test: PUSH TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3200
    Line     13 (16:32:53)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2101
    Line     14 (16:32:53)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3101
    Line     15 (16:32:53)::  Get_Last Test: PUSH TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4200
    Line     16 (16:32:53)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4101
    Line     17 (16:32:53)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1200
    Line     18 (16:32:53)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2200
    Line     19 (16:32:53)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1102
    Line     20 (16:32:53)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3200
    Line     21 (16:32:53)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2102
    Line     22 (16:32:53)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3102
    Line     23 (16:32:54)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4200
    Line     24 (16:32:54)::  Get_Last Test: PUSH TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1300
    Line     25 (16:32:54)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4102
    Line     26 (16:32:54)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1201
    Line     27 (16:32:54)::  Get_Last Test: PUSH TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2300
    Line     28 (16:32:54)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2201
    Line     29 (16:32:54)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1103
    Line     30 (16:32:54)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3201
    Line     31 (16:32:54)::  Get_Last Test: PUSH TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3300
    Line     32 (16:32:54)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2103
    Line     33 (16:32:54)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3103
    Line     34 (16:32:54)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4201
    Line     35 (16:32:54)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4103
    Line     36 (16:32:54)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1300
    Line     37 (16:32:54)::  Get_Last Test: PUSH TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4300
    Line     38 (16:32:54)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1202
    Line     39 (16:32:54)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2202
    Line     40 (16:32:54)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1104
    Line     41 (16:32:54)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2300
    Line     42 (16:32:54)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3202
    Line     43 (16:32:54)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3300
    Line     44 (16:32:54)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2104
    Line     45 (16:32:55)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3104
    Line     46 (16:32:55)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4104
    Line     47 (16:32:55)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4202
    Line     48 (16:32:55)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1301
    Line     49 (16:32:55)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4300
    Line     50 (16:32:55)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1203
    Line     51 (16:32:55)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1105
    Line     52 (16:32:55)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2203
    Line     53 (16:32:55)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2301
    Line     54 (16:32:55)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2105
    Line     55 (16:32:55)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3203
    Line     56 (16:32:55)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3301
    Line     57 (16:32:55)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3105
    Line     58 (16:32:55)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4203
    Line     59 (16:32:55)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1302
    Line     60 (16:32:55)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4105
    Line     61 (16:32:55)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4301
    Line     62 (16:32:55)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1204
    Line     63 (16:32:55)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2302
    Line     64 (16:32:55)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2204
    Line     65 (16:32:55)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1106
    Line     66 (16:32:55)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2106
    Line     67 (16:32:55)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3204
    Line     68 (16:32:55)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3302
    Line     69 (16:32:55)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3106
    Line     70 (16:32:56)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4106
    Line     71 (16:32:56)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4204
    Line     72 (16:32:56)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1303
    Line     73 (16:32:56)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4302
    Line     74 (16:32:56)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1205
    Line     75 (16:32:56)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1107
    Line     76 (16:32:56)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2205
    Line     77 (16:32:56)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2303
    Line     78 (16:32:56)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3205
    Line     79 (16:32:56)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3303
    Line     80 (16:32:56)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2107
    Line     81 (16:32:56)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3107
    Line     82 (16:32:56)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4107
    Line     83 (16:32:56)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4205
    Line     84 (16:32:56)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1304
    Line     85 (16:32:56)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4303
    Line     86 (16:32:56)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1206
    Line     87 (16:32:56)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1108
    Line     88 (16:32:56)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2206
    Line     89 (16:32:56)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3206
    Line     90 (16:32:56)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2304
    Line     91 (16:32:56)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3304
    Line     92 (16:32:56)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2108
    Line     93 (16:32:57)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3108
    Line     94 (16:32:57)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4206
    Line     95 (16:32:57)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1305
    Line     96 (16:32:57)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4108
    Line     97 (16:32:57)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4304
    Line     98 (16:32:57)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1207
    Line     99 (16:32:57)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2207
    Line    100 (16:32:57)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2305
    Line    101 (16:32:57)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1109
    Line    102 (16:32:57)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2109
    Line    103 (16:32:57)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3207
    Line    104 (16:32:57)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3305
    Line    105 (16:32:57)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3109
    Line    106 (16:32:57)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4109
    Line    107 (16:32:57)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4207
    Line    108 (16:32:57)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1306
    Line    109 (16:32:57)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4305
    Line    110 (16:32:57)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1208
    Line    111 (16:32:57)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1110
    Line    112 (16:32:57)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2208
    Line    113 (16:32:57)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3208
    Line    114 (16:32:57)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2306
    Line    115 (16:32:57)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3306
    Line    116 (16:32:57)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2110
    Line    117 (16:32:58)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3110
    Line    118 (16:32:58)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4208
    Line    119 (16:32:58)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1307
    Line    120 (16:32:58)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4110
    Line    121 (16:32:58)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4306
    Line    122 (16:32:58)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1209
    Line    123 (16:32:58)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2209
    Line    124 (16:32:58)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2307
    Line    125 (16:32:58)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1109
    Line    126 (16:32:58)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2109
    Line    127 (16:32:58)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3209
    Line    128 (16:32:58)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3307
    Line    129 (16:32:58)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3109
    Line    130 (16:32:58)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4109
    Line    131 (16:32:58)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4209
    Line    132 (16:32:58)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1308
    Line    133 (16:32:58)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4307
    Line    134 (16:32:58)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1210
    Line    135 (16:32:58)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1108
    Line    136 (16:32:58)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2210
    Line    137 (16:32:58)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2308
    Line    138 (16:32:58)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3210
    Line    139 (16:32:58)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3308
    Line    140 (16:32:58)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2108
    Line    141 (16:32:59)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3108
    Line    142 (16:32:59)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4210
    Line    143 (16:32:59)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1309
    Line    144 (16:32:59)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4108
    Line    145 (16:32:59)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4308
    Line    146 (16:32:59)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1209
    Line    147 (16:32:59)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2309
    Line    148 (16:32:59)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1107
    Line    149 (16:32:59)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2209
    Line    150 (16:32:59)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2107
    Line    151 (16:32:59)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3209
    Line    152 (16:32:59)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3309
    Line    153 (16:32:59)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3107
    Line    154 (16:32:59)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4107
    Line    155 (16:32:59)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4209
    Line    156 (16:32:59)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1310
    Line    157 (16:32:59)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4309
    Line    158 (16:32:59)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1208
    Line    159 (16:32:59)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1106
    Line    160 (16:32:59)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2208
    Line    161 (16:32:59)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3208
    Line    162 (16:32:59)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2310
    Line    163 (16:32:59)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2106
    Line    164 (16:32:59)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3310
    Line    165 (16:33:00)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3106
    Line    166 (16:33:00)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4106
    Line    167 (16:33:00)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4208
    Line    168 (16:33:00)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1309
    Line    169 (16:33:00)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4310
    Line    170 (16:33:00)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1207
    Line    171 (16:33:00)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1105
    Line    172 (16:33:00)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2207
    Line    173 (16:33:00)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3207
    Line    174 (16:33:00)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2309
    Line    175 (16:33:00)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2105
    Line    176 (16:33:00)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3309
    Line    177 (16:33:00)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3105
    Line    178 (16:33:00)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4105
    Line    179 (16:33:00)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4207
    Line    180 (16:33:00)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1308
    Line    181 (16:33:00)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4309
    Line    182 (16:33:00)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1206
    Line    183 (16:33:00)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1104
    Line    184 (16:33:00)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2206
    Line    185 (16:33:00)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3206
    Line    186 (16:33:00)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2308
    Line    187 (16:33:00)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3308
    Line    188 (16:33:00)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2104
    Line    189 (16:33:01)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3104
    Line    190 (16:33:01)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4104
    Line    191 (16:33:01)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4206
    Line    192 (16:33:01)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1307
    Line    193 (16:33:01)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4308
    Line    194 (16:33:01)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1205
    Line    195 (16:33:01)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1103
    Line    196 (16:33:01)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2205
    Line    197 (16:33:01)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3205
    Line    198 (16:33:01)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2307
    Line    199 (16:33:01)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3307
    Line    200 (16:33:01)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2103
    Line    201 (16:33:01)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3103
    Line    202 (16:33:01)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4205
    Line    203 (16:33:01)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4103
    Line    204 (16:33:01)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1306
    Line    205 (16:33:01)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4307
    Line    206 (16:33:01)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1204
    Line    207 (16:33:01)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2204
    Line    208 (16:33:01)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2306
    Line    209 (16:33:01)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1102
    Line    210 (16:33:01)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2102
    Line    211 (16:33:01)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3204
    Line    212 (16:33:01)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3306
    Line    213 (16:33:01)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3102
    Line    214 (16:33:02)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4102
    Line    215 (16:33:02)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4204
    Line    216 (16:33:02)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1305
    Line    217 (16:33:02)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4306
    Line    218 (16:33:02)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1203
    Line    219 (16:33:02)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1101
    Line    220 (16:33:02)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2203
    Line    221 (16:33:02)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2305
    Line    222 (16:33:02)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3203
    Line    223 (16:33:02)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2101
    Line    224 (16:33:02)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3305
    Line    225 (16:33:02)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3101
    Line    226 (16:33:02)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4101
    Line    227 (16:33:02)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4203
    Line    228 (16:33:02)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1304
    Line    229 (16:33:02)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4305
    Line    230 (16:33:02)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1202
    Line    231 (16:33:02)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1100
    Line    232 (16:33:02)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2202
    Line    233 (16:33:02)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3202
    Line    234 (16:33:02)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2304
    Line    235 (16:33:02)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3304
    Line    236 (16:33:02)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2100
    Line    237 (16:33:03)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3100
    Line    238 (16:33:03)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4100
    Line    239 (16:33:03)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4202
    Line    240 (16:33:03)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1303
    Line    241 (16:33:03)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4304
    Line    242 (16:33:03)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1201
    Line    243 (16:33:03)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1101
    Line    244 (16:33:03)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2201
    Line    245 (16:33:03)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3201
    Line    246 (16:33:03)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2303
    Line    247 (16:33:03)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2101
    Line    248 (16:33:03)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3303
    Line    249 (16:33:03)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3101
    Line    250 (16:33:03)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4101
    Line    251 (16:33:03)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4201
    Line    252 (16:33:03)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1302
    Line    253 (16:33:03)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4303
    Line    254 (16:33:03)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1200
    Line    255 (16:33:03)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1102
    Line    256 (16:33:03)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2200
    Line    257 (16:33:03)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3200
    Line    258 (16:33:03)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2302
    Line    259 (16:33:03)::  Get_Last Test: HOLD TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2102
    Line    260 (16:33:03)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3302
    Line    261 (16:33:04)::  Get_Last Test: HOLD TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3102
    Line    262 (16:33:04)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4200
    Line    263 (16:33:04)::  Get_Last Test: HOLD TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4102
    Line    264 (16:33:04)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1301
    Line    265 (16:33:04)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4302
    Line    266 (16:33:04)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1201
    Line    267 (16:33:04)::  Get_Last Test: HOLD TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1103
    Line    268 (16:33:04)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2201
    Line    269 (16:33:04)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2301
    Line    270 (16:33:04)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3201
    Line    271 (16:33:04)::  Get_Last Test: RELEASE TP:10001:6:2, TP Index: 1, Btn Index: 1, Value: 1104
    Line    272 (16:33:04)::  Get_Last Test: RELEASE TP:10002:6:2, TP Index: 2, Btn Index: 2, Value: 2103
    Line    273 (16:33:04)::  Get_Last Test: RELEASE TP:10003:6:2, TP Index: 3, Btn Index: 3, Value: 3103
    Line    274 (16:33:04)::  Get_Last Test: HOLD TP:10003:8:2, TP Index: 3, Btn Index: 3, Value: 3301
    Line    275 (16:33:04)::  Get_Last Test: RELEASE TP:10004:6:2, TP Index: 4, Btn Index: 4, Value: 4103
    Line    276 (16:33:04)::  Get_Last Test: HOLD TP:10001:7:2, TP Index: 1, Btn Index: 1, Value: 1202
    Line    277 (16:33:04)::  Get_Last Test: HOLD TP:10004:7:2, TP Index: 4, Btn Index: 4, Value: 4201
    Line    278 (16:33:04)::  Get_Last Test: HOLD TP:10001:8:2, TP Index: 1, Btn Index: 1, Value: 1300
    Line    279 (16:33:04)::  Get_Last Test: HOLD TP:10004:8:2, TP Index: 4, Btn Index: 4, Value: 4301
    Line    280 (16:33:04)::  Get_Last Test: HOLD TP:10002:8:2, TP Index: 2, Btn Index: 2, Value: 2300
    Line    281 (16:33:04)::  Get_Last Test: HOLD TP:10002:7:2, TP Index: 2, Btn Index: 2, Value: 2202
    Line    282 (16:33:04)::  Get_Last Test: HOLD TP:10003:7:2, TP Index: 3, Btn Index: 3, Value: 3202
    
    
    VALUE KEY:_____

    TP 10001 = 1xxx
    TP 10002 = 2xxx
    TP 10003 = 3xxx
    TP 10004 = 4xxx

    TEST 1 = x1xx
    TEST 2 = x2xx
    TEST 3 = x3xx
    TEST 4 = x4xx

    VALUES = xx?? (where ?? = some value)
  • jjamesjjames Posts: 2,908
    Thumbs up!

    Okay, after a long day - I've finally put this to test. One of the reasons why I abandoned HOLD statements in code (unless it was for a single panel only) was the fact that if one panel was HOLDing, and another panel came in - the GET_LAST values were of that of the last panel that entered.

    There was a work around posted here: http://www.amxforums.com/showpost.php?p=39440&postcount=23, this worked perfectly and perhaps would be considered a "more elegant" approach. Because it worked, this has been the approach I've taken over the past several years.

    Before this firmware, the following code would choke.
    BUTTON_EVENT[dv_TP,nVOLUME_BTNS]
    {
    	PUSH:
    	{
    		STACK_VAR INTEGER nPNL
    		STACK_VAR INTEGER nAV_Zone
    		STACK_VAR INTEGER nIND;
    		nIND = GET_LAST(nVOLUME_BTNS);
    		nPNL = GET_LAST(dv_TP)
    		
    		nAV_Zone = nPNL_AV[nPNL] // ASSIGN CURRENT AV ZONE
    		
    		IF (nAV_ZONE_SOURCE[nAV_Zone] AND (AudioZone[nAV_Zone].Ramp == 0))
    		{
    			AudioZone[nAV_Zone].Ramp = nIND
    			
    			ON[BUTTON.INPUT]
    			fnADJUST_VOLUME(nAV_Zone,AudioZone[nAV_Zone].Ramp)
    			SWITCH(nIND)
    			{
    				CASE 1:SEND_STRING 0,"'Zone = ',ITOA(nAV_Zone),' :: Volume Up'";
    				CASE 2:SEND_STRING 0,"'Zone = ',ITOA(nAV_Zone),' :: Volume Down'";
    				CASE 3:SEND_STRING 0,"'Zone = ',ITOA(nAV_Zone),' :: Volume Mute'";
    			}       
    		}
    	}
    	
    	HOLD[2,REPEAT]:
    	{
    		STACK_VAR INTEGER nPNL
    		STACK_VAR INTEGER nIND;
    		STACK_VAR INTEGER nAV_Zone
    		nIND = GET_LAST(nVOLUME_BTNS);
    		nPNL = GET_LAST(dv_TP)
    		
    		nAV_Zone = nPNL_AV[nPNL] // ASSIGN CURRENT AV ZONE
    		
    		IF(BUTTON.HOLDTIME > 5)
    		{
    			IF(nIND != 3)
    			{
    				fnADJUST_VOLUME(nAV_Zone,AudioZone[nAV_Zone].Ramp)
    				
    				SWITCH(nIND)
    				{
    					CASE 1:SEND_STRING 0,"'Zone = ',ITOA(nAV_Zone),' :: Volume Up'";
    					CASE 2:SEND_STRING 0,"'Zone = ',ITOA(nAV_Zone),' :: Volume Down'";
    				}   
    			}
    		}
    	}
    	
    	RELEASE:
    	{
    		STACK_VAR INTEGER nPNL
    		STACK_VAR INTEGER nIND;
    		STACK_VAR INTEGER nAV_Zone
    		nIND = GET_LAST(nVOLUME_BTNS);
    		nPNL = GET_LAST(dv_TP)
    		
    		nAV_Zone = nPNL_AV[nPNL] // ASSIGN CURRENT AV ZONE
    		AudioZone[nAV_Zone].Ramp = 0;
    		OFF[BUTTON.INPUT];
    	}
    }
    

    However, now it works perfectly. Here are the results when two panels start to HOLD (panel one volumes up, panel two volumes down.) This snippet here shows that it works with two panels from one array and two different buttons from another array.
    Note: Tested on an NI-700
    Line      1 (21:09:53.481)::  Zone = 14 :: Volume Down
    Line      2 (21:09:53.681)::  Zone = 14 :: Volume Down
    Line      3 (21:09:53.883)::  Zone = 14 :: Volume Down
    Line      4 (21:09:54.082)::  Zone = 14 :: Volume Down
    Line      5 (21:09:54.283)::  Zone = 14 :: Volume Down
    Line      6 (21:10:00.556)::  Zone = 40 :: Volume Up
    Line      7 (21:10:00.749)::  Zone = 40 :: Volume Up
    Line      8 (21:10:00.949)::  Zone = 40 :: Volume Up
    Line      9 (21:10:01.150)::  Zone = 40 :: Volume Up
    Line     10 (21:10:01.350)::  Zone = 40 :: Volume Up
    Line     11 (21:10:04.073)::  Zone = 14 :: Volume Down
    Line     12 (21:10:04.275)::  Zone = 14 :: Volume Down
    Line     13 (21:10:04.474)::  Zone = 14 :: Volume Down
    Line     14 (21:10:04.675)::  Zone = 14 :: Volume Down
    Line     15 (21:10:04.735)::  Zone = 40 :: Volume Up
    Line     16 (21:10:04.875)::  Zone = 14 :: Volume Down
    Line     17 (21:10:04.942)::  Zone = 40 :: Volume Up
    Line     18 (21:10:05.076)::  Zone = 14 :: Volume Down
    Line     19 (21:10:05.143)::  Zone = 40 :: Volume Up
    Line     20 (21:10:05.276)::  Zone = 14 :: Volume Down
    Line     21 (21:10:05.327)::  Zone = 40 :: Volume Up
    Line     22 (21:10:05.477)::  Zone = 14 :: Volume Down
    Line     23 (21:10:05.527)::  Zone = 40 :: Volume Up
    Line     24 (21:10:05.677)::  Zone = 14 :: Volume Down
    Line     25 (21:10:05.728)::  Zone = 40 :: Volume Up
    Line     26 (21:10:05.878)::  Zone = 14 :: Volume Down
    Line     27 (21:10:05.930)::  Zone = 40 :: Volume Up
    Line     28 (21:10:06.078)::  Zone = 14 :: Volume Down
    Line     29 (21:10:06.129)::  Zone = 40 :: Volume Up
    Line     30 (21:10:06.279)::  Zone = 14 :: Volume Down
    Line     31 (21:10:06.329)::  Zone = 40 :: Volume Up
    Line     32 (21:10:06.479)::  Zone = 14 :: Volume Down
    Line     33 (21:10:06.530)::  Zone = 40 :: Volume Up
    Line     34 (21:10:06.680)::  Zone = 14 :: Volume Down
    Line     35 (21:10:06.731)::  Zone = 40 :: Volume Up
    Line     36 (21:10:06.880)::  Zone = 14 :: Volume Down
    Line     37 (21:10:06.931)::  Zone = 40 :: Volume Up
    Line     38 (21:10:07.081)::  Zone = 14 :: Volume Down
    Line     39 (21:10:07.133)::  Zone = 40 :: Volume Up
    Line     40 (21:10:07.281)::  Zone = 14 :: Volume Down
    Line     41 (21:10:07.332)::  Zone = 40 :: Volume Up
    Line     42 (21:10:07.482)::  Zone = 14 :: Volume Down
    Line     43 (21:10:07.532)::  Zone = 40 :: Volume Up
    Line     44 (21:10:07.682)::  Zone = 14 :: Volume Down
    Line     45 (21:10:07.733)::  Zone = 40 :: Volume Up
    Line     46 (21:10:07.883)::  Zone = 14 :: Volume Down
    

    On line one, panel 2 volumed down alone. On line six, panel 1 volumed up alone. On line 11, panel 2 volumed down until line 15 when panel 1 joined going in the opposite direction.

    This works how I expected GET_LAST to work in a HOLD, though never has until now. I plan on using this in my upcoming "very large" job. I of course will have a backup plan should this not work for whatever reason, but I do not expect having to call up "Plan B."

    Kudos goes to the firmware engineers at AMX. I have not tested any other "fixes" or "features" of this new firmware, so it might be a little early to say it's perfect - but this alone has me sold until (hopefully not) a "show stopper" is found (highly unlikely.)

    Next up: GET_LAST for a TIMELINE_EVENT. ;)
  • a_riot42a_riot42 Posts: 1,624
    Nice to see it put to the test and pass. I have always used get_last in all my code with holds. I only realized that it didn't work quite right while doing a large project where each panel could control every source. Fortunately it wasn't a significant enough bug for a client to notice but its good to know that upgrading to the new firmware will clear this up at last. Someone at AMX is listening :)
    Paul
  • Listening? Uh, what did you say? Just kidding. This one has always bugged me too. Glad we could help.
  • a_riot42a_riot42 Posts: 1,624
    rgelling wrote: »
    Listening? Uh, what did you say? Just kidding. This one has always bugged me too. Glad we could help.

    Now if you could just change the way ip_server_open works that would make my day. Currently after a connection is made the port goes offline and stays offline and needs to be reopened. All the normal server sockets I know stay open and listening until they are closed programmtically. For some reason AMX server sockets operate differently and are closed automatically after a read is done from the socket.
    Paul
  • Cheers Amx and all you guys for testing this out, now I shouldnt have any problems in the multiple Metreau KP system I am doing, where 95% of the buttons are on a hold to prevent accidental switching or linking etc.
  • a_riot42 wrote: »
    Now if you could just change the way ip_server_open works that would make my day. Currently after a connection is made the port goes offline and stays offline and needs to be reopened. All the normal server sockets I know stay open and listening until they are closed programmtically. For some reason AMX server sockets operate differently and are closed automatically after a read is done from the socket.
    Paul

    Sorry, late getting to this thread. The GET_LAST for HOLD issue was solved in the FW by retaining a snapshot of the GET_LAST indexes from the push event inside the constructs keeping track of each extended push (i.e. hold) so that when the HOLD duration triggers, the original indexes are available for retrieval by the GET_LAST call.

    And on the side note regarding IP_SERVER_OPEN, yes, I would agree that NetLinx Server sockets don't work like server sockets in other languages. But given the single threaded architecture of NetLinx and its D:P:S centric communication methods the existing APIs seemed the most logical approach to providing Server Socket functionality to a user group that might not be the most versed in network programming. The approach was taken that each IP_SERVER_OPEN and the D:P:S associated with it represents a "potential" connection by a client. Until that connection is made, an IP_SERVER_CLOSE on the D:P:S will close the servers socket. But once a client socket accept occurs in the underlying firmware, the client socket is then tied to the D:P:S leaving no ties to the original server socket...so it must be closed. If it was not closed and something happened on the underlying server socket, there would be no way to relay this back to the NetLinx application (ONERROR) since the D:P:S is now tied to the client socket. This approach still allows multiple "potential" connections on the same IP port by calling IP_SERVER_OPEN with different D:P:S's using the same IP port, thereby allowing 'x' simultaneous connections. But it does require the user oversee the management of "potential" connections and their D:P:S's directly. (opening, closing, etc)
  • a_riot42a_riot42 Posts: 1,624
    But given the single threaded architecture of NetLinx and its D:P:S centric communication methods the existing APIs seemed the most logical approach to providing Server Socket functionality to a user group that might not be the most versed in network programming.

    Thanks for the insight. Yes with one thread, a multi-threaded server isn't really possible. Is writing server code in Duet any better than Netlinx? I wonder if Java's socket functionality would help with this kind of issue.
    Paul
  • Yes, Server sockets works normal in Duet. Most standard Java Server code blocks will work in the Duet implementation of server sockets.
  • a_riot42a_riot42 Posts: 1,624
    ipssheldon wrote: »
    Yes, Server sockets works normal in Duet. Most standard Java Server code blocks will work in the Duet implementation of server sockets.

    Cool, thanks I will check that out.
    Paul
Sign In or Register to comment.