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

📄 menuprocess.c

📁 通过车载终端采集GPS数据
💻 C
📖 第 1 页 / 共 5 页
字号:
            break;
            
        case KEY_CODE_NO:
            return NOKEY_MENU;
            break;

        default:
            return NOCHANGE_MENU;
            break;
    }*/
}
    
//显示5位数字
void display_num5(Uint16 number)
{
    char num[6];

    num[0] = number / 10000 + '0';
    num[1] = (number % 10000) / 1000 + '0';
    num[2] = ((number % 10000) % 1000) / 100 + '0';
    num[3] = (((number % 10000) % 1000) % 100) / 10 + '0';
    num[4] = (((number % 10000) % 1000) % 100) % 10 + '0';
    num[5] = 0;
    display_string(num);
}

/*运营设置子菜单*/
char menu1Process(char FlashLcd)
{
    char key;

    if (FlashLcd == FLASH_SCREEN)
        comm_menu(runSet[YY_CQKH],runSet[YY_XLXZ],runSet[YY_XCMS],startupMsg[0]);    
    key = get_key();
    switch (key)
    {
        case KEY_CODE_ESC:
        case KEY_CODE_ENTER:
            return PREVIEW_MENU;
            break;
        
        case KEY_CODE_NUM1:/*出勤考核*/
            return NEXT_MENU1;
            break;

        case KEY_CODE_NUM2:/*线路选择*/
            return NEXT_MENU2;
            break;

        case KEY_CODE_NUM3:/*行车模式*/
            return NEXT_MENU3;
            break;

        case KEY_CODE_NO:
            return NOKEY_MENU;
            break;

        default:
            return NOCHANGE_MENU;
            break;       
    }
}

/*调度信息子菜单*/
char menu2Process(char FlashLcd)
{
    char key;

    if (FlashLcd == FLASH_SCREEN)
        comm_menu(dispatchMsg[9],dispatchMsg[15],dispatchMsg[21],dispatchMsg[1]);    
    key = get_key();
    switch (key)
    {
        case KEY_CODE_ESC:
        case KEY_CODE_ENTER:
            return PREVIEW_MENU;
            break;
        
        case KEY_CODE_NUM1:/*调度指令*/
            return NEXT_MENU1;
            break;

        case KEY_CODE_NUM2:/*告警信息*/
            return NEXT_MENU2;
            break;

        case KEY_CODE_NUM3:/*运营计划*/
            return NEXT_MENU3;
            break;

        case KEY_CODE_NUM4:/*固定短语*/
            return NEXT_MENU4;
            break;

        case KEY_CODE_NO:
            return NOKEY_MENU;
            break;

        default:
            return NOCHANGE_MENU;
            break;       
    }
}

/*通话功能子菜单*/
char menu3Process(char FlashLcd)
{
    char key;

    if (FlashLcd == FLASH_SCREEN)
        comm_menu(callFunc[TH_TXL],startupMsg[0],startupMsg[0],startupMsg[0]);    
    key = get_key();
    switch (key)
    {
        case KEY_CODE_ESC:
        case KEY_CODE_ENTER:
            return PREVIEW_MENU;
            break;
        
        case KEY_CODE_NUM1:/*通信录*/
            return NEXT_MENU1;
            break;

        case KEY_CODE_NO:
            return NOKEY_MENU;
            break;

        default:
            return NOCHANGE_MENU;
            break;       
    }
}


//查询GPRS状态
char find_gprsStatus()
{
    Uchar gprs;

    get_gprsStatus(&gprs);
    if (gprs != PPP_CONECTTOCENTER)
    {   //网络繁忙,请稍后再试
        lcd_clear_srceen();
        display_attribute( 0,1,0 );
        display_string(dispatchMsg[19]);
        display_attribute( 0,2,0 );
        display_string(dispatchMsg[20]);
        return KO;
    }
    else
        return OK;
}

//上下班二次确认界面
void display_confirmOn_or_off_duty(char type)
{
    Byte tmpID[5];
    memset(tmpID, 0, 5);
    //二次确认显示
    lcd_clear_srceen();
    //工号显示
    display_attribute( 0,0,0 );
    display_string(runSet[3]);
    display_attribute( 5,0,0 );
    get_driver_id(tmpID);
    display_string(tmpID); 
    //显示是否确认上下班
    display_attribute( 0,1,0 );    
    if (type == ON_DUTY)
        display_string(runSet[33]);
    else
        display_string(runSet[34]);
    display_attribute( 0,2,0 );
    display_string("是请按确定键");
    display_attribute( 0,3,0 );
    display_string("退出请按取消键");
}
        
//出勤考核菜单
static Uchar dutyConfirm = 0;//0,没有上下班确认;1,确认过上班;2,确认过下班
char driverDuty_to_center()
{
    Uchar key;
    FORMAT_BUFFER *format;
    static lcdSeq;
    format = get_format_buffer();
    switch (format->status)
    {
        case RESPONSE_VALID://与主机通信正常时,显示中心回应            
            //先确认命令ID(0EH)
            if ((format->id) == 0x0108)
            {   //等待上班确认aaaa
                gpMsgStatus = (SET_WORKSTATUS*)(format->buf);
                lcdSeq = 0;
                lcd_clear_srceen();
                if (0 == gpMsgStatus->len)
                {
                    //老版本
                    if (dutyConfirm == 1)
                    {
                        if (gpMsgStatus->status == ACK_DUTY)
                        {   //同意上班
                            display_attribute( 0,1,0 );
                            display_string(runSet[37]); 
                            display_attribute( 0,2,0 );
                            display_string(runSet[38]);
                        }
                        if (gpMsgStatus->status == NAK_DUTY)
                        {   //不同意上班
                            display_attribute( 0,1,0 );
                            display_string(runSet[40]); 
                            display_attribute( 0,2,0 );
                            display_string(runSet[41]); 
                        } 
                    }
                    //等待下班确认
                    if (dutyConfirm == 2)
                    {
                        if (gpMsgStatus->status == ACK_OFFDUTY)
                        {   //同意下班
                            display_attribute( 0,1,0 );
                            display_string(runSet[37]); 
                            display_attribute( 0,2,0 );
                            display_string(runSet[39]);
                        }
                        if (gpMsgStatus->status == NAK_OFFDUTY)
                        {   //不同意下班
                            display_attribute( 0,1,0 );
                            display_string(runSet[40]); 
                            display_attribute( 0,2,0 );
                            display_string(runSet[42]); 
                        }  
                    }
                }
                else
                {
                    display_Msg_byLCD(gpMsgStatus->content, gpMsgStatus->len, lcdSeq+1);
                }
            }                
            set_formatbuffer_status(RESPONSE_NOUSE); 
            break;

        case RESPONSE_WAITING://未连接到主机上时,不做任何处理
        case RESPONSE_NOUSE:
        default:
            break;

        case RESPONSE_TIMEOUT://与主机连接失败时,显示"与主机通信失败"
        case RESPONSE_FAILED:
            lcd_clear_srceen();
            display_attribute( 0,1,0 );
            display_string(runSet[32]); 
            set_formatbuffer_status(RESPONSE_NOUSE);  
            break;        
    }
    key = get_key();

    switch (key)
    {
    case KEY_CODE_ESC:
    case KEY_CODE_ENTER:
        nMenuIndex = 0;
        dutyConfirm = 0;
        gpMsgStatus = NULL;
        lcdSeq = 0;
        return PREVIEW_MENU;
        break;
    case KEY_CODE_START://下翻一屏
        if (NULL != gpMsgStatus)
        {
            lcdSeq = display_Msg_byLCD(gpMsgStatus->content, gpMsgStatus->len, lcdSeq+1);
        }
        return NOCHANGE_MENU;
        break;       
    case KEY_CODE_NUM8://上翻一屏
        if (NULL != gpMsgStatus)
        {
            if (lcdSeq > 1)
                lcdSeq = display_Msg_byLCD(gpMsgStatus->content, gpMsgStatus->len, lcdSeq+1);
        }
        return NOCHANGE_MENU;
        break;
    case  KEY_CODE_NO:
        return NOKEY_MENU;
    default:
        return NOCHANGE_MENU;
    }        
}
char driverDuty_to_host(char FlashLcd)
{
    Uchar key;
     //第一次进入界面时,读取工号
    if (FlashLcd == FLASH_SCREEN)
    {
        Byte tmpBuf[5];
        nMenuIndex = 0;
        dutyConfirm = 0;
        memset(tmpBuf, 0, 5);
        get_driver_id(tmpBuf);    
        lcd_clear_srceen();
        display_attribute( 0,0,0 );
        display_string(runSet[3]);
        display_attribute( 0,1,0 );
        display_string(runSet[4]);
        display_attribute( 0,2,0 );
        display_string(runSet[5]);
        display_attribute( 0,3,0 );
        display_string(runSet[6]);
        display_attribute( 5,0,0 );
        display_string(tmpBuf); 
    }

    key = get_key();
    switch (key)
    {
        case KEY_CODE_NUM1://修改工号
            if (dutyConfirm == 0)
                return NEXT_MENU;
            else 
                return NOCHANGE_MENU;
            break;

        case KEY_CODE_ESC:
            nMenuIndex = 0;
            dutyConfirm = 0;
            return PREVIEW_MENU;
            break;


        case KEY_CODE_ENTER:
            if (dutyConfirm != 0)
            {
                lcd_clear_srceen();
                if (dutyConfirm == 1)
                    make_assess_message(1);
                else
                    make_assess_message (2);
                //显示等待界面
                display_attribute( 0,1,0 );
                display_string(runSet[36]); 
                display_attribute( 0,2,0 );
                display_string(sysMsg[21]);
                set_formatbuffer_status(RESPONSE_WAITING);
                nMenuIndex = 1;
            }
            return NOCHANGE_MENU;
            break;

        case KEY_CODE_NUM2://上班确认
            if (OK == find_gprsStatus())
            {
                dutyConfirm = 1;
                display_confirmOn_or_off_duty(ON_DUTY);
            }
            return NOCHANGE_MENU;                
            break;

        case KEY_CODE_NUM3://下班确认
            if (OK == find_gprsStatus())
            {
                dutyConfirm = 2;
                display_confirmOn_or_off_duty(OFF_DUTY);
            }
            return NOCHANGE_MENU;
            break;

        case KEY_CODE_NO:
            return NOKEY_MENU;
            break;

        default:
            return NOCHANGE_MENU;
            break;
    } 
}

char set_driverDuty(char FlashLcd)
{
    //确认上下班后等待主机回应
    if (nMenuIndex == 1)
    {
        return driverDuty_to_center();;
    }
    else if (nMenuIndex == 0)
    {
       return driverDuty_to_host(FlashLcd);
    }        
}    

//输入司机工号
char input_driverNum(char disNum)
{
    char num[2];

    drivNum_order = drivNum_order + 1;
    num[0] = disNum + '0';
    num[1] = 0;

    if ((drivNum_order < 5) && (drivNum_order > 0))
    {
        display_attribute( drivNum_order,1,0 );
        display_string(num);
        driverID[drivNum_order - 1] = num[0];
    }
    else
        drivNum_order = 4;
    
    return NOCHANGE_MENU;
}


/*修改司机工号菜单*/
char modify_driverNum(char FlashLcd)
{
    char key;

    //重新输入工号
    if (FlashLcd == FLASH_SCREEN)
    {    
        lcd_clear_srceen();
        display_attribute( 0,0,0 );
        display_string(runSet[25]);
        memset(driverID,0,4);
        drivNum_order = 0;
    }

    key = get_key();
    switch (key)
    {
        case KEY_CODE_NUM0:
            input_driverNum(0);
            break;

        case KEY_CODE_NUM1:
            input_driverNum(1);
            break;

        case KEY_CODE_NUM2:
            input_driverNum(2);
            break;

        case KEY_CODE_NUM3:
            input_driverNum(3);
            break;

        case KEY_CODE_NUM4:
            input_driverNum(4);
            break;

        case KEY_CODE_NUM5:
            input_driverNum(5);
            break;

        case KEY_CODE_NUM6:
            input_driverNum(6);
            break;

        case KEY_CODE_NUM7:
            input_driverNum(7);
          

⌨️ 快捷键说明

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