Skip to content
Snippets Groups Projects
Commit 8dea78a1 authored by Sergi Hernandez's avatar Sergi Hernandez
Browse files

Chnaged the driver to use the CFTDI class instead of the CRS232 class.

parent 2e52fd37
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,7 @@
#include "exceptions.h"
#include <iostream>
std::string battery_dev="/dev/ttyUSB0";
std::string battery_dev="A600eByq";
int main(int argc, char *argv[])
{
......@@ -12,6 +12,7 @@ int main(int argc, char *argv[])
{
try{
std::cout << "Battery voltage: " << battery.get_current_voltage() << " V" << std::endl;
std::cout << "Battery temperature: " << battery.get_current_temperature() << " ºC" << std::endl;
std::cout << "Input current: " << battery.get_input_current() << " mA" << std::endl;
std::cout << "Output current: " << battery.get_output_current() << " mA" << std::endl;
std::cout << "Remaining capacity: " << battery.get_remaining_capacity() << " mAh" << std::endl;
......
#include "segway_battery.h"
#include "exceptions.h"
#include <iostream>
#include <math.h>
CSegway_Battery::CSegway_Battery(std::string &serial_dev)
CSegway_Battery::CSegway_Battery(std::string &serial_num)
{
TRS232_config serial_config;
CFTDIServer *ftdi_server=CFTDIServer::instance();
TFTDIconfig ftdi_config;
try{
// create the serial port device to communicate with the battery
this->serial=new CRS232(std::string("battery_monitor_dev"));
// open the serial device
this->serial->open((void *)&serial_dev);
serial_config.baud=9600;
serial_config.num_bits=8;
serial_config.parity=none;
serial_config.stop_bits=1;
this->serial->config(&serial_config);
if(ftdi_server->get_num_devices()>0)
{
this->serial=ftdi_server->get_device(serial_num);
if(this->serial==NULL)
{
/* handle exceptions */
throw CException(_HERE_,"No such device");
}
ftdi_config.baud_rate = 9600;
ftdi_config.word_length = 8;
ftdi_config.stop_bits = 1;
ftdi_config.parity = 0;
ftdi_config.read_timeout = 1000;
ftdi_config.write_timeout = 1000;
ftdi_config.latency_timer = 16;
this->serial->config(&ftdi_config);
}
// initialize the battery information
this->info.battery_voltage=0.0;
this->info.temperature1=0.0;
......@@ -86,6 +97,7 @@ void CSegway_Battery::parse_packet(unsigned char *data, int len)
{
int i=0;
static int pos=-2;
float vt=0.0,res=0.0,k=0.0;
static unsigned char packet_data[31];
for(i=0;i<len;i++)
......@@ -111,6 +123,7 @@ void CSegway_Battery::parse_packet(unsigned char *data, int len)
if(pos==31)
{
pos=-2;
// convert voltage
this->info.battery_voltage=(packet_data[0])+(packet_data[1]<<8);
this->info.battery_voltage+=(packet_data[2])+(packet_data[3]<<8);
this->info.battery_voltage+=(packet_data[4])+(packet_data[5]<<8);
......@@ -120,10 +133,26 @@ void CSegway_Battery::parse_packet(unsigned char *data, int len)
this->info.battery_voltage+=(packet_data[12])+(packet_data[13]<<8);
this->info.battery_voltage+=(packet_data[14])+(packet_data[15]<<8);
this->info.battery_voltage/=6.5536;
// convert temperature
vt=(packet_data[16]+packet_data[17]*256)*2500.0/32768.0;
res=230000*vt/(3300-vt);
k=(1/298.15)-(log(10000.0/res)/3435.0);
this->info.temperature1=(1-273.15*k)/k;
vt=(packet_data[18]+packet_data[19]*256)*2500.0/32768.0;
res=230000*vt/(3300-vt);
k=(1/298.15)-(log(10000.0/res)/3435.0);
this->info.temperature2=(1-273.15*k)/k;
// get the status
this->info.status=packet_data[20];
// convert input current
this->info.current_in=packet_data[21]+packet_data[22]*256;
// convert output current
this->info.current_out=packet_data[23]+packet_data[24]*256;
// convert remaining capacity
this->info.rem_capacity=packet_data[25]+packet_data[26]*256;
// convert time to charged
this->info.time_to_charged=packet_data[27]+packet_data[28]*256;
// convert time to discharged
this->info.time_to_discharged=packet_data[29]+packet_data[30]*256;
}
}
......@@ -137,8 +166,7 @@ double CSegway_Battery::get_current_voltage(void)
double CSegway_Battery::get_current_temperature(void)
{
return 0.0;
return (this->info.temperature1+this->info.temperature2)/2.0;
}
double CSegway_Battery::get_input_current(void)
......@@ -168,27 +196,42 @@ double CSegway_Battery::get_time_to_discharged(void)
bool CSegway_Battery::is_battery_present(void)
{
return false;
if(this->info.status&0x01)
return true;
else
return false;
}
bool CSegway_Battery::is_charger_present(void)
{
return false;
if(this->info.status&0x02)
return true;
else
return false;
}
bool CSegway_Battery::is_load_enabled(void)
{
return false;
if(this->info.status&0x04)
return true;
else
return false;
}
bool CSegway_Battery::under_voltage_protection(void)
{
return false;
if(this->info.status&0x08)
return true;
else
return false;
}
bool CSegway_Battery::over_voltage_protection(void)
{
return false;
if(this->info.status&0x10)
return true;
else
return false;
}
CSegway_Battery::~CSegway_Battery()
......
#ifndef _SEGWAY_BATTERY_H
#define _SEGWAY_BATTERY_H
#include "rs232.h"
#include "ftdiserver.h"
#include "ftdimodule.h"
#include "threadserver.h"
#include "eventserver.h"
#include "mutex.h"
......@@ -28,7 +29,7 @@ class CSegway_Battery
{
private:
// serial device object
CRS232 *serial;
CFTDI *serial;
// thread attributes
CThreadServer *thread_server;
std::string battery_monitor_thread_id;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment