www.pudn.com > Lab534-VideoMotionDetect.rar > thrControl.c
/* * Copyright 2002 by Texas Instruments Incorporated. * All rights reserved. Property of Texas Instruments Incorporated. * Restricted rights to use, duplicate or disclose this code are * granted through contract. * */ /* * ======== thrControl.c ======== * This file shows an example of sending messages from one thread to the * other using mailbox. */ #include// DSP/BIOS includes #include #include // RF includes #include // application includes #include "appResources.h" // application-wide common info #include "appThreads.h" // thread-wide common info #include "thrControl.h" #include "process/thrProcess.h" /* contains thread specific information */ // global variables to be modified by GEL #define NUMCONTROLS 4 //Structure for external control variables typedef struct ExternalControl { Int setReference; //0 or 1, to set reference frame Int yValue; //New color values. All three, Int crValue; //Y, Cr, and Cb are passed together Int cbValue; //in one message } ExternalControl; ExternalControl externalControl; // GEL script writes here ExternalControl externalControlPrev; // this is a local copy /* * ======== thrControlInit ======== * */ Void thrControlInit() { UTL_assert( NUMCONTROLS == 4 ); // set the default Reference Frame and Colors externalControl.setReference = 1; //Set first frame as reference externalControl.yValue = 0; //Initial color is red externalControl.crValue = 39; //(y,cr,cb) = (0,39,255) externalControl.cbValue = 255; externalControlPrev = externalControl; } /* * ======== thrControlStartup ======== * */ Void thrControlStartup() { CtrlMsg txMsg1; CtrlMsg txMsg2; //Set initial reference frame to be 1st frame. //Only need to send message that we want a new //reference frame. txMsg2.cmd = MSGNEWREFERENCE; txMsg2.arg1 = 0; txMsg2.arg2 = 0; MBX_post(&mbxProcess, &txMsg2, 0); //Post Message for Color Value. We encode the (Cr,Cb) //pair into one value, so that we do not have to //post 3 messages. txMsg1.cmd = MSGNEWCOLOR; txMsg1.arg1 = externalControl.yValue; txMsg1.arg2 = (externalControl.crValue << 8) + externalControl.cbValue; MBX_post(&mbxProcess, &txMsg1, 0); } /* * ======== thrControlRun ======== * * Main function of Control task. */ Void thrControlRun() { CtrlMsg txMsg1; CtrlMsg txMsg2; // Main loop while (TRUE) { //See if user requested new reference frame if (externalControl.setReference) { txMsg1.cmd = MSGNEWREFERENCE; txMsg1.arg1 = 0; txMsg1.arg2 = 0; MBX_post(&mbxProcess, &txMsg1, 0); //Reset setReference to FALSE externalControl.setReference = 0; } //See if user requested new color //We encode (Cr,Cb) pair into one value so that //we do not have to post 3 messages if ((externalControl.yValue != externalControlPrev.yValue) || (externalControl.crValue != externalControlPrev.crValue) || (externalControl.cbValue != externalControlPrev.cbValue)) { txMsg2.cmd = MSGNEWCOLOR; txMsg2.arg1 = externalControl.yValue; txMsg2.arg2 = (externalControl.crValue << 8) + externalControl.cbValue; MBX_post(&mbxProcess, &txMsg2, 0); } externalControlPrev = externalControl; // suspend self for 100 ticks, and then poll again TSK_sleep( 100 ); } }