#include "apdefap.h"

int gscAction( void )
{
    int cntr;
    int cntr2;
    int randomNumber;
    int triggerValue = (int)GetTagFloat("PM3_CrmTrigger");
    int Sequential = (int)GetTagFloat("SequentialCounter");
    char QCTrigger[20];

    printf("Checking Prep QC\r\n");

    if(triggerValue == 0 && GetTagBit("StandardTriggerReset"))
    {
        SetTagBit("StandardTriggerReset",0);
        printf("Clearing Trigger reset.\r\n");
    }

    switch(triggerValue)
    {
        case 1:
            SetTagBit("TrayQCStartReg_1",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 1\r\n");
        break;
        case 2:
            SetTagBit("TrayQCStartReg_2",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 2\r\n");
        break;
        case 3:
            SetTagBit("TrayQCStartReg_3",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 3\r\n");
        break;
        case 4:
            SetTagBit("TrayQCStartReg_4",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 4\r\n");
        break;
        case 5:
            SetTagBit("TrayQCStartReg_5",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 5\r\n");
        break;
        case 6:
            SetTagBit("TrayQCStartReg_6",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 6\r\n");
        break;
        case 7:
            SetTagBit("TrayQCStartReg_7",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 7\r\n");
        break;
        case 8:
            SetTagBit("TrayQCStartReg_8",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 8\r\n");
        break;
        case 9:
            SetTagBit("TrayQCStartReg_9",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 9\r\n");
        break;
        case 10:
            SetTagBit("TrayQCStartReg_10",1);	//Return-Type: BOOL 
            SetTagFloat("PM3_CrmTrigger",0);
            SetTagBit("StandardTriggerReset",1);
            printf("Triggered QC 10\r\n");
        break;
        case 11: // Random
            for(cntr=1; cntr<=20; cntr++) // Try to get a random CRM 20 times. Else give up.
            {
                randomNumber = (rand() % 10) + 1;
                sprintf(QCTrigger,"QC%d_Active",randomNumber);
                if(GetTagBit(QCTrigger)) // If CRM is active is should be good to go
                {
                    sprintf(QCTrigger,"TrayQCStartReg_%d",randomNumber);
                    SetTagBit(QCTrigger,1);	//Return-Type: BOOL 
                    SetTagFloat("PM3_CrmTrigger",0);
                    SetTagBit("StandardTriggerReset",1);
                    printf("Triggered QC %d\r\n",randomNumber);
                    break;
                }
            }
        break;
        case 12: // Sequential key=SequentialCounter
            for(cntr2=1; cntr2<=2; cntr2++) // Try two attemps to get a sequential CRM
            {
                for(cntr=(Sequential + 1); cntr<=10; cntr++) // Try to get a sequential CRM 10 times.
                {
                    sprintf(QCTrigger,"QC%d_Active",cntr);
                    if(GetTagBit(QCTrigger)) // If CRM is active is should be good to go
                    {
                        sprintf(QCTrigger,"TrayQCStartReg_%d",cntr);
                        SetTagBit(QCTrigger,1);	//Return-Type: BOOL 
                        SetTagFloat("SequentialCounter",cntr);
                        SetTagFloat("PM3_CrmTrigger",0);
                        SetTagBit("StandardTriggerReset",1);
                        printf("Triggered QC %d\r\n",cntr);
                        return 0; 
                        //break;
                    }
                }
                Sequential = 0; // If I couldn't fine a CRM on the first pass set to zero and try again.
            }
            SetTagFloat("SequentialCounter",0); // Shouldn't end up here but just in case.
        break;
    }

return 0; 
}
