📄 dbus.c
字号:
#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 + -