7 #include "HiTechnicColorSensor.h"
8 #include "DigitalModule.h"
10 #include "NetworkCommunication/UsageReporting.h"
11 #include "networktables2/type/NumberArray.h"
12 #include "WPIErrors.h"
14 const uint8_t HiTechnicColorSensor::kAddress;
15 const uint8_t HiTechnicColorSensor::kManufacturerBaseRegister;
16 const uint8_t HiTechnicColorSensor::kManufacturerSize;
17 const uint8_t HiTechnicColorSensor::kSensorTypeBaseRegister;
18 const uint8_t HiTechnicColorSensor::kSensorTypeSize;
19 const uint8_t HiTechnicColorSensor::kModeRegister;
20 const uint8_t HiTechnicColorSensor::kColorRegister;
21 const uint8_t HiTechnicColorSensor::kRedRegister;
22 const uint8_t HiTechnicColorSensor::kGreenRegister;
23 const uint8_t HiTechnicColorSensor::kBlueRegister;
24 const uint8_t HiTechnicColorSensor::kRawRedRegister;
25 const uint8_t HiTechnicColorSensor::kRawGreenRegister;
26 const uint8_t HiTechnicColorSensor::kRawBlueRegister;
42 m_i2c = module->
GetI2C(kAddress);
45 const uint8_t kExpectedManufacturer[] =
"HiTechnc";
46 const uint8_t kExpectedSensorType[] =
"ColorPD ";
47 if ( ! m_i2c->
VerifySensor(kManufacturerBaseRegister, kManufacturerSize, kExpectedManufacturer) )
49 wpi_setWPIError(CompassManufacturerError);
52 if ( ! m_i2c->
VerifySensor(kSensorTypeBaseRegister, kSensorTypeSize, kExpectedSensorType) )
54 wpi_setWPIError(CompassTypeError);
57 nUsageReporting::report(nUsageReporting::kResourceType_HiTechnicColorSensor, moduleNumber - 1);
89 m_i2c->
Read(kColorRegister,
sizeof(color), &color);
109 if(m_mode != kActive)
115 m_i2c->
Read(kRedRegister,
sizeof(red), &red);
135 if(m_mode != kActive)
141 m_i2c->
Read(kGreenRegister,
sizeof(green), &green);
161 if(m_mode != kActive)
167 m_i2c->
Read(kBlueRegister,
sizeof(blue), &blue);
186 uint8_t colors[3] = {0,0,0};
189 if(m_mode != kActive)
195 m_i2c->
Read(kRawRedRegister,
sizeof(colors), (uint8_t*)&colors);
198 result.red = colors[0];
199 result.green = colors[1];
200 result.blue = colors[2];
220 if(m_mode == kActive)
226 m_i2c->
Read(kRawRedRegister,
sizeof(rawRed), (uint8_t *)&rawRed);
244 uint16_t rawGreen = 0;
246 if(m_mode == kActive)
252 m_i2c->
Read(kRawGreenRegister,
sizeof(rawGreen), (uint8_t *)&rawGreen);
270 uint16_t rawBlue = 0;
272 if(m_mode == kActive)
278 m_i2c->
Read(kRawBlueRegister,
sizeof(rawBlue), (uint8_t *)&rawBlue);
299 uint8_t colors[6] = {0,0,0,0,0,0};
302 if(m_mode != kActive)
308 m_i2c->
Read(kRedRegister,
sizeof(colors), (uint8_t*)&colors);
311 result.red = (colors[0]<<8) + colors[1];
312 result.green = (colors[2]<<8) + colors[3];
313 result.blue = (colors[4]<<8) + colors[5];
331 m_i2c->
Write(kModeRegister, (uint8_t)mode);
338 std::string HiTechnicColorSensor::GetType()
355 if (m_table != NULL) {
virtual ~HiTechnicColorSensor()
virtual void StopLiveWindowMode()
virtual void PutNumber(std::string key, double value)=0
virtual void InitTable(ITable *subtable)
HiTechnicColorSensor(uint8_t moduleNumber)
void SetMode(tColorMode mode)
bool Read(uint8_t registerAddress, uint8_t count, uint8_t *data)
static DigitalModule * GetInstance(uint8_t moduleNumber)
virtual void PutValue(std::string key, ComplexData &value)=0
bool VerifySensor(uint8_t registerAddress, uint8_t count, const uint8_t *expected)
virtual ITable * GetTable()
I2C * GetI2C(uint32_t address)
bool Write(uint8_t registerAddress, uint8_t data)
virtual void UpdateTable()
virtual void StartLiveWindowMode()