LRESULT CALLBACK CamDlgHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	static bool init;
	CAMOBJ * st;
	int tmp;
	
	st = (CAMOBJ *) actobject;
    if ((st==NULL)||(st->type!=OB_CAM)) return(FALSE);	

	switch( message )
	{
		case WM_INITDIALOG:
				SetDlgItemInt(hDlg,IDC_UPDATERATE,update_rate,0);
				SetDlgItemText(hDlg,IDC_CAMSTATUS,"0");
				SetDlgItemInt(hDlg,IDC_ERROR_DIST,(int)dist_threshold,0);
				SetDlgItemInt(hDlg,IDC_ERROR_ANGLE,(int)angle_threshold,0);
				SetDlgItemInt(hDlg,IDC_THRESHOLD_TIME,threshold_time,0);
				SetDlgItemInt(hDlg,IDC_PT1X,(int)(PT1_xpos*100.0f),1);
				SetDlgItemInt(hDlg,IDC_PT1Y,(int)(PT1_ypos*100.0f),1);
				SetDlgItemInt(hDlg,IDC_PT2X,(int)(PT2_xpos*100.0f),1);
				SetDlgItemInt(hDlg,IDC_PT2Y,(int)(PT2_ypos*100.0f),1);
				
				CheckDlgButton(hDlg,IDC_AUTORESTORE,autorestore);
				CheckDlgButton(hDlg,IDC_SHOWLIVE,st->showlive);
				CheckDlgButton(hDlg,IDC_ENABLE_TRACKING,st->enable_tracking);
				CheckDlgButton(hDlg,IDC_TRACKFACE,st->trackface);

				if (st->mode==0) CheckDlgButton(hDlg,IDC_NOARCHIVE,TRUE); else
					if (st->mode==1) CheckDlgButton(hDlg,IDC_RECORDARCHIVE,TRUE); else
						if (st->mode==2) CheckDlgButton(hDlg,IDC_PLAYARCHIVE,TRUE);
				SetDlgItemText(hDlg,IDC_ARCHIVEFILE,st->videofilename);
				break;		
		case WM_CLOSE:
			    EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			break;
		case WM_COMMAND:
			switch (LOWORD(wParam)) 
			{
				case IDC_INITCAM:
					lk_init(st);
					break;
				case IDC_EXITCAM:
					lk_exit();
                    break;
				case IDC_RESET:
		            count = 0;
					break;

				case IDC_NOARCHIVE:
					  lk_exit();
					  st->mode=0;
					  lk_init(st);
					break;
				case IDC_RECORDARCHIVE:
					  lk_exit();
					  st->mode=1;

					  if (!strcmp(st->videofilename,"none"))
					  {
						 strcpy(st->videofilename,GLOBAL.resourcepath); 
						 strcat(st->videofilename,"MOVIES\\*.avi");
					  }

					  if (!open_file_dlg(hDlg,st->videofilename, FT_AVI, OPEN_SAVE))
					     strcpy(st->videofilename,"none");
					  SetDlgItemText(hDlg, IDC_ARCHIVEFILE,st->videofilename);
					  lk_init(st);

					break;
				case IDC_PLAYARCHIVE:
					  lk_exit();
					  st->mode=2;
					  if (!strcmp(st->videofilename,"none"))
					  {
						 strcpy(st->videofilename,GLOBAL.resourcepath); 
						 strcat(st->videofilename,"MOVIES\\*.avi");
					  }
					  if (!open_file_dlg(hDlg,st->videofilename, FT_AVI, OPEN_LOAD))
					     strcpy(st->videofilename,"none");
					  SetDlgItemText(hDlg, IDC_ARCHIVEFILE,st->videofilename);
					  lk_init(st);

					break;
				
				case IDC_SHOWLIVE:
					st->showlive=IsDlgButtonChecked(hDlg,IDC_SHOWLIVE);
					if (!st->showlive) cvDestroyWindow("Camera");
					else
					{ 
					  cvNamedWindow( "Camera", 1 );
					  cvSetMouseCallback( "Camera", on_mouse, 0 );
					}
                    break;
				case IDC_UPDATERATE:
					tmp=GetDlgItemInt(hDlg,IDC_UPDATERATE,NULL,0);
					if ((tmp>10)&&(tmp<1000)) update_rate=tmp;
                    break;
				case IDC_AUTORESTORE:
					autorestore=IsDlgButtonChecked(hDlg,IDC_AUTORESTORE);
                    break;
				case IDC_TRACKFACE:
					st->trackface=IsDlgButtonChecked(hDlg,IDC_TRACKFACE);
					if (st->trackface) MAX_COUNT=2; else MAX_COUNT=1;
                    break;
				case IDC_ERROR_DIST:
					dist_threshold=(float)GetDlgItemInt(hDlg, IDC_ERROR_DIST,0,0);
                    break;
				case IDC_ERROR_ANGLE:
					angle_threshold=(float)GetDlgItemInt(hDlg, IDC_ERROR_ANGLE,0,0);
                    break;
				case IDC_THRESHOLD_TIME:
					threshold_time=GetDlgItemInt(hDlg, IDC_THRESHOLD_TIME,0,0);
                    break;
				case IDC_PT1X:
					PT1_xpos=(float) GetDlgItemInt(hDlg, IDC_PT1X,0,1) / 100.0f;
					need_to_init=1;
					break;
				case IDC_PT1Y:
					PT1_ypos=(float)GetDlgItemInt(hDlg, IDC_PT1Y,0,1)/ 100.0f;
					need_to_init=1;
					break;
				case IDC_PT2X:
					PT2_xpos=(float)GetDlgItemInt(hDlg, IDC_PT2X,0,1)/ 100.0f;
					need_to_init=1;
					break;
				case IDC_PT2Y:
					PT2_ypos=(float)GetDlgItemInt(hDlg, IDC_PT2Y,0,1)/ 100.0f;
					need_to_init=1;
					break;
//				case IDC_NIGHTMODE:
//		            night_mode ^= 1;
//					break;
				case IDC_AUTOINIT:
					 need_to_init=1;
					break;
				case IDC_ENABLE_TRACKING:
					st->enable_tracking=IsDlgButtonChecked(hDlg,IDC_ENABLE_TRACKING);
					break;
				case IDC_SETTINGS:
					{
						int ncams = cvcamGetCamerasCount( ); // init cvcam
						if (ncams==0) report("no cam");
						cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE); //Selects the 1-st found camera
						cvcamInit();
						cvcamGetProperty(0, CVCAM_CAMERAPROPS, NULL);
						//	cvcamGetProperty(0, CVCAM_VIDEOFORMAT, NULL);
						cvcamExit();
					}
					break;
            }
			return TRUE;
			break;
		case WM_SIZE:
		case WM_MOVE:  update_toolbox_position(hDlg);
		break;
		return(TRUE);
	}
	return FALSE;
}
CAMOBJ::~CAMOBJ() { lk_exit(); }
Exemple #3
0
int main(void)
{
	unsigned int ret;
	unsigned char running;
	unsigned int lk_buffer[LK_BUFFER_SIZE];
	//struct timespec ts;
	unsigned char adc_convert_1;
	unsigned char adc_convert_2;
	unsigned char button_state;
	
	lk_init();
	
	running = 1;
	//ts.tv_nsec = 500000000;
	
	ret = exp_dout_all(MODULE_ONE, 0, lk_buffer);
	

	
	while(running)
	{

		system("clear");
		
		ret = exp_ain(MODULE_ONE, lk_buffer);
		display_return_code(ret);
		
		adc_convert_1 = (char)(lk_buffer[0] / 4);
		adc_convert_2 = (char)(lk_buffer[1] / 4);
		fprintf(stderr, "MOTOR Speed 0: %x \n",  adc_convert_1);
		fprintf(stderr, "MOTOR Speed 1: %x \n",  adc_convert_2);
		
		ret = exp_din(MODULE_ONE, lk_buffer);
		button_state = lk_buffer[0];
		fprintf(stderr, "Button Value: %x \n",  button_state);
		
		if(!(button_state & EXP_BUTTON_0_MASK))
		{
			ret = exp_motors(MODULE_ONE, EXP_MOTOR_1, EXP_MOTOR_FORWARD, adc_convert_1, lk_buffer);
			ret = exp_dout_x(MODULE_ONE, EXP_OUT_0, 1, lk_buffer);
			display_return_code(ret);
		}
		else
		{
			ret = exp_motors(MODULE_ONE, EXP_MOTOR_1, EXP_MOTOR_STOP, adc_convert_1, lk_buffer);
			ret = exp_dout_x(MODULE_ONE, EXP_OUT_0, 0, lk_buffer);
			display_return_code(ret);
		}
		if(!(button_state & EXP_BUTTON_1_MASK))
		{
			ret = exp_motors(MODULE_ONE, EXP_MOTOR_2, EXP_MOTOR_FORWARD, adc_convert_2, lk_buffer);
			ret = exp_dout_x(MODULE_ONE, EXP_OUT_1, 1, lk_buffer);
			display_return_code(ret);
		}
		else
		{
			ret = exp_motors(MODULE_ONE, EXP_MOTOR_2, EXP_MOTOR_STOP, adc_convert_2, lk_buffer);
			ret = exp_dout_x(MODULE_ONE, EXP_OUT_1, 0, lk_buffer);
			display_return_code(ret);
		}
		
		if(!(button_state & EXP_BUTTON_2_MASK))
		{
			running = 0;
		}
		
		fprintf(stderr, "**********Press Button 2 to stop.***********\n");
		
		//nanosleep(&ts, NULL);

	}

	lk_exit();
	
	return ret;
	
}