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

📄 trans_process.c

📁 通过车载终端采集GPS数据
💻 C
📖 第 1 页 / 共 3 页
字号:

/**照片停止拍摄应答**/
void res_photostop_message(Uchar* messID)
{
    RES_PHOTOMESSAGE_STR *gprs_info;
    gprs_info = (RES_PHOTOMESSAGE_STR *) sbuf.buf[1];
    memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
    gprs_info->mess_head.mess_version = 2;
    gprs_info->mess_head.mess_reserve = 0;
    gprs_info->mess_head.mess_type = (Word)(RES_PHOTOSTOPMSG);      
    memcpy(gprs_info->messID, messID, 4);
    get_bus_id(gprs_info->bus_id);
    gprs_info->mess_head.mess_length = 11;
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));	
    sbuf.valid[1] = 1;
}


/*发送处理*/
void serverTrans_process(void)
{
    Int8 *ptr;
    Uint16 len = 0;
    struct _mess_head_info *head_info;
    Uint16 gps_send_num;
    Uchar heart_send_num;
    Uint16  heart_send_number;   

    gps_num++;
    heart_num++;
    get_auto_time(&gps_send_num);
    get_online_time(&heart_send_num);
    heart_send_number = heart_send_num * 20;  


    /********************发送相片数据使用***********************/
    if (1 == sbufPhoto.valid)
    {
        head_info = (struct _mess_head_info *)(sbufPhoto.buf);
        len = Le16(head_info->mess_length);
        if (udp_send(sbufPhoto.buf, len) == 0)
        {
            //for debug
           // memcpy(testBuf, sbufPhoto.buf, 200);
            //sioc_send(testBuf, 200);
            //end of debug
            sbufPhoto.valid = 0;
        }            

        return;
    }

    if (PHOTO_DATASENDING != photo_getdatastatus())
    {
        /*************************专门为远程程序更新来处理*************/
        if (sbuf.valid[REMOTE_BUFFER_ID] == 1)
        {
            ptr = sbuf.buf[REMOTE_BUFFER_ID];
            head_info = (struct _mess_head_info *)(sbuf.buf[REMOTE_BUFFER_ID]);
            len = (Uchar)(head_info->mess_length >> 8);
            if (udp_send(sbuf.buf[REMOTE_BUFFER_ID],len) == 0)
            {
                sbuf.valid[REMOTE_BUFFER_ID] = 0;
            }            
    
            return;
        }
        /**********************************************************/
    
        if (gps_num >= (gps_send_num * 20))    /*gps消息处理(不要求响应)*/    
        {
            make_gps_message();
            head_info = (struct _mess_head_info *)(sbuf.buf[4]);
            ptr = sbuf.buf[4];
            len = (Uchar)((head_info->mess_length >> 8));        
            if(udp_send(ptr,len) == 0)
            {
                gps_num = 0;
            }     
    
            return;
        }
    
        if (sbuf.valid[0] == 1)/*未收到响应的消息重发*/
        {
            ptr = sbuf.buf[0];  
            retry_num++;
            if(retry_num >= 20 * 5) /*重发时间间隔5秒*/
            {
                retry_num = 0;
                trans_num ++;                
                if(trans_num < 6)/*重发3次*/
                {  
                    head_info = (struct _mess_head_info *)(sbuf.buf[0]);
                    len = (Uchar)(head_info->mess_length >> 8);
                    if( udp_send(ptr,len) == 0 )
                    {
                        heart_num = 0;
                    }
                } 
                else
                {
                    sbuf.valid[0] = 0; 
                    gprs_reset(6);
                }
            }   
    
            return;
        }
    
        if (sbuf.valid[1] == 1)/*应答发送*/
        {
            ptr = sbuf.buf[1];
            head_info = (struct _mess_head_info *)(sbuf.buf[1]);
            len = (Uchar)(head_info->mess_length >> 8);
            if (udp_send(sbuf.buf[1],len) == 0)
            {
                sbuf.valid[1] = 0;
            }            
    
            return;
        }
    
        if (sbuf.valid[2] == 1)/*需要等待应答消息*/ 
        {
            ptr = sbuf.buf[2];
            head_info = (struct _mess_head_info *)(sbuf.buf[2]);
            len = (Uchar)((head_info->mess_length) >> 8);
            if(udp_send(ptr,len) == 0);
            {    
                memcpy(sbuf.buf[0], sbuf.buf[2], len +12 );
                sbuf.valid[0] = 1;
                trans_num = 0;
                retry_num = 0;
    
                sbuf.valid[2] = 0;
                heart_num = 0;
            }
    
            return;
        }
       
        if (heart_num >= heart_send_number)/*心跳包*/
        {
            make_heartbeat_message();
            head_info = (struct _mess_head_info *)(sbuf.buf[5]);
            ptr = sbuf.buf[5];
            len = (Uchar)((head_info->mess_length >> 8)); 
            if(udp_send(ptr,len) == 0)
            {
                heart_num = 0;
                memcpy(sbuf.buf[0], sbuf.buf[5], len +12 );
                sbuf.valid[0] = 1;
                trans_num = 0;
                retry_num = 0;
            }
    
            return;
        }
    }
    
}
    

/***xhb add***/
void res_requir_telephone_list_message(char *mess_num)
{
    RES_GENERAL *gprs_info;
    char *ptr;
    
    gprs_info = (RES_GENERAL *) sbuf.buf[1];
    memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
    gprs_info->mess_head.mess_version = 2;
    gprs_info->mess_head.mess_reserve = 0;
    gprs_info->mess_head.mess_type = (Word)(RES_GET_TELEPHONE_LIST);
     gprs_info->mess_head.mess_length = 231;
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
      
    ptr = gprs_info->memo;
    memcpy(ptr, mess_num, 4);
    ptr += 4;

    get_device_id(ptr);  
    ptr += 3;
    
    get_bus_id(ptr);
    ptr += 7;

    *ptr ++ = 0;
    
    get_telephone_list(ptr);

    sbuf.valid[1] = 1;
}

void res_configure_telephone_list_message(char *mess_num)
{
    RES_GENERAL *gprs_info;
    char *ptr;
    
    gprs_info = (RES_GENERAL *) sbuf.buf[1];
    memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
    gprs_info->mess_head.mess_version = 2;
    gprs_info->mess_head.mess_reserve = 0;
    gprs_info->mess_head.mess_type = (Word)(RES_SET_TELEPHONE_LIST);
    gprs_info->mess_head.mess_length = 231;
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
      
    ptr = gprs_info->memo;
    memcpy(ptr, mess_num, 4);
    ptr += 4;

    get_device_id(ptr);  
    ptr += 3;
    
    get_bus_id(ptr);
    ptr += 7;

    *ptr ++ = 0;
    
    sbuf.valid[1] = 1;
}

/*以下代码,在一体式中暂不考虑*/
/*******************************cj add****************/
//远程下载程序应答
#define UPDATA_TERM 2//更新终端
#define UPDATA_HOST 1//更新主机
/***********cj add***************/
/*type:1 为发送;2为接收
***********************************/
Uint16 gProgramCurNum = 0;
Uint32 gtestremoteAddrPro=  0;
void res_update_program(Uchar* ptr)
{
    PACKET_UPDATEPRO* pPacket;
    U16 nLen;
    U32 addr;
    RES_GENERAL *gprs_info;
    U8* tmpPtr;
    Byte nValue = KO;
    //先将程序写如E2
    pPacket = (PACKET_UPDATEPRO*)ptr;
    nLen = Le16(pPacket->len);
    //把信息打印出来
    if (UPDATA_HOST == pPacket->programType)
    {
        if (gProgramCurNum != pPacket->curPacket)
        {
            
            addr = pPacket->startAddr[0]+(pPacket->startAddr[1]<<8)+(pPacket->startAddr[2]<<16)+(pPacket->startAddr[3]<<24);
//            addr = ;
            //是否需要置相关的位,用来表示更新是否允许完成?
            if (pPacket->totalPacket == pPacket->curPacket)
            {
                //最后一个包
                if (nLen >= (sizeof(PACKET_UPDATEPRO)-6))
                {
                    nValue = write_programtoFlash(ptr+sizeof(PACKET_UPDATEPRO), (nLen-sizeof(PACKET_UPDATEPRO)+6), gtestremoteAddrPro, NFUPDATE_REMOTE);
                }
                //将更新时间保存,启动更新任务
                if (OK == nValue)
                    write_updatetime(ptr+nLen+6);
            }
            else
            {
                //中间的一个包
                if (nLen > (sizeof(PACKET_UPDATEPRO)-12))
                    nValue = write_programtoFlash(ptr+sizeof(PACKET_UPDATEPRO), (nLen-sizeof(PACKET_UPDATEPRO)+12), gtestremoteAddrPro, NFUPDATE_REMOTE);
                if (OK == nValue)
                    gtestremoteAddrPro += 256;
            }
        }
        else
            nValue = OK;
        
    
        //生成响应包
        if (OK == nValue)
        {
            gProgramCurNum = pPacket->curPacket;
            gprs_info = (RES_GENERAL *) sbuf.buf[REMOTE_BUFFER_ID];
            memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
            gprs_info->mess_head.mess_version = 2;
            gprs_info->mess_head.mess_reserve = 0;
            gprs_info->mess_head.mess_type = (Word)(RES_UPDATE_PROGRAM);
            gprs_info->mess_head.mess_length = sizeof(PACKET_UPDATEPRO)-sizeof(struct _mess_head_info);
            swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
            swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));
              
            tmpPtr = gprs_info->memo;
            memcpy(tmpPtr, pPacket->seq, 4);
            tmpPtr += 4;
            *tmpPtr++ = UPDATA_HOST;
            
            get_bus_id(tmpPtr);
            tmpPtr += 7;
    
            memcpy(tmpPtr, (Uchar*)&(pPacket->totalPacket), 2);
            tmpPtr += 2;
            memcpy(tmpPtr, (Uchar*)&(pPacket->curPacket), 2);
            tmpPtr += 2;
            memcpy(tmpPtr, (Uchar*)&(pPacket->startAddr), 4);
            tmpPtr += 2;
            sbuf.valid[REMOTE_BUFFER_ID] = 1;
        }
    }
}

/*查询广告通告应答*/
/**********************
*pnum:消息ID
*type:值取LED_QUERYNOTICE和LED_QUERYADVERTICE
*seq:值为LED_QUERYADVERTICE时,取值为1-20
*pContent:内容
*len:内容的长度
**********************/
void res_query_notice(Byte* pnum, Byte type, Byte seq, Byte* pContent, Byte len)
{
    RES_QUERYNOTICE_STRUCT* gprs_info;
    Byte* pTmpPtr;
    gprs_info = (RES_QUERYNOTICE_STRUCT *) sbuf.buf[1];
    memcpy(gprs_info->mess_head.mess_sync, "NJPT", 4);
    gprs_info->mess_head.mess_version = 2;
    gprs_info->mess_head.mess_reserve = 0;
    gprs_info->mess_head.mess_type = (Word)(RES_QUERYNOTICE);      
    memcpy(&(gprs_info->res_messageid), pnum, 4);
    get_bus_id(gprs_info->bus_id);
    gprs_info->seq = seq;
    gprs_info->type = type;
    get_term_data(gprs_info->date);
    get_term_time(gprs_info->time);
    pTmpPtr = sbuf.buf[1]+sizeof(RES_QUERYNOTICE_STRUCT);
    if (len > 0)
        memcpy(pTmpPtr, pContent, len);
    gprs_info->mess_head.mess_length = len+sizeof(RES_QUERYNOTICE_STRUCT)-12;
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_type));
    swap_uint((Uchar *)(&gprs_info->mess_head.mess_length));	
    sbuf.valid[1] = 1;
}

⌨️ 快捷键说明

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