There is notno need to have a SendCommand in there.
UPDATE
Here is my suggestion for a controller class
public class Controller
{
private const int ReadFirmwareVersionCmd = 71;
private const int PassThroughCommandCmd = 200;
private int _controllerNumber;
public Controller(int controllerNumber)
{
_controllerNumber = controllerNumber;
O2Sensors = new List<O2Sensor>();
}
public List<O2Sensor> O2Sensors { get; private set; }
private void SendControllerCommand(int controllerCommand)
{
Controller.SendCan(8, _controllerNumber, controllerCommand);
}
public void SendSensorCommand(int sensorType, int sensorNo, int sensorCommand)
{
Controller.SendCan(8, _controllerNumber, PassThroughCommandCmd, sensorType, sensorNo, sensorCommand);
}
private static void SendCan(int deviceType, int deviceNo, int commandNo)
{
// ...
}
private static void SendCan(int deviceType, int deviceNo, int commandNo,
int sensorType, int sensorNo, int sensorCommand)
{
// ...
}
public void ReadFirmwareVersion( )
{
SendControllerCommand(ReadFirmwareVersionCmd);
}
}
I would derive all the sensor types from a common base
public abstract class SensorBase
{
protected Controller _controller;
protected int _sensorNo;
public SensorBase(Controller controller, int sensorNo)
{
_controller = controller;
_sensorNo = sensorNo;
}
public abstract void Read();
}
An O2-sensor as an example for a sensor
public class O2Sensor : SensorBase
{
public O2Sensor(Controller controller, int sensorNo)
: base(controller, sensorNo)
{
}
public override void Read()
{
_controller.SendSensorCommand(16, _sensorNo, 0);
}
}
You can initialize a controller like this
var controller1 = new Controller(1);
controller1.O2Sensors.Add(new O2Sensor(controller1, 1));
controller1.O2Sensors.Add(new O2Sensor(controller1, 2));
Now you can read an O2-sensor like this
controller1.O2Sensors[1].Read();