CPC Utility under Linux

From LEXWiKi

Jump to: navigation, search

Contents

CPC Utility Download

<Google Drive>

Source file: CPC_Utility_Src_v1.7

Binary file(32 bit): CPC_Utility_Bin_v1.7_x86

Binary file(64 bit): CPC_Utility_Bin_v1.7_x64


<FTP>

Source file: CPC_Utility_Src_v1.7

Binary file(32 bit): CPC_Utility_Bin_v1.7_x86

Binary file(64 bit): CPC_Utility_Bin_v1.7_x64

How to compile source code

1. Compile source code with Code::Blocks

  1. download and install the Code::Block and libgtk2.0-dev with command "apt-get install codeblocks libgtk2.0-dev"
  2. Open an exist project(CPC_Utility.cbp) in Code::Blocks
  3. add an option `pkg-config gtk+-2.0 --cflags`-std=gnu99 in "Project->Build Option->compiler setting->Other option"
  4. add an option `pkg-config gtk+-2.0 --libs` in "Project->Build Option->Linker Setting->Other linker option"
  5. click the compile button

2.Compile source code with "make"

  1. download and install the libgtk2.0-dev with command "apt-get install libgtk2.0-dev"
  2. cd CPC_Utility
  3. ./configure
  4. make
  5. cd src/cpc_utility // execute the binary file()

How to Use The Utility

Image:CPC_Utility_Main.jpg

1. Setting Button
Open "Setting Window".
2. Battery Setting Button
Open "Battery Setting Window".
* Kindly notice that you have to set I2C Address in setting window before open battery setting window.
3. Recently Voltage Value
Utility will detect the recent voltage value and show in the edit box when start to monitor.
4. Period Voltage Value
Utility will detect and show the period voltage value when start "under low voltage detect". If "under low voltage detect" doesn't execute, period voltage value will be hidden.
5. Operation Mode
6. Battery Type
Show the battery type you set.
* If disable "under low voltage detect", battery type will be hidden.
7. Start Button
Press this button will start to monitor and show battery information on utility main window.
* Kindly notice that you have to set I2C Address in setting window before starting to monitor.


CPC Utility Setting Window

Image:CPCsertting-1.png

1. I2C Address
Default is "B6".
2. Submit Button
Press this button when finish selecting I2C address, then CPC Basic Setting section and CPC Monitor Setting section will be enable to set(like the picture below).


Image:CPCsertting-2.png

3. Delay Main Power On
Set delay time which CPC turn on computer .
4. OS Delay Off
Set delay time which CPC turn off computer.
5. Main Power Delay
Set delay time of power supply after computer is turned off.
6. Load Default Button
Press thie button will load default value of CPC basic setting section.
* In CPC basic setting section, the initial value are read from registers.
7. Read Register Button
Press this button will read the value from register.
8. Set Button
Press this button to set when finish selecting what you want to set in CPC basic setting section. After press the button, CPC basic setting section will be disable.


Image:CPCsertting-3.png

9. Reset Button
Press the button to enable CPC basic setting section and set again.
10. Recent Battery Value Check Frequency
The value is check frequency when starting to monitor.
* The range of check frequency is between 5 to 60 seconds.
11. Start on Boot
If enable this function, the utility will execute when the OS boot.
12. Confirm Button
If finish to set CPC Monitor Setting section, press this button and the information will be set.
13. Cancel Button


Introdution(Part of Define macro)

//Battery Type
#define Battery_12V		0x11
#define Battery_24V		0x22
#define Battery_None	        0xFF

//ACC Status
#define ACC_Low			0x11
#define ACC_High		0x22

//General
#define OptionToASCII(x)        x+65
#define ASCIIToOption(x)        x-65

Introdution(Part of Setting)

  • Parts of yellow block in below tables are registers' default value.

Setting Main Power On

void SettingPowerOn(BYTE SlavAddr,BYTE bValue)
{
	bValue=OptionToASCII(bValue);
	WriteI2CByte(SlavAddr,0x12,bValue);
}

Image:Setting_Power_On.png

Setting OS Delay Off

void SettingOSDelayOff(BYTE SlavAddr,BYTE bValue)
{
	if(bValue==17)
		bValue=90;   //option of "infinite", have to write ascii code "Z" to register
	else
		bValue=OptionToASCII(bValue);
	WriteI2CByte(SlavAddr,0x15,bValue);
}

Image:OS_Delay_Off.png

Setting Power Off

void SettingPowerOff(BYTE SlavAddr,BYTE bValue)
{
	bValue=OptionToASCII(bValue);
	WriteI2CByte(SlavAddr,0x17,bValue);
}

Image:Main_Power_Off.png

Setting Low Voltage Level

void SettingLowVoltage(BYTE SlavAddr,BYTE bValue)
{
	bValue=OptionToASCII(bValue);
	WriteI2CByte(SlavAddr,0x19,bValue);
}

Image:Low_Voltage.png

Setting Battery Type

void SettingBatteryType(BYTE SlavAddr,BYTE bBatteryType)
{
	bBatteryType=(bBatteryType)?Battery_24V:Battery_12V;
	WriteI2CByte(SlavAddr,0x1A,bBatteryType);
}

Setting Low Voltage Detect

void SettingLowVoltDetect(BYTE SlavAddr,BYTE bAccStatus)
{
	bAccStatus=(bAccStatus)?ACC_High:ACC_Low;
	WriteI2CByte(SlavAddr,0x1B,bAccStatus);
}

Introdution(Part of Read)

Read Power On

int ReadPowerOn(BYTE SlavAddr)
{
	int Data;

	Data=ReadI2CByte(SlavAddr,0x12);
	Data=ASCIIToOption(Data);

	return Data;
}

Image:Setting_Power_On.png

Read OS Delay Off

int ReadOSDelayOff(BYTE SlavAddr)
{
	int Data;

	Data=ReadI2CByte(SlavAddr,0x15);
	Data=ASCIIToOption(Data);

	return Data;
}

Image:OS_Delay_Off.png

Read Power Off

int ReadPowerOff(BYTE SlavAddr)
{
	int Data;

	Data=ReadI2CByte(SlavAddr,0x17);
	Data=ASCIIToOption(Data)-1;   //remove the option of A

	return Data;
}

Image:Main_Power_Off.png

Read Low Voltage

int ReadLowVoltage(BYTE SlavAddr)
{
	int Data;

	Data=ReadI2CByte(SlavAddr,0x19);
	Data=ASCIIToOption(Data);

	return Data;
}

Image:Low_Voltage.png

Read Battery Type

int ReadBatteryType(BYTE SlavAddr)
{
	int iBatteryType;

	iBatteryType=ReadI2CByte(SlavAddr,0x1A);
	switch(iBatteryType)
	{
		case Battery_12V:
		{
			iBatteryType=0;
			break;
		}
		case Battery_24V:
		{
			iBatteryType=1;
			break;
		}
		default:
		{
			iBatteryType=-1;
			break;
		}
	}

	return iBatteryType;
}

ReadLowVoltDetectTiming

int ReadLowVoltDetectTiming(BYTE SlavAddr)
{
	int iAccStatus;

	iAccStatus=ReadI2CByte(SlavAddr,0x1B);
	iAccStatus=(iAccStatus==ACC_Low)?0:1;

	return iAccStatus;
}

Convert Voltage

void VoltageConvert(float &Voltage)
{
	Voltage=Voltage*4/1023*3.3*10;
}

Read Instant AD Value

float ReadInstantADValue(BYTE SlavAddr)
{
	float Data;

	Data=(float)ReadI2CByte(SlavAddr,0x30);
	VoltageConvert(Data);

	return Data;
}

Read Period AD Value

float ReadPeriodADValue(BYTE SlavAddr)
{
	float Data;

	Data=(float)ReadI2CByte(SlavAddr,0x31);
	VoltageConvert(Data);

	return Data;
}

ReadOperationMode

BYTE ReadOperationMode(BYTE SlavAddr)   //ReadDIP_SWSetting bit1
{
	BYTE Data;

	Data=ReadI2CByte(SlavAddr,0x32);
	Data=(Data>>1) & 0x01;             //Auto mode: 0x0. Manual mode:0x1 

	return Data;
}

Read ACC Status

BYTE ReadAccStatus(BYTE SlavAddr)   //ReadDIP_SWSetting bit4
{
	BYTE Data;

	Data=ReadI2CByte(SlavAddr,0x32);
	Data=(Data>>4) & 0x01;            //ACC Low: 0x0. ACC High: 0x1

	return Data;
}
Personal tools