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

Subversion Repositories or1k

[/] [or1k/] [branches/] [oc/] [gdb-5.0/] [gdb/] [ser-ocd.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 104 markom
/* Remote serial interface for Macraigor Systems implementation of
2
   On-Chip Debugging using serial target box or serial wiggler
3
 
4
   Copyright 1994, 1997, 1999, 2000 Free Software Foundation, Inc.
5
 
6
   This file is part of GDB.
7
 
8
   This program is free software; you can redistribute it and/or modify
9
   it under the terms of the GNU General Public License as published by
10
   the Free Software Foundation; either version 2 of the License, or
11
   (at your option) any later version.
12
 
13
   This program is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
 
18
   You should have received a copy of the GNU General Public License
19
   along with this program; if not, write to the Free Software
20
   Foundation, Inc., 59 Temple Place - Suite 330,
21
   Boston, MA 02111-1307, USA.  */
22
 
23
#include "defs.h"
24
#include "serial.h"
25
 
26
#ifdef _WIN32
27
#include <windows.h>
28
#endif
29
 
30
#ifdef _WIN32
31
/* On Windows, this function pointer is initialized to a function in
32
   the wiggler DLL.  */
33
static int (*dll_do_command) PARAMS ((const char *, char *));
34
#endif
35
 
36
static int
37
ocd_open (scb, name)
38
     serial_t scb;
39
     const char *name;
40
{
41
#ifdef _WIN32
42
  /* Find the wiggler DLL which talks to the board.  */
43
  if (dll_do_command == NULL)
44
    {
45
      HINSTANCE handle;
46
 
47
      /* FIXME: Should the user be able to configure this?  */
48
      handle = LoadLibrary ("Wigglers.dll");
49
      if (handle == NULL)
50
        error ("Can't load Wigglers.dll");
51
 
52
      dll_do_command = ((int (*)PARAMS ((const char *, char *)))
53
                        GetProcAddress (handle, "do_command"));
54
      if (dll_do_command == NULL)
55
        error ("Can't find do_command function in Wigglers.dll");
56
    }
57
#else
58
  /* No wiggler DLLs on Unix yet, fail.  */
59
  error ("Wiggler library not available for this type of host.");
60
#endif /* _WIN32 */
61
  return 0;
62
}
63
 
64
static int
65
ocd_noop (scb)
66
     serial_t scb;
67
{
68
  return 0;
69
}
70
 
71
static void
72
ocd_raw (scb)
73
     serial_t scb;
74
{
75
  /* Always in raw mode */
76
}
77
 
78
/* We need a buffer to store responses from the Wigglers.dll */
79
#define WIGGLER_BUFF_SIZE 512
80
unsigned char from_wiggler_buffer[WIGGLER_BUFF_SIZE];
81
unsigned char *wiggler_buffer_ptr;      /* curr spot in buffer */
82
 
83
static int
84
ocd_readchar (scb, timeout)
85
     serial_t scb;
86
     int timeout;
87
{
88
  /* Catch attempts at reading past the end of the buffer */
89
  if (wiggler_buffer_ptr >
90
      (from_wiggler_buffer + (sizeof (char *) * WIGGLER_BUFF_SIZE)))
91
      error ("ocd_readchar asked to read past the end of the buffer!");
92
 
93
  return (int) *wiggler_buffer_ptr++;   /* return curr char and increment ptr */
94
}
95
 
96
struct ocd_ttystate
97
{
98
  int dummy;
99
};
100
 
101
/* ocd_{get set}_tty_state() are both dummys to fill out the function
102
   vector.  Someday, they may do something real... */
103
 
104
static serial_ttystate
105
ocd_get_tty_state (scb)
106
     serial_t scb;
107
{
108
  struct ocd_ttystate *state;
109
 
110
  state = (struct ocd_ttystate *) xmalloc (sizeof *state);
111
 
112
  return (serial_ttystate) state;
113
}
114
 
115
static int
116
ocd_set_tty_state (scb, ttystate)
117
     serial_t scb;
118
     serial_ttystate ttystate;
119
{
120
  return 0;
121
}
122
 
123
static int
124
ocd_noflush_set_tty_state (scb, new_ttystate, old_ttystate)
125
     serial_t scb;
126
     serial_ttystate new_ttystate;
127
     serial_ttystate old_ttystate;
128
{
129
  return 0;
130
}
131
 
132
static void
133
ocd_print_tty_state (serial_t scb,
134
                     serial_ttystate ttystate,
135
                     struct ui_file *stream)
136
{
137
  /* Nothing to print.  */
138
  return;
139
}
140
 
141
static int
142
ocd_setbaudrate (scb, rate)
143
     serial_t scb;
144
     int rate;
145
{
146
  return 0;
147
}
148
 
149
static int
150
ocd_write (scb, str, len)
151
     serial_t scb;
152
     const char *str;
153
     int len;
154
{
155
#ifdef _WIN32
156
  /* send packet to Wigglers.dll and store response so we can give it to
157
     remote-wiggler.c when get_packet is run */
158
  dll_do_command (str, from_wiggler_buffer);
159
  wiggler_buffer_ptr = from_wiggler_buffer;
160
#endif
161
 
162
  return 0;
163
}
164
 
165
static void
166
ocd_close (scb)
167
     serial_t scb;
168
{
169
}
170
 
171
static struct serial_ops ocd_ops =
172
{
173
  "ocd",
174
  0,
175
  ocd_open,
176
  ocd_close,
177
  ocd_readchar,
178
  ocd_write,
179
  ocd_noop,                     /* flush output */
180
  ocd_noop,                     /* flush input */
181
  ocd_noop,                     /* send break -- currently used only for nindy */
182
  ocd_raw,
183
  ocd_get_tty_state,
184
  ocd_set_tty_state,
185
  ocd_print_tty_state,
186
  ocd_noflush_set_tty_state,
187
  ocd_setbaudrate,
188
  ocd_noop,                     /* wait for output to drain */
189
};
190
 
191
void
192
_initialize_ser_ocd_bdm ()
193
{
194
  serial_add_interface (&ocd_ops);
195
}

powered by: WebSVN 2.1.0

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