Example #1
0
int SendForceIFrameMsg(unsigned char nValue)
{
	MSG_BUF msgbuf;
	unsigned char* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_SET_IFRAME;
	ptr = (unsigned char*)&msgbuf.mem_info;
	*ptr = nValue;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #2
0
/**
 * @brief  day / night mode setting for UI
 *
 *
 * @param   nDayNight    0 : night mode 	1: day mode
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
int SetDayNight(unsigned char nDayNight)
{
	MSG_BUF msgbuf;
	unsigned char* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_SET_DAY_NIGHT;
	ptr = (unsigned char*)&msgbuf.mem_info;
	*ptr = nDayNight;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #3
0
/**
 * @brief  Motion Enable mode setting for UI
 *
 *
 * @param   enableVal  0: Enable		1:Disable
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
int ApproSetMotion(ApproMotionPrm* pMotionPrm)
{
	MSG_BUF msgbuf;
	void* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_SET_MOTION;
	ptr = (void*)&msgbuf.mem_info;
	memcpy(ptr, pMotionPrm, sizeof(ApproMotionPrm));
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #4
0
int SetDateTimeFormat(DateTimePrm* datetimeParam)
{
	MSG_BUF msgbuf;
	unsigned char* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_SET_DATETIMEPRM;
	ptr = (unsigned char*)&msgbuf.mem_info;
	memcpy(ptr, datetimeParam, sizeof(DateTimePrm));
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #5
0
/**
 * @brief  Message driver for waiting newframe (Do not use now)
 *
 *
* @param   fmt    stucture pointer of frame information, defined at Msg_def.h
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
FrameInfo_t WaitNewFrame(FrameFormat_t fmt)
{
	MSG_BUF msgbuf;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_GET_NEW_FRAME;
	msgbuf.frame_info.format = fmt;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	if(msgbuf.ret != 0)
		msgbuf.frame_info.serial_no = -1;
	return msgbuf.frame_info;
}
Example #6
0
int SetOSDWindow(int nValue)
{
	MSG_BUF msgbuf;
	int* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_SET_OSDWINDOW;
	ptr = (int*)&msgbuf.mem_info;
	*ptr = nValue;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #7
0
int SetRTSPStreamingON(int nExtFunc)
{
	char opt[32] = "./wis-streamer";
	int ret = 0;

	if(((int)(~RTSP_FUNC_MASK)) & nExtFunc){
		fprintf(stderr,"ERROR: Invalid parameter to Control RTSP!!!\n");
		return -1;
	}
	SemWait(hndlRTSP_Sem);
	if(gRTSP_Mode & RTSP_RUN){
		if((gRTSP_Mode & RTSP_FUNC_MASK) == nExtFunc){
			/* run in the same mode */
			SemRelease(hndlRTSP_Sem);
			return 0;
		}else {
			/* run in other mode */
			ret = TurnOffRTSPStreaming();
		}
	}
	if(RTSP_MUTE & nExtFunc)
		strcat(opt, " -s");

	if(RTSP_AAC & nExtFunc)
		strcat(opt, " -a");

	if(RTSP_SVC & nExtFunc)
		strcat(opt, " -v");

	if(RTSP_MULTICAST & nExtFunc)
		strcat(opt, " -m");

	strcat(opt, "&\n");

	//printf(opt);
	if(ret == 0)
		ret = system(opt);
	if(ret == 0){
		gRTSP_Mode = RTSP_RUN | nExtFunc;
		sleep(2);
	}
	R_DB("gRTSP_Mode = %d\n", gRTSP_Mode);
	SemRelease(hndlRTSP_Sem);
	return ret;
}
Example #8
0
int ResumePlaybackChMsg(unsigned char* nValue)//add by sxh
{
	MSG_BUF msgbuf;
	unsigned char* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_RESUME_PLAYBACKCH;
	ptr = (unsigned char*)&msgbuf.mem_info;
	memcpy(ptr, nValue, strlen(nValue));
	printf("ResumePlaybackChMsg:ptr=%s\n",ptr);
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #9
0
int SendFaceDetectMsg(FaceDetectParam* faceParam)
{
	MSG_BUF msgbuf;
	void* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_SET_FDETECT;
	ptr = (void*)&msgbuf.mem_info;
	memcpy(ptr, faceParam, sizeof(FaceDetectParam));
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;

}
Example #10
0
File: proc.c Project: mios16/CPE159
void PrintDriver() 
{
	int i, code;
	char *p;
	msg_t temp_msg;
	

 	printing_semaphore = SemGet(0);	//request semaphore printing_semaphore, limit 0.

	// reset printer (check printer power, cable, and paper), it will jitter
   	outportb(LPT1_BASE+LPT_CONTROL, PC_SLCTIN);   // CONTROL reg, SeLeCT INterrupt
   	code = inportb(LPT1_BASE+LPT_STATUS);         // read STATUS
   	for(i = 0; i < 50; i++)	//loop 50 times of IO_DELAY(); 		
   	{
		IO_DELAY();
  	}	        
   	outportb(LPT1_BASE+LPT_CONTROL, PC_INIT|PC_SLCTIN|PC_IRQEN); // IRQ ENable
   	Sleep(1);	//Sleep for a second, needs time resetting

	while(1)//forever loop:
	{
		temp_msg.recipient = running_pid;	
		MsgRcv(&temp_msg);//receive a message, get if msg to print *******
		p = temp_msg.data;
		cons_printf("PrintDriver (PID %d) now prints...\n", GetPid()); 	//a notification msg (match how demo runs)

    		//set p to point to start of character string in message
      		while (*p != '\0')	//"what p points to" is not null/empty/(char)0, 
         	{	
			outportb(LPT1_BASE+LPT_DATA, *p);       // write char to DATA reg
         		code = inportb(LPT1_BASE+LPT_CONTROL);  // read CONTROL reg
         		outportb(LPT1_BASE+LPT_CONTROL, code|PC_STROBE); // write CONTROL, STROBE added
         		for(i = 0; i < 50; i++)	   //do 50 times of IO_DELAY		
   			{
				IO_DELAY();
  			}	       
         		outportb(LPT1_BASE+LPT_CONTROL, code);  // send back original CONTROL
         		SemWait(printing_semaphore);//semaphore-wait on the printing semaphore

         		p++;	//move p to next character to print
      		}	
   	}	
}	
Example #11
0
/**
 * @brief  Message driver for getting MPEG4 VOL data
 *
 *
 * @param   pVolBuf   ouput buffer for getting MPEG4 VOL data
 *
 * @param   fmt_type    frame type ID : FMT_MJPEG, FMT_MPEG4 , FMT_MPEG4_EXT, FMT_AUDIO, defined at Msg_def.h
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
int GetVolInfo(FrameInfo_t *pFrame, int fmt_type)
{
	MSG_BUF msgbuf;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_GET_VOL;
	msgbuf.frame_info.format = fmt_type;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);

	pFrame->offset 	= msgbuf.frame_info.offset;
	pFrame->size 	= msgbuf.frame_info.size;

	return msgbuf.frame_info.size;
}
Example #12
0
/**
 * @brief  Message driver for getting current frame information
 *
 *
* @param   fmt    stucture of frame information, defined at Msg_def.h
 *
 *
 *
 */
FrameInfo_t GetCurrentFrame(FrameFormat_t fmt)
{
	MSG_BUF msgbuf;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_GET_CUR_FRAME;
	msgbuf.frame_info.format = fmt;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);

	printf("************** msgbuf.ret: %d\n",msgbuf.ret);//add by sxh
	if(msgbuf.ret != 0)
		msgbuf.frame_info.serial_no = -1;
	return msgbuf.frame_info;
}
Example #13
0
int SetAvOsdLogoEnable(int enable)
{
	MSG_BUF msgbuf;
	int* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;

	msgbuf.cmd = MSG_CMD_SET_OSDLOGO_EN;

	ptr = (int*)&msgbuf.mem_info;
	*ptr = enable;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #14
0
/**
 * @brief  Bitrate setting for UI
 *
 *
 * @param   stream    	0: stream1 720P \n
*				1: stream2 SIF \n
*
 * @param   nValue    	64~8000
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
int SetEncBitrate(unsigned char stream, int nValue)
{
	MSG_BUF msgbuf;
	int* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	if (stream == 0)
		msgbuf.cmd = MSG_CMD_SET_BITRATE1;
	else
		msgbuf.cmd = MSG_CMD_SET_BITRATE2;
	ptr = (int*)&msgbuf.mem_info;
	*ptr = nValue;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #15
0
/**
 * @brief  PTZ  setting  for UI
 *
 *
 * @param   nValue    		0: PTZ_ZOOM_IN \n
*					1: PTZ_ZOOM_OUT \n
*					2: PTZ_PAN_UP \n
*					3: PTZ_PAN_DOWN \n
*					4: PTZ_PAN_LEFT \n
*					5: PTZ_PAN_RIGHT \n
*					6: PTZ_INIT_4X\n
*					7: PTZ_ZOOM_EMPTY \n
*					8: PTZ_ZOOM_RESET
 *
 *@note This function only work at sensor output is VGA
 * @return 0 is ok and -1 is error
 *
 *
 */
int SetPtz(int nValue)
{
	MSG_BUF msgbuf;
	unsigned char* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_PTZ;
	ptr = (unsigned char*)&msgbuf.mem_info;
	*ptr = nValue;
	SemWait(hndlApproDrvSem);
       printf("Setptz:nValue:%s!\n",nValue);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
    	printf("Setptz Done:nValue:%s!\n",nValue);
	printf("SetptzDone!\n");
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #16
0
int GetPbRecDayDataMsg(unsigned char* nValue)//add by sxh
{
	MSG_BUF msgbuf;
	unsigned char* ptr;
	printf("GetPbRecHourDataMsg:nValue:%s!\n",nValue);
	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;
	msgbuf.cmd = MSG_CMD_GET_PBRECDAY;
	ptr = (unsigned char*)&msgbuf.mem_info;
	memcpy(ptr, nValue, 32);
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	ptr = (unsigned char*)&msgbuf.mem_info;
	memcpy(nValue, ptr, 32);
	printf("GetPbRecHourDataMsg Done:nValue:%s!\n",nValue);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #17
0
int SetClipSnapName(char* strText, int nLength)
{
	MSG_BUF msgbuf;
	int* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;

	msgbuf.cmd = MSG_CMD_SET_CLICKNAME;

	ptr = (int*)&msgbuf.mem_info;
	*ptr = nLength;
	memcpy(++ptr, strText, nLength);
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
int LoopCommand2(ThreadData* aThreadData)
	{	
	int j = 0,retval=0;
	for(int i=0; i < 1000; i += 100)
		{
		j++;
		if(j == 255)
			{
			j = 0;
			#ifdef WINDOWS
				printf("%dLooping Id:  %d Cmd1 %d Cmd2 %d\n",i,aData->iSelf,Command1, Command2);
			#else
				{
				//MSG(_L("%dLooping Id:  %d Cmd1 %d Cmd2 %d\n"),i,aData->iSelf,Command1, Command2);
				}
			#endif
			}
		retval = SemPost(aThreadData);
		retval = SemWait(aThreadData);
		}
	return retval;
	}
Example #19
0
/**
* @brief Set alarm duration
* @return 0 on success.
*/
int Set_AlarmDuration(int durationTime)
{
	int alarm_count = 0;
	if(durationTime == 0)
	{
		alarm_count = 10;
	}else if(durationTime == 1){
		alarm_count = 30;
	}else if(durationTime == 2){
		alarm_count = 60;
	}else if(durationTime == 3){
		alarm_count = 300;
	}else if(durationTime == 4){
		alarm_count = 600;
	}else{
		alarm_count = -1;
	}
	SemWait(hGIOSem);
	alarmDurationTime = alarm_count;
	DBG("Set_AlarmDuration = %d\n",alarmDurationTime);
	SemRelease(hGIOSem);
	return 0;
}
Example #20
0
int SetCodecAdvPrmMsg(int id, CodecAdvPrm* codecAdvPrm)
{
	MSG_BUF msgbuf;
	unsigned char* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;

	if(id==0)
		msgbuf.cmd = MSG_CMD_SET_ADVCODECPRM1;
	else if(id==1)
		msgbuf.cmd = MSG_CMD_SET_ADVCODECPRM2;
	else if(id==2)
		msgbuf.cmd = MSG_CMD_SET_ADVCODECPRM3;

	ptr = (unsigned char*)&msgbuf.mem_info;
	memcpy(ptr, codecAdvPrm, sizeof(CodecAdvPrm));
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #21
0
int main()
{
	PutString("\n-----------------------------------------\n");
	PutString("Lancement du test testBcpThreads : \n");
	PutString("Lance plusieurs threads affichant un nombre different avec semaphore pour l'acces.\n");
	PutString("-----------------------------------------\n");
	int i;
	int nb[NB_THREADS];
	SemInit(&s, 1);
	for(i = 0 ; i < NB_THREADS ; i++)
	{
		nb[i] = i;
		if(UserThreadCreate(f, &nb[i]) == -1)
		{
			SemWait(&s);
			PutString("Echec de creation du thread : ");
			PutInt(i);
			PutString("\n");
			SemPost(&s);
		}
	}
	PutString("thread main se termine\n");
    return 0;
}
Example #22
0
/**
* @brief Set alarm audio count
* @param alarmDuration [i] alarm duration
* @return 0 on success.
*/
int setAudioCount(int alarmDuration)
{
	int alarm_count;
	if(alarmDuration == 0){
		alarm_count = 2;
	}else if(alarmDuration == 1){
		alarm_count = 6;
	}else if(alarmDuration == 2){
		alarm_count = 12;
	}else if(alarmDuration == 3){
		alarm_count = 60;
	}else if(alarmDuration == 4){
		alarm_count = 120;
	}else if(alarmDuration == -1){
		alarm_count = 0;
	}else{
		alarm_count = 1999;
	}
	SemWait(audioSem);
	audio_count = alarm_count;
	DBG("setAudioCount=%d\n",audio_count);
	SemRelease(audioSem);
	return 0;
}
Example #23
0
int SetVNFStatus(unsigned char stream, unsigned char nValue)
{
	MSG_BUF msgbuf;
	unsigned int* ptr;

	memset(&msgbuf,0,sizeof(msgbuf));
	msgbuf.Des = MSG_TYPE_MSG1;
	msgbuf.Src = PROC_MSG_ID;

	if (stream == 0)
		msgbuf.cmd = MSG_CMD_SET_VNFSTATUS1;
	else if (stream == 1)
		msgbuf.cmd = MSG_CMD_SET_VNFSTATUS2;
	else if (stream == 2)
		msgbuf.cmd = MSG_CMD_SET_VNFSTATUS3;

	ptr = (unsigned int*)&msgbuf.mem_info;
	*ptr = nValue;
	SemWait(hndlApproDrvSem);
	msgsnd( qid,&msgbuf,sizeof(msgbuf)-sizeof(long),0);/*send msg1*/
	msgrcv( qid, &msgbuf,sizeof(msgbuf)-sizeof(long), PROC_MSG_ID, 0);
	SemRelease(hndlApproDrvSem);
	return msgbuf.ret;
}
Example #24
0
void StdoutChar(int term_num, char ch)
{
    EnCharQ(ch, &terminals[term_num].out_q);
    if(terminals[term_num].missed_intr) IRQ34ISROutChar(term_num);
    SemWait(terminals[term_num].out_sid);
}
//sem_getvalue on a semaphore posted n times
TInt CTestSemgetvalue::TestSem316( )
	{
	
	int retval = 0;
	int errsum=0, err = 0;
	ThreadData lThreadData;
	
	sem_t lSignalSemaphore;
	sem_t lSuspendSemaphore;

	sem_t           lTestSemaphore;
	pthread_mutex_t lTestMutex;
	pthread_cond_t  lTestCondVar;
	pthread_condattr_t  lCondAttr;
	pthread_mutexattr_t lTestMutexAttr;

	pthread_mutexattr_t defaultattr;
	pthread_mutexattr_t errorcheckattr;
	pthread_mutexattr_t recursiveattr;

	pthread_mutexattr_init(&defaultattr);
	pthread_mutexattr_init(&errorcheckattr);
	pthread_mutexattr_init(&recursiveattr);

	pthread_mutexattr_settype(&errorcheckattr,PTHREAD_MUTEX_ERRORCHECK);
	pthread_mutexattr_settype(&recursiveattr,PTHREAD_MUTEX_RECURSIVE);


	pthread_mutex_t l_staticmutex = PTHREAD_MUTEX_INITIALIZER;
	pthread_mutex_t l_errorcheckmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
	pthread_mutex_t l_recursivemutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
    pthread_cond_t  l_staticcondvar = PTHREAD_COND_INITIALIZER;


    CommonData lCommonData;
    lCommonData.iStaticMutex = &l_staticmutex;
	lCommonData.iErrorCheckMutex = &l_errorcheckmutex;
	lCommonData.iRecursiveMutex = &l_recursivemutex;
	lCommonData.iStaticCondVar = &l_staticcondvar;

	retval = sem_init(&lSignalSemaphore,0,0);
	if(retval != 0)
		{
		return retval;
		}

	retval = sem_init(&lSuspendSemaphore,0,0);
	if(retval != 0)
		{
		return retval;
		}

	lThreadData.iSignalSemaphore = &lSignalSemaphore;
	lThreadData.iSuspendSemaphore = &lSuspendSemaphore;
	lThreadData.iTestSemaphore   = &lTestSemaphore;
	lThreadData.iTestMutex       = &lTestMutex;
	lThreadData.iTestMutexAttr   = &lTestMutexAttr;
	lThreadData.iTestCondVar     = &lTestCondVar;
	lThreadData.iDefaultAttr     = &defaultattr;
	lThreadData.iErrorcheckAttr = &errorcheckattr;
	lThreadData.iRecursiveAttr   = &recursiveattr;

	lThreadData.iCondAttr        = &lCondAttr;
	for (int loop = 0; loop < EThreadMain; loop++)
		{
	    g_spinFlag[loop] = true;
		}
	lThreadData.iSuspending      = false;
	lThreadData.iSpinCounter     = 0;
	lThreadData.iCurrentCommand  = -1;
	lThreadData.iSelf            = EThreadMain;
	lThreadData.iValue           = 0;
	lThreadData.iRetValue        = 0;
	lThreadData.ierrno           = 0;
	lThreadData.iExpectederrno   = 0;
	lThreadData.iTimes           = 0;
	lThreadData.iStopped         = false;
	lThreadData.iCommonData      = &lCommonData;
	
	retval = SemInit(&lThreadData);
	retval = SemPost(&lThreadData);
	retval = SemPost(&lThreadData);
	retval = SemPost(&lThreadData);
	retval = SemPost(&lThreadData);
	retval = SemWait(&lThreadData);
	retval = SemWait(&lThreadData);
	retval = SemGetValue(&lThreadData);
	retval = CheckValue(&lThreadData,2);
	retval = SemDestroy(&lThreadData);
	StopThread(&lThreadData);
		
	err = pthread_cond_destroy(&l_staticcondvar);
	if(err != EINVAL)
		{
		errsum += err;
		}
    err = pthread_mutex_destroy(&l_recursivemutex);
	if(err != EINVAL)
		{
		errsum += err;
		}
    err = pthread_mutex_destroy(&l_errorcheckmutex);
	if(err != EINVAL)
		{
		errsum += err;
		}
    err = pthread_mutex_destroy(&l_staticmutex);
	if(err != EINVAL)
		{
		errsum += err;
		}
    err = pthread_mutexattr_destroy(&recursiveattr);
	if(err != EINVAL)
		{
		errsum += err;
		}
	err = pthread_mutexattr_destroy(&errorcheckattr);
	if(err != EINVAL)
		{
		errsum += err;
		}
	err = pthread_mutexattr_destroy(&defaultattr);
	if(err != EINVAL)
		{
		errsum += err;
		}
    err = sem_destroy(&lSignalSemaphore);
	if(err != EINVAL)
		{	
		errsum += err;
		}
	err = sem_destroy(&lSuspendSemaphore);
	if(err != EINVAL)
		{
		errsum += err;
		}

	return retval+errsum;
	}
Example #26
0
/**
* @brief Alarm processing thread.
*/
void *ProcAlarmThread(void *arg)
{
	int iCurTime;
	void *status = PROC_SUCESS;
	time_t tCurrentTime;
	struct tm *tmnow;
	AlarmParam_t* pEvironment = (AlarmParam_t*)arg;
	unsigned char enableIn,enableOut=0,trigger;
	LogEntry_t tLog;
	SysInfo *pSysInfo = pAlarmSysInfo;
	DBG("QID: %d\n", pEvironment ->msg_id);
	DBG("From: %d\n", pEvironment ->msg_buf.src);
	DBG("pSysInfo: %p\n", pSysInfo);
	DBG("Index: %d\n", pEvironment ->msg_buf.index);
	if((iCurTime = time(&tCurrentTime)) == -1){
		ERR("Fail on get current time\n");
		status =PROC_FAIL;
		goto ALARM_EXIT;
	}
	tmnow = localtime(&tCurrentTime);
	memcpy(&tLog.time, tmnow, sizeof(struct tm));
	switch(pEvironment->msg_buf.event){
		case ALARM_EVENT_AUDIO_TRIG:
		{
			int alarmDuration;
			DBG("ALARM_EVENT_AUDIO_TRIG \n");
			if((pSysInfo->audio_config.alarmON == 0)||
			   (pSysInfo->lan_config.alarmstatus&FLG_UI_AUDIO)){
				break;
			}
			AddSchedule(AUDIO_SCHEDULE, tmnow, pSysInfo);
			enableOut = (pSysInfo->lan_config.nExtAlarm&pSysInfo->lan_config.giooutenable);
			trigger=pSysInfo->lan_config.gioouttype;
			alarmDuration=pSysInfo->lan_config.nAlarmDuration;
			if(enableOut==1){
				dm355_gio_write(GIO_ALARMOUT,trigger);
				Set_AlarmDuration(alarmDuration);
			}
			sprintf(tLog.event, "Audio Alarm");
			fSetSysLog(&tLog);
			int count=0;
			count=getAudioCount();
			if ( count > 0){
				setAudioCount(alarmDuration);
				break;
			}
			else
				setAudioCount(alarmDuration);
			AlarmAudio_Play(pEvironment->audMsg_id);
			break;
		}
		case ALARM_EVENT_MOTION_DETECT:
		{
			int alarmDuration;
			DBG("ALARM_EVENT_MOTION_DETECT \n");
			if((pSysInfo->motion_config.motionenable==0)||
			   (pSysInfo->lan_config.alarmstatus&FLG_UI_MOTION)){
				break;
			}
			SetJpegStartSerial(pEvironment->msg_buf.serial);
			AddSchedule(MOTION_SCHEDULE, tmnow, pSysInfo);
			enableOut = (pSysInfo->lan_config.nExtAlarm&pSysInfo->lan_config.giooutenable);
			trigger=pSysInfo->lan_config.gioouttype;
			alarmDuration=pSysInfo->lan_config.nAlarmDuration;
			if(enableOut==1){
				dm355_gio_write(GIO_ALARMOUT,trigger);
				Set_AlarmDuration(alarmDuration);
			}
			sprintf(tLog.event, "Motion Alarm");
			fSetSysLog(&tLog);
			int count=0;
			count=getAudioCount();
			if ( count > 0){
				setAudioCount(alarmDuration);
				break;
			}
			else
				setAudioCount(alarmDuration);
			AlarmAudio_Play(pEvironment->audMsg_id);
			break;
		}
		case ALARM_EVENT_ALARMRESET_TRIG:
		{
			DBG("ALARM_EVENT_ALARMRESET_TRIG \n");
			ResetSchedule();
			Set_AlarmDuration(0);
			setAudioCount(-1);
			break;
		}
		case ALARM_EVENT_ALARMIN_TRIG:
		{
			int alarmDuration;
			DBG("ALARM_EVENT_ALARMIN_TRIG \n");
			enableIn=(pSysInfo->lan_config.nExtAlarm&pSysInfo->lan_config.gioinenable);
			alarmDuration=pSysInfo->lan_config.nAlarmDuration;
			/** check if turn gio alarm on   */
			if((enableIn==0)||
			   (pSysInfo->lan_config.alarmstatus&FLG_UI_EXT)){
				break;
			}
			AddSchedule(EXT_SCHEDULE, tmnow, pSysInfo);
			enableOut = (pSysInfo->lan_config.nExtAlarm&pSysInfo->lan_config.giooutenable);
			trigger=pSysInfo->lan_config.gioouttype;
			if(enableOut==1){
				dm355_gio_write(GIO_ALARMOUT,trigger);
				Set_AlarmDuration(alarmDuration);
			}
			sprintf(tLog.event, "External Alarm");
			fSetSysLog(&tLog);
			int count=0;
			count=getAudioCount();
			if ( count > 0){
				setAudioCount(alarmDuration);
				break;
			}
			else
				setAudioCount(alarmDuration);
			AlarmAudio_Play(pEvironment->audMsg_id);
			break;
		}
		case ALARM_EVENT_ALARMETH_TRIG:
		{
			int alarmDuration;
			DBG("ALARM_EVENT_ALARMETH_TRIG \n");
			alarmDuration=pSysInfo->lan_config.nAlarmDuration;
			/**  check if turn Ethernet alarm on */
			if((pSysInfo->lan_config.lostalarm == 0)||
			   (pSysInfo->lan_config.alarmstatus&FLG_UI_ETH)){
				break;
			}
			AddSchedule(ETH_SCHEDULE, tmnow, pSysInfo);
			enableOut = (pSysInfo->lan_config.nExtAlarm&pSysInfo->lan_config.giooutenable);
			trigger=pSysInfo->lan_config.gioouttype;
			if(enableOut==1){
				dm355_gio_write(GIO_ALARMOUT,trigger);
				Set_AlarmDuration(alarmDuration);
			}
			sprintf(tLog.event, "Ethernet Alarm");
			fSetSysLog(&tLog);
			int count=0;
			count=getAudioCount();
			if ( count > 0){
				setAudioCount(alarmDuration);
				break;
			}
			else
				setAudioCount(alarmDuration);
			AlarmAudio_Play(pEvironment->audMsg_id);
			break;
		}
		case ALARM_EVENT_SCHEDULE:
		{
			int nflag, bIsAviRun;
			int isFTPAVI,isSDAVI;
			int supportJPG,supportH264,supportH264cif,supportMpeg4,supportMpeg4cif,supportAVI;
			DBG("ALARM_EVENT_SCHEDULE \n");
			isFTPAVI=pSysInfo->ftp_config.ftpfileformat;
			isSDAVI=pSysInfo->sdcard_config.sdfileformat;
			supportJPG = pSysInfo->lan_config.Supportstream1;
			supportMpeg4 = pSysInfo->lan_config.Supportstream2;
			supportMpeg4cif = pSysInfo->lan_config.Supportstream3;
			supportH264 = pSysInfo->lan_config.Supportstream5;
			supportH264cif = pSysInfo->lan_config.Supportstream6;
			supportAVI = supportH264|supportH264cif|supportMpeg4|supportMpeg4cif;
			bIsAviRun = 0;
			sprintf(tLog.event, "Schedule Record");
			nflag =0;
			if(pSysInfo->sdcard_config.sdinsert<=1){
				if(supportAVI&&pSysInfo->sdcard_config.sdrenable&&isSDAVI==0&&
						!gbSD_WriteProtect){
					nflag |= AVI_TO_SD;
					bIsAviRun = 1;
				}
				if(supportAVI&&pSysInfo->ftp_config.rftpenable&&isFTPAVI==0){
					nflag |= AVI_TO_FTP;
					bIsAviRun = 1;
				}
				if(bIsAviRun){
					AviRun(0, nflag);
					SemWait(pEvironment->hAlarmSem);
					gSchAviRun = 1;
					SemRelease(pEvironment->hAlarmSem);
				}
			} else {
				/* AVI no stop case */
				if(supportAVI&&pSysInfo->sdcard_config.sdrenable&&isSDAVI==0&&
						!gbSD_WriteProtect){
					AviRun(1, AVI_TO_SD);
					SemWait(pEvironment->hAlarmSem);
					gSchAviRun = 1;
					SemRelease(pEvironment->hAlarmSem);
				}
			}
			nflag =0;
			if(isSDAVI==1&&pSysInfo->sdcard_config.sdrenable &&
					!gbSD_WriteProtect)
				nflag |= JPG_TO_SD;
			/* Megapixel JPEG mode */
			if(!supportAVI&&pSysInfo->sdcard_config.sdrenable&&!gbSD_WriteProtect)
				nflag |= JPG_TO_SD;
			if(pSysInfo->sdcard_config.sdinsert<=1){
				if(isFTPAVI==1 &&pSysInfo->ftp_config.rftpenable)
					nflag |= JPG_TO_FTP;
				/* Megapixel JPEG mode*/
				if(!supportAVI&&pSysInfo->ftp_config.rftpenable)
					nflag |= JPG_TO_FTP;
				if(nflag){
					JpgRun(nflag, 0 );
					SemWait(pEvironment->hAlarmSem);
					gSchJpgRun = 1;
					SemRelease(pEvironment->hAlarmSem);
				}
			}
			else{
				if(supportJPG&&pSysInfo->ftp_config.rftpenable)
					nflag |= JPG_TO_FTP;
				if(nflag){
					JpgRun(nflag, 1 );
					SemWait(pEvironment->hAlarmSem);
					gSchJpgRun = 1;
					SemRelease(pEvironment->hAlarmSem);
				}
			}
			fSetSysLog(&tLog);
			break;
		}
		case ALARM_EVENT_SCHEDULE_END:
		{
			int isFTPAVI;
			int supportJPG=0,supportH264=0,supportH264cif=0,supportMpeg4=0,supportMpeg4cif=0,supportAVI=0;
			DBG("ALARM_EVENT_SCHEDULE_END\n");
			isFTPAVI=pSysInfo->ftp_config.ftpfileformat;
			isFTPAVI=pSysInfo->ftp_config.ftpfileformat;
			supportJPG = pSysInfo->lan_config.Supportstream1;
			supportMpeg4 = pSysInfo->lan_config.Supportstream2;
			supportMpeg4cif = pSysInfo->lan_config.Supportstream3;
			supportH264 = pSysInfo->lan_config.Supportstream5;
			supportH264cif = pSysInfo->lan_config.Supportstream6;
			supportAVI = supportH264|supportH264cif|supportMpeg4|supportMpeg4cif;
			if(pSysInfo->sdcard_config.sdinsert==3){
				/* AVI no stop case */
				SemWait(pEvironment->hAlarmSem);
				if(!gbSD_WriteProtect && gSchAviRun){
					AviStop();
					gSchAviRun = 0;
				}
				if(gSchJpgRun){
					JpgStop(1);
					gSchJpgRun = 0;
				}
				SemRelease(pEvironment->hAlarmSem);
			} else {
				SemWait(pEvironment->hAlarmSem);
				if(gSchAviRun){
					AviStop();
					gSchAviRun = 0;
				}
				if(gSchJpgRun){
					JpgStop(0);
					gSchJpgRun = 0;
				}
				SemRelease(pEvironment->hAlarmSem);
			}
			break;
		}
		default:
			ERR("Unknown Event\n");
			sprintf(tLog.event, "Unknown Event");
			fSetSysLog(&tLog);
			status = PROC_FAIL;
			break;
	}

ALARM_EXIT:
	free(pEvironment);
	DBG("Free evironment sucess\n");
	pthread_exit(status);
	return status;
}
Example #27
0
/**
 * @brief Restart scheduling.
 */
void ResumeSchedule()
{
    SemWait(gSemSchedule);
    gbSchedulePause = 0;
    SemRelease(gSemSchedule);
}
Example #28
0
/**
* @brief JPEG manager thread
* @param arg [I ] Not used.
* @return 0 on normal end.
*/
void *JpgMngThr(void *arg)
{
	int nState, nSetFlg;
	unsigned short nFlg;
	while(!(GetJpgState(0) & JPG_THR_EXIT)){
		JPG_DBG("Ready\n");
		while(!((nState = GetJpgState(JPG_RUN | JPG_DST_MASK | JPG_STOP)) & (JPG_RUN | JPG_THR_EXIT))){
			if(SemWait(hAlarmStatusSem) == 0){
				nFlg = pSysinfo->lan_config.alarmstatus & (~FLG_UI_JPG);
				if(!(nFlg & (FLG_UI_AVI | FLG_UI_JPG)))
					nFlg &= (~FLG_UI_RECORD);
				fSetAlarmStatus(nFlg);
				SemRelease(hAlarmStatusSem);
			}
			JPG_DBG("JpgMngThr sleep\n");
			pthread_cond_wait(&gJpgRunCond, &gJpgConMutex);
			JPG_DBG("JpgMngThr Wake up\n");
		}
		if(JPG_THR_EXIT & nState)
			break;
		nSetFlg = 0;
		if(!pSysinfo->lan_config.Supportstream1){
			JPG_DBG("Jpeg stream not support\n");
			continue;
		}
		if(SemWait(hAlarmStatusSem) == 0){
			nFlg = pSysinfo->lan_config.alarmstatus | FLG_UI_JPG |	FLG_UI_RECORD;
			fSetAlarmStatus(nFlg);
			SemRelease(hAlarmStatusSem);
		}
		JPG_DBG("Jpeg Run\n");
		if((nState & JPG_DST_MASK) == 0){
			JPG_ERR("Unknown jpeg file destination\n");
			continue;
		}
#if 0
		if(nState & JPG_TO_SMTP)
			DoJpegDispatch(NULL, JPG_DISPATCH_TO_SMTP);
		if(nState & JPG_TO_FTP)
			DoJpegDispatch(NULL, JPG_DISPATCH_TO_FTP);
		if(nState & JPG_TO_SD)
			SaveJpegToSD();
		else
			sleep(5);
#else
		if(nState & JPG_TO_SMTP)
			nSetFlg |= FILE_DISPATCH_TO_SMTP;
		if(nState & JPG_TO_FTP)
			nSetFlg |= FILE_DISPATCH_TO_FTP;
		if(nState & JPG_TO_SD)
			nSetFlg |= FILE_DISPATCH_TO_SD;
		if(gFileDispCount < FILE_DISP_THR_LIMIT){
			JPG_DBG("nSetFlg is 0x%x\n", nSetFlg);
			SaveJpeg(nSetFlg);
		} else
			printf("Jpeg save limit \n");
#endif
	}
	JPG_DBG("Thread exit\n");
	return (void *)0;
}
Example #29
0
int SemHandleWait(sem_t sem) {
  if (sem < 0) return SYNC_FAIL;
  if (sem >= MAX_SEMS) return SYNC_FAIL;
  if (!sems[sem].inuse)    return SYNC_FAIL;
  return SemWait(&sems[sem]);
}