119 lines
2.5 KiB
C++
119 lines
2.5 KiB
C++
//------------------------------------------------------------------
|
|
// qfixI2CMaster.h
|
|
//
|
|
// This is a convenience class for writing I2C master classes
|
|
// (like SlaveBoard).
|
|
// This class supports the qfix I2C protocol.
|
|
//
|
|
// Copyright 2005 by KTB mechatronics GmbH
|
|
// Author: Stefan Enderle
|
|
//------------------------------------------------------------------
|
|
|
|
|
|
#ifndef qfixI2CMaster_h
|
|
#define qfixI2CMaster_h
|
|
|
|
#include "qfixI2C.h"
|
|
#include "qfixI2CDefs.h"
|
|
|
|
const uint8_t CMD_PARAMS = 255; // the same for all boards
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
|
|
class I2CMaster
|
|
{
|
|
I2C i2c;
|
|
|
|
uint8_t brdID; // board ID (what board)
|
|
uint8_t logID; // logical ID (which one of these boards)
|
|
|
|
public:
|
|
/** boardID denotes the board (BobbyBoard, LCD, ...) that
|
|
* shall be used. The logical ID is set to 0.
|
|
*/
|
|
I2CMaster(uint8_t boardID);
|
|
|
|
/** boardID denotes the board (BobbyBoard, LCD, ...) that
|
|
* shall be used. logicalID is the sub-ID (e.g. which LCD).
|
|
*/
|
|
I2CMaster(uint8_t boardID, uint8_t logicalID);
|
|
|
|
void command(uint8_t cmd);
|
|
void command(uint8_t cmd, uint8_t param);
|
|
void command(uint8_t cmd, uint8_t param, uint8_t param2);
|
|
void command(uint8_t cmd, uint8_t param, uint8_t param2, uint8_t param3);
|
|
uint8_t request(uint8_t cmd, uint8_t param);
|
|
};
|
|
|
|
|
|
I2CMaster::I2CMaster(uint8_t boardID)
|
|
: i2c(), brdID(boardID), logID(0)
|
|
{
|
|
}
|
|
|
|
|
|
I2CMaster::I2CMaster(uint8_t boardID, uint8_t logicalID)
|
|
: i2c(), brdID(boardID), logID(logicalID)
|
|
{
|
|
}
|
|
|
|
|
|
|
|
void I2CMaster::command(uint8_t cmd)
|
|
{
|
|
uint8_t buf[2];
|
|
|
|
buf[0] = logID;
|
|
buf[1] = cmd;
|
|
i2c.send(brdID, buf, 2);
|
|
}
|
|
|
|
void I2CMaster::command(uint8_t cmd, uint8_t param)
|
|
{
|
|
uint8_t buf[3];
|
|
|
|
buf[0] = logID;
|
|
buf[1] = cmd;
|
|
buf[2] = param;
|
|
i2c.send(brdID, buf, 3);
|
|
}
|
|
|
|
void I2CMaster::command(uint8_t cmd, uint8_t param, uint8_t param2)
|
|
{
|
|
uint8_t buf[4];
|
|
|
|
buf[0] = logID;
|
|
buf[1] = cmd;
|
|
buf[2] = param;
|
|
buf[3] = param2;
|
|
i2c.send(brdID, buf, 4);
|
|
}
|
|
|
|
void I2CMaster::command(uint8_t cmd, uint8_t param, uint8_t param2, uint8_t param3)
|
|
{
|
|
uint8_t buf[5];
|
|
|
|
buf[0] = logID;
|
|
buf[1] = cmd;
|
|
buf[2] = param;
|
|
buf[3] = param2;
|
|
buf[4] = param3;
|
|
i2c.send(brdID, buf, 5);
|
|
}
|
|
|
|
|
|
uint8_t I2CMaster::request(uint8_t cmd, uint8_t param)
|
|
{
|
|
// send command and params first //
|
|
command(CMD_PARAMS, cmd, param);
|
|
|
|
// get return value //
|
|
uint8_t buf[10];
|
|
i2c.get(brdID, buf, 1);
|
|
return(buf[0]);
|
|
}
|
|
|
|
|
|
#endif
|
|
|