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

📄 photo.c

📁 通过车载终端采集GPS数据
💻 C
📖 第 1 页 / 共 2 页
字号:
        }
    }
    else
    {
        //gnPhotoState == PHOTO_RETRYDATA
        Byte nStart, bFound = 0;
        if (0xffff == gnPhotoCurSeq)
            gnPhotoCurSeq = 0;
        else
            gnPhotoCurSeq++;
        nStart = gnPhotoCurSeq;
        photo_addretryThrd(1);
        for (i=nStart; i<gnPhotoRetryThrd; i++)
        {
            if (gPhotoPacketstate[i] == PHOTO_PACK_WAITACK)
            {
                
                bFound = 1;
                break;
            }                
        }
        gnPhotoCurSeq = i;
        if (0 == bFound)
        {
            if (gnPhotoRetryThrd >= gnPhotoPackNum)
            {
                gnPhotoState = PHOTO_RETRYDATATIMING;
                gnPhotoCurSeq = 0xffff;
                gnPhotoRetryThrd = gnPhotoPackNum;
                gnPhotoTimeout = PHOTO_TIMEOUT;
            }
            return INVALID_DATA;
        }
        return VALID_DATA;        
    }
}

//接收模块

void photo_recievepro()
{
    Uint16 recLen;
    Byte* pRecBuf;
    Byte type;
    Uint16 nTmp16;
    recLen = siob_receive(&pRecBuf);
    
    type = PHOTO_ERRORPACKET;
    if (0 == recLen)
    {
        if (PHOTO_RECIEVEINIAL == gnPhotoState)
        {
            gnPhotoRetry++;
            if (gnPhotoRetry > 200)
                gnPhotoState = PHOTO_NOPHOTO;
            else if (0 == (gnPhotoRetry%20))
                gnPhotoState = PHOTO_SENDINIAL;
                
        }
        if ((PHOTO_PHOTOPACKET == gnPhotoState) || (PHOTO_RECIEVERETRYDATA == gnPhotoState) || (PHOTO_RECIEVETIMINGDATA == gnPhotoState))
        {
            gnPhotoRetry++;
            if (gnPhotoRetry >= 20)
            {
                gnPhotoRetry = 0;
                photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
            }
        }
        return;    
    }

    if (12 == recLen)
    {
        if (PHOTO_RECIEVEINIAL == gnPhotoState)
        {
            if (0x0d == pRecBuf[2])
            {
                gnPhotoState = PHOTO_SETFORMAT;
                photo_sendpacket(gPhotoSendBuf, PHOTO_RESPONSEINIAL, 0);
            }
            else
            {
                gnPhotoRetry++;
                if (gnPhotoRetry > 200)
                    gnPhotoState = PHOTO_NOPHOTO;
                else if (0 == (gnPhotoRetry%20))
                    gnPhotoState = PHOTO_SENDINIAL;
            }
            
             
        } 
        else if (PHOTO_RECIEVEGETPHOTODATA == gnPhotoState)
        {
            Uint32 nTmp32;
            nTmp32 = pRecBuf[9]+pRecBuf[10]*0x100+pRecBuf[11]*0x10000;
            if (0 == (nTmp32 % (gnPhotoSize-6)))
                gnPhotoPackNum = nTmp32/(gnPhotoSize-6);
            else
                gnPhotoPackNum = nTmp32/(gnPhotoSize-6)+1;
            gnPhotoState = PHOTO_PHOTOPACKET;
            gnPhotoCurSeq = 0;
            photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
            gnPhotoDataSending = PHOTO_DATASENDING;
        }
        siob_start_receive();
        return;
        
    }
    
    siob_start_receive();
    if (6 == recLen)
    {
        if (0xaa != pRecBuf[0])
            return;

        if (0x0e == pRecBuf[1])
        {
            //为应答包
            for (nTmp16=0; nTmp16<PHOTO_RESPONSE_NUM; nTmp16++)
            {
                if (pRecBuf[2] == gPhotoResp[nTmp16])
                    break;
            }
            if (nTmp16 >= PHOTO_RESPONSE_NUM)
                type = PHOTO_ERRORPACKET; 
            else
                type = nTmp16;
        }
        else
        {
            //接收摄像头主动发送的包
            if (pRecBuf[1] == 0x0d)
                type = PHOTO_REQ_PHOTOINIAL;
            else if ((pRecBuf[1] == 0x0a) && (pRecBuf[2] == 0x01))
                type = PHOTO_REQ_PHOTOSIZE;
            else  
                type = PHOTO_ERRORPACKET;
        }
    }
    else if (recLen > 6)
    {
        if (PHOTO_DATASENDING == gnPhotoDataSending)
        {
            //接收相片数据
            if ((pRecBuf[0] == LSB(gnPhotoCurSeq)) && (pRecBuf[1] == MSB(gnPhotoCurSeq)))
            {
                //检查校验
                Byte sum = 0;
            
                for (nTmp16=0; nTmp16<(recLen-2); nTmp16++)
                    sum += pRecBuf[nTmp16];
                if (sum == pRecBuf[recLen-2])
                {
                    //进行转发
                    Uint16 nTmpLen;
                    nTmpLen = pRecBuf[2]+pRecBuf[3]*0x100;
                    make_photo_message(gnPhotoPackNum, gnPhotoCurSeq+1, gphoto_msgnum, pRecBuf+4, nTmpLen);
    //                sprintf(testBuf, "%4d:%4d:%4d\r\n", gnPhotoPackNum, gnPhotoCurSeq, nTmpLen);//here aaa
    //                sioc_send(testBuf, strlen(testBuf));//here aaa
                           
                }
            }
     //       photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
            gnPhotoRetry = PHOTO_GPRSTIMEOUT;
            gnPhotoState -= PHOTOSTATE_THRD;
            return;
        }
        
    }

    if (PHOTO_RECIEVEFORMAT == gnPhotoState)
    {
        if (type == PHOTO_RET_MODE)
        {    
            gnPhotoRetry = 0;
            gnPhotoState = PHOTO_SETPACKETSIZE;
        }
    }
    else if (PHOTO_RECIEVEPACKETSIZE == gnPhotoState)
    {
        if (type == PHOTO_RET_PACKETSIZE)
            gnPhotoState = PHOTO_WAITCOMMAND;//for test PHOTO_QUICKSNAP;// 
    }
    else if (PHOTO_RECIEVEQUICKSNAP == gnPhotoState)
    {
         if (type == PHOTO_RET_SNAP)
            gnPhotoState = PHOTO_GETPHOTODATA;
    }
    else if (PHOTO_RECIEVEGETPHOTODATA == gnPhotoState)
    {
        if (type == PHOTO_RET_DATA)
            gnPhotoState = PHOTO_PHOTOSNAP;
    }
    else if (PHOTO_PHOTOSNAP == gnPhotoState)
    {
        if (type == PHOTO_REQ_PHOTOSIZE)
        {
            Uint32 nTmp32;
            nTmp32 = pRecBuf[3]+pRecBuf[4]*0x100+pRecBuf[5]*0x10000;
            if (0 == (nTmp32 % (gnPhotoSize-6)))
                gnPhotoPackNum = nTmp32/(gnPhotoSize-6);
            else
                gnPhotoPackNum = nTmp32/(gnPhotoSize-6)+1;
            gnPhotoState = PHOTO_PHOTOPACKET;
            gnPhotoCurSeq = 0;
            photo_sendpacket(gPhotoSendBuf, PHOTO_PHOTODATAREQ, gnPhotoCurSeq);
        }
    }
}

/*nValue: 值从0开始***/
void photo_setPacketState(Byte nValue)
{
//    sprintf(testBuf, "\r\n%bd\r\n", nValue);//here aaa
//    sioc_send(testBuf, strlen(testBuf));//here aaa
    gPhotoPacketstate[nValue] = PHOTO_PACK_NOUSE;
}

void photostart_photo(Byte* pMsgNum)
{   
    Byte i;
    if (memcmp(pMsgNum, gphoto_msgnum, 4) != 0)
    {    
        memcpy(gphoto_msgnum, pMsgNum, 4);
//        sprintf(testBuf, "everything22 is ok");
//        sioc_send(testBuf, strlen(testBuf));
        for (i=0; i<PHOTO_PACK_NUM; i++)
            gPhotoPacketstate[i] = PHOTO_PACK_WAITACK;
        if (PHOTO_NOPHOTO != gnPhotoState)
        {
            if (PHOTO_DATASENDING == gnPhotoDataSending)
            {
                gnPhotoRetry = PHOTO_REPHOTOTIMEOUT;
                gnPhotoState = PHOTO_PHOTODATAOVER;
            }
            else
                gnPhotoState = PHOTO_QUICKSNAP;
        }
    }
}

void photo_stopphoto()
{
    Byte i;
//    sprintf(testBuf, "everything33 is ok");
//    sioc_send(testBuf, strlen(testBuf));
    for (i=0; i<PHOTO_PACK_NUM; i++)
        gPhotoPacketstate[i] = PHOTO_PACK_NOUSE;
    if (PHOTO_DATASENDING == gnPhotoDataSending)
    {
        gnPhotoDataSending = PHOTO_NODATASEND;
        gnPhotoState = PHOTO_PHOTODATAOVER;
    }
}

Byte photo_getdatastatus()
{
    return gnPhotoDataSending;
}

⌨️ 快捷键说明

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