OpenCores
URL https://opencores.org/ocsvn/z80control/z80control/trunk

Subversion Repositories z80control

[/] [z80control/] [trunk/] [CII_Starter_USB_API_v1/] [SW/] [USB_JTAG.h] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 tylerapohl
 
2
#include "FTD2XX.h"
3
#include <queue.h>
4
 
5
#define   DEFAULT_DEVICE           0
6
#define   INIT_CMD_SIZE            5
7
#define   MAX_TOTAL_PACKET         256-20
8
#define   MAX_TXD_PACKET           256
9
#define   MAX_RXD_PACKET           100
10
#define   ALMOST_FULL_SIZE         20
11
 
12
class USB_JTAG
13
{
14
     FT_HANDLE FT_Handle;
15
     FT_STATUS FT_Status;
16
     int  DeviceNumber;
17
     unsigned long  NumOfWritten;
18
     unsigned long  NumOfRead;
19
     unsigned char  Init_CMD[INIT_CMD_SIZE];
20
     unsigned char  Close_CMD;
21
     unsigned char  TXD_Buffer[MAX_TXD_PACKET];
22
     queue<unsigned char> Buffer;
23
public:
24
     USB_JTAG();
25
     FT_STATUS Get_Status();
26
     void Select_Device(int Number);
27
     int  Number_Of_Device();
28
     int  Number_Of_Queue_Data();
29
     bool Open_Device();
30
     bool Close_Device();
31
     bool Reset_Device(int sleep);
32
     bool Initial_JTAG();
33
     bool Write_Data(unsigned char* Source, int Size, int WithRead, bool Immediate);
34
     bool Read_Data(unsigned char* Dest, int Size);
35
     ~USB_JTAG();
36
};
37
 
38
/* TODO : USB_JTAG */
39
USB_JTAG::USB_JTAG()
40
{
41
     Init_CMD[0]    = 0x26;
42
     Init_CMD[1]    = 0x27;
43
     Init_CMD[2]    = 0x26;
44
     Init_CMD[3]    = 0x81;
45
     Init_CMD[4]    = 0x00;
46
     Close_CMD      = 0x1F;
47
     DeviceNumber   = DEFAULT_DEVICE;
48
     FT_Status      = FT_OK;
49
}
50
 
51
/* TODO : Get_Status */
52
FT_STATUS USB_JTAG::Get_Status()
53
{
54
     return FT_Status;
55
}
56
 
57
/* TODO : Select_Device */
58
void USB_JTAG::Select_Device(int Number)
59
{
60
     DeviceNumber=Number;
61
}
62
 
63
/* TODO : Number_Of_Device */
64
int  USB_JTAG::Number_Of_Device()
65
{
66
     unsigned long numDevs=0;
67
     FT_Status=FT_ListDevices(&numDevs,NULL,FT_LIST_NUMBER_ONLY);
68
     return numDevs;
69
}
70
 
71
/* TODO : Number_Of_Queue_Data */
72
int  USB_JTAG::Number_Of_Queue_Data()
73
{
74
     unsigned long numData=0;
75
     FT_Status=FT_GetQueueStatus(FT_Handle,&numData);
76
     return numData;
77
}
78
 
79
/* TODO : Open_Device */
80
bool USB_JTAG::Open_Device()
81
{
82
     FT_Status=FT_Open(DeviceNumber,&FT_Handle);
83
     if(FT_Status!=FT_OK)  return false;
84
     FT_SetLatencyTimer(FT_Handle,0x02);
85
     return true;
86
}
87
 
88
/* TODO : Close_Device */
89
bool USB_JTAG::Close_Device()
90
{
91
     FT_Status=FT_Write(FT_Handle,&Close_CMD,1,&NumOfWritten);
92
     if(FT_Status!=FT_OK)  return false;
93
     FT_Status=FT_Close(FT_Handle);
94
     if(FT_Status!=FT_OK)  return false;
95
     return true;
96
}
97
 
98
/* TODO : Reset_Device */
99
bool USB_JTAG::Reset_Device(int sleep)
100
{
101
     Close_Device();
102
     Sleep(sleep);
103
     Open_Device();
104
     Initial_JTAG();
105
     if(FT_Status!=FT_OK)  return false;
106
     return true;
107
}
108
 
109
/* TODO : Initial_JTAG */
110
bool USB_JTAG::Initial_JTAG()
111
{
112
     FT_Status=FT_Write(FT_Handle,Init_CMD,5,&NumOfWritten);
113
     if(FT_Status!=FT_OK)  return false;
114
     return true;
115
}
116
 
117
/* TODO : Write_Data */
118
bool USB_JTAG::Write_Data(unsigned char* Source, int Size, int WithRead, bool Immediate)
119
{
120
     int i;
121
     if(Size!=0)
122
     {
123
          //   Insert Write Command
124
          Buffer.push((unsigned char)Size|0x80);
125
          for(i=0;i<Size;i++)
126
          Buffer.push(Source[i]);
127
     }
128
     if(WithRead!=0)
129
     {
130
          //   Insert Read Command
131
          Buffer.push((unsigned char)WithRead|0xC0);
132
          for(i=0;i<WithRead;i++)
133
          Buffer.push(0x00);
134
     }
135
     //   Transfer Queue To Array
136
     int Trans_Size=Buffer.size();
137
     if(Immediate || Trans_Size>MAX_TXD_PACKET-ALMOST_FULL_SIZE)
138
     {
139
          for(i=0;i<Trans_Size;i++)
140
          {
141
               TXD_Buffer[i]=Buffer.front();
142
               Buffer.pop();
143
          }
144
          FT_Status=FT_Write(FT_Handle,TXD_Buffer,Trans_Size,&NumOfWritten);
145
     }
146
     if(FT_Status!=FT_OK)  return false;
147
     return true;
148
}
149
 
150
/* TODO : Read_Data */
151
bool  USB_JTAG::Read_Data(unsigned char* Dest, int Size)
152
{
153
     FT_Status=FT_Read(FT_Handle,Dest,Size,&NumOfRead);
154
     if(FT_Status!=FT_OK)  return false;
155
     return true;
156
}
157
 
158
/* TODO : ~USB_JTAG */
159
USB_JTAG::~USB_JTAG()
160
{
161
     Close_Device();
162
}
163
 
164
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.