Code Search for Developers
 
 
  

CTestThread.cpp from Make Controller at Krugle


Show CTestThread.cpp syntax highlighted

/****************************************************************************
**
** Qt SAM7X Uploader.
** MakingThings 2006.
**
****************************************************************************/

#include "CTestThread.h"
#include "CTestWindow.h"
#include "CTestee.h"
#include "CTester.h"

CTestThread::CTestThread( QApplication* application, CTestWindow* cTestWindow ) : QThread()
{
  this->application = application;
  this->cTestWindow = cTestWindow;
  
  cTester = new CTester( this );
	cTestee = new CTestee( this );
}


void CTestThread::run()
{
	CTester::Status cTesterStatus;
	CTestee::Status cTesteeStatus;
	
	status( "Initializing" );

	message( 1, "Initializing Tester Comms..." );
	cTesterStatus = cTester->start();
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED\n" );
		message( 1, "  ** Are you running dumpOsc or similar on port 12000?\n" );
		cTester->stop();
		return;
	}
	else
	  message( 1, "OK\n" );
	
	message( 1, "Checking Tester Program..." );
	cTesterStatus = cTester->checkForTesterProgram();
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED - No program\n" );
		message( 1, "  ** Make sure the tester has power\n" );
		message( 1, "  ** Make sure the tester's LED is blinking\n" );
		message( 1, "  ** Make sure the ethernet cable is plugged into the tester\n" );
		cTester->stop();
		return;
	}
	else
	  message( 1, "OK\n" );
	
	message( 1, "Initializing Testee..." );
	cTesteeStatus = cTestee->start();
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - Couldn't start\n" );
		message( 1, "  ** Are you running dumpOsc or similar on port 10000?\n" );
		cTester->stop();
		cTestee->stop();
		return;
	}
	else
	  message( 1, "OK\n" );
	  
	status( "Testing" );
		
	message( 1, "Testing Current @ 3.3V... " );
	cTesterStatus = cTester->testeePowerUp3_3V();
	
	sleepMs( 250 );
	
	int current;
	cTesterStatus = cTester->testeeReadCurrent( &current );
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED - Testee failed to read currrent\n" );
		failed();
		return;
	}

	message( 1, "%dmA ", current );

  if ( current < 30 )
	{
		message( 1, "FAILED - Current Too Low\n" );
		failed();
		return;
	}
  if ( current > 200 )
	{
		message( 1, "FAILED - Current Too High\n" );
		message( 1, "  ** Check for bridges from 3.3V lines to Ground\n" );
		message( 1, "  ** Check for bridges from V+ lines to Ground\n" );
		failed();
		return;
	}
	
	message( 1, "OK\n" );
	
	if ( current > 60 )
	{
		message( 1, "Checking for pre-programmed Testee..." );

		// Suspect that it's already programmed... check...
		sleep( 5 );
		cTesteeStatus = cTestee->checkForTestProgram();
		if ( cTesteeStatus == CTestee::OK )
		{
			message( 1, "Already Programmed\n" );
			message( 1, "Erasing..." );
		  cTesteeStatus = cTestee->requestErase();	
			message( 1, "OK\n" );
		  
		  sleep( 1 );
		}
		else
		{
			message( 1, "No Program\n" );
  		message( 1, "Current of %d is too high", current );
      failed();				
      return;	
		}
	}	

	message( 1, "Testing Current @ V+... " );
	
	cTesterStatus = cTester->testeePowerDown();

  sleepMs( 250 );
  
	cTesterStatus = cTester->testeePowerUpVPlus();

  sleep( 1 );

	cTesterStatus = cTester->testeeReadCurrent( &current );
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED - could not read current\n" );
		failed();
		return;
	}

	message( 1, "%dmA ", current );
	
  if ( current < 30 )
	{
		message( 1, "FAILED - Current Too Low\n" );
		message( 1, "  ** Check board is inserted properly\n" );
		failed();
		return;
	}
  if ( current > 60 )
	{
		message( 1, "FAILED - Current Too High\n" );
		message( 1, "  ** Check for bridges from V+ lines to Gnd\n" );
		message( 1, "  ** Check on-board regulator\n" );
		failed();
		return;
	}
	
	message( 1, "OK\n" );
	
	message( 1, "Testing 3.3V Voltage... " );
	
	int voltage;
	cTesterStatus = cTester->testeeReadVoltage( &voltage );
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED - Testee failed to read voltage\n" );
		failed();
		return;
	}

	message( 1, "%2.2fV ", (float)voltage/1000.0 );

  if ( voltage < 3200 )
	{
		message( 1, "FAILED - Voltage Too Low\n" );
		message( 1, "  ** Check regulator\n" );
		failed();
		return;
	}
	
  if ( voltage > 3400 )
	{
		message( 1, "FAILED - Voltage Too High\n" );
		message( 1, "  ** Check regulator\n" );
		failed();
		return;
	}
	message( 1, "OK\n" );
		
	message( 1, "Programming..." );
	cTesteeStatus = cTestee->flash();
	if ( cTesteeStatus != CTestee::OK )
	{
		switch ( cTesteeStatus )
		{
			case CTestee::ERROR_COULDNT_CONNECT:
    		message( 1, "FAILED - Couldn't Connect" );
    		message( 1, "  ** Check USB cable is plugged into the testee\n" );
    		message( 1, "  ** Check USB lines on board\n" );
			  break;
			case CTestee::ERROR_WEIRD_CHIP:
    		message( 1, "FAILED - Strange Chip ID" );
    		message( 1, "  ** Check Atmel chip on board\n" );
			  break;
			case CTestee::ERROR_NO_CTESTEE_BIN:
    		message( 1, "FAILED - Couldn't find ctestee.bin" );
    		message( 1, "  ** Make sure the ctestee.bin is in the current directory\n" );
			  break;
			case CTestee::ERROR_COULDNT_DOWNLOAD:
    		message( 1, "FAILED - Couldn't complete download" );
    		message( 1, "  ** Noisey power supply?\n");
    		message( 1, "  ** Flakey USB connection?\n" );
    		message( 1, "  ** Processor not running right?\n" );
			  break;
			default:
    		message( 1, "FAILED - Unknown Error - %d", cTesteeStatus );
    		message( 1, "  ** Please note error number\n");
			  break;			  
		}
		failed();
		return;
	}		
	message( 1, "OK\n" );

  message( 1, "Checking for Successful Download..." );
	cTesterStatus = cTester->testeePowerDown();

  sleepMs( 250 );
  
	cTesterStatus = cTester->testeePowerUpVPlus();

  sleep( 6 );
  
	cTesteeStatus = cTestee->checkForTestProgram();
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - No Test Program after download\n" );
    message( 1, "  ** Check ethernet cable is plugged into the testee\n" );
    message( 1, "  ** Check ethernet circuit on board\n" );
    failed();
    return;
	}
	else
	  message( 1, "OK\n" );
  
	message( 1, "Testing IO - All Lines OFF..." );
	cTesterStatus = cTester->ioPattern( 0 );
	cTesteeStatus = cTestee->ioPattern( 0 );

	sleep( 1 );
	
  int ioResults;
  
  cTesterStatus = cTester->ioTest( &ioResults);
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED - no results\n" );
    message( 1, "  ** Check ethernet circuit on board\n" );
    message( 1, "  ** Processor not running right?\n" );
   	failed();
		return;
	}

  if ( ioResults != 0 )
	{
		message( 1, "FAILED - %d\n", ioResults );
		unpackResults( ioResults );
		failed();
		return;
	}
  
  message( 1, "OK\n" );
  
	message( 1, "Testing IO - All Lines ON..." );

	cTesterStatus = cTester->ioPattern( 1 );
	cTesteeStatus = cTestee->ioPattern( 1 );

	sleepMs( 100 );

	cTesterStatus = cTester->ioTest( &ioResults );
	if ( cTesterStatus != CTester::OK )
	{
		message( 1, "FAILED - no results\n" );
    message( 1, "  ** Check ethernet circuit on board\n" );
    message( 1, "  ** Processor not running right?\n" );
		failed();
		return;
	}

  if ( ioResults != 0 )
	{
		message( 1, "FAILED %d\n", ioResults );
		unpackResults( ioResults );
		failed();
		return;
	}	
  message( 1, "OK\n" );
	
  message( 1, "Testing EEPROM..." );	

	cTesteeStatus = cTestee->eepromTest( );
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - Testee failed EEPROM test\n" );
		failed();
		return;
	}
	else
    message( 1, "OK\n" );
    
  message( 1, "Testing CAN Chip Off..." );	

	cTesterStatus = cTester->canOut( 0 );
	cTesteeStatus = cTestee->canOut( 0 );

  sleepMs( 100 );
  
  int value;
	cTesteeStatus = cTestee->canIn( &value );
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - Got no value\n" );
		message( 1, "  ** Check Correct ctestee.bin version\n" );
		failed();
		return;
	}

  if ( value != 1 )
  {
		message( 1, "FAILED - Got dominant\n" );
		message( 1, "  ** Check output on CAN chip\n" );
		failed();
		return;
  }  	
  
  message( 1, "OK\n" );
  
  message( 1, "Testing CAN Chip On, No Signal..." );	

	cTesteeStatus = cTestee->canOut( 1 );

  sleepMs( 100 );
  
	cTesteeStatus = cTestee->canIn( &value );
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - Got no value\n" );
		message( 1, "  ** Check Correct ctestee.bin version\n" );
		failed();
		return;
	}

  if ( value != 1 )
  {
		message( 1, "FAILED - Got dominant with chip on but no signal\n" );
		message( 1, "  ** Check CAN IO lines on board to connector\n" );
		failed();
		return;
  }  	

  message( 1, "OK\n" );
  
  message( 1, "Testing CAN Chip On, Signal..." );	

	cTesteeStatus = cTestee->canOut( 2 );

  sleepMs( 100 );
  
	cTesteeStatus = cTestee->canIn( &value );
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - Got no value\n" );
		message( 1, "  ** Check Correct ctestee.bin version\n" );
		failed();
		return;
	}

  if ( value != 0 )
  {
		message( 1, "FAILED - Signalling, but no signal\n" );
		message( 1, "  ** Check CAN chip\n" );
		message( 1, "  ** Check CAN Rx lines\n" );
		failed();
		return;
  }  	
  
  message( 1, "OK\n" );

  message( 1, "Testing CAN IO..." );	

	cTesterStatus = cTester->canOut( 2 );
	cTesteeStatus = cTestee->canOut( 1 );

  sleepMs( 100 );
  
	cTesteeStatus = cTestee->canIn( &value );
	if ( cTesteeStatus != CTestee::OK )
	{
		message( 1, "FAILED - Got no value\n" );
		message( 1, "  ** Check Correct ctestee.bin version\n" );
		failed();
		return;
	}

  if ( value != 0 )
  {
		message( 1, "FAILED - No dominant signal\n" );
		message( 1, "  ** Check CAN IO lines on board\n" );
		failed();
		return;
  }  	
  
  cTesterStatus = cTester->canOut( 0 );

  message( 1, "OK\n" );
  
	reset();
	
	status( "OK" );
	message( 1, "TESTING COMPLETE - ALL OK\n" );
}

void CTestThread::unpackResults( int results )
{
	int i;
	int mask = 1;
	
  for ( i = 0; i < 31; i++ )
  {
    if ( results & mask )
      message( 1, "  Line %d Failed\n", i );
    mask <<= 1;	
  }
}

void CTestThread::message( int level, char *format, ... )
{
	va_list args;
	char buffer[ 1000 ];
	
	va_start( args, format );
	vsnprintf( buffer, 1000, format, args );
	va_end( args );
	
	CTEvent* ctEvent = new CTEvent( false, level, buffer );
	
	if( level == 1 )
	  application->postEvent( cTestWindow, ctEvent );
}

void CTestThread::sleepMs( int ms )
{
  usleep( ms * 1000 );	
}

void CTestThread::failed( )
{
  status( "FAILED" );
	cTester->testeePowerDown();
	cTester->stop();
	cTestee->stop();
}

void CTestThread::reset( )
{
	cTestee->stop();
	cTester->testeePowerDown();
	cTester->stop();
}

void CTestThread::status( char *text )
{
	CTEvent* ctEvent = new CTEvent( true, 0, text );
	
	application->postEvent( cTestWindow, ctEvent );
}

CTEvent::CTEvent( bool statusBound, int level, char* message ) : QEvent( (Type)10000 )
{
	this->statusBound = statusBound;
	this->level = level;
	
  if ( message != 0 )
	  this->message = strdup( message ); 
	else
	  this->message = 0;
}

CTEvent::~CTEvent( )
{
  if ( message != 0 )
    free( message );
}





See more files for this project here

Make Controller

The Make Controller is an open microcontroller platform for Makers of all kinds, by MakingThings. This project maintains the official firmware for the board and source for the software tools used with the board.

Project homepage: http://sourceforge.net/projects/makingthings
Programming language(s): C,C#,C++
License: other

  .externalToolBuilders/
    qmake.launch
  debug/
    ctest.exe
    ctestee.bin
    moc_CTestThread.cpp
    moc_CTestWindow.cpp
    test.bin
  io_win32/
    FCPipe.cpp
    FCPipe.h
    FCPipeUSB.cpp
    FCPipeUSB.h
    FC_Error.h
    SAM-BA.dll
    SAMBADLL.cpp
    SAMBADLL.h
    timer.cpp
    timer.h
    xmodem.cpp
    xmodem.h
  release/
    ctest.exe
    moc_CTestThread.cpp
    moc_CTestWindow.cpp
  .cdtproject
  .project
  CTestThread.cpp
  CTestThread.h
  CTestWindow.cpp
  CTestWindow.h
  CTestee.cpp
  CTestee.h
  CTester.cpp
  CTester.h
  Makefile
  Makefile.Debug
  Makefile.Release
  MessageInterface.h
  Osc.cpp
  Osc.h
  PacketInterface.h
  PacketUdp.cpp
  PacketUdp.h
  Samba.cpp
  Samba.h
  SetupAPI.Lib
  SetupAPI.h
  ctest.pro
  ctest.ui
  guid829.h
  loader256_data.h
  main.cpp
  object_script.ctest.Debug
  object_script.ctest.Release
  test.bin
  ui_ctest.h