1e93f7393Sniklas /* Generic support for remote debugging interfaces. 2e93f7393Sniklas 3*b725ae77Skettenis Copyright 1993, 1994, 2000, 2001 Free Software Foundation, Inc. 4e93f7393Sniklas 5e93f7393Sniklas This file is part of GDB. 6e93f7393Sniklas 7e93f7393Sniklas This program is free software; you can redistribute it and/or modify 8e93f7393Sniklas it under the terms of the GNU General Public License as published by 9e93f7393Sniklas the Free Software Foundation; either version 2 of the License, or 10e93f7393Sniklas (at your option) any later version. 11e93f7393Sniklas 12e93f7393Sniklas This program is distributed in the hope that it will be useful, 13e93f7393Sniklas but WITHOUT ANY WARRANTY; without even the implied warranty of 14e93f7393Sniklas MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15e93f7393Sniklas GNU General Public License for more details. 16e93f7393Sniklas 17e93f7393Sniklas You should have received a copy of the GNU General Public License 18e93f7393Sniklas along with this program; if not, write to the Free Software 19*b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330, 20*b725ae77Skettenis Boston, MA 02111-1307, USA. */ 21e93f7393Sniklas 22e93f7393Sniklas #ifndef REMOTE_UTILS_H 23e93f7393Sniklas #define REMOTE_UTILS_H 24e93f7393Sniklas 25*b725ae77Skettenis struct target_ops; 26*b725ae77Skettenis 27e93f7393Sniklas #include "target.h" 28*b725ae77Skettenis struct serial; 29e93f7393Sniklas 30e93f7393Sniklas /* Stuff that should be shared (and handled consistently) among the various 31e93f7393Sniklas remote targets. */ 32e93f7393Sniklas 33*b725ae77Skettenis struct _sr_settings 34*b725ae77Skettenis { 35e93f7393Sniklas unsigned int timeout; 36e93f7393Sniklas 37e93f7393Sniklas int retries; 38e93f7393Sniklas 39e93f7393Sniklas char *device; 40*b725ae77Skettenis struct serial *desc; 41e93f7393Sniklas 42e93f7393Sniklas }; 43e93f7393Sniklas 44e93f7393Sniklas extern struct _sr_settings sr_settings; 45e93f7393Sniklas 46e93f7393Sniklas /* get and set debug value. */ 47e93f7393Sniklas #define sr_get_debug() (remote_debug) 48e93f7393Sniklas #define sr_set_debug(newval) (remote_debug = (newval)) 49e93f7393Sniklas 50e93f7393Sniklas /* get and set timeout. */ 51e93f7393Sniklas #define sr_get_timeout() (sr_settings.timeout) 52e93f7393Sniklas #define sr_set_timeout(newval) (sr_settings.timeout = (newval)) 53e93f7393Sniklas 54e93f7393Sniklas /* get and set device. */ 55e93f7393Sniklas #define sr_get_device() (sr_settings.device) 56e93f7393Sniklas #define sr_set_device(newval) \ 57e93f7393Sniklas { \ 58*b725ae77Skettenis if (sr_settings.device) xfree (sr_settings.device); \ 59e93f7393Sniklas sr_settings.device = (newval); \ 60e93f7393Sniklas } 61e93f7393Sniklas 62e93f7393Sniklas /* get and set descriptor value. */ 63e93f7393Sniklas #define sr_get_desc() (sr_settings.desc) 64e93f7393Sniklas #define sr_set_desc(newval) (sr_settings.desc = (newval)) 65e93f7393Sniklas 66e93f7393Sniklas /* get and set retries. */ 67e93f7393Sniklas #define sr_get_retries() (sr_settings.retries) 68e93f7393Sniklas #define sr_set_retries(newval) (sr_settings.retries = (newval)) 69e93f7393Sniklas 70e93f7393Sniklas #define sr_is_open() (sr_settings.desc != NULL) 71e93f7393Sniklas 72e93f7393Sniklas #define sr_check_open() { if (!sr_is_open()) \ 73e93f7393Sniklas error ("Remote device not open"); } 74e93f7393Sniklas 75*b725ae77Skettenis struct gr_settings 76*b725ae77Skettenis { 77e93f7393Sniklas char *prompt; 78e93f7393Sniklas struct target_ops *ops; 79*b725ae77Skettenis int (*clear_all_breakpoints) (void); 80*b725ae77Skettenis void (*checkin) (void); 81e93f7393Sniklas }; 82e93f7393Sniklas 83e93f7393Sniklas extern struct gr_settings *gr_settings; 84e93f7393Sniklas 85e93f7393Sniklas /* get and set prompt. */ 86e93f7393Sniklas #define gr_get_prompt() (gr_settings->prompt) 87e93f7393Sniklas #define gr_set_prompt(newval) (gr_settings->prompt = (newval)) 88e93f7393Sniklas 89e93f7393Sniklas /* get and set ops. */ 90e93f7393Sniklas #define gr_get_ops() (gr_settings->ops) 91e93f7393Sniklas #define gr_set_ops(newval) (gr_settings->ops = (newval)) 92e93f7393Sniklas 93e93f7393Sniklas #define gr_clear_all_breakpoints() ((gr_settings->clear_all_breakpoints)()) 94e93f7393Sniklas #define gr_checkin() ((gr_settings->checkin)()) 95e93f7393Sniklas 96e93f7393Sniklas /* Keep discarding input until we see the prompt. 97e93f7393Sniklas 98e93f7393Sniklas The convention for dealing with the prompt is that you 99e93f7393Sniklas o give your command 100e93f7393Sniklas o *then* wait for the prompt. 101e93f7393Sniklas 102e93f7393Sniklas Thus the last thing that a procedure does with the serial line 103e93f7393Sniklas will be an gr_expect_prompt(). Exception: resume does not 104e93f7393Sniklas wait for the prompt, because the terminal is being handed over 105e93f7393Sniklas to the inferior. However, the next thing which happens after that 106e93f7393Sniklas is a bug_wait which does wait for the prompt. 107e93f7393Sniklas Note that this includes abnormal exit, e.g. error(). This is 108e93f7393Sniklas necessary to prevent getting into states from which we can't 109e93f7393Sniklas recover. */ 110e93f7393Sniklas 111e93f7393Sniklas #define gr_expect_prompt() sr_expect(gr_get_prompt()) 112e93f7393Sniklas 113*b725ae77Skettenis int gr_multi_scan (char *list[], int passthrough); 114*b725ae77Skettenis int sr_get_hex_digit (int ignore_space); 115*b725ae77Skettenis int sr_pollchar (void); 116*b725ae77Skettenis int sr_readchar (void); 117*b725ae77Skettenis int sr_timed_read (char *buf, int n); 118*b725ae77Skettenis long sr_get_hex_word (void); 119*b725ae77Skettenis void gr_close (int quitting); 120*b725ae77Skettenis void gr_create_inferior (char *execfile, char *args, char **env); 121*b725ae77Skettenis void gr_detach (char *args, int from_tty); 122*b725ae77Skettenis void gr_files_info (struct target_ops *ops); 123*b725ae77Skettenis void gr_generic_checkin (void); 124*b725ae77Skettenis void gr_kill (void); 125*b725ae77Skettenis void gr_mourn (void); 126*b725ae77Skettenis void gr_prepare_to_store (void); 127*b725ae77Skettenis void sr_expect (char *string); 128*b725ae77Skettenis void sr_get_hex_byte (char *byt); 129*b725ae77Skettenis void sr_scan_args (char *proto, char *args); 130*b725ae77Skettenis void sr_write (char *a, int l); 131*b725ae77Skettenis void sr_write_cr (char *s); 132e93f7393Sniklas 133*b725ae77Skettenis void gr_open (char *args, int from_tty, struct gr_settings *gr_settings); 134*b725ae77Skettenis void gr_load_image (char *, int from_tty); 135e93f7393Sniklas #endif /* REMOTE_UTILS_H */ 136