Commit ccbe528f authored by Benjamin Mummery's avatar Benjamin Mummery 💻

Added upower_22 source

parent 1d3095b1
Pipeline #2716 failed with stages
1. Install libusb
sudo apt update
sudo apt-get install libusb-1.0-0-dev
2. Build
g++ -O3 -Wall -c upower_22.cpp
g++ -o "upower_22" upower_22.o ../../upower22_api/libupower22_api.a -lusb-1.0
3. Execute
sudo ./upower_22
\ No newline at end of file
//============================================================================
// Name : upower22_api.h
// Author : JerryLiao
// Version : 0.1
// Date : 2020/10/13
// Copyright : Copyright © 2020 BY Onyx Healthcare Inc.
// Description : UPower pro 22 library header file
//============================================================================
#define OnyxApiStatus int
/**
*
* Onyx SDK status code
*
*/
#define STATUS_SUCCESS 0
#define STATUS_FAILED 1
#define STATUS_INVALID_PARAMETER 2
#define STATUS_NOT_SUPPORT 3
struct BatteryData
{
unsigned char ReportID;
unsigned short BatteryMode;
unsigned short Temperature;
unsigned short Voltage;
short Current;
short AverageCurrent;
unsigned short RemainPercentage;
unsigned short RemainingCapacity;
unsigned short FullChargeCapacity;
unsigned short AverageTimeToEmpty;
unsigned short AverageTimeToFull;
short ChargingCurrent;
unsigned short ChargingVoltage;
unsigned short GaugeStatus;
unsigned short CycleCount;
unsigned short DesignCapacity;
unsigned short DesignVoltage;
unsigned short ManufactureDate;
char SerialNumber[22];
unsigned char Status;
// XXL Battery Extend Data
unsigned short LogIndex;
char FullyChargeDate[8];
unsigned short FccThreshold;
unsigned short FccBackup;
unsigned short CycleCountThreshold;
unsigned short LifetimeMaxPackVoltage;
unsigned short LifetimeMinPackVoltage;
short LifetimeMaxCurrent;
short LifetimeMinCurrent;
unsigned short SmbLedBlink;
unsigned short FullChargeVoltage;
unsigned short DateRecord;
unsigned short TimerRecord;
unsigned short BatteryFirstUseTime;
unsigned short PackMode;
};
extern "C"
{
/**
* upowerApiInitialize
*
* @brief Initialize the API
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerApiInitialize();
/**
* upowerApiUninitialize
*
* @brief Please use this API before close the process
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerApiUninitialize();
/**
* upowerLogControl
*
* @brief Log function initialization
* It will generate the log file under /tmp/upower_sdk.log
*
* @param bEnable: Enable the setting
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerLogControl(bool bEnable);
/**
* upowerGetProductName
*
* @brief Get product name
*
* @retval strProduct: String for product name
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetProductName(char *strProduct);
/**
* upowerGetFirmwareVersion
*
* @brief Get firmware version
*
* @retval strVersion: String for firmware version
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetFirmwareVersion(char *strVersion);
/**
* upowerGetSerialNumber
*
* @brief Get UPower serial number
*
* @retval strSerialNumber: String for serial number
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetSerialNumber(char *strSerialNumber);
/**
* upowerSetSerialNumber
*
* @brief Set UPower serial number.
* It takes effect after device reboot
*
* @param strSerialNumber: String for serial number
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerSetSerialNumber(char *strSerialNumber);
/**
* upowerRebootDevice
*
* @brief Reboot the device
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerRebootDevice();
/**
* upowerGetACStatus
*
* @brief Check the AC power is plug in or not
*
* @retval bIsPlugIn: true: plug in, false: plug out
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetACStatus(bool* bIsPlugIn);
/**
* upowerGetDCOutVoltage
*
* @brief Get DC output voltage of UPower
*
* @retval nVoltage: Output voltage
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetDCOutVoltage(int* nVoltage);
/**
* upowerGetDCOutStatus
*
* @brief Get DC output status of UPower
*
* @retval anStatus[0]: Output voltage select.
* @retval anStatus[1]: DC output cable connection. 1: Connect, 0, Disconnect
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetDCOutStatus(int* anStatus);
/**
* upowerGetBoardId
*
* @brief Get Board Id of UPower
*
* @retval nBoardId: Board Id
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetBoardId(int* nBoardId);
/**
* upowerGetTotalPercentage
*
* @brief Get total percentage of batteries
*
* @retval nPercentage: Remain total percentage of batteries
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetTotalPercentage(int* nPercentage);
/**
* upowerSetLedColor
*
* @brief Set the LED color on UPower
*
* @retval nIndex: Index of LED
* @retval Red: 0~255
* @retval Green: 0~255
* @retval Blue: 0~255
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerSetLedColor(int nIndex, int Red, int Green, int Blue);
/**
* upowerResetLedColor
*
* @brief Reset the LED to previous status
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerResetLedColor();
/**
* upowerGetBatteryInfo
*
* @brief Get batteries information
*
* @param nBatteryNumber: Index of battery
*
* @retval BatteryData: Structure of battery information
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerGetBatteryInfo(int nBatteryNumber, BatteryData* rawData);
/**
* upowerUpdateFirmware
*
* @brief Update UPower firmware version
*
* @param filename: Firmware file path
* @param bForceUpdate: true: Ignore firmware version confirmation
*
* @return Please refer to Onyx SDK status code
*
*/
OnyxApiStatus upowerUpdateFirmware(char* filename, bool bForceUpdate);
}
\ No newline at end of file
//============================================================================
// Name : upower_22.cpp
// Author : JerryLiao
// Version : 0.1
// Date : 2020/10/13
// Copyright : Copyright © 2020 BY Onyx Healthcare Inc.
// Description : UPower pro 22 Linux sample code
//============================================================================
#include <iostream>
#include "../../upower22_api/header/upower22_api.h"
int main()
{
if (upowerApiInitialize() != STATUS_SUCCESS)
{
printf("Can not connect to the device\n");
return 0;
}
char string[64] = { 0 };
//char serialNumber[] = "0000000000-12345678";
bool bEnable = false;
int nTemp = 0;
BatteryData rawData = { 0 };
upowerLogControl(true);
// ==================================================== Basic information
printf("\n\n▼ Basic information\n");
upowerGetProductName(string);
printf("Product Name\t = %s\n", string);
upowerGetFirmwareVersion(string);
printf("Firmware Version = %s\n", string);
//upowerSetSerialNumber(serialNumber);
//upowerRebootDevice();
upowerGetSerialNumber(string);
printf("Serial Number\t = %s\n", string);
upowerGetBoardId(&nTemp);
printf("Board ID\t = %d\n", nTemp);
// ==================================================== System Power Information
printf("\n\n▼ System Power Information\n");
upowerGetACStatus(&bEnable);
printf("AC Status\t\t = %s\n", bEnable ? "PlugIn" : "No Plug");
upowerGetDCOutVoltage(&nTemp);
printf("DC Out Voltage\t\t = %d mV\n", nTemp);
int anTemp[2] = { 0 };
upowerGetDCOutStatus(anTemp);
printf("DC Out Cable\t\t = %s\n", anTemp[1] > 0 ? "Connect" : "Disconnect");
printf("DC Out Voltage Select\t = %d\n", anTemp[0]);
upowerGetTotalPercentage(&nTemp);
printf("Battery Total Percentage = %d\n", nTemp);
// ==================================================== Battery Information
printf("\n\n▼ Battery Information\n");
for (int i = 0; i < 2; i++)
{
upowerGetBatteryInfo(i, &rawData);
std::string strSerialNumber = std::string(rawData.SerialNumber);
if (!strSerialNumber.empty())
{
printf("=========== Battery ID [%d] ===========\n", rawData.ReportID);
printf("DesignCapacity\t\t = %d mAh\n", rawData.DesignCapacity);
printf("DesignVoltage\t\t = %d mV\n", rawData.DesignVoltage);
printf("FullChargeCapacity\t = %d mAh\n", rawData.FullChargeCapacity);
printf("RemainingCapacity\t = %d mAh\n", rawData.RemainingCapacity);
printf("Voltage\t\t\t = %d mV\n", rawData.Voltage);
printf("Current\t\t\t = %d mA\n", rawData.Current);
printf("RemainPercent\t\t = %d%%\n", rawData.RemainPercentage);
printf("AverageCurrent\t\t = %d mA\n", rawData.AverageCurrent);
printf("AverageTimeToEmpty\t = %d minutes\n", rawData.AverageTimeToEmpty);
printf("AverageTimeToFull\t = %d minutes\n", rawData.AverageTimeToFull);
printf("Battery Mode\t\t = %x\n", rawData.BatteryMode);
printf("ChargingVoltage\t\t = %d mV\n", rawData.ChargingVoltage);
printf("ChargingCurrent\t\t = %d mA\n", rawData.ChargingCurrent);
printf("CycleCount\t\t = %d times\n", rawData.CycleCount);
printf("GaugeStatus\t\t = %X\n", rawData.GaugeStatus);
printf("Temperature\t\t = %.2f ℃\n", ((float)rawData.Temperature / 10) - 273.15);
printf("ManufactureDate\t\t = %d/%d/%d (y/m/d)\n", ((int)((rawData.ManufactureDate >> 9) & 0x7F) + 1980), ((rawData.ManufactureDate >> 5) & 0x0F), (rawData.ManufactureDate % 0x1F));
printf("SerialNumber\t\t = %s\n", rawData.SerialNumber);
if ((rawData.Status & 0x10) > 0)
printf("Status\t\t\t = FullyCharged\n");
else if ((rawData.Status & 0x08) > 0)
printf("Status\t\t\t = PreCharging\n");
else if ((rawData.Status & 0x02) > 0)
printf("Status\t\t\t = Charging\n");
else if ((rawData.Status & 0x04) > 0)
printf("Status\t\t\t = Discharging\n");
else
printf("Status\t\t\t = No action\n");
int package_size = (int)(((rawData.Status & 0x08) >> 2) | ((rawData.Status & 0x80) >> 7));
if (package_size == 1)
printf("BatteryType\t\t = XL\n");
else if (package_size == 2)
printf("BatteryType\t\t = XXL\n");
else if (package_size == 0)
printf("BatteryType\t\t = Standard\n");
else
printf("BatteryType\t\t = N/A\n");
// XXL Extend Data
if (package_size == 2)
{
printf("LogIndex\t\t = %d\n", rawData.LogIndex);
printf("FullyChargeDate\t\t = %s\n", rawData.FullyChargeDate);
printf("FccThreshold\t\t = %d mAh\n", rawData.FccThreshold);
printf("FccBackup\t\t = %d mAh\n", rawData.FccBackup);
printf("CycleCountThreshold\t = %d\n", rawData.CycleCountThreshold);
printf("LifetimeMaxPackVoltage\t = %d mV\n", rawData.LifetimeMaxPackVoltage);
printf("LifetimeMinPackVoltage\t = %d mV\n", rawData.LifetimeMinPackVoltage);
printf("LifetimeMaxCurrent\t = %d mA\n", rawData.LifetimeMaxCurrent);
printf("LifetimeMinCurrent\t = %d mA\n", rawData.LifetimeMinCurrent);
printf("SmbLedBlink\t\t = %X\n", rawData.SmbLedBlink);
printf("FullChargeVoltage\t = %d mV\n", rawData.FullChargeVoltage);
printf("DateRecord\t\t = %X (%d/%d/%d)\n", rawData.DateRecord, (rawData.DateRecord / 512) + 1980, (rawData.DateRecord % 512) / 32, rawData.DateRecord % 32);
printf("TimerRecord\t\t = %X (%d:%d)\n", rawData.TimerRecord, rawData.TimerRecord / 256, rawData.DateRecord % 256);
printf("BatteryFirstUseTime\t = %X\n", rawData.BatteryFirstUseTime);
printf("PackMode\t\t = %X (%s mode)\n", rawData.PackMode, rawData.PackMode == 0xAABB ? "sport" : "eco");
}
printf("\n");
}
}
// ==================================================== If you want to update firmware
//char filename[] = "PowerBoard.bin";
//upowerUpdateFirmware(filename, false);
upowerApiUninitialize();
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment