📄 dbus.c
字号:
switch (DBusDataToSendType) {
case IDU_LINK:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + 6 + 3;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, 6 + 3);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = TRUE;
DBusDoneUpLoad = FALSE;
break;
case IDU_INFO:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + GBUS_GPSINFO_SIZE;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, GBUS_GPSINFO_SIZE);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = FALSE;
DBusDoneUpLoad = FALSE;
break;
case IDU_TASK:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + GBUS_GPSTASK_SIZE;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, GBUS_GPSTASK_SIZE);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = TRUE;
DBusDoneUpLoad = FALSE;
break;
case IDU_COME:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + GBUS_GPSCOME_SIZE;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, GBUS_GPSCOME_SIZE);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = TRUE;
DBusDoneUpLoad = FALSE;
break;
case IDU_AWAY:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + GBUS_GPSAWAY_SIZE;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, GBUS_GPSAWAY_SIZE);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = TRUE;
DBusDoneUpLoad = FALSE;
break;
case IDU_OVER:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + GBUS_GPSOVER_SIZE;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, GBUS_GPSOVER_SIZE);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = TRUE;
DBusDoneUpLoad = FALSE;
break;
case IDU_LINE:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + GBUS_GPSLINE_SIZE;
memcpy(DBusDataUpLoadData + 4, DBusDataToSend, GBUS_GPSLINE_SIZE);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = TRUE;
DBusDoneUpLoad = FALSE;
break;
case IDU_PERSON:
DBusDataUpLoadType = DBusDataToSendType;
DBusDataUpLoadSize = 4 + 1 + 1 + 6;
#ifdef SUPPORT_BUS_DEVICE
DBusDataUpLoadData[4] = DBusCNTTailReach;
DBusDataUpLoadData[5] = DBusCNTTailLeave;
#else
DBusDataUpLoadData[4] = 0xFF;
DBusDataUpLoadData[5] = 0xFF;
#endif
memcpy(DBusDataUpLoadData + 6, DBusDate, 6);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = FALSE;
DBusDoneUpLoad = FALSE;
break;
case IDD_MISSION:
case IDD_BASIC:
DBusDataUpLoadType = IDU_ACCEPT;
DBusDataUpLoadSize = 4 + 1 + 1 + 6;
DBusDataUpLoadData[4] = DBusDataToSendType;
DBusDataUpLoadData[5] = 0;
memcpy(DBusDataUpLoadData + 6, DBusDate, 6);
DBusMakeDataUpData();
DBusFlagUpLoad = TRUE;
DBusWaitUpLoad = FALSE;
DBusDoneUpLoad = FALSE;
break;
}
switch (DBusDataToSendType) {
case IDU_TASK:
switch (DBusDataUpLoadData[4]) {
case IDE_BLOCK: strcpy(DBusDataBuffer, "路堵"); break;
case IDE_ACCIDENT: strcpy(DBusDataBuffer, "事故"); break;
case IDE_FAILURE: strcpy(DBusDataBuffer, "故障"); break;
case IDE_ALARM: strcpy(DBusDataBuffer, "报警"); break;
case IDE_BOTHER: strcpy(DBusDataBuffer, "纠纷"); break;
case IDE_START: strcpy(DBusDataBuffer, "开始公交任务"); break;
case IDE_STOP: strcpy(DBusDataBuffer, "结束公交任务"); break;
case IDE_OILSTART: strcpy(DBusDataBuffer, "加油开始"); break;
case IDE_OILEND: strcpy(DBusDataBuffer, "加油结束"); break;
case IDE_DUTYON: strcpy(DBusDataBuffer, "上班签到"); break;
case IDE_DUTYOFF: strcpy(DBusDataBuffer, "全天下班"); break;
case IDE_DUTYCHANGE: strcpy(DBusDataBuffer, "司机交班"); break;
case IDE_FAULTSTART: strcpy(DBusDataBuffer, "机障"); break;
case IDE_FAULTEND: strcpy(DBusDataBuffer, "机障结束"); break;
// case IDE_GETCAR: strcpy(DBusDataBuffer, "收车"); break;
case IDE_ENGAGESTART: strcpy(DBusDataBuffer, "包车"); break;
case IDE_ENGAGEEND: strcpy(DBusDataBuffer, "包车结束"); break;
case IDE_ACCIDENTEND: strcpy(DBusDataBuffer, "事故结束"); break;
case IDE_WANTOIL: strcpy(DBusDataBuffer, "请求加油"); break;
case IDE_ACCEPT: strcpy(DBusDataBuffer, "确认"); break;
case IDE_CANCEL: strcpy(DBusDataBuffer, "取消"); break;
default: strcpy(DBusDataBuffer, "未知"); break;
}
DBusMakeNoteSend(DBusDataBuffer, DBusTimeHH, DBusTimeMM, DBusTimeSS);
DBusShowNoteSendStr = TRUE;
break;
#if 0
case IDU_OVER:
if (DBusDataUpLoadData[4]) {
strcpy(DBusDataBuffer, "超速");
DBusMakeNoteSend(DBusDataBuffer, DBusTimeHH, DBusTimeMM, DBusTimeSS);
DBusShowNoteSendStr = TRUE;
}
break;
case IDU_LINE:
if (DBusDataUpLoadData[4]) {
strcpy(DBusDataBuffer, "离线");
DBusMakeNoteSend(DBusDataBuffer, DBusTimeHH, DBusTimeMM, DBusTimeSS);
DBusShowNoteSendStr = TRUE;
}
break;
case IDU_PERSON:
strcpy(DBusDataBuffer, "Person");
DBusMakeNoteSend(DBusDataBuffer, DBusTimeHH, DBusTimeMM, DBusTimeSS);
DBusShowNoteSendStr = TRUE;
break;
#endif
}
}
/************************************************************************
* Make GPRS Data DnLoad *
************************************************************************/
void DBusMakeDataDnLoad()
{
BYTE i;
if (!DBusMakeDataDnData()) return;
#ifdef SUPPORT_USART_SHOW
psprintf(LineBuffer, "ID:%02x,", DBusDataDnLoadType);
DBusEditShowText(LineBuffer);
#endif
switch (DBusDataDnLoadType) {
case IDD_ACCEPT:
if (DBusWaitUpLoad) {
#ifdef SUPPORT_USART_SHOW
psprintf(LineBuffer, "%02x,", DBusDataDnLoadData[0]);
DBusEditShowText(LineBuffer);
#endif
if (DBusDataDnLoadData[0] == DBusDataToSendType) {
if (!DBusFlagGetTime) {
DBusFlagGetTime = TRUE;
memcpy(DBusDate, DBusDataDnLoadData + 1, 6);
}
DBusWaitUpLoad = FALSE;
DBusDoneUpLoad = TRUE;
DBusItemUpLoad = 0;
}
}
break;
case IDD_MISSION:
if (DBusDataDnLoadSize > 1 + 6) {
strcpylen(DBusDataBuffer, DBusDataDnLoadData + 7, DBusDataDnLoadSize - 7);
DBusMakeNoteRecv(DBusDataBuffer, DBusDataDnLoadData[4],
DBusDataDnLoadData[5],
DBusDataDnLoadData[6]);
DBusShowNoteRecvStr = TRUE;
switch (DBusDataDnLoadData[0] & 0xF0) {
case 0xC0:
GBusMessageType = 1;
memcpy(GBusMessageTime, DBusTime, 3);
memcpy(GBusMessageText, DBusDataBuffer, GBUS_MESSAGE_TEXT_SIZE);
GBusMessageText[GBUS_MESSAGE_TEXT_SIZE] = 0;
DSASendMessage();
break;
case 0x80:
DSASendData(COMM_BUS_MISSION, DBusDataDnLoadData[0] & 0x0F);
break;
case 0x70:
DBusMakeNoteFI(DBusDataBuffer, DBusDataDnLoadData[4],
DBusDataDnLoadData[5],
DBusDataDnLoadData[6]);
break;
}
#ifdef SUPPORT_VOICE
if ((DBusDataDnLoadData[0] & 0xF0) != 0x70) {
VoiceSendQuene(DBusDataBuffer, VOICE_LEVEL_1);
}
#endif
}
DBusMakeDataFI(DBusDataBuffer, IDD_MISSION);
break;
case IDD_PUBLIC:
if (DBusDataDnLoadSize > 4 + 1) {
strcpylen(DBusDataBuffer, DBusDataDnLoadData + 5, DBusDataDnLoadSize - 5);
DBusMakeNoteRecv(DBusDataBuffer, DBusTimeHH,
DBusTimeMM,
DBusTimeSS);
DBusShowNoteRecvStr = TRUE;
#ifdef SUPPORT_VOICE
VoiceSendQuene("收到中心的消息", VOICE_LEVEL_1);
#endif
GBusMessageType = DBusDataDnLoadData[4];
memcpy(GBusMessageTime, DBusTime, 3);
memcpy(GBusMessageText, DBusDataBuffer, GBUS_MESSAGE_TEXT_SIZE);
GBusMessageText[GBUS_MESSAGE_TEXT_SIZE] = 0;
DSASendMessage();
}
break;
case IDD_PERSON:
if (DBusDataDnLoadSize == 6) {
#if 0
strcpy(DBusDataBuffer, "Person");
DBusMakeNoteRecv(DBusDataBuffer, DBusTimeHH,
DBusTimeMM,
DBusTimeSS);
DBusShowNoteRecvStr = TRUE;
#endif
DBusMakeDataFI(DBusDataBuffer, IDU_PERSON);
}
break;
case IDD_BASIC:
if (DBusDataDnLoadSize >= 4 + 1) {
if (DBusNaviTime != DBusDataDnLoadData[4]) {
DBusNaviTime = DBusDataDnLoadData[4];
DSASendData(COMM_BUS_GPSTIME, DBusNaviTime);
#ifdef SUPPORT_I2C_DEVICE
DBusByteSaveEEP(EEP_POS_NAVI_TIME, DBusNaviTime);
#endif
}
}
if (DBusDataDnLoadSize >= 4 + 1 + 4) {
GBusVCDDistAway = (DBusDataDnLoadData[5] << 8) | DBusDataDnLoadData[6];
GBusVCDDistCome = (DBusDataDnLoadData[7] << 8) | DBusDataDnLoadData[8];
if (DBusVCDDistAway != GBusVCDDistAway ||
DBusVCDDistCome != GBusVCDDistCome) {
if (DBusVCDDistAway != GBusVCDDistAway) {
DBusVCDDistAway = GBusVCDDistAway;
#ifdef SUPPORT_I2C_DEVICE
DBusDataSaveEEP(EEP_POS_DIST_VCD, DBusVCDDist, 2);
#endif
}
if (DBusVCDDistCome != GBusVCDDistCome) {
DBusVCDDistCome = GBusVCDDistCome;
#ifdef SUPPORT_I2C_DEVICE
DBusDataSaveEEP(EEP_POS_DIST_VCD + 2, DBusVCDDist + 2, 2);
#endif
}
DSASendVCDDist();
}
}
if (DBusDataDnLoadSize >= 4 + 1 + 4 + 2) {
GBusLineID = (DBusDataDnLoadData[9] << 8) | DBusDataDnLoadData[10];
psprintf(GBusLineIDStr, "%d", GBusLineID / 3);
for (i = 0; i < GBusLineSize; i++) {
if (strcmp(GBusLineIDStr, GBusLineList + i * GBUS_SETLINE_SIZE) == 0) {
if (DBusLineID != GBusLineID) {
DBusLineID = GBusLineID;
strcpy(DBusLineIDStr, GBusLineIDStr);
strcpy(DBusLineName, DBusLineIDStr);
#ifdef SUPPORT_I2C_DEVICE
DBusDataSaveEEP(EEP_POS_LINE_ID, DBusLineIDAdr, DBUS_LINE_ID_MAX);
#endif
GBusLineAddr = i;
DBusShowLineName = TRUE;
DSASendBusLine();
psprintf(DBusDataBuffer, "中心调度线路:%s路", GBusLineIDStr);
DBusMakeNoteRecv(DBusDataBuffer, DBusTimeHH,
DBusTimeMM,
DBusTimeSS);
DBusShowNoteRecvStr = TRUE;
#ifdef SUPPORT_VOICE
VoiceSendQuene(DBusDataBuffer, VOICE_LEVEL_1);
#endif
}
break;
}
}
}
DBusMakeDataFI(DBusDataBuffer, IDD_BASIC);
break;
}
}
/************************************************************************
* DBus Say Hello To GPRS *
************************************************************************/
void DBusMakeGPRSLink()
{
UINT32 UserID;
UserID = (DBusTaskID == TASK_DUTY_OFF) ? DBUS_DBUS_ID_OFF : DBusUserID;
memcopy(DBusDataBuffer, DBusDate, 6);
memload(DBusDataBuffer + 6, UserID, 3);
DBusMakeDataFI(DBusDataBuffer, IDU_LINK);
}
/************************************************************************
* DBus Say Hello To GPRS *
************************************************************************/
void DBusMakeKeyEvent(BYTE Type)
{
switch (Type) {
case IDE_BLOCK:
case IDE_ACCIDENT:
case IDE_FAILURE:
case IDE_ALARM:
case IDE_BOTHER:
case IDE_STOP:
InfoWaitInput = TRUE;
DBusTaskType = Type;
DBusInfoEnter(Type);
break;
case IDE_START:
DBusWaitUserID = TRUE;
DBusTypeUserID = TASK_DUTY_START;
BPopPageIndex = BPOP_USER_ID;
DBusBPopEnter();
break;
}
}
/************************************************************************
* DBus Key Process *
************************************************************************/
BYTE DBusProcessKey(BYTE KeyCode)
{
BYTE RetCode;
if (DBusInfoState()) {
return DBusInfoUseKey(KeyCode);
}
if (DBusMenuState()) {
return DBusMenuUseKey(KeyCode);
}
if (DBusBPopState()) {
return DBusBPopUseKey(KeyCode);
}
if (DBusTaskState()) { // Add by FC at 04-12-06
return DBusTaskUseKey(KeyCode);
}
#ifdef SUPPORT_USART_SHOW
if (KeyCode == _KEY_0) {
EditKeyStep = 1;
EditKeyIdle = EDIT_TIMER_IDLE;
}
else
if ((EditKeyStep == 1 && KeyCode == _KEY_8) ||
(EditKeyStep == 2 && KeyCode == _KEY_6) ||
(EditKeyStep == 3 && KeyCode == _KEY_5) ||
(EditKeyStep == 4 && KeyCode == _KEY_4) ||
(EditKeyStep == 5 && KeyCode == _KEY_6) ||
(EditKeyStep == 6 && KeyCode == _KEY_5)) {
EditKeyStep++;
EditKeyIdle = EDIT_TIMER_IDLE;
}
else {
EditKeyStep = 0;
}
if (EditKeyStep == 7) {
EditKeyStep = 0;
DBusFlagDrawEdit = !DBusFlagDrawEdit;
if (DBusFlagDrawEdit) {
DBusEditEnter();
}
else {
DBusEditExit();
DBusShowLineName = TRUE;
DBusShowNoteTypeStr = TRUE;
DBusShowNaviTypeStr = TRUE;
DBusShowStationName = TRUE;
DBusShowGPSModeName = TRUE;
DBusShowGSMInitGPRS = TRUE;
DBusShowGSMLinkGPRS = TRUE;
}
#ifdef SUPPORT_I2C_DEVICE
DBusByteSaveEEP(EEP_POS_EDIT_FLAG, DBusFlagDrawEdit);
#endif
}
#endif
RetCode = TRUE;
switch (KeyCode) {
case _KEY_MENU:
DBusMenuEnter();
break;
case _KEY_UP:
if (DBusRecvCount > 1) {
if (DBusRecvIndex) DBusRecvIndex--;
else DBusRecvIndex = DBusRecvCount - 1;
DBusShowNoteRecv();
DBusShowNoteRecvStr = TRUE;
}
break;
case _KEY_DOWN:
if (DBusRecvCount > 1) {
if (DBusRecvIndex < DBusRecvCount - 1) DBusRecvIndex++;
else DBusRecvIndex = 0;
DBusShowNoteRecv();
DBusShowNoteRecvStr = TRUE;
}
break;
case _KEY_LEFT:
if (DBusSendCount > 1) {
if (DBusSendIndex) DBusSendIndex--;
else DBusSendIndex = DBusSendCount - 1;
DBusShowNoteSend();
DBusShowNoteSendStr = TRUE;
}
break;
case _KEY_RIGHT:
if (DBusSendCount > 1) {
if (DBusSendIndex < DBusSendCount - 1) DBusSendIndex++;
else DBusSendIndex = 0;
DBusShowNoteSend();
DBusShowNoteSendStr = TRUE;
}
break;
case _KEY_TASK:
TaskWaitInput = TRUE;
DBusTaskEnter();
break;
case _KEY_BLOCK: DBusMakeKeyEvent(IDE_BLOCK); break;
case _KEY_ACCIDENT: DBusMakeKeyEvent(IDE_ACCIDENT); break;
case _KEY_FAILURE: DBusMakeKeyEvent(IDE_FAILURE); break;
case _KEY_ALARM: DBusMakeKeyEvent(IDE_ALARM); break;
case _KEY_START: DBusMakeKeyEvent(IDE_START); break;
case _KEY_STOP: DBusMakeKeyEvent(IDE_STOP); break;
case _KEY_BOTHER: DBusMakeKeyEvent(IDE_BOTHER); break;
default: RetCode = FALSE; break;
}
return RetCode;
}
/************************************************************************
* 10mS Timer Base Process *
************************************************************************/
void DBusTimer10mS()
{
if (DBusTimeUpLoad) DBusTimeUpLoad--;
DBusCount10mS++;
if (DBusCount10mS >= 100) { // 1S Count
DBusCount10mS = 0;
if (++DBusTimeSS >= 60) {
DBusTimeSS = 0;
if (++DBusTimeMM >= 60) {
DBusTimeMM = 0;
if (++DBusTimeHH >= 24) {
DBusTimeHH = 0;
}
}
}
DBusShowRealTimeStr = TRUE;
}
psprintf(DBusRealTimeStr, "%02d:%02d:%02d", DBusTimeHH, DBusTimeMM, DBusTimeSS);
if (DBusCountMenu) DBusCountMenu--;
if (DBusCountMenu == 0) {
DBusCountMenu = DBUS_TIMER_MENU;
DBusFlagDrawMenu = TRUE;
}
#ifdef SUPPORT_USART_SHOW
if (EditKeyIdle) {
EditKeyIdle--;
if (EditKeyIdle == 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -