Exemplo n.º 1
0
void ProcessaCMD_VERSION( BYTE * buffer )
{
  BYTE bufOut[16];
  BYTE  bLog;
  DWORD* dwTmp[3];
  BYTE bTmp;
  char i;

  if ( !IsConnected() )
  {
    return;          
  }

  bLog = EVT_SW_VERSION;
  Log( EVT_SW, &bLog, sizeof( BYTE ));

  MakeHeader( bufOut, sizeof( bufOut ), buffer[EO_FIELD], CMD_VERSION );

  dwTmp[0] = GetBoardVersion();
  dwTmp[1] = GetFirmwareVersion();
  dwTmp[2] = GetBootLoaderVersion();

  for ( bLog = 0; bLog < GET_VEC_NUM_MEMBERS(dwTmp); bLog++ )
  {
    for ( i = sizeof( DWORD ) ; i ; i-- )
    {
      bTmp = CMD_FIELD + (bLog << 2) + (sizeof(DWORD) - (i - 1));
      bufOut[ bTmp ] = ((BYTE*)dwTmp[bLog])[(i - 1)];
    } 
  }

  enviarPacotePC( bufOut, sizeof( bufOut ));    
}
Exemplo n.º 2
0
BOOL MFC_HW_Init(void)
{
    /////////////////////////
    //                     //
    // 1. Reset the MFC IP //
    //                     //
    /////////////////////////
    MfcReset();


    ////////////////////////////////////////
    //                                    //
    // 2. Download Firmware code into MFC //
    //                                    //
    ////////////////////////////////////////
    MfcFirmwareIntoCodeBuf();
    MfcFirmwareIntoCodeDownReg();
    RETAILMSG(ZONE_FUNCTION, (TEXT("MFC::MFC_HW_Init ::Download  FirmwareIntoBitProcessor  OK.\r\n")));


    ////////////////////////////
    //                        //
    // 3. Start Bit Processor //
    //                        //
    ////////////////////////////
    MfcStartBitProcessor();


    ////////////////////////////////////////////////////////////////////
    //                                                                //
    // 4. Set the Base Address Registers for the following 3 buffers  //
    //        (CODE_BUF, WORKING_BUF, PARAMETER_BUF)                  //
    //                                                                //
    ////////////////////////////////////////////////////////////////////
    MfcConfigSFR_BITPROC_BUF();


    //////////////////////////////////
    //                              //
    // 5. Set the Control Registers //
    //       - STRM_BUF_CTRL        //
    //       - FRME_BUF_CTRL        //
    //       - DEC_FUNC_CTRL        //
    //       - WORK_BUF_CTRL        //
    //                              //
    //////////////////////////////////
    MfcConfigSFR_CTRL_OPTS();



    GetFirmwareVersion();


    return TRUE;
}
Exemplo n.º 3
0
int main (int argc, char *argv[])
{
    float version = 0.0;
    long errorcode;

    long idnum = -1;  //Using first found U12
    long demo = 0;  //Normal operations
    long trisD = 0;  //Directions for D0-D15
    long trisIO = 0;  //Directions for IO0-IO3
    long stateD = 0;  //Output states for D0-D15
    long stateIO = 0;  //Output states for IO0-IO3
    long updateDigital = 0;  //Indicates is tris states will be written
    long outputD = 0;  //Returns of the output registers for D0-D15
    long outputIO = 0;  //Output states of IO0-IO3.  Cannot be read.


    version = GetDriverVersion();
    printf("Driver version: %.3f\n", version);

    version = GetFirmwareVersion(&idnum);
    printf("U12 Firmware version: %.3f\n\n", version);

    /* Setting and reading directions and states */
    trisD = (long)0x4800;  //Setting D0-7 to outputs, D8-15 to inputs (b0000000011111111)
    trisIO = (long)0x0;  //Setting IO0-1 to outputs, IO2-3 to inputs (b0011)
    stateD = (long)0x4800;  //Setting D0-3 to low. D4-7 to high (b0000000011110000)
    stateIO = (long)0x0;  //Setting IO0 to low. IO1 to high (b0010)
    outputIO = trisIO & stateIO;
    updateDigital = 1;  //Updating D and IO lines
    errorcode = DigitalIO(&idnum, demo, &trisD, trisIO, &stateD, &stateIO,
                          updateDigital, &outputD);
    handleError(errorcode, "DigitalIO (update)");

    printf("DigitalIO, updating lines\n");
    printf("D directions (read) = 0x%.4lx, states (read) = 0x%.4lx, output registers (read) = 0x%.4lx\n", trisD, stateD, outputD);
    printf("IO directions (set) = 0x%lx, states (read) = 0x%lx, output (set) = 0x%lx\n\n", trisIO, stateIO, outputIO);

    /* Only reading current directions (D lines only) and states */
    trisD = 0;
    trisIO = 0;
    stateD = 0;
    stateIO = 0;
    updateDigital = 0;  //Only read performed
    errorcode = DigitalIO(&idnum, demo, &trisD, trisIO, &stateD, &stateIO,
                          updateDigital, &outputD);
    handleError(errorcode, "DigitalIO (read)");

    printf("DigitalIO read only:\n");
    printf("D directions = 0x%.4lx, states = 0x%.4lx, output registers = 0x%.4lx\n", trisD, stateD, outputD);
    printf("IO states = 0x%lx\n", stateIO);

    return 0;
}
Exemplo n.º 4
0
int main(int argc, char **argv) {
    // GetFWVer
    GetFirmwareVersionResponse *gfw = GetFirmwareVersion();
    printf("Ver: %d, Rev: %d\n", gfw->Ver, gfw->Rev);
    free(gfw);

    InListPassiveTargetResponse *pt = InListPassiveTarget(2, 0, 0);
    printf("NbTg: %d\n", pt->NbTg);
    printf("Id: %x %x %x %x\n", pt->TargetData[5], pt->TargetData[6], pt->TargetData[7], pt->TargetData[8]);
    free(pt->TargetData);
    free(pt);
}
Exemplo n.º 5
0
int main (int argc, char *argv[])
{
	float version = 0.0;
	long errorcode = 0;

	long idnum = -1;  //Using first found U12
	long demo = 0;  //Normal operations
	long stateIO = 0;  //Output states for IO0-IO3

	//AOUpdate specific paramters
	long trisD = 0;  //Directions for D0-D15
	long trisIO = 0;  //Directions for IO0-IO3
	long stateD = 0;  //Output states for D0-D15
	long updateDigital = 0;  //Tris and state values are only being read
	long resetCounter = 0;  //Not resetting counter
	unsigned long count = 0;  //Returned current count value
	float analogOut0 = 0.8;  //Voltage for AO0
	float analogOut1 = 3.2;  //Voltage for AO1

	//AISample specific parameters
	long updateIO = 0;  //State values are only being read
	long ledOn = 0;  //Turning LED on
	long numChannels = 2;  //Reading 2 channels
	long channels[2] = {2, 3};  //Reading AI2 and AI3
	long gains[2] = {0, 0};  //Gains.  Does not matter in this case since we are
							 //performing single ended readings.
	long disableCal = 0;  //Will apply calibration constants
	long overVoltage = 0;  //Returns if overvoltage was detected (>1)
	float voltages[4] = {0};  //Returned voltage readings.  Pass an array of all zeros.

	version = GetDriverVersion();
	printf("Driver version: %.3f\n", version);

	version = GetFirmwareVersion(&idnum);
	printf("U12 Firmware version: %.3f\n\n", version);

	printf("Setting AO0 to %.3f V and AO1 to %.3f V\n", analogOut0, analogOut1);

	errorcode = AOUpdate(&idnum, demo, trisD, trisIO, &stateD,
					&stateIO, updateDigital, resetCounter, &count, analogOut0,
					analogOut1);
	handleError(errorcode, "AOUpdate");

	errorcode = AISample(&idnum, demo, &stateIO, updateIO, ledOn, 
					numChannels, channels, gains, disableCal, &overVoltage,
					voltages);
	handleError(errorcode, "AISample");

	printf("AI%ld = %.3fV\nAI%ld = %.3fV\n", channels[0], voltages[0], channels[1], voltages[1]);

	return 0;
}
Exemplo n.º 6
0
/**
 * Common initialization code called by all constructors.
 */
void CANJaguar::InitCANJaguar()
{
    m_table = NULL;
    m_transactionSemaphore = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
    if (m_deviceNumber < 1 || m_deviceNumber > 63)
    {
	char buf[256];
	snprintf(buf, 256, "device number \"%u\" must be between 1 and 63", m_deviceNumber);
	wpi_setWPIErrorWithContext(ParameterOutOfRange, buf);
	return;
    }
    uint32_t fwVer = GetFirmwareVersion();
    if (StatusIsFatal())
	return;
    // 3330 was the first shipping RDK firmware version for the Jaguar
    if (fwVer >= 3330 || fwVer < 101)
    {
	char buf[256];
	if (fwVer < 3330)
	{
	    snprintf(buf, 256, "Jag #%u firmware (%u) is too old (must be at least version 101 of the FIRST approved firmware)", m_deviceNumber, (u_int) fwVer);
	}
	else
	{
	    snprintf(buf, 256, "Jag #%u firmware (%u) is not FIRST approved (must be at least version 101 of the FIRST approved firmware)", m_deviceNumber, (u_int) fwVer);
	}
	wpi_setWPIErrorWithContext(JaguarVersionError, buf);
	return;
    }
    switch (m_controlMode)
    {
    case kPercentVbus:
    case kVoltage:
	// No additional configuration required... start enabled.
	EnableControl();
	break;
    default:
	break;
    }
    m_safetyHelper = new MotorSafetyHelper(this);

    nUsageReporting::report(nUsageReporting::kResourceType_CANJaguar, m_deviceNumber, m_controlMode);
    LiveWindow::GetInstance()->AddActuator("CANJaguar", 0, m_deviceNumber, this);
}
Exemplo n.º 7
0
// 자주사용되는 함수들..
//
bool	KPmacC::Open( int num )		// num < 0, num > 7 : 디바이스 선택,  7 >= num >= 0 : 열기시도
{
	// Pmac OpenRuntimeLink의 핸들을 얻어온다.
	if(m_hLink == NULL)
	{
		m_hLink = OpenRuntimeLink();	//Pmac Dll Load
		if(m_hLink == NULL)
		{
			DebugLog(_T("Lib Load Error"));
			return false;
		}
	}
	else
		return false;

    if ((num >= 0) && (num <= 7))
        m_nDevice = num;

    if ((m_nDevice < 0) || (m_nDevice > 7))
        m_nDevice = SelectDevice(0);
     
    if ((m_nDevice >= 0) && (m_nDevice <= 7))
        m_bConnected = DeviceOpen((UINT)m_nDevice);		//OpenPmacDevice((DWORD)m_nDevice);
    else
        m_bConnected = FALSE;

    if (m_bConnected)
    {
        GetPmacType();
        GetFirmwareVersion();
        GetFirmwareDate();
        GetServoCycle();
    }
    else
    {
		DebugLog(_T("Open Comm Error"));
        return false;
    }

    return true;
}
Exemplo n.º 8
0
BOOL CDevCProbe::Config(){
	char filename[MAX_PATH];
	LocalPathS(filename, TEXT("dlgDevCProbe.xml"));
	m_wf = dlgLoadFromXML(CallBackTable, filename, hWndMainWindow, TEXT("IDR_XML_DEVCPROBE"));

	((WndButton *)m_wf->FindByName(TEXT("cmdClose")))->SetOnClickNotify(OnCloseClicked);
	((WndButton *)m_wf->FindByName(TEXT("cmdSetCompassCal")))->SetOnClickNotify(OnCompassCalClicked);
	((WndButton *)m_wf->FindByName(TEXT("cmdSetCalGyro")))->SetOnClickNotify(OnCalGyroClicked);
	((WndButton *)m_wf->FindByName(TEXT("cmdZeroDeltaPress")))->SetOnClickNotify(OnZeroDeltaPressClicked);

	GetFirmwareVersion(m_pDevice);

	if(m_wf) {
		m_wf->SetTimerNotify(OnTimer);
		m_wf->ShowModal();

		delete m_wf;
		m_wf=NULL;
	}
	return TRUE;
}
Exemplo n.º 9
0
BOOL CDevCProbe::Config(PDeviceDescriptor_t d){
	if(m_pDevice != d) {
		StartupStore(_T("C-Probe Config : Invalide device descriptor%s"), NEWLINE);
		return FALSE;
	}

	m_wf = dlgLoadFromXML(CallBackTable, TEXT("dlgDevCProbe.xml"), IDR_XML_DEVCPROBE);

    WndButton *wBt = NULL;
            
	wBt = (WndButton *)m_wf->FindByName(TEXT("cmdClose"));
    if(wBt){
        wBt->SetOnClickNotify(OnCloseClicked);
    }
	wBt = (WndButton *)m_wf->FindByName(TEXT("cmdSetCompassCal"));
    if(wBt){
        wBt->SetOnClickNotify(OnCompassCalClicked);
    }
	wBt = (WndButton *)m_wf->FindByName(TEXT("cmdSetCalGyro"));
    if(wBt){
        wBt->SetOnClickNotify(OnCalGyroClicked);
    }
	wBt = (WndButton *)m_wf->FindByName(TEXT("cmdZeroDeltaPress"));
    if(wBt){
        wBt->SetOnClickNotify(OnZeroDeltaPressClicked);
    }

	GetFirmwareVersion(m_pDevice);

	if(m_wf) {
		m_wf->SetTimerNotify(1000, OnTimer);
		m_wf->ShowModal();

		delete m_wf;
		m_wf=NULL;
	}
	return TRUE;
}
Exemplo n.º 10
0
/**
 * Common initialization code called by all constructors.
 */
void CANJaguar::InitCANJaguar()
{
	m_transactionSemaphore = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
	if (m_deviceNumber < 1 || m_deviceNumber > 63)
	{
		// Error
		printf("ERROR: Invalid CAN device number \"%d\" - must be between 1 and 63.\n", m_deviceNumber);
		return;
	}
	UINT32 fwVer = GetFirmwareVersion();
	// 3330 was the first shipping RDK firmware version for the Jaguar
	if (fwVer >= 3330 || fwVer < 92)
	{
		printf("fwVersion[%d]: %d\n", m_deviceNumber, fwVer);
		if (fwVer < 3330)
		{
			printf("ERROR: Jaguar %d firmware is too old.  It must be updated to at least version 92 of the FIRST approved firmware!\n", m_deviceNumber);
		}
		else
		{
			printf("ERROR: Jaguar %d firmware is not FIRST approved.  It must be updated to at least version 92 of the FIRST approved firmware!\n", m_deviceNumber);
		}
		wpi_assertCleanStatus(kRIOStatusVersionMismatch);
		return;
	}
	switch (m_controlMode)
	{
	case kPercentVbus:
	case kVoltage:
		// No additional configuration required... start enabled.
		EnableControl();
		break;
	default:
		break;
	}
	m_safetyHelper = new MotorSafetyHelper(this);
}
Exemplo n.º 11
0
/**
 * Common initialization code called by all constructors. 
 */
void CANJaguar::InitJaguar()
{
	m_transactionSemaphore = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE | SEM_DELETE_SAFE);
	if (m_deviceNumber < 1 || m_deviceNumber > 63)
	{
		// Error
		return;
	}
	UINT32 fwVer = GetFirmwareVersion();
	printf("fwVersion[%d]: %d\n", m_deviceNumber, fwVer);
	if (fwVer >= 3330 || fwVer < 86)
	{
		wpi_assertCleanStatus(kRIOStatusVersionMismatch);
		return;
	}
	switch (m_controlMode)
	{
	case kPercentVoltage:
		sendMessage(LM_API_VOLT_T_EN | m_deviceNumber, NULL, 0);
		break;
	default:
		return;
	}
}
Exemplo n.º 12
0
//-----------------------------------------------------------------------------
void DAQInit(void) {

	// setup serial port
	for (uint8 i = 0; i < 2; i++) {
		if (!OpenPort())									// open port
			return;

		if (SyncComms(ANALOG))								// sync the analogue board comms
			break;
		
		CloseHandle(hSerialDaq);							// close serial port and try again
		Sleep(100);
	}
	if (hSerialDaq == INVALID_HANDLE_VALUE)
		serialRunning = false;
	if (serialRunning) {
		DEBUG_MESSAGE_EXT(_T("DAQ serial port opened successfully\r\n"));
	} else {
		ERROR_MESSAGE_EXT(_T("Failed to open DAQ serial port\r\n"));
	}

	if (!SyncComms(ANALOG)) {								// sync the analogue board comms
		ERROR_MESSAGE_EXT(_T("Failed to communicate with Analog board\r\n"));
		return;
	}
	if (!SyncComms(HK)) {									// sync the housekeeping board comms
		ERROR_MESSAGE_EXT(_T("Failed to communicate with Housekeeping board\r\n"));
		serialRunning = false;
		return;
	}

	// stop acquisition
	sprintf_s(command, "*S0");
	SendCommand();
	SendCommand();
	Sleep(100);

	FlushComms();

	// initialise housekeeping board
	HKFirmwareVersion = GetFirmwareVersion(HK);
	ChangeHWParam(HUMID_THRESH, humidThresh);
	ChangeHWParam(HUMID_HYSTERESIS, humidHysteresis);
	ChangeHWParam(FAN_THRESH, fanThresh);
	ChangeHWParam(FAN_HYSTERESIS, fanHysteresis);
	ChangeHWParam(HUMID_AUTO, OFF);
	ChangeHWParam(VALVE_DELAY, valveDelay);
	ChangeHWParam(FLASH_DAC, flashVoltage);			// flash control voltage NORMAL
	ChangeHWParam(FLASH_DELAY, flashDelay);			// flash delay
	ChangeHWParam(FLASH_LENGTH, flashPulseLength);	// flash pulse
	ChangeHWParam(CAMERA_LENGTH, cameraPulseLength);
	ChangeHWParam(STIRRER, OFF);					// stirrer off
	ChangeHWParam(CAMERA, ON);						// camera on
	ChangeHWParam(LASER, ON);						// laser on
	//ChangeHWParam(FANS, OFF);						// fans off
	ChangeHWParam(FILL1microinjector, OFF);						// valves off
	ChangeHWParam(FILL2bypassFilter, OFF);		// N.O. solenoid -- ON bypasses filter cartridge after flow cell 
	ChangeHWParam(FILL3newSheath, OFF);		// N.C. solenoid -- ON allows new SW for sheath
	ChangeHWParam(ISOL, OFF);
	ChangeHWParam(SPARE, OFF);
	ChangeHWParam(FLASH, ON);						// flashlamp
	ChangeHWParam(PMTA, 0.0);						// PMTs
	ChangeHWParam(PMTB, 0.0);
	ChangeHWParam(PMTC, 0.0);
	IfcbHandle->dacsOn = false;

	// pump driver board
	if (pumpDrive) {
		ChangeHWParam(PUMP1, ON);					// flashlamp
		Sleep(100);
		if (!SyncComms(ANALOG)) return;				// sync the analogue board comms
		if (!SyncComms(HK)) return;					// sync the housekeeping board comms
		if (!SyncComms(PUMP)) return;				// sync the pump board comms

		ChangeHWParam(PUMP_DAC, pumpVolts);
	}
	if (laserState & 1)								// laser power on/off	
		ChangeHWParam(LASER, ON);
	else
		ChangeHWParam(LASER, OFF);

	if (fill3newSheathState & 1)	{							// recirculate sheath or not
		ChangeHWParam(FILL3newSheath, ON); // 
		ChangeHWParam(FILL2bypassFilter, ON); // 
	}
	else {
		ChangeHWParam(FILL3newSheath, OFF);
		ChangeHWParam(FILL2bypassFilter, OFF);
	}

	if (pumpState & 1)								// pump1	
		ChangeHWParam(PUMP1, ON);
	else
		ChangeHWParam(PUMP1, OFF);
	if (pumpState & 2)								// pump2	
		ChangeHWParam(PUMP2, ON);
	else
		ChangeHWParam(PUMP2, OFF);

	// configure analog board
	AnalogFirmwareVersion = GetFirmwareVersion(ANALOG);
	ChangeHWParam(TRIGA, trigThreshA);
	ChangeHWParam(TRIGB, trigThreshB);
	ChangeHWParam(TRIGC, trigThreshC);
	ChangeHWParam(TRIGD, trigThreshD);
	ChangeHWParam(ADC_RATE, adcDrate);
	ChangeHWParam(INTEGRATOR_SETTLE, integratorSettleTime);
	ChangeHWParam(TRIG_MASK, triggerPulseMask);
	ChangeHWParam(PGA, adcPga);
	ChangeHWParam(TRIG_TIMEOUT, triggerTimeout);
	ChangeHWParam(PULSE_STRETCH, pulseStretchTime);
	ChangeHWParam(MAX_PULSE_STRETCH, maxPulseStretch);
	ChangeHWParam(HAS_CAMERA, hasCamera);
}
Exemplo n.º 13
0
int main (int argc, char *argv[])
{
	char fStr[50];
	float version = 0.0;
	long error = 0;
	int i = 0;

	long idnum = -1;  //Using first found U12
	long demo = 0;  //Normal operations
	long channel = 0;  //Channel to be read/set.  Used by multiple functions.
	long state = 0;  //Digital states to set or states read.  Used by digital functions.

	//EAnalogOut specific parameters
	float analogOut0 = 2.0, analogOut1 = 3.5;  //Voltages of AO0 and AO1 to set

	//EAnalogIn specific parameters
	long gain = 0;  //G=1, +-20 V (gain 0 = 1)
	long overVoltage = 0;  //Returns >0 if overvoltage is detected
	float voltage = 0.0;  //Returns the voltage reading

	//EDigitalOut specific paramters
	long writeD = 0;  //Indicates if D line is to be written instead of IO line

	//EDigitalIn specific paramters
	long readD = 0;  //Indicates if D line is read instead of IO line

	//ECount specific parameters
	long resetCounter = 0;  //Indicates if counter is reset to zero after read
	double count = 0;  //Current count before reset
	double ms = 0;  //Returns the number of milliseconds since the Epoch.


	version = GetDriverVersion();
	printf("Driver version: %.3f\n", version);

	version = GetFirmwareVersion(&idnum);
	printf("U12 Firmware version: %.3f\n\n", version);


	/* Setting analog outputs */
	printf("Setting AO0 to %.3f V and AO1 to %.3f V.\n\n", analogOut0, analogOut1);

	error = EAnalogOut(&idnum, demo, 2.0, 3.5);
	handleError(error, "EAnalogOut");

	/* Reading analog inputs */
	printf("Reading some analog inputs:\n");

	/* Reading from single-ended AI0 and AI1 */
	for(i = 0; i < 2; i++)
	{
		channel = i;
		error = EAnalogIn(&idnum, demo, channel, gain, &overVoltage, &voltage);
		sprintf(fStr, "EAnalogIn (%ld)", channel);
		handleError(error, fStr);

		printf("Single-ended AI%ld = %.3f V, overVoltage = %ld\n", channel, voltage, overVoltage);
	}
	printf("\n");

	/* Reading from differential AI0-AI1 (channel 8) and AI2-AI3 (channel 9), G=1 (+-20 V) */
	for(i = 8; i < 10; i+=1)
	{
		channel = i;
		error = EAnalogIn(&idnum, demo, channel, gain, &overVoltage, &voltage);
		sprintf(fStr, "EAnalogIn (%ld) diff.", channel);
		handleError(error, fStr);

		printf("Differential AI%ld-AI%ld = %.3f V, overVoltage = %ld\n", (channel-8)*2, (channel-8)*2+1, voltage, overVoltage);
	}


	/* Setting digital outputs */
	printf("\nSetting digital lines IO1 and D1 to output-low, and IO2 to output-high\n\n");	

	channel = 1;
	writeD = 0;
	state = 0;
	error = EDigitalOut(&idnum, demo, channel, writeD, state);
	handleError(error, "EDigitalOut (IO1)");

	channel = 1;
	writeD = 1;
	state = 0;
	error = EDigitalOut(&idnum, demo, channel, writeD, state);
	handleError(error, "EDigitalOut (D1)");

	channel = 2;
	writeD = 0;
	state = 1;
	error = EDigitalOut(&idnum, demo, channel, writeD, state);
	handleError(error, "EDigitalOut (IO2)");


	/* Reading digital inputs */
	printf("Reading some digital inputs:\n");

	channel = 0;
	readD = 0;
	error = EDigitalIn(&idnum, demo, channel, readD, &state);
	handleError(error, "EDigitalIn (IO0)");
	printf("IO%ld state = %ld\n", channel, state);

	channel = 0;
	readD = 1;
	error = EDigitalIn(&idnum, demo, channel, readD, &state);
	handleError(error, "EDigitalIn (D0)");
	printf("D%ld state = %ld\n\n", channel, state);


	/* Read from the Counter */

	//Reseting counter first
	printf("Reading Counter:\nResetting count and waiting 2 seconds for new data.\n");

	resetCounter = 1;
	error = ECount(&idnum, demo, resetCounter, &count, &ms);
	handleError(error, "ECount (reset)");

	//Wait for 2 seconds for data
	usleep(2000000);

	//Read Counter reading with 2 second timer
	resetCounter = 0;
	error = ECount(&idnum, demo, resetCounter, &count, &ms);
	handleError(error, "ECount (read)");

	printf("Count = %.0f, OS timer = %0.3f ms\n", count, ms);

	return 0;
}
void CNetworkControllView::Fresh()
{
	GetDlgItem(IDC_SERIALSTATIC)->SetFocus();
	m_IDaddress=multi_register_value[6];
	m_hardware_version=multi_register_value[8];
	m_nSerialNum=get_serialnumber();
	//m_firmwareVersion=get_curtstat_version();
	GetFirmwareVersion();
	m_nbldVersion = multi_register_value[14];
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_BLDVERSION);
	CString strBldVer; strBldVer.Format(_T("%d"), m_nbldVersion);
	pEdit->SetWindowText(strBldVer);
	if (m_nbldVersion < _OLD_NC_VERSION && !m_bWarningBldVersion && m_nSerialNum != 0 && m_hardware_version < 4) // 序列号不等于0防止掉线时版本寄存器为0弹这个消息
	{	
		m_bWarningBldVersion = TRUE;
		CString strBldVer;
		strBldVer.Format(_T("NC(ID: %d) boot loader's current version is %d, it's too low, please upgrade it."), m_nSerialNum, m_nbldVersion);
		AfxMessageBox(strBldVer);

	}
	m_hardware_version=multi_register_value[8];

	
	if(multi_register_value[1]<10)
		m_strDate.Format(_T("%d%d-%d-%d"),multi_register_value[200],multi_register_value[201],multi_register_value[202],multi_register_value[204]);
	else
		m_strDate.Format(_T("%d%d-%d-%d"),multi_register_value[0],multi_register_value[201],multi_register_value[202],multi_register_value[204]);


	m_strTime.Format(_T("%02d:%02d"),multi_register_value[205],multi_register_value[206]);

	
	m_ip_addressCtrl.SetAddress((BYTE)multi_register_value[107],(BYTE)multi_register_value[108],(BYTE)multi_register_value[109],(BYTE)multi_register_value[110]);
	m_subnet_addressCtrl.SetAddress((BYTE)multi_register_value[111],(BYTE)multi_register_value[112],(BYTE)multi_register_value[113],(BYTE)multi_register_value[114]);
	m_gateway_addressCtrl.SetAddress((BYTE)multi_register_value[115],(BYTE)multi_register_value[116],(BYTE)multi_register_value[117],(BYTE)multi_register_value[118]);
	OnBnClickedCheck1();
		
	if(multi_register_value[12]==0)
	{
		m_baudRateCombox.SetCurSel(0);
	}
		
	if(multi_register_value[12]==1)
	{
		m_baudRateCombox.SetCurSel(1);
	}

	
	if(multi_register_value[106]==0)
	{
		m_ipModelComBox.SetCurSel(0);
	}
	if(multi_register_value[106]==1)
	{
		m_ipModelComBox.SetCurSel(1);
	}


	
	m_nListenPort=multi_register_value[120];

	UpdateData(false);
}