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

📄 dbus.c

📁 C语言编写的监控中心终端程序。基于GPRS上传收发数据功能
💻 C
📖 第 1 页 / 共 3 页
字号:
    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 + -