📄 fanboard.c
字号:
//-----------------------------------------------------------------------------
// File: ez_vkb.h
// Contents: main module of a simple non-renumerating firmware
//
// $Archive: ez_vkb.c $
// $Date: 10/08/06 5:12p $
// $Revision: 1.00 $
//
//-----------------------------------------------------------------------------
// Copyright 2006, xsh.han@itc.inventec
//-----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "fx2.h"
#include "fx2regs.h"
#include "absacc.h"
#include "scmain.h"
#include "cmdlist.h"
#include "fanboard.h"
#ifndef __USE_USB__
#include "serial.h"
#endif
//-----------------------------------------------------------------------------
//global variable
//-----------------------------------------------------------------------------
BYTE g_iic_address;
//-----------------------------------------------------------------------------
//function prototype
//-----------------------------------------------------------------------------
int do_fanboard_init();
int do_fanboard_setpwm();
int do_fanboard_setrpm();
int do_fanboard_getpwm();
int do_fanboard_getrpm();
int do_fanboard_getcurrent();
int do_fanboard_getvoltage();
//-----------------------------------------------------------------------------
//list for command
//-----------------------------------------------------------------------------
const struct command_name xdata fanboard_cmd[] = {
{"select", do_fanboard_init},
{"setpwm", do_fanboard_setpwm},
{"setrpm", do_fanboard_setrpm},
{"getpwm", do_fanboard_getpwm},
{"getrpm", do_fanboard_getrpm},
{"getcurrent", do_fanboard_getcurrent},
{"getvoltage", do_fanboard_getvoltage},
{0, 0}
};
//-----------------------------------------------------------------------------
//command function param
//-----------------------------------------------------------------------------
//const struct command_param xdata fanboard_cmd_param[] = {
// {0, 0}
//};
//-----------------------------------------------------------------------------
//extern function
//-----------------------------------------------------------------------------
extern int mydef_strcasecmp(char *dst, char *src);
extern int (*lookup_command_func(struct command_name *pcmd,char * cmd_str))();
extern char *get_current_cmd(char * buff);
extern char *lookup_return_str(int ret_cmd);
extern int lookup_return_val(struct command_param *pm, char * cmd_str);
extern struct command_list * add_to_retlist(char * cmd);
extern void (*fp_blinking)(unsigned char);
//-----------------------------------------------------------------------------
//EZUSB do_show_help
//-----------------------------------------------------------------------------
int do_show_help()
{
#ifndef __USE_USB__
PRINTF_COM(USAGE_MSG_T);
PRINTF_COM(USAGE_MSG_L);
PRINTF_COM(USAGE_MSG_1);
PRINTF_COM(USAGE_MSG_2);
PRINTF_COM(USAGE_MSG_3);
PRINTF_COM(USAGE_MSG_4);
PRINTF_COM(USAGE_MSG_5);
PRINTF_COM(USAGE_MSG_6);
PRINTF_COM(USAGE_MSG_7);
PRINTF_COM(USAGE_MSG_8);
PRINTF_COM(USAGE_MSG_L);
#endif
return RET_OK;
}
//=============================================================================-
//do_fanboard_entry
//=============================================================================-
int do_faboard_entry(char *cmd)
{
int (*cmd_func) ();
int ret=0;
cmd_func=lookup_command_func(fanboard_cmd,cmd);
if (cmd_func!=NULL) {
ret=(*cmd_func)();
return(ret);
}
return RET_ERROR;
}
//=============================================================================-
//do do_fanboard
//=============================================================================-
int do_fanboard_init()
{
OEE = 0xFF; //IOE output
IOE = 0;
g_iic_address = FANBOARD_ADDR;
return RET_OK;
}
//=============================================================================-
//do_fanboard_setpwm
//SETPWM CMD
//BYTE NO. | adr | B10 | B9 | B8 | B7 | B6 |
//———————————————————————
//Data | 30 | 01 | 10 | 00 | EE | 00 |
//———————————————————————
// | SA+W| | | | End CMD |
//
//BYTE NO. | B5 | B4 | B3 | B2 | B1 | B0 |
//—————————————————————————————————————————
//Data | 30 | 01 | 00 | 78 | EE | 00 |
//—————————————————————————————————————————
// | SA+W| | | PWM | END CMD |
//=============================================================================-
int do_fanboard_setpwm()
{
char param[MAX_CMD_LENGTH];
int val = 0;
unsigned char xdata iic_dat[5];
//PDEBUG("do_fanboard_setpwm:\r\n");
memset (param, '\0', sizeof (param));
if (get_current_cmd(param)==NULL) {
return RET_ERROR;
}
val = strtol(param,NULL,10);
if (val > 255 || val <0) {
return RET_ERROR;
}
//write command to iic slave
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
iic_dat[2] = 0x00;
iic_dat[3] = 0xEE;
iic_dat[4] = 0x00;
EZUSB_WriteI2C(g_iic_address, 5, iic_dat);
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
iic_dat[2] = val&0xFF;
iic_dat[3] = 0xEE;
iic_dat[4] = 0x00;
EZUSB_WriteI2C(g_iic_address, 5, iic_dat);
//EZUSB_WaitForEEPROMWrite(g_iic_address);
//sprintf(param,"(%bX)",g_iic_address);
//add_to_retlist(param);
return RET_DONE;
}
//=============================================================================-
//do_fanboard_setrpm
//SETRPM CMD
//BYTE NO. | adr | B0 | B1 | B2 | B3 | B4 |
//———————————————————————
//Data | 30 | 01 | 10 | 01 | EE | 00 |
//———————————————————————
// | SA+W| | | | END CMD |
//
//BYTE NO. | adr | B0 | B1 | B2 | B3 | B4 | B5 |
//—————————————————————————
//Data | 30 | 01 | 18 | C0 | 27 | EE | 00 |
//—————————————————————————
// | SA+W| | |RPM L|RMP H| END CMD |
//=============================================================================-
int do_fanboard_setrpm()
{
char param[MAX_CMD_LENGTH];
int val = 0;
unsigned char xdata iic_dat[6];
//PDEBUG("do_fanboard_setrpm:\r\n");
memset (param, '\0', sizeof (param));
if (get_current_cmd(param)==NULL) {
return RET_ERROR;
}
val = strtol(param,NULL,10);
if (val > 18000 || val <0 ) {
return RET_ERROR;
}
//write command to iic slave
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
iic_dat[2] = 0x01;
iic_dat[3] = 0xEE;
iic_dat[4] = 0x00;
EZUSB_WriteI2C(g_iic_address, 5, iic_dat);
iic_dat[0] = 0x01;
iic_dat[1] = 0x18;
iic_dat[2] = val&0xFF;
iic_dat[3] = (val>>8)&0xFF;
iic_dat[4] = 0xEE;
iic_dat[5] = 0x00;
EZUSB_WriteI2C(g_iic_address, 6, iic_dat);
//sprintf(param,"(%bX)",g_iic_address);
//add_to_retlist(param);
return RET_DONE;
}
//=============================================================================-
//do_fanboard_getpwm
//GET INFO
//BYTE NO. | adr |B0 |B1 |
//————————————
//Data | 30 |01 |00 |
//————————————
// |SA+W | | |
//BYTE NO. | adr |B0 |B1 |B2 |B3 |B4 |B5 |B6 |B7 |B8 |B9 |B10 | B11 |B12|B13|B14|B15|B16| B17| B18|
//—————————————————————————————————————————————————————
//Data | 31 |78 |00 |A1 |03 |28 |23 |0A |FF |00 |00 |2D | 79 |CD |02 |07 |04 |09 | EE | 00 |
//—————————————————————————————————————————————————————
// |SA+R |PWM| | | |RPM L|RMP H| | | | |CURRENT|VOLTAGE| | | | | | END CMD |
//
//其中:CURRENT=實際電流*10(ma)
// VOLTAGE=實際電壓*10(v)
//=============================================================================-
int do_fanboard_getpwm()
{
char param[MAX_CMD_LENGTH];
unsigned char xdata iic_dat[20];
int ret;
//PDEBUG("do_fanboard_getpwm:\r\n");
//write command to iic slave
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
EZUSB_WriteI2C(g_iic_address, 2, iic_dat);
//read infor
EZUSB_ReadI2C(g_iic_address, 19, iic_dat);
//RPM
ret = iic_dat[0];
sprintf(param," %d",ret);
add_to_retlist(param);
return RET_DONE;
}
//=============================================================================-
//do_fanboard_getrpm
//GET INFO
//BYTE NO. | adr |B0 |B1 |
//————————————
//Data | 30 |01 |00 |
//————————————
// |SA+W | | |
//BYTE NO. | adr |B0 |B1 |B2 |B3 |B4 |B5 |B6 |B7 |B8 |B9 |B10 | B11 |B12|B13|B14|B15|B16| B17| B18|
//—————————————————————————————————————————————————————
//Data | 31 |78 |00 |A1 |03 |28 |23 |0A |FF |00 |00 |2D | 79 |CD |02 |07 |04 |09 | EE | 00 |
//—————————————————————————————————————————————————————
// |SA+R |PWM| | | |RPM L|RMP H| | | | |CURRENT|VOLTAGE| | | | | | END CMD |
//
//其中:CURRENT=實際電流*10(ma)
// VOLTAGE=實際電壓*10(v)
//=============================================================================-
int do_fanboard_getrpm()
{
char param[MAX_CMD_LENGTH];
unsigned char xdata iic_dat[20];
int ret;
//PDEBUG("do_fanboard_getrpm:\r\n");
//write command to iic slave
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
EZUSB_WriteI2C(g_iic_address, 2, iic_dat);
//read infor
EZUSB_ReadI2C(g_iic_address, 19, iic_dat);
//RPM
ret = iic_dat[5];
ret = (ret <<8 ) | iic_dat[4];
sprintf(param," %d",ret);
add_to_retlist(param);
return RET_DONE;
}
//=============================================================================-
//do_fanboard_getcurrent
//GET INFO
//BYTE NO. | adr |B0 |B1 |
//————————————
//Data | 30 |01 |00 |
//————————————
// |SA+W | | |
//BYTE NO. | adr |B0 |B1 |B2 |B3 |B4 |B5 |B6 |B7 |B8 |B9 |B10 | B11 |B12|B13|B14|B15|B16| B17| B18|
//—————————————————————————————————————————————————————
//Data | 31 |78 |00 |A1 |03 |28 |23 |0A |FF |00 |00 |2D | 79 |CD |02 |07 |04 |09 | EE | 00 |
//—————————————————————————————————————————————————————
// |SA+R |PWM| | | |RPM L|RMP H| | | | |CURRENT|VOLTAGE| | | | | | END CMD |
//
//其中:CURRENT=實際電流*10(ma)
// VOLTAGE=實際電壓*10(v)
//=============================================================================-
int do_fanboard_getcurrent()
{
char param[MAX_CMD_LENGTH];
unsigned char xdata iic_dat[20];
int ret;
//PDEBUG("do_fanboard_getcurrent:\r\n");
//write command to iic slave
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
EZUSB_WriteI2C(g_iic_address, 2, iic_dat);
//read infor
EZUSB_ReadI2C(g_iic_address, 19, iic_dat);
//voltage
ret = iic_dat[10]*10;
sprintf(param," %d(ma)",ret);
add_to_retlist(param);
return RET_DONE;
}
//=============================================================================-
//do_fanboard_getvoltage
//GET INFO
//BYTE NO. | adr |B0 |B1 |
//————————————
//Data | 30 |01 |00 |
//————————————
// |SA+W | | |
//BYTE NO. | adr |B0 |B1 |B2 |B3 |B4 |B5 |B6 |B7 |B8 |B9 |B10 | B11 |B12|B13|B14|B15|B16| B17| B18|
//—————————————————————————————————————————————————————
//Data | 31 |78 |00 |A1 |03 |28 |23 |0A |FF |00 |00 |2D | 79 |CD |02 |07 |04 |09 | EE | 00 |
//—————————————————————————————————————————————————————
// |SA+R |PWM| | | |RPM L|RMP H| | | | |CURRENT|VOLTAGE| | | | | | END CMD |
//
//其中:CURRENT=實際電流*10(ma)
// VOLTAGE=實際電壓*10(v)
//=============================================================================-
int do_fanboard_getvoltage()
{
char param[MAX_CMD_LENGTH];
unsigned char xdata iic_dat[20];
int ret;
//PDEBUG("do_fanboard_getvoltage:\r\n");
//write command to iic slave
iic_dat[0] = 0x01;
iic_dat[1] = 0x10;
EZUSB_WriteI2C(g_iic_address, 2, iic_dat);
//read infor
EZUSB_ReadI2C(g_iic_address, 19, iic_dat);
//voltage
ret = iic_dat[11]*10;
sprintf(param," %d(v)",ret);
add_to_retlist(param);
return RET_DONE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -