📄 meclib.c
字号:
}
void reportStateToMate (UINT8 state)
{
}
/**************************************************************
* mateBoardIsReady - whether mate is ready
* Return: TRUE or FALSE if mate isn't ready
*/
BOOL mateBoardIsReady (void)
{
return TRUE;
}
/*----------------------------------------------------------------------------------
* contendForMaster - when power on,two MEC card compete with each other for master
*
* Called by ROS system when power on.
*
* Parameter: void
*
* RETURN: OK/ERROR
* 注:如果是在启动ROS之前主备竞争,就不能向系统控制进程发消息,如果是ROS启动之后主备竞争,就可以向
* 系统控制进程发消息
*********************************/
STATUS contendForMaster (void)
{
mecRegWrite (0xF7, 1);
mecRegWrite (0xF8, 1);
boardIsMaster();
return(OK);
}
void revokeContention (void)
{
if( boardIsMaster() == FALSE)
return ;
mecRegWrite (0xFC, 0);
sysMsDelay (1);
mecRegWrite (0xFC, 1);
}
STATUS getBoardMBStatus(void)
{
UINT8 val;
val = mecRegRead (0xF0);
if (val & 0x01)
return BOARD_SLAVE;
else
return BOARD_MASTER;
}
STATUS getMateMBStatus(void)
{
UINT8 val;
val = mecRegRead (0xF0);
if (val & 0x10)
return BOARD_SLAVE;
else
return BOARD_MASTER;
}
/*******************************************************************************
* 本板控制与状态接口 *
*******************************************************************************/
/*******************************************************************************
* b_GetWatchDogResetCount
*
*
*/
/*
return code:
>=0 : valid count
-1: old epld version
the maxium count is 0xf,overflow will recount from zero
zhouyuhui 2005-7-29 14:19
*/
/* wlc:狗复位计数 -1:不支持*/
int b_GetWatchDogResetCount (void)
{
return (-1);
}
/*******************************************************************************
* b_GetSoftResetCount - 软复位的次数
*
*/
int b_GetSoftResetCount (void)
{
return (-1);
}
/*******************************************************************************
* b_GetLastResetSource - MP板上取上一次复位原因
*
* 返回:
* 1 - 表示看门狗溢出复位(没有及时喂狗,有看门狗溢出计数)
* 0 - 表示其它情况引起的复位(可能是硬复位)
*/
int b_GetLastResetSource (void)
{
UINT8 count;
if (bdIsDogReset == 0xFF)
{
count = mecRegRead (0x48);
/* 清除看门狗溢出次数
* 060718 09:26
* 硬件实现有问题,只要向[0x48]处有写操作,都会导致重启;暂时屏蔽此操作
mecRegWrite (0x48, 0);
*/
if (count == 2)
bdIsDogReset = 1;
else
bdIsDogReset = 0;
}
return (bdIsDogReset);
}
/*******************************************************************************
* 线卡状态与控制 *
*******************************************************************************/
/*******************************************************************************
* ResetAllLicBoard
*
*/
STATUS ResetAllLicBoard (void)
{
int physlot;
UINT8 myslot = physSlotNumber();
/* 本板不在线 */
if (myslot == 0xFF)
return (ERROR);
for (physlot = 1; physlot <= 14; physlot++)
{
/*
if (physlot == myslot)
continue;
*/
/*不复位本板与备用主控板*/
if( (physlot == 7) ||(physlot == 8))
continue;
resetBoard (physlot);
taskDelay (1);
}
return (OK);
}
/*******************************************************************************
* resetBoard
*
*
*/
#define DBG_PRINT printf
STATUS resetBoard (UINT32 physlot)
{
UINT8 val;
/* 只有主用板才可以复位线卡 */
if (boardIsMaster() == FALSE)
{
DBG_PRINT ("not a master board\n");
return (ERROR);
}
if (physlot > 14)
{
DBG_PRINT ("slot invalid\n");
return (ERROR);
}
/* 不能复位本板;复位本板使用另外的函数
* 如果本板读取槽位号失败,意味着本板不在线,也不能复位其它线卡
*/
if ((physlot == physSlotNumber()) || (physSlotNumber() == 0xFF))
{
DBG_PRINT ("board offline or try to reset self\n");
return (ERROR);
}
if ((physlot == 7) || (physlot == 8))
val = 0x07;
else
val = physlot;
mecRegWrite (0xE8, val);
taskDelay (5);
mecRegWrite (0xE8, 0);
return (OK);
}
/*******************************************************************************
* AllLicOnline
*
*/
/*
读取所有线卡在线状态。
bit 0(最低位)表示slot 1 down (1D)电源板;
bit 1表示slot 1 up (1U)电源板;
bit 2表示slot 2;
...
bit 7表示slot 7;
bit 8表示slot 8;
...
bit 14表示slot 14。
1表示online,0表示offline。
*/
unsigned int AllLicOnline (void)
{
#ifdef INSTALL_GCSA
UINT16 val;
#elif defined(INSTALL_GCSD)
UINT8 val1;
UINT8 val2;
UINT16 val;
#endif
UINT32 status;
if (sysMySlot == 0xFF)
return 0;
#ifdef INSTALL_GCSA
val = *(volatile UINT16 *)0xEB000000;
#elif defined(INSTALL_GCSD)
val1 = *(volatile UINT8 *)0xEB000000;
val2 = *(volatile UINT8 *)0xEB040000;
val = val2;
val = ( val << 8 ) | val1;
#endif
status = val & 0x7F;
status |= ((val & 0x3F00) << 1);
if (sysMySlot == 7)
{
status |= 0x80;
status |= ((val & 0x80) << 1);
}
else
{
status |= (val & 0x80);
status |= 0x100;
}
return (status);
}
/*******************************************************************************
* 单板状态灯 *
*******************************************************************************/
/*******************************************************************************
* Run_Led
*/
void Run_Led(BOOL flag)
{
if (flag)
{
SYS_LED_RUN (GRE_ON);
}
else
{
SYS_LED_RUN (ALL_OFF);
}
}
/*******************************************************************************
* Alarm_Led
*/
void Alarm_Led (BOOL flag)
{
}
/*******************************************************************************
* Master_Led
*/
void ResRun_Led (BOOL flag)
{
}
void ResRun_Alarm (BOOL flag)
{
}
/*******************************************************************************
* Slave_Led
*/
void Slave_Led (BOOL flag)
{
}
/*******************************************************************************
* post_Led
*/
void post_Led (UINT32 light, UINT8 indicatChar, BOOL flag)
{
}
void LICRunLedOn (UINT8 LicNum)
{
}
void LICRunLedOff (UINT8 LicNum)
{
}
void LICAlarmLedOn (UINT8 LicNum)
{
}
void LICAlarmLedOff (UINT8 LicNum)
{
}
/*******************************************************************************
* 风扇相关接口 *
*******************************************************************************/
#if 1
void b_GetFanStatus (unsigned char fan[])
{
}
UINT8 CheckFanState (void)
{
return 0;
}
void Fan_Run_Led (BOOL flag)
{
}
void Fan_Alarm_Led (BOOL flag)
{
}
#endif
/*********************************************************************************
*
*bit0 : FILTER 0-防尘网完好, 1-防尘网触不正常
*bit1~bit3 : XBCAT1~3 0-风扇板在位, 1-风扇板不在位
*bit6~bit8 : XBCFSTATUS1~3 0-风扇发生故障,1-风扇板正常。
*
*********************************************************************************/
#ifdef INSTALL_GCSA
UINT16 bspGetAllFanStatus(void)
{
UINT16 val;
val = *(volatile UINT16 *)0xEB040000;
return val;
}
#elif defined (INSTALL_GCSD)
UINT16 bspGetAllFanStatus(void)
{
UINT8 val1;
UINT8 val2;
UINT16 val;
val1 = *(volatile UINT8 *)0xEB020000;
val2 = *(volatile UINT8 *)0xEB060000;
val = val2;
val = ( val << 8 ) | val1;
return val;
}
#endif
BOOL bspGetFanStatus (UINT32 fanNo)
{
UINT16 val;
if(fanNo < 1 || fanNo >3)
{
printf("Fan Number Error!\n");
return FALSE;
}
val = bspGetAllFanStatus();
val = val & (0x20 << fanNo);
if(val)
return TRUE;
else
return FALSE;
}
BOOL bspGetFilterStatus (void)
{
UINT16 val;
val = bspGetAllFanStatus();
val = val & 0x1;
if(val)
return FALSE;
else
return TRUE;
}
BOOL bspGetFanOnline (UINT32 fanNo)
{
UINT16 val;
if(fanNo < 1 || fanNo >3)
{
printf("Fan Number Error!\n");
return FALSE;
}
val = bspGetAllFanStatus();
val = val & (0x1 << fanNo);
if(val)
return FALSE;
else
return TRUE;
}
int bspSetFanSpeed(int speed)
{
UINT8 val;
switch(speed)
{
case FAN_FULL_SPEED:
val = 0xe;
break;
case FAN_THR_QTR_SPEED:
val = 0xc;
break;
case FAN_HALF_SPEED:
val = 0x8;
break;
case FAN_QUARTER_SPEED:
val = 0x6;
break;
case FAN_NONE_SPEED:
val = 0x2;
break;
default:
printf("Input speed error!\n");
return ERROR;
}
*(volatile UINT8 *)0xE80000F5 = val;
return OK;
}
/*****************************************************************************
* 电源板相关接口
*****************************************************************************/
/*********************************************************************************
*
*bit4-bit5 : XPAALARM/XPBALARM 0-电源板有电,1-电源板没电
*
*********************************************************************************/
BOOL bspGetPowerStatus (UINT32 powerNo)
{
UINT16 val;
if(powerNo < 1 || powerNo >2)
{
printf("powerNo Number Error!\n");
return FALSE;
}
val = *(volatile UINT16 *)0xEB040000;
val = val & (0x8 << powerNo);
if(val)
return FALSE;
else
return TRUE;
}
/*****************************************************************************
* 温度相关接口
*****************************************************************************/
/************************************************************************
*FUNCTION NAME : Sub_ThermometerInit *
*DESCRIPTION : 温度传感器初始化 *
*INPUT : *
*OUTPUT : *
*RETURN : none *
*GLOBAL : none *
*NOTE : *
*MODIFY DATE VERSION AUTHOR REASON *
*=======================================================================*
*02/18/2004 1.0 XiaShundong Create *
************************************************************************/
#include "drv/parallel/m8260IOPort.h"
typedef volatile INT32 VINT32; /* volatile unsigned word */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -