2 #include "nvitem_common.h"
\r
3 #include "nvitem_packet.h"
\r
4 #include "nvitem_channel.h"
\r
6 //----------------------------------------------------------------------
\r
8 //----------------------------------------------------------------------
\r
9 #define _MAGICNUM 0x524d4e56 // "RMNV"
\r
17 uint32 sizeOfPacket;
\r
20 #define PACKETSIZE 1024
\r
21 static uint8 packeBuf[sizeof(PACKET_HEAD)+PACKETSIZE];
\r
23 static PACKET_HEAD* _packetHead;
\r
24 static uint8* _packetBody;
\r
26 static uint32 _idxGrp = 0;
\r
27 static uint32 _idxSub = 0;
\r
29 //---------------------------------------------------------
\r
30 #define PACKETRSP_SIZE 16
\r
31 static uint8 packetRsp[sizeof(PACKET_HEAD)+PACKETRSP_SIZE];
\r
32 static PACKET_HEAD* _packetRspHead;
\r
33 static uint8* _packetRspBody;
\r
35 static uint32 __makeEcc(uint8* buf, uint32 len)
\r
40 void __sendPacketRsp(PACKET_HEAD* header, uint8 rsp)
\r
45 static uint32 cnt = 0;
\r
48 if(0 == _delay) cnt++;
\r
49 else if(3 >= cnt){_delay = 0;}
\r
51 sleep(_delay); // for test
\r
54 memset(packetRsp,0,sizeof(PACKET_HEAD)+PACKETRSP_SIZE);
\r
55 memcpy(_packetRspHead,header,sizeof(PACKET_HEAD));
\r
56 _packetRspHead->sizeOfPacket = 1;
\r
57 _packetRspHead->ecc = __makeEcc(0,0);
\r
58 _packetRspBody[0] = rsp;
\r
59 channel_write(packetRsp, sizeof(PACKET_HEAD)+PACKETRSP_SIZE, &hasWrite);
\r
61 //---------------------------------------------------------
\r
63 static BOOLEAN __chkEcc(uint8* buf, uint32 len, uint32 ecc)
\r
69 void _initPacket(void)
\r
71 _packetHead = ((PACKET_HEAD*)packeBuf);
\r
72 _packetBody = &packeBuf[sizeof(PACKET_HEAD)];
\r
74 _idxGrp = (uint32)(-1);
\r
77 _packetRspHead = ((PACKET_HEAD*)packetRsp);
\r
78 _packetRspBody = &packetRsp[sizeof(PACKET_HEAD)];
\r
82 uint32 _getPacket(uint8** buf, uint32* size)
\r
85 //printf("NVITEM:_getPacket\n");
\r
86 //------------------------------------------------------------
\r
87 if(!channel_read(packeBuf, sizeof(PACKET_HEAD)+PACKETSIZE, &hasRead))
\r
88 //------------------------------------------------------------
\r
90 //printf("NVITEM:fail channel_read\n");
\r
91 return _PACKET_FAIL;
\r
93 if(hasRead < sizeof(PACKET_HEAD))
\r
95 printf("NVITEM:fail PACKET_HEAD\n");
\r
96 return _PACKET_SKIP;
\r
98 if(_MAGICNUM != _packetHead->MAGICNUM){
\r
99 printf("NVITEM:fail _MAGICNUM\n");
\r
100 return _PACKET_SKIP;
\r
102 if(!__chkEcc(0,0,0)){
\r
103 printf("NVITEM:fail ECC\n");
\r
104 return _PACKET_SKIP;
\r
106 if(hasRead < (sizeof(PACKET_HEAD)+_packetHead->sizeOfPacket))
\r
108 printf("NVITEM:fail SIZE\n");
\r
109 return _PACKET_SKIP;
\r
111 //----------------------------------------------------------
\r
115 printf("----------");
\r
116 for(i = 0; i < (sizeof(PACKET_HEAD)+_packetHead->sizeOfPacket); i++)
\r
126 printf("%2x ",packeBuf[i]);
\r
128 printf("\n----------\n");
\r
130 //----------------------------------------------------------
\r
131 if(_idxGrp == _packetHead->idxGrp)
\r
133 if(_idxSub+1 == _packetHead->idxSub)
\r
136 *buf = _packetBody;
\r
137 *size = _packetHead->sizeOfPacket;
\r
138 // __sendPacketRsp(_packetHead, 1);
\r
139 printf("NVITEM _getPacket continue read %d size %d grp %d sub %d\n",hasRead,_packetHead->sizeOfPacket,_packetHead->idxGrp,_packetHead->idxSub);
\r
140 return _PACKET_CONTINUE;
\r
144 printf("NVITEM:fail GROUP %d %d %d %d\n",_idxGrp,_idxSub,_packetHead->idxGrp,_packetHead->idxSub);
\r
145 return _PACKET_SKIP;
\r
150 if(0 == _packetHead->idxSub)
\r
152 _idxGrp = _packetHead->idxGrp;
\r
154 *buf = _packetBody;
\r
155 *size = _packetHead->sizeOfPacket;
\r
156 // __sendPacketRsp(_packetHead, 1);
\r
157 printf("NVITEM _getPacket start read %d size %d grp %d sub %d\n",hasRead,_packetHead->sizeOfPacket,_packetHead->idxGrp,_packetHead->idxSub);
\r
158 return _PACKET_START;
\r
162 printf("NVITEM:fail SUB %d %d %d %d\n",_idxGrp,_idxSub,_packetHead->idxGrp,_packetHead->idxSub);
\r
163 return _PACKET_SKIP;
\r
168 void _sendPacktRsp(uint8 rsp)
\r
170 __sendPacketRsp( _packetHead, rsp);
\r