📄 photo.c
字号:
}
}
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 + -