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; }