Ejemplo n.º 1
0
int RTSP_ControlExit()
{
	SetRTSPStreamingOFF();
	if(DestroySem(hndlRTSP_Sem) != 0){
		return -1;
	}
	hndlRTSP_Sem = NULL;
	return 0;
}
Ejemplo n.º 2
0
/**
* @brief Alarm server main loop
* @param qid [I ] Message queue ID used to receive alarm message.
* @param hAlarmSem [I ] Semaphore to control access to alarm server globals.
* @return 0 on alarm server normal end.
*/
int alarm_main_loop(int qid, int audQid, SemHandl_t hAlarmSem)
{
	ALARM_MSG_BUF msgbuf;
	int msg_size,ret = 0;
	AlarmParam_t* pEvironment;
	pthread_t thread;

	pAlarmSysInfo = GetSysInfo();
	if((hGIOSem = MakeSem()) == NULL){
		return -1;
	}
	while(1){
		/* Get Message */
		msg_size = msgrcv( qid, &msgbuf, sizeof(msgbuf) - sizeof(long),
				MSG_TYPE_MSG1, 0);
		if( msg_size < 0 ){
			printf("Alarm Receive msg fail \n");
			ret = -1;
			break;
		} else if(msgbuf.src == MSG_TYPE_MSG1 || msgbuf.src < 0){
			printf("Got Error message\n");
			ret = -1;
			break;
		} else if(msgbuf.event == ALARM_EVENT_QUIT){
			printf("Recieved Quit event\n");
			break;
		} else if(IsRestart()){
			// If already restart flag is set then ignore the messages
		    continue;
		} else {
			/* Process alarm event */
			pEvironment = (AlarmParam_t*)malloc(sizeof(AlarmParam_t));
			if(pEvironment == NULL){
				printf("Error: More memory need for Alarm server\n");
				break;
			}
			pEvironment -> msg_id    = qid;
			pEvironment -> audMsg_id = audQid;
			pEvironment->hAlarmSem   = hAlarmSem;
			memcpy(&pEvironment -> msg_buf, &msgbuf, sizeof(msgbuf));
			if((ret = pthread_create(&thread, NULL, ProcAlarmThread, pEvironment)) != 0){
				free(pEvironment);
				printf("Error: Alarm server creat thread fail\n");
				break;
			}
			pthread_detach(thread);
		}
	}
	DestroySem(hGIOSem);
	return ret;
}
Ejemplo n.º 3
0
/**
 * @brief Resource releasing of the message driver for Appro interface
 *
 *
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
int ApproDrvExit()
{
	fprintf(stderr, "%s: %d\n", __func__, gProcId);
	gProcId = MSG_TYPE_MSG1;
	DestroySem(hndlApproDrvSem);
	hndlApproDrvSem = NULL;
#if ENABLE_CMEM

	if( Testflag != 0 )
	{
	 	CMEM_exit();
	}
	Testflag = 0;;
	return 0;
#else
	return 0;
#endif
}
Ejemplo n.º 4
0
/**
 * @breif Schedule manager initial.
 * @param pSysInfo [I] Pointer to system info.
 * @return 0 on success
 */
int ScheduleMngInit(SysInfo *pSysInfo)
{
    if (gSemSchedule == NULL)
    {
        gSemSchedule = MakeSem();
    }
    if (gSemSchedule == NULL)
    {
        return  - 1;
    }
    if (pthread_create(&gScheduleThread, NULL, scheduleThrFxn, pSysInfo))
    {
        DestroySem(gSemSchedule);
        __E("scheduleThread create fail\n");
        return  - 1;
    }
    __D("scheduleThread created\n");
    return 0;
}
Ejemplo n.º 5
0
int main(void)
{
	key_t key;									/*信号量的键值*/
	int semid;									/*信号量的ID*/
	char i;
	int value = 0;
	
	key = ftok("/ipc/sem",'a');					/*建立信号量的键值*/
	
	semid = CreateSem(key,100);					/*建立信号量*/
	for (i = 0;i <= 3;i++){						/*对信号量进行3次增减操作*/
		Sem_P(semid);							/*增加信号量*/
		Sem_V(semid);							/*减小信号量*/
	}
	value = GetvalueSem(semid);					/*获得信号量的值*/
	printf("信号量值为:%d\n",value);				/*打印结果*/
	
	DestroySem(semid);							/*销毁信号量*/
	return 0;
}
Ejemplo n.º 6
0
/**
 * @brief Initiliztion of the message driver for Appro interface
 *
 *
 * @param   proc_id    message type id of the proceess, defined at ipnc_app/include/Stream_Msg_Def.h
 *
 * @return 0 is ok and -1 is error
 *
 *
 */
int ApproDrvInit(int proc_id)
{
	if(proc_id < MSG_TYPE_MSG1 || proc_id > 20){
		gProcId = MSG_TYPE_MSG1;
		return -1;
	}
	gProcId = proc_id;
	fprintf(stderr, "%s: %d\n", __func__, proc_id);
#if ENABLE_CMEM
	/* CMEM only one init is allowed in each process */
	if(Testflag==0)
	{
		if(CMEM_init() < 0){
			gProcId = MSG_TYPE_MSG1;
			return -1;
		}
	}
#endif
	Testflag = 1;;
	if(hndlApproDrvSem == NULL)
		hndlApproDrvSem = MakeSem();
	if(hndlApproDrvSem == NULL){
#if ENABLE_CMEM
		CMEM_exit();
#endif
		gProcId = MSG_TYPE_MSG1;
		return -1;
	}
	printf("Msg_Init Begin\n");
	if((qid=Msg_Init(MSG_KEY)) < 0){
		DestroySem(hndlApproDrvSem);
		hndlApproDrvSem = NULL;
#if ENABLE_CMEM
		CMEM_exit();
#endif
		gProcId = MSG_TYPE_MSG1;
		return -1;
	}
	printf("Msg_Init Done\n");
	return 0;
}
Ejemplo n.º 7
0
/**
* @brief Main thread of alarm server.
* @param arg [I ] Not used.
* @return 0 on alarm server normal end.
*/
void *AlramThread(void *arg) {
	int qid;
	int audQid;
	SemHandl_t hAlarmSem;
	pthread_t thread;
	void *ret;
	qid = Msg_Init(ALARM_KEY);
	if(qid < 0)
		return PROC_FAIL;
	audQid = Msg_Init(AUD_MSG_KEY);
	if(audQid < 0)
		return PROC_FAIL;
	hAlarmSem = MakeSem();
	if(hAlarmSem == NULL){
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	hAlarmStatusSem = MakeSem();
	if(hAlarmStatusSem == NULL){
		DestroySem(hAlarmSem);
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	audioSem = MakeSem();
	if(audioSem == NULL){
		DestroySem(hAlarmStatusSem);
		DestroySem(hAlarmSem);
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	if(pthread_create(&thread, NULL, AlramScheduler, NULL)){
		DestroySem(hAlarmStatusSem);
		DestroySem(audioSem);
		DestroySem(hAlarmSem);
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	if(AviMngInit()){
		AlarmScheduleExit();
		pthread_join(thread, &ret);
		DestroySem(hAlarmStatusSem);
		DestroySem(audioSem);
		DestroySem(hAlarmSem);
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	if(JpgMngInit()){
		AviMngExit();
		AlarmScheduleExit();
		pthread_join(thread, &ret);
		DestroySem(hAlarmStatusSem);
		DestroySem(audioSem);
		DestroySem(hAlarmSem);
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	if(FileDispatcherInit()){
		JpgMngExit();
		AviMngExit();
		AlarmScheduleExit();
		pthread_join(thread, &ret);
		DestroySem(hAlarmStatusSem);
		DestroySem(audioSem);
		DestroySem(hAlarmSem);
		Msg_Kill(qid);
		return PROC_FAIL;
	}
	alarm_main_loop(qid, audQid, hAlarmSem);
	AviMngExit();
	JpgMngExit();
	FileDispatcherExit();
	DestroySem(hAlarmStatusSem);
	DestroySem(audioSem);
	DestroySem(hAlarmSem);
	Msg_Kill(qid);
	Msg_Kill(audQid);
	return PROC_SUCESS;
}