#include "bitbang.h"
/* system includes */
-// -ino: 060521-1036
+/* -ino: 060521-1036 */
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
#include <sys/types.h>
};
/* configuration */
-char* parport_cable;
-unsigned long parport_port;
+char* parport_cable = NULL;
+u16 parport_port;
+static int parport_exit = 0;
/* interface variables
*/
/* interface commands */
int parport_handle_parport_port_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
int parport_handle_parport_cable_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
+int parport_handle_write_on_exit_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
jtag_interface_t parport_interface =
{
.execute_queue = bitbang_execute_queue,
- .support_pathmove = 1,
-
.speed = parport_speed,
.register_commands = parport_register_commands,
.init = parport_init,
return 0;
}
-static inline void parport_write_data(void)
+static __inline__ void parport_write_data(void)
{
u8 output;
output = dataport_value ^ cable->OUTPUT_INVERT;
/* turn LED on parport adapter on (1) or off (0) */
void parport_led(int on)
{
- u8 output;
if (on)
dataport_value |= cable->LED_MASK;
else
COMMAND_CONFIG, NULL);
register_command(cmd_ctx, NULL, "parport_cable", parport_handle_parport_cable_command,
COMMAND_CONFIG, NULL);
+ register_command(cmd_ctx, NULL, "parport_write_on_exit", parport_handle_write_on_exit_command,
+ COMMAND_CONFIG, NULL);
return ERROR_OK;
}
int parport_quit(void)
{
- u8 output;
parport_led(0);
- dataport_value = cable->PORT_EXIT;
- parport_write_data();
+ if (parport_exit)
+ {
+ dataport_value = cable->PORT_EXIT;
+ parport_write_data();
+ }
+
+ if (parport_cable)
+ {
+ free(parport_cable);
+ parport_cable = NULL;
+ }
+
return ERROR_OK;
}
return ERROR_OK;
}
+
+int parport_handle_write_on_exit_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+{
+ if (argc != 1)
+ {
+ command_print(cmd_ctx, "usage: parport_write_on_exit <on|off>");
+ return ERROR_OK;
+ }
+
+ if (strcmp(args[0], "on") == 0)
+ parport_exit = 1;
+ else if (strcmp(args[0], "off") == 0)
+ parport_exit = 0;
+
+ return ERROR_OK;
+}