2 #include "nvitem_common.h"
\r
3 #include "nvitem_channel.h"
\r
6 #define CHANNEL_HEADER_TAG 0x7e7f
\r
7 #define CHANNEL_HEADER_TYPE 0xaa55
\r
15 }CHANNEL_PACKET_HEADER;
\r
17 #define _REV_BUFSIZE 4096
\r
18 static uint8 _revBuf[_REV_BUFSIZE];
\r
19 static CHANNEL_PACKET_HEADER *_revHeader;
\r
20 static uint8 *_revBody;
\r
21 #define _SEND_BUFSIZE 4096
\r
22 static uint8 _sendBuf[_SEND_BUFSIZE];
\r
23 static CHANNEL_PACKET_HEADER *_sendHeader;
\r
24 static uint8 *_sendBody;
\r
27 static SDIO_HANDLE channel_fd = 0;
\r
29 void channel_open(void)
\r
31 _revHeader = (CHANNEL_PACKET_HEADER*)_revBuf;
\r
32 _revBody = &_revBuf[sizeof(CHANNEL_PACKET_HEADER)];
\r
33 _sendHeader = (CHANNEL_PACKET_HEADER*)_sendBuf;
\r
34 _sendBody = &_sendBuf[sizeof(CHANNEL_PACKET_HEADER)];
\r
35 channel_fd = sdio_open();
\r
40 BOOLEAN channel_read(uint8* buf, uint32 size, uint32* hasRead)
\r
46 if(0 != gpio_get_value(CP_AP_RTS)){
\r
51 gpio_set_value(AP_CP_RDY, 1); // r
\r
52 gpio_set_value(AP_CP_RTS, 1);
\r
53 while(0 == gpio_get_value(CP_AP_RDY));
\r
55 retRead = sdio_read(channel_fd,_revBuf,_REV_BUFSIZE);
\r
57 printf("channel_read-0 retRead %x\n", retRead);
\r
58 if((sizeof(CHANNEL_PACKET_HEADER)+size) > retRead){
\r
62 (CHANNEL_HEADER_TAG != _revHeader->tag)
\r
63 ||(CHANNEL_HEADER_TYPE != _revHeader->type)
\r
64 ||(_revHeader->length < size)
\r
69 memcpy(buf,_revBody,size);
\r
74 printf("channel_read-0 ifSuccess %x\n", ifSuccess);
\r
77 gpio_set_value(AP_CP_RDY, 1);
\r
78 gpio_set_value(AP_CP_RTS, 0);
\r
79 while(1 == gpio_get_value(CP_AP_RDY));
\r
82 gpio_set_value(AP_CP_RDY, 1);
\r
83 gpio_set_value(AP_CP_RTS, 0);
\r
84 while(1 == gpio_get_value(CP_AP_RDY));
\r
90 BOOLEAN channel_write(uint8* buf, uint32 size, uint32* hasWrite)
\r
97 _sendHeader->tag = CHANNEL_HEADER_TAG;
\r
98 _sendHeader->type = CHANNEL_HEADER_TYPE;
\r
99 _sendHeader->length = size;
\r
100 _sendHeader->frame_num = 0;
\r
101 _sendHeader->reserved = 0xabcdef00; // I don't understand how to use this member. Jaons.Wu
\r
102 memcpy(_sendBody,buf,size);
\r
104 gpio_set_value(AP_CP_RDY, 0); // w
\r
105 gpio_set_value(AP_CP_RTS, 1);
\r
106 while(0 == gpio_get_value(CP_AP_RDY));
\r
108 retWrite = sdio_write(channel_fd,_sendBuf,_SEND_BUFSIZE);
\r
109 if((sizeof(CHANNEL_PACKET_HEADER)+size) > retWrite){
\r
116 gpio_set_value(AP_CP_RDY, 1);
\r
117 gpio_set_value(AP_CP_RTS, 0);
\r
118 while(1 == gpio_get_value(CP_AP_RDY));
\r
121 gpio_set_value(AP_CP_RDY, 0);
\r
122 gpio_set_value(AP_CP_RTS, 0);
\r
123 while(1 == gpio_get_value(CP_AP_RDY));
\r
129 void channel_close(void)
\r
131 sdio_close(channel_fd);
\r
137 #include <windows.h>
\r
139 #include <winioctl.h>
\r
141 #define FILENAME "D:\\analyzer\\commonTools\\testCode\\testdata\\packet.bin"
\r
142 static HANDLE hDevice;
\r
143 #define CHANNEL_BUFSIZE 2048
\r
144 static uint8 channelBuf[CHANNEL_BUFSIZE];
\r
148 void channel_open(void)
\r
151 unsigned __int32 offsetH,offsetL;
\r
155 hDevice = CreateFile(FILENAME, // drive to open
\r
156 GENERIC_READ|GENERIC_WRITE, // no access to the drive
\r
157 FILE_SHARE_READ|FILE_SHARE_WRITE,
\r
158 NULL, // default security attributes
\r
159 OPEN_EXISTING, // disposition
\r
160 0, //FILE_FLAG_OVERLAPPED, // file attributes
\r
162 ); // do not copy file attributes
\r
163 if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
\r
173 // DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME, NULL,0,NULL,0,&count,NULL);
\r
177 SetFilePointer(hDevice,offsetL, &offsetH, FILE_BEGIN);
\r
183 BOOLEAN channel_read(uint8* buf, uint32 size, uint32* hasRead)
\r
185 DWORD lpNumberOfBytesRead;
\r
188 // DeviceIoControl(hDevice,FSCTL_LOCK_VOLUME, NULL,0,NULL,0,&count,NULL);
\r
190 bResult = ReadFile(hDevice, channelBuf, CHANNEL_BUFSIZE, &lpNumberOfBytesRead, 0);
\r
194 lpNumberOfBytesRead = GetLastError();
\r
197 // DeviceIoControl(hDevice,FSCTL_UNLOCK_VOLUME, NULL,0,NULL,0,&count,NULL);
\r
199 memcpy(buf,channelBuf,size);
\r
200 *hasRead = (size<lpNumberOfBytesRead?size:lpNumberOfBytesRead);
\r
205 BOOLEAN channel_write(uint8* buf, uint32 size, uint32* hasWrite)
\r
210 void channel_close(void)
\r
213 // DeviceIoControl(hDevice,FSCTL_UNLOCK_VOLUME, NULL,0,NULL,0,&count,NULL);
\r
214 CloseHandle(hDevice);
\r