Example #1
0
void C1Wire::SensorThread()
{
	int pollPeriod = m_sensorThreadPeriod;
	int pollIterations = 1;

	if (pollPeriod > 1000)
	{
		pollIterations = pollPeriod / 1000;
		pollPeriod = 1000;
	}

	int iteration = 0;

	m_bSensorFirstTime = true;

	while (!m_stoprequested)
	{
		sleep_milliseconds(pollPeriod);
		if (0 == iteration++ % pollIterations) // may glitch on overflow, not disastrous
		{
			if (m_bSensorFirstTime)
			{
				m_bSensorFirstTime = false;
				BuildSensorList();
			}

			PollSensors();
		}
	}

	_log.Log(LOG_STATUS, "1-Wire: Sensor thread terminating");
}
// 1st package
int Roomba::GetRBump(){
	// using package 1, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 1);
	
	if(dataBytes == 10)
		return(sensorData[0] & B00000001);
	else
		return -1;	
}
unsigned int Roomba::GetBatteryCapacity(){
	// using package 3, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 3);
	
	if(dataBytes == 10)
		return(word(sensorData[8], sensorData[9]));
	else
		return -1;	
}
int Roomba::GetBatteryTemperature(){
	// using package 3, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 3);
	
	if(dataBytes == 10)
		return((int)sensorData[5]);
	else
		return -1;	
}
int Roomba::GetBatteryMilliAmps(){
	// using package 3, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 3);
	
	if(dataBytes == 10)
		return((int)word(sensorData[3], sensorData[4]));
	else
		return -1;	
}
int Roomba::GetAngle(){
	// using package 1, 10 bytes
	byte sensorData[6];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 2);
	
	if(dataBytes == 6)
		return((int)word(sensorData[4], sensorData[5]));
	else
		return -1;
}
int Roomba::GetPowerButton(){
	// using package 1, 10 bytes
	byte sensorData[6];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 2);
	
	if(dataBytes == 6)
		return((bool)(sensorData[1] & B00001000));
	else
		return -1;
}
int Roomba::GetRemoteControl(){
	// using package 1, 10 bytes
	byte sensorData[6];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 2);
	
	if(dataBytes == 6)
		return((byte)sensorData[0]);
	else
		return -1;
}
int Roomba::GetRDirt(){
	// using package 1, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 1);
	
	if(dataBytes == 10)
		return((byte)sensorData[9]);
	else
		return -1;	
}
int Roomba::GetLMotorOC(){
	// using package 1, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 1);
	
	if(dataBytes == 10)
		return(bool(sensorData[7] & B00010000));
	else
		return -1;	
}
int Roomba::GetVWall(){
	// using package 1, 10 bytes
	byte sensorData[10];
	int dataBytes = 0;
	dataBytes = PollSensors(sensorData, 1);
	
	if(dataBytes == 10)
		return(sensorData[6]);
	else
		return -1;	
}