Пример #1
0
BOOL CGretagScan::MoveToPatch(int patchnum, int ref)
{
	char command[200];
	char data[200];
	int	datalen = 200;
	int	code[5];
	int32 dx_i,dy_i;
	int32	table[2];

	//turn online
	if(!TurnOnLine())
		return FALSE;

	m_table.translateToTable(patchnum,table);

	sprintf(command,"; 208 0 %d %ld %ld\r\n",ref,(long)table[0],(long)table[1]);

//	dx_i = table[0]-current_x;
//	dy_i = table[1]-current_y;

	if(!Command(command, strlen(command), data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_MOVE_HEAD);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	return TRUE;
}
Пример #2
0
BOOL	CGretagScan::GetDensity(CCommRequest *pRequest, double *data)
{
	int	code[5];
	int i;
	double temp;
	BOOL	status = FALSE;

	if(!sscanf_n_i(pRequest->m_lpszResult, 1, 1, code))
	{
		ErrorMessage(ERR_MEASUREMENT_DATA);
		goto bail;
	}
	if(code[0] != 189)
	{
		ErrorMessage(ERR_MEASUREMENT_DATA);
		goto bail;
	}

	//convert to data
	sscanf_n(pRequest->m_lpszResult ,3 ,4, data);

	//resequence
	temp = data[0];
	for(i = 0; i < 3; i++)
		data[i] = data[i+1];
	data[3] = temp;
	status = TRUE;

bail:
	return status;
}
Пример #3
0
int SpectroChart::checkOnLine(void)
{
char st[5000];
int	status;
char *c;

if (sp == 0L) return MCO_SERIAL_ERROR;

sp->clearInputBuf();
sp->sendData("; 208 36\r\n",10);
sp->getNextLine(st,5000,thermd);

if ((st[0] != ';') && (st[0] != ':'))
	{
	last_error = -4;
	}	
c = sscanf_n_i(st,3,1,&status);
if (c == 0L)
	{
	last_error = -5;
	}
if (status != 209)
	{
	last_error = -6;
	error_code = status;
	}
if (status & 0x10) return 1;
return 0;
}	
Пример #4
0
McoStatus SpectroChart::Initialize(void)
{
McoStatus state = MCO_SUCCESS;
char st[5000];
int		dum,type,error;

if (sp == 0L) return MCO_SERIAL_ERROR;

// set baud
state = setBaud(GT_DEFALUT_BAUD);
if (state != MCO_SUCCESS) goto bail;

// check device type
sp->sendData("; 43\r\n",6);
sp->getNextLine(st,5000,thermd);

sscanf_n_i(st,27,1,&type);
if (type !=2) goto bail;

//reset
sp->sendData("; 90 1 4 5\r\n",12);
state = CheckError();
if (state != MCO_SUCCESS) goto bail;

//set measurment type
sp->sendData("; 77 155\r\n",10);
state = CheckError();
if (state != MCO_SUCCESS) goto bail;

// set the illuminante, angle
sp->sendData("; 22 1 1 3 0\r\n",14);
state = CheckError();
if (state != MCO_SUCCESS) goto bail;

// set the type of output desired (Cie Lab)
//sp->sendData("; 177 2 2\r\n",11);
//state = CheckError();
//if (state != MCO_SUCCESS) goto bail;


bail:
if (thermd != 0L)
	{
	thermd->DisplayTherm(4,4,0L);	
	thermd->RemoveTherm();
	delete thermd; 
	}
thermd = 0L;


return state;
}
Пример #5
0
BOOL	CGretagScan::GetLab(CCommRequest *pRequest, double *data)
{
	int	code[5];

	if(!sscanf_n_i(pRequest->m_lpszResult, 1, 1, code))
	{
		ErrorMessage(ERR_MEASUREMENT_DATA);
		return FALSE;
	}
	if(code[0] != 187)
	{
		ErrorMessage(ERR_MEASUREMENT_DATA);
		return FALSE;
	}

	//convert to data
	sscanf_n(pRequest->m_lpszResult ,4 ,3, data);

	return TRUE;
}
Пример #6
0
BOOL CGretagScan::PutHeadUp()
{
	char	data[200];
	int		datalen = 200;
	int		code[5];

	// put head down
	if(!Command("; 208 3\r\n", 9, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_HEAD_DOWN);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	return TRUE;
}
Пример #7
0
BOOL CGretagScan::TurnOffLine(void)
{
	char	data[200];
	int		datalen = 200;
	int		code[5];

	//turn online
	if(!Command("; 208 17\r\n", 10, data, datalen) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_TURN_OFFLINE);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	return TRUE;
}
Пример #8
0
McoStatus SpectroChart::CheckErrorChart(void)
{
char *c;
int code_error[3];
char	st[5000];

if (sp == 0L) return MCO_SERIAL_ERROR;

sp->getNextLine(st,5000,thermd);
if ((st[0] != ';') && (st[0] != ':'))
	{
	last_error = -4;
	return MCO_FAILURE;
	}
c = sscanf_n_i(st,1,3,code_error);
if (c == 0L)
	{
	last_error = -5;
	return MCO_FAILURE;
	}
if (code_error[0] != 209)
	{
	last_error = -6;
	error_code = code_error[0];
	return MCO_FAILURE;
	}
if (code_error[1] != 128)
	{
	last_error = -7;
	error_code = code_error[0];
	return MCO_FAILURE;
	}
if (code_error[2] != 0)
	{
	last_error = code_error[2];
	return MCO_FAILURE;
	}
return MCO_SUCCESS;
}
Пример #9
0
// get the current location of the head on the table
BOOL CGretagScan::GetHeadLocation(int *position, int refrence)
{
	char command[100];
	char data[200];
	int	datalen = 200;
	int	code[5];
	
	sprintf(command,"; 208 5 %d\r\n",refrence);
	if(!Command(command, strlen(command), data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,5,2,code))
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}

	position[0] = code[0];
	position[1] = code[1];

	return TRUE;
}
Пример #10
0
BOOL	CGretagScan::SendRequest(long whichpatch, CWnd *wnd)
{
	char	data[200];
	int		datalen = 200;
	int		code[5];

	//put head up
	if(!Command("; 208 3\r\n", 9, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_HEAD_UP);
		return FALSE;
	}
//	if( !CheckErrorChart(code) )
//		return FALSE;

	// move to the patch
	if(!MoveToPatch(whichpatch,0))
		return FALSE;

	// put head down
	if(!Command("; 208 4\r\n", 9, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	// make a measurment
	if(!Command("; 32\r\n", 6, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,2,code))
	{
		ErrorMessage(ERR_DEVICE_MEASUREMENT);
		return FALSE;
	}
	if( !CheckError(code) )
		return FALSE;

	//send a request to read the data in
	if(m_type == 1) //LAB
	{
		if(!RequestCommand("; 186 9 1\r\n", datalen, wnd))
		{
			ErrorMessage(ERR_SEND_REQUEST);
			return FALSE;
		}
	}
	else
	{
		if(!RequestCommand("; 188 9\r\n", datalen, wnd))
		{
			ErrorMessage(ERR_SEND_REQUEST);
			return FALSE;
		}
	}

	return TRUE;
}
Пример #11
0
BOOL	CGretagScan::StartComm(void)
{
	char	data[200];
	int		datalen = 200;
	int		code[5];

	// check device type
	if(!Command("; 43\r\n", 6, data, datalen, 5) )
	{
		ErrorMessage(ERR_NODEVICE);
		return FALSE;
	}
	if(!sscanf_n_i(data, 27, 1, &code[0]) || code[0] != 2)
	{
		ErrorMessage(ERR_NODEVICE);
		return FALSE;
	}

	//reset
	if(!Command("; 90 1 4 5\r\n", 12, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,2,code))
	{
		ErrorMessage(ERR_DEVICE_RESET);
		return FALSE;
	}
	if( !CheckError(code) )
		return FALSE;

	//set measurment type
	if(!Command("; 77 155\r\n", 10, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,2,code))
	{
		ErrorMessage(ERR_DEVICE_MEASUREMENT_TYPE);
		return FALSE;
	}
	if( !CheckError(code) )
		return FALSE;
	
	// set the illuminante, angle
	if(!Command("; 22 1 1 3 0\r\n", 14, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,2,code))
	{
		ErrorMessage(ERR_DEVICE_ILLUMINATION);
		return FALSE;
	}
	if( !CheckError(code) )
		return FALSE;

	//calibrate before reading
	if( !Calibrate() )
		return FALSE;

	//align table with patch target 
	if( !AlignTable() )
		return FALSE;

	return TRUE;
}
Пример #12
0
BOOL	CGretagScan::Calibrate()
{
	char	data[200];
	int		datalen = 200;
	int		code[5];
	static	int first = 5;

	//turn online
	if(!TurnOnLine())
		return FALSE;

	//initialization
	if(!Command("; 208 6 0\r\n", 11, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_INITIALIZATION);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	// put head down
	if(!Command("; 208 4\r\n", 9, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_HEAD_DOWN);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	//warm it up
	for (int i = 0; i < first; i++)
	{		
		if( !Command("; 32\r\n", 6, data, datalen, 5) )
		{
			ErrorMessage(ERR_DEVICE_READ);
			return FALSE;
		}
		if(!sscanf_n_i(data,1,2,code))
		{
			ErrorMessage(ERR_DEVICE_WARM_UP);
			return FALSE;
		}
		if( !CheckError(code) )
			return FALSE;
	}

	// calibrate
	if( !Command("; 34 9 7\r\n", 10, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,2,code))
	{
		ErrorMessage(ERR_CALIBRATE);
		return FALSE;
	}
	if( !CheckError(code) )
		return FALSE;

	// move the head up
	if( !Command("; 208 3\r\n", 9, data, datalen, 5) )
	{
		ErrorMessage(ERR_DEVICE_READ);
		return FALSE;
	}
	if(!sscanf_n_i(data,1,3,code))
	{
		ErrorMessage(ERR_HEAD_UP);
		return FALSE;
	}
	if( !CheckErrorChart(code) )
		return FALSE;

	return TRUE;
}
Пример #13
0
McoStatus SpectroChart::getNextPatch(long patchnum,double *lab)
{
char j1[255],j2[255],j3[255];
char st[5000];
char *p;
int32	tc;
double xyz[3];
int32 X,Y,Z;
McoStatus status = MCO_SUCCESS;
int	code;
double t;
int 	i;

if (sp == 0L) return MCO_SERIAL_ERROR;

// do a calibration if 100 patches have been read so far
if (patchCount >= 100) status = Calibrate();
if (status != MCO_SUCCESS) return status;

// move to the patch
status = moveToPatch(patchnum,0);
if (status != MCO_SUCCESS) return status;

// send read command
status = sendReadCommand(st);
if (status != MCO_SUCCESS) return status;



if (mode == ReadLabMode)
	{
	// now read the data in
	sp->sendData("; 186 9 1\r\n",11);
	sp->getNextLine(st,5000,thermd);

	// check for an error
	sscanf_n_i(st,1,1,&code);
	if (code != 187) return MCO_FAILURE;
	
	// read in the data
	sscanf_n(st,2,3,lab);

	// check for an error again
	sscanf_n_i(st,6,1,&code);
	if (code != 0) return MCO_FAILURE;

	// now apply the tweak if it exist
	if (tweak != NULL) tweak->eval(lab,lab,1);
	}
else if (mode == ReadDensityMode)
	{
	// now read the data in
	sp->sendData("; 188 9\r\n",9);
	sp->getNextLine(st,5000,thermd);

	// check for an error
	sscanf_n_i(st,1,1,&code);
	if (code != 189) return MCO_FAILURE;
		
	// read in the black
	sscanf_n(st,1,4,lab);
	
	// check for an error again
	sscanf_n_i(st,6,1,&code);
	if (code != 0) return MCO_FAILURE;
	
	t = lab[0];
	lab[0] = lab[1];
	lab[1] = lab[2];
	lab[2] = lab[3];
	lab[3] = t;
	
	if (lab != paperDensity) for (i=0; i<4; i++)
		{
		lab[i] -= paperDensity[i];
		if (lab[i] < 0) lab[i] = 0;
		}

	
	}

patchCount++;



return MCO_SUCCESS;
}