⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbus.c

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "config.h"
#include "regmap.h"
#include "memmap.h"
#include "global.h"
#include "sio.h"
#include "gpio.h"
#include "func.h"
#include "util.h"
#include "graph.h"
#include "osdfont.h"
#include "irconfig.h"

#ifdef SUPPORT_DBUS_FUNCTION
/************************************************************************
 *	DBUS Macro Define						*
 ************************************************************************/
enum {
    TYPE_NOTE_MANDARIN		= 0,
    TYPE_NOTE_CANTONESE,
    TYPE_NOTE_MIXED,
};

enum {
    TYPE_NAVI_GPS		= 0,
    TYPE_NAVI_VCD,
    TYPE_NAVI_TUNER,
};

enum {
    TYPE_MODE_AUTO		= 0,
    TYPE_MODE_MANUAL,
};

/************************************************************************
 *	DBUS Macro Define						*
 ************************************************************************/
#define	DBUS_TIMER_MENU		(50 / 10)		// 50mS
#define	EDIT_TIMER_IDLE		(1500 / 10)		// 1.5S

/************************************************************************
 *	DBUS Const Define						*
 ************************************************************************/
static const BYTE	DBusDefineNoteType[][11] = {
    "普通话报读",
    "广东话报读",
    "双语报读  ",
};

static const BYTE	DBusDefineNaviType[][9]	= {
    "智能导航",
    "影视播放",
    "收音播放",
};

static const BYTE	DBusDefineGPSMode[][9]	= {
    "自动报站",
    "手工报站",
};

/************************************************************************
 *	Code Start							*
 ************************************************************************/
void DBusInitGPIO()
{
}

void InitDBusVar()
{
    DBusDataFI			= 0;
    DBusDataFO			= 0;
    DBusNoteFI			= 0;
    DBusNoteFO			= 0;
    DBusRecvCount		= 0;
    DBusRecvIndex		= 0;
    DBusSendCount		= 0;
    DBusSendIndex		= 0;

    DBusFlagUpLoad		= FALSE;
    DBusWaitUpLoad		= FALSE;
    DBusDoneUpLoad		= TRUE;
    DBusItemUpLoad		= 0;

    DBusWaitUserID		= FALSE;
    DBusDoneUserID		= FALSE;

    DBusLineID			= 284 * 3;
    DBusDBusID			= 6616;
    DBusUserID			= 12345;
    DBusTypeID			= 1;
    DBusTaskID			= TASK_DUTY_OFF;

    DBusInitGPRS		= FALSE;
    DBusLinkGPRS		= FALSE;
    DBusNoteType		= TYPE_NOTE_MIXED;
    DBusNaviType		= TYPE_NAVI_GPS;
    DBusNaviMode		= TYPE_MODE_AUTO;
    DBusNaviTime		= 15;
    DBusVideoVCD		= 0;
    DBusVideoVCR		= 0;
    DBusVCDDistAway		= 50;
    DBusVCDDistCome		= 100;

#ifdef	MONITOR_HARDWARE_TEST
    DBusLinkIP[0]		= 218;		// 211		// 166
    DBusLinkIP[1]		=  20;		//  95		// 111
    DBusLinkIP[2]		= 190;		// 203		//   8
    DBusLinkIP[3]		= 248;		//  26		// 238
    DBusPortIP			= 9001;
#else
    DBusLinkIP[0]		= 211;		// 218		// 166
    DBusLinkIP[1]		=  95;		//  20		// 111
    DBusLinkIP[2]		= 203;		// 190		//   8
    DBusLinkIP[3]		=  26;		// 248		// 238
    DBusPortIP			= 9001;
#endif

    strcpy(DBusGPRSIPStr,	"CMNET");
    strcpy(DBusSuperCode,	"661678");
    strcpy(DBusGuestCode,	"123456");

    strcpy(DBusDBusName,	"");
    strcpy(DBusLineName,	"");
    strcpy(DBusStationPrev,	"");
    strcpy(DBusStationNext,	"");
    strcpy(DBusNaviModeStr,	"");
    strcpy(DBusRealTimeStr,	"00:00:00");

    DBusVoiceSetMandarin	= 0;
    DBusVoiceSetCantonese	= 0;
    DBusVoiceSetMixed		= 1;
    DBusVoiceSetPublic		= 0;
    DBusVoiceSetStation		= 1;
    DBusVoiceSetTurn		= 0;
    DBusVoiceSetMusic		= 0;

    MenuEnterOK			= FALSE;
    BPopEnterOK			= FALSE;
    InfoEnterOK			= FALSE;
    TaskEnterOK			= FALSE;
#ifdef SUPPORT_USART_SHOW
    EditEnterOK			= FALSE;
#endif

    InfoWaitInput		= FALSE;
    TaskWaitInput		= FALSE;

    DBusDateYY			= 0;
    DBusDateMM			= 1;
    DBusDateDD			= 1;
    DBusTimeHH			= 0;
    DBusTimeMM			= 0;
    DBusTimeSS			= 0;

    DBusFlagGetTime		= FALSE;
    DBusFlagGPSMode		= FALSE;
    DBusFlagGPSInfo		= FALSE;
    DBusFlagGPSTask		= FALSE;
    DBusFlagGPSCome		= FALSE;
    DBusFlagGPSAway		= FALSE;
    DBusFlagGPSOver		= FALSE;
    DBusFlagGPSLine		= FALSE;
    DBusFlagGPSTail		= FALSE;
    DBusFlagDirLine		= FALSE;
    DBusFlagStation		= FALSE;
    DBusFlagSoftVer		= FALSE;
    DBusFlagDrawMenu		= FALSE;
    DBusFlagDrawEdit		= FALSE;

    DBusShowDBusName		= FALSE;
    DBusShowLineName		= FALSE;
    DBusShowNoteTypeStr		= TRUE;
    DBusShowNaviTypeStr		= TRUE;
    DBusShowGSMInitGPRS		= TRUE;
    DBusShowGSMLinkGPRS		= TRUE;
    DBusShowStationName		= FALSE;
    DBusShowGPSModeName		= FALSE;
    DBusShowRealTimeStr		= TRUE;
    DBusShowNoteRecvStr		= FALSE;
    DBusShowNoteSendStr		= FALSE;

    DBusCount10mS		= 0;
    DBusCountMenu		= DBUS_TIMER_MENU;

    GBusResetGPS		= FALSE;
    GBusResetGSM		= FALSE;

    GBusLineSize		= 0;
    GBusLineAddr		= 0;

    memcpy(DBusDataUpLoadID,	"\xAA\x75", 2);
    memcpy(DBusDataUpLoadTemp,	"\x00",	    0);

    DBusGPSInfoE		= 0x026d9deeL;
    DBusGPSInfoN		= 0x00808e44L;
    DBusGPSInfoSpeed		= 0;
    DBusGPSInfoAngle		= 0;
    DBusGPSInfoDateYY		= 4;
    DBusGPSInfoDateMM		= 6;
    DBusGPSInfoDateDD		= 29;
    DBusGPSInfoTimeHH		= 0;
    DBusGPSInfoTimeMM		= 0;
    DBusGPSInfoTimeSS		= 0;
    DBusGPSInfoRoadID		= 0xFF;
    DBusGPSInfoRoadType		= 'x';
    strcpy(DBusGPSPosiText,	"天目领航");

#ifdef SUPPORT_BUS_DEVICE
    DBusCNTTailReach		= 0xFF;
    DBusCNTTailLeave		= 0xFF;
    DBusFlagWaitTail		= FALSE;
    DBusFlagDoneTail		= FALSE;
#endif

#ifdef SUPPORT_USART_SHOW
    EditKeyStep			= 0;
#endif
}

void DBusInitData()
{
    DBusInitLoadEEP();

    psprintf(DBusLineIDStr, "%d",		DBusLineID / 3);
    psprintf(DBusDBusIDStr, "%d",		DBusDBusID);
    psprintf(DBusUserIDStr, "%06d",		DBusUserID);
    psprintf(DBusLinkIPStr, "%3d.%3d.%3d.%3d",	DBusLinkIP[0], DBusLinkIP[1],
						DBusLinkIP[2], DBusLinkIP[3]);
    psprintf(DBusPortIPStr, "%04d",		DBusPortIP);

    strcpy(DBusNoteTypeStr, (BYTE *)DBusDefineNoteType[DBusNoteType]);
    strcpy(DBusNaviTypeStr, (BYTE *)DBusDefineNaviType[DBusNaviType]);

    strcpy(DBusLineName, DBusLineIDStr);
    DBusShowLineName = TRUE;
}

/************************************************************************
 *	DBus Proc Software Version					*
 ************************************************************************/
BYTE DBusVerifyVersion(BYTE *Text)
{
    BYTE	       *StrCurr;
    BYTE	       *StrNext;
    BYTE		Version;

    if (!(IsAlpha(Text[0]) && IsDigit(Text[1])))	return FALSE;

    StrCurr = Text + 1;
    if ((StrNext = strchr(StrCurr, '.')) == NULL)	return FALSE;
    strcpylen(DispBuffer, StrCurr, StrNext - StrCurr);
    Version = Str2Dec(DispBuffer);

    StrCurr = StrNext + 1;
    if (!IsDigit(StrCurr[0]))				return FALSE;
    Version *= 10;
    Version += StrCurr[0] - '0';

    return (Version >= 21);
}

/************************************************************************
 *	DBus Data FIFO Access						*
 ************************************************************************/
BYTE DBusDataFIFOEmpty()
{
    return (DBusDataFI == DBusDataFO);
}

void DBusMakeDataFI(BYTE *Data, BYTE Type)
{
    memcpy(DBusDataFIFOAddr(DBusDataFI), Data, DBUS_DATA_FIFO_SIZE - 1);
    DBusDataFIFOType(DBusDataFI) = Type;
    DBusDataFI++;
}

void DBusMakeDataFO(BYTE *Data)
{
    memcpy(Data, DBusDataFIFOAddr(DBusDataFO), DBUS_DATA_FIFO_SIZE);
    DBusDataFO++;
}

/************************************************************************
 *	DBus Note FIFO Access						*
 ************************************************************************/
BYTE DBusNoteFIFOEmpty()
{
    return (DBusNoteFI == DBusNoteFO);
}

void DBusMakeNoteFI(BYTE *Data, BYTE HH, BYTE MM, BYTE SS)
{
    strcpylen(DBusNoteFIFOAddr(DBusNoteFI), Data, DBUS_NOTE_FIFO_SIZE);
    DBusNoteFIFOTimeHH(DBusNoteFI) = HH;
    DBusNoteFIFOTimeMM(DBusNoteFI) = MM;
    DBusNoteFIFOTimeSS(DBusNoteFI) = SS;
    DBusNoteFI++;
    DBusNoteFI &= DBUS_NOTE_FIFO_MASK;
}

void DBusMakeNoteFO(BYTE *Data)
{
    strcpylen(Data, DBusNoteFIFOAddr(DBusNoteFO), DBUS_NOTE_FIFO_SIZE);
    DBusNoteFO++;
    DBusNoteFO &= DBUS_NOTE_FIFO_MASK;
}

/************************************************************************
 *	DBus Note Buffer Access						*
 ************************************************************************/
void DBusShowNoteRecv()
{
    strcpy(  DBusRecvNoteText, DBusRecvBuffAddr(DBusRecvIndex));
    psprintf(DBusRecvNoteTime, "%02d:%02d:%02d", DBusRecvBuffTimeHH(DBusRecvIndex),
						 DBusRecvBuffTimeMM(DBusRecvIndex),
						 DBusRecvBuffTimeSS(DBusRecvIndex));
    psprintf(DBusRecvNoteItem, "%02d/%02d",	 DBusRecvIndex + 1, DBusRecvCount);
}

void DBusMakeNoteRecv(BYTE *Data, BYTE HH, BYTE MM, BYTE SS)
{
    BYTE		i;
    BYTE		Max;

    Max = min(DBusRecvCount, DBUS_NOTE_BUFF_ITEM - 1);
    for (i = Max; i > 0; i--) {
	memcpy(DBusRecvBuffAddr(i), DBusRecvBuffAddr(i - 1), DBUS_NOTE_BUFF_SIZE);
    }
    if (DBusRecvCount < DBUS_NOTE_BUFF_ITEM)
	DBusRecvCount++;
    strcpylen(DBusRecvBuffAddr(0), Data, DBUS_NOTE_BUFF_TEXT);
    DBusRecvBuffTimeHH(0) = HH;
    DBusRecvBuffTimeMM(0) = MM;
    DBusRecvBuffTimeSS(0) = SS;
    DBusRecvIndex = 0;
    DBusShowNoteRecv();
}

void DBusShowNoteSend()
{
    strcpy(  DBusSendNoteText, DBusSendBuffAddr(DBusSendIndex));
    psprintf(DBusSendNoteTime, "%02d:%02d:%02d", DBusSendBuffTimeHH(DBusSendIndex),
						 DBusSendBuffTimeMM(DBusSendIndex),
						 DBusSendBuffTimeSS(DBusSendIndex));
    psprintf(DBusSendNoteItem, "%02d/%02d",	 DBusSendIndex + 1, DBusSendCount);
}

void DBusMakeNoteSend(BYTE *Data, BYTE HH, BYTE MM, BYTE SS)
{
    BYTE		i;
    BYTE		Max;

    Max = min(DBusSendCount, DBUS_NOTE_BUFF_ITEM - 1);
    for (i = Max; i > 0; i--) {
	memcpy(DBusSendBuffAddr(i), DBusSendBuffAddr(i - 1), DBUS_NOTE_BUFF_SIZE);
    }
    if (DBusSendCount < DBUS_NOTE_BUFF_ITEM)
	DBusSendCount++;
    strcpylen(DBusSendBuffAddr(0), Data, DBUS_NOTE_BUFF_TEXT);
    DBusSendBuffTimeHH(0) = HH;
    DBusSendBuffTimeMM(0) = MM;
    DBusSendBuffTimeSS(0) = SS;
    DBusSendIndex = 0;
    DBusShowNoteSend();
}

/************************************************************************
 *	Make GPS Data String						*
 ************************************************************************/
void DBusMakeGPSData(BYTE Type)
{
    switch (Type) {
    case COMM_BUS_TASKICQ:
    case COMM_BUS_TASKEND:
	break;
    case COMM_BUS_GPSMODE:
	GBusGPSMode	= DSACommBuff[0];
	DBusFlagGPSMode	= TRUE;
	break;
    case COMM_BUS_GPSINFO:
	memcpy(GBusGPSInfo, DSACommBuff, GBUS_GPSINFO_SIZE);
	memcpy(DBusDate,    GBusGPSInfoDate, 6);
//	DBusCount10mS	= 0;
	DBusFlagGetTime	= TRUE;
	DBusFlagGPSInfo	= TRUE;
	break;
    case COMM_BUS_GPSTASK:
	memcpy(GBusGPSTask, DSACommBuff, GBUS_GPSTASK_SIZE);
	DBusFlagGPSTask	= TRUE;
	break;
    case COMM_BUS_GPSCOME:
	memcpy(GBusGPSCome, DSACommBuff, GBUS_GPSCOME_SIZE);
	DBusFlagGPSCome	= TRUE;
	break;
    case COMM_BUS_GPSAWAY:
	memcpy(GBusGPSAway, DSACommBuff, GBUS_GPSAWAY_SIZE);
	DBusFlagGPSAway	= TRUE;
	break;
    case COMM_BUS_GPSOVER:
	memcpy(GBusGPSOver, DSACommBuff, GBUS_GPSOVER_SIZE);
	DBusFlagGPSOver	= TRUE;
	break;
    case COMM_BUS_GPSTAIL:
	memcpy(GBusGPSTail, DSACommBuff, GBUS_GPSTAIL_SIZE);
	DBusFlagGPSTail	= TRUE;
	break;
    case COMM_BUS_GPSLINE:
	memcpy(GBusGPSLine, DSACommBuff, GBUS_GPSLINE_SIZE);
	DBusFlagGPSLine	= TRUE;
	break;
    case COMM_BUS_DIRLINE:
	GBusLineDir	= DSACommBuff[0];
	DBusFlagDirLine	= TRUE;
	break;
    case COMM_BUS_STATION:
	strcpylen(GBusStationName, DSACommBuff, GBUS_STATION_SIZE);
	DBusFlagStation	= TRUE;
	break;
    case COMM_BUS_SETLINE:
	if (DSACommBuff[0] < GBUS_SETLINE_MAX) {
	    strcpylen(GBusLineList + DSACommBuff[0] * GBUS_SETLINE_SIZE,
		      DSACommBuff + 1, GBUS_SETLINE_SIZE - 1);
	}
	break;
    case COMM_BUS_SETSIZE:
	if (DSACommBuff[0] < GBUS_SETLINE_MAX) {
	    GBusLineSize = DSACommBuff[0];
	    DBusFlagSetLine = TRUE;
	}
	break;
    case COMM_BUS_BUSLINE:
	DSASendBusLine();
	break;
    case COMM_BUS_GPSTIME:
	memcpy(GBusGPSDate, DSACommBuff, GBUS_GPSTIME_SIZE);
	memcpy(DBusDate,    GBusGPSDate,  6);
	DBusFlagGetTime	= TRUE;
	break;
    case COMM_BUS_SOFTVER:
	memcpy(GBusSoftVer, DSACommBuff, GBUS_SOFTVER_SIZE);
	GBusSoftVer[GBUS_SOFTVER_SIZE] = 0;
	DBusFlagSoftVer	= TRUE;
	break;
    }
}

/************************************************************************
 *	Make CNT Data String						*
 ************************************************************************/
#ifdef SUPPORT_BUS_DEVICE
void DBusMakeCNTData(BYTE Type)
{
    switch (Type) {
    case COMM_BUS_PASSEND:
	memcpy(DBusCNTTail, BUSCommBuff, DBUS_CNTTAIL_SIZE);
	DBusFlagWaitTail = FALSE;
	DBusFlagDoneTail = TRUE;
#ifdef SUPPORT_USART_SHOW
	DBusEditSetColor(MAP_COLOR_MAGENTA);
	psprintf(DispBuffer, "-Count:%02x,%02x,%02x,%02x-",
			     DBusCNTTailDir,   DBusCNTTailStop,
			     DBusCNTTailReach, DBusCNTTailLeave);
	DBusEditShowText(DispBuffer);
#endif
	break;
    }
}
#endif

/************************************************************************
 *	Make UpLoad Data						*
 ************************************************************************/
void DBusMakeDataUpData()
{
    BYTE		XorSum;
    BYTE		i;

    memload(DBusDataUpLoadLine,	DBusLineID, 2);
    memload(DBusDataUpLoadDBus,	DBusDBusID, 2);
    XorSum = 0;
    for (i = 0; i < DBusDataUpLoadSize + 5; i++) {
	XorSum ^= DBusDataUpLoad[i];
    }
    DBusDataUpLoad[i] = XorSum;
}

/************************************************************************
 *	Make DnLoad Data						*
 ************************************************************************/
BYTE DBusMakeDataDnData()
{
    BYTE		XorSum;
    BYTE		i;

    XorSum = 0;
    for (i = 0; i < DBusDataDnLoadSize + 5; i++) {
	XorSum ^= DBusDataDnLoad[i];
    }
    return (DBusDataDnLoad[i] == XorSum);
}

/************************************************************************
 *	Make GPRS Data UpLoad						*
 ************************************************************************/
void DBusMakeDataUpLoad()
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -