t6713: Static analysis fixes

Updated t6713 to use class instances vs class pointers.  Creating these
on the stack clears up some memory leaks where items created in the
heap are not deleted for a handful of the throw conditions.  Removed
all news/deletes.

Also reformatted to remove tabs and some spaces.

Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit is contained in:
Noel Eck 2017-03-07 12:04:23 -08:00
parent b314f56c00
commit b3a5275183
2 changed files with 228 additions and 245 deletions

View File

@ -51,20 +51,14 @@
using namespace upm;
using namespace upm::t6713_co2;
T6713::T6713 (int bus)
T6713::T6713 (int bus) : i2c(bus)
{
i2c = new mraa::I2c(bus);
status = i2c->address(T6713_ADDR);
status = i2c.address(T6713_ADDR);
uint16_t firmwareRevision = getFirmwareRevision();
if (firmwareRevision != mraa::SUCCESS)
UPM_THROW("config failure");
}
T6713::~T6713()
{
delete i2c;
}
uint16_t T6713::getFirmwareRevision()
{
return(getSensorData(T6713_COMMAND_GET_FIRMWARE_REVISION));
@ -104,26 +98,25 @@ uint16_t T6713::getSensorData (MODBUS_COMMANDS cmd)
//printf("\nI2C mode set\n");
data = 0;
runCommand(cmd);
mraa::Result ret = i2c->address(T6713_ADDR);
mraa::Result ret = i2c.address(T6713_ADDR);
if (ret != mraa::SUCCESS)
{
UPM_THROW ("I2C error setting slave address");
// TODO: need to handle this
}
RESPONSE * response = new RESPONSE ;
if((readBytes = i2c->read((uint8_t*)(response), sizeof(RESPONSE) ) != sizeof(RESPONSE)))
RESPONSE response;
if((readBytes = i2c.read((uint8_t*)(&response), sizeof(RESPONSE) ) != sizeof(RESPONSE)))
{
UPM_THROW("I2C read failed");
// TODO
}
if(response->function_code == READ_INPUT_REGISTERS)
if(response.function_code == READ_INPUT_REGISTERS)
{
if(response->byte_count == 2)
if(response.byte_count == 2)
{
data = (response->status_msb << 8 | response->status_lsb);
data = (response.status_msb << 8 | response.status_lsb);
}
}
delete(response); response=NULL;
return(data);
break;
}
@ -138,35 +131,34 @@ uint16_t T6713::getSensorData (MODBUS_COMMANDS cmd)
mraa::Result T6713::runCommand(MODBUS_COMMANDS cmd)
{
COMMAND * cmdPacket = new COMMAND ;
COMMAND cmdPacket;
mraa::Result ret = mraa::SUCCESS;
switch(cmd)
{
case T6713_COMMAND_RESET:
cmdPacket->function_code = WRITE_SINGLE_COIL;
cmdPacket->register_address_msb = (T6713_REG_RESET_DEVICE >> 8);
cmdPacket->register_address_lsb = (T6713_REG_RESET_DEVICE & 0xff);
cmdPacket->input_registers_to_read_msb = 0xff;
cmdPacket->input_registers_to_read_lsb = 0x00;
ret = i2c->write((const uint8_t*) (cmdPacket), sizeof(COMMAND));
cmdPacket.function_code = WRITE_SINGLE_COIL;
cmdPacket.register_address_msb = (T6713_REG_RESET_DEVICE >> 8);
cmdPacket.register_address_lsb = (T6713_REG_RESET_DEVICE & 0xff);
cmdPacket.input_registers_to_read_msb = 0xff;
cmdPacket.input_registers_to_read_lsb = 0x00;
ret = i2c.write((const uint8_t*) (&cmdPacket), sizeof(COMMAND));
/*no response from the slave */
break;
case T6713_COMMAND_STATUS:
/*created the modbus status command packet*/
cmdPacket->function_code = READ_INPUT_REGISTERS;
cmdPacket->register_address_msb = (T6713_REG_STATUS >> 8);
cmdPacket->register_address_lsb = (T6713_REG_STATUS & 0xff);
cmdPacket->input_registers_to_read_msb = 0;
cmdPacket->input_registers_to_read_lsb = 1;
ret = i2c->address(T6713_ADDR);
cmdPacket.function_code = READ_INPUT_REGISTERS;
cmdPacket.register_address_msb = (T6713_REG_STATUS >> 8);
cmdPacket.register_address_lsb = (T6713_REG_STATUS & 0xff);
cmdPacket.input_registers_to_read_msb = 0;
cmdPacket.input_registers_to_read_lsb = 1;
ret = i2c.address(T6713_ADDR);
if (ret != mraa::SUCCESS)
{
UPM_THROW ("I2C error setting slave address");
}
if((ret = i2c->write((const uint8_t*) (cmdPacket), sizeof(COMMAND))) != mraa::SUCCESS)
if((ret = i2c.write((const uint8_t*) (&cmdPacket), sizeof(COMMAND))) != mraa::SUCCESS)
{
UPM_THROW("I2C write failed");
}
@ -174,21 +166,21 @@ mraa::Result T6713::runCommand(MODBUS_COMMANDS cmd)
break;
case T6713_COMMAND_GET_FIRMWARE_REVISION:
cmdPacket->function_code = READ_INPUT_REGISTERS;
cmdPacket->register_address_msb = (T6713_REG_FIRMWARE_REVISION >> 8);
cmdPacket->register_address_lsb = (T6713_REG_FIRMWARE_REVISION & 0xff);
cmdPacket->input_registers_to_read_msb = 0;
cmdPacket->input_registers_to_read_lsb = 1;
ret = i2c->write((const uint8_t*) (cmdPacket), sizeof(COMMAND));
cmdPacket.function_code = READ_INPUT_REGISTERS;
cmdPacket.register_address_msb = (T6713_REG_FIRMWARE_REVISION >> 8);
cmdPacket.register_address_lsb = (T6713_REG_FIRMWARE_REVISION & 0xff);
cmdPacket.input_registers_to_read_msb = 0;
cmdPacket.input_registers_to_read_lsb = 1;
ret = i2c.write((const uint8_t*) (&cmdPacket), sizeof(COMMAND));
break;
case T6713_COMMAND_GET_GAS_PPM:
cmdPacket->function_code = READ_INPUT_REGISTERS;
cmdPacket->register_address_msb = (T6713_REG_GAS_PPM >> 8);
cmdPacket->register_address_lsb = (T6713_REG_GAS_PPM & 0xff);
cmdPacket.function_code = READ_INPUT_REGISTERS;
cmdPacket.register_address_msb = (T6713_REG_GAS_PPM >> 8);
cmdPacket.register_address_lsb = (T6713_REG_GAS_PPM & 0xff);
cmdPacket->input_registers_to_read_msb = 0;
cmdPacket->input_registers_to_read_lsb = 1;
ret = i2c->address(T6713_ADDR);
cmdPacket.input_registers_to_read_msb = 0;
cmdPacket.input_registers_to_read_lsb = 1;
ret = i2c.address(T6713_ADDR);
if (ret != mraa::SUCCESS)
{
UPM_THROW ("I2C error setting slave address");
@ -196,14 +188,13 @@ mraa::Result T6713::runCommand(MODBUS_COMMANDS cmd)
}
if((ret = i2c->write((const uint8_t*) (cmdPacket), sizeof(COMMAND))) != mraa::SUCCESS)
if((ret = i2c.write((const uint8_t*) (&cmdPacket), sizeof(COMMAND))) != mraa::SUCCESS)
{
UPM_THROW("I2C write failed");
}
break;
}
delete cmdPacket; cmdPacket=NULL;
return ret;
}
@ -212,24 +203,24 @@ mraa::Result T6713::runCommand(MODBUS_COMMANDS cmd)
STATUS T6713::getStatus()
{
uint16_t responseStatus = 0, readBytes = 0;
RESPONSE * response = new RESPONSE ;
RESPONSE response;
runCommand(T6713_COMMAND_STATUS);
mraa::Result ret = i2c->address(T6713_ADDR);
mraa::Result ret = i2c.address(T6713_ADDR);
if (ret != mraa::SUCCESS)
{
UPM_THROW ("I2C error setting slave address");
//need to handle tnis
}
if((readBytes = i2c->read((uint8_t*) (response), sizeof(RESPONSE)) != sizeof(RESPONSE)))
if((readBytes = i2c.read((uint8_t*) (&response), sizeof(RESPONSE)) != sizeof(RESPONSE)))
{
UPM_THROW("I2C read failed");
}
if(response->function_code == READ_INPUT_REGISTERS)
if(response.function_code == READ_INPUT_REGISTERS)
{
if(response->byte_count == 2)
if(response.byte_count == 2)
{
responseStatus = (response->status_msb << 8 | response->status_lsb);
responseStatus = (response.status_msb << 8 | response.status_lsb);
}
else
{
@ -242,8 +233,6 @@ STATUS T6713::getStatus()
UPM_THROW("MODBUS function code failed");
}
delete(response);
if(responseStatus & 0x0001)
{
return ERROR_CONDITION;
@ -277,4 +266,3 @@ STATUS T6713::getStatus()
return I2C;
}
}

View File

@ -27,7 +27,6 @@
#include "interfaces/iCO2Sensor.hpp"
namespace upm {
/**
* @brief Amphenol Telaire 6713 Series CO2 Module
* @defgroup t6713 libupm-t6713
@ -54,6 +53,7 @@ namespace upm {
* @snippet t6713.cxx Interesting
* @snippet co2-sensor.cxx Interesting
*/
namespace t6713_co2
{
/* COMMAND VALUES */
@ -65,8 +65,6 @@ namespace t6713_co2
T6713_COMMAND_GET_GAS_PPM
}MODBUS_COMMANDS;
typedef enum
{
ERROR_CONDITION,
@ -98,7 +96,6 @@ namespace t6713_co2
}RESPONSE;
typedef enum
{
READ_INPUT_REGISTERS = 4,
@ -107,7 +104,6 @@ namespace t6713_co2
}FUNCTION_CODES;
}//namespace t6713_co2
class T6713 : public ICO2Sensor {
public:
/**
@ -118,9 +114,9 @@ class T6713 : public ICO2Sensor {
T6713 (int bus);
/**
* SI7005 object destructor.
* T6713 object destructor.
*/
~T6713 ();
virtual ~T6713 () {};
/**
* Returns sensor module name
@ -142,9 +138,8 @@ class T6713 : public ICO2Sensor {
uint16_t getSensorData(t6713_co2::MODBUS_COMMANDS cmd);
t6713_co2::STATUS getStatus();
mraa::I2c* i2c;
mraa::I2c i2c;
mraa::Result status;
};
}//namespace upm