use COMMAND_HANDLER macro to define all commands
[fw/openocd] / src / jtag / vsllink.c
index a5d001adda1828c26b00a2025d82841aaf73b046..decca16c61eecb1fad46c6a35696d922309f2859 100644 (file)
@@ -176,23 +176,6 @@ typedef struct
 static int pending_scan_results_length;
 static pending_scan_result_t pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS];
 
-/* External interface functions */
-static int vsllink_execute_queue(void);
-static int vsllink_speed(int speed);
-static int vsllink_khz(int khz, int *jtag_speed);
-static int vsllink_speed_div(int jtag_speed, int *khz);
-static int vsllink_register_commands(struct command_context_s *cmd_ctx);
-static int vsllink_init(void);
-static int vsllink_quit(void);
-
-/* CLI command handler functions */
-static int vsllink_handle_usb_vid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_pid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-static int vsllink_handle_mode_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc);
-
 /* Queue command functions */
 static void vsllink_end_state(tap_state_t state);
 static void vsllink_state_move_dma(void);
@@ -255,21 +238,6 @@ static int last_tms;
 
 static vsllink_jtag_t* vsllink_jtag_handle = NULL;
 
-/***************************************************************************/
-/* External interface implementation */
-
-jtag_interface_t vsllink_interface =
-{
-       .name = "vsllink",
-       .execute_queue = vsllink_execute_queue,
-       .speed = vsllink_speed,
-       .khz = vsllink_khz,
-       .speed_div = vsllink_speed_div,
-       .register_commands = vsllink_register_commands,
-       .init = vsllink_init,
-       .quit = vsllink_quit
-};
-
 static void reset_command_pointer(void)
 {
        if (vsllink_mode == VSLLINK_MODE_NORMAL)
@@ -298,7 +266,7 @@ static int vsllink_execute_queue(void)
                switch (cmd->type)
                {
                        case JTAG_RUNTEST:
-                               DEBUG_JTAG_IO( "runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, \
+                               DEBUG_JTAG_IO("runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, \
                                        tap_state_name(cmd->cmd.runtest->end_state));
 
                                vsllink_end_state(cmd->cmd.runtest->end_state);
@@ -362,7 +330,7 @@ static int vsllink_execute_queue(void)
 
                        case JTAG_STABLECLOCKS:
                                DEBUG_JTAG_IO("add %d clocks", cmd->cmd.stableclocks->num_cycles);
-                               switch(tap_get_state())
+                               switch (tap_get_state())
                                {
                                case TAP_RESET:
                                        // tms should be '1' to stay in TAP_RESET mode
@@ -377,8 +345,8 @@ static int vsllink_execute_queue(void)
                                        scan_size = 0;
                                        break;                  /* above stable states are OK */
                                default:
-                                        LOG_ERROR( "jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
-                                                        tap_state_name(tap_get_state()) );
+                                        LOG_ERROR("jtag_add_clocks() was called with TAP in non-stable state \"%s\"",
+                                                        tap_state_name(tap_get_state()));
                                         exit(-1);
                                }
                                vsllink_stableclocks(cmd->cmd.stableclocks->num_cycles, scan_size);
@@ -1178,7 +1146,7 @@ static void vsllink_scan_normal(bool ir_scan, enum scan_type type, uint8_t *buff
        uint8_t bits_left, tms_tmp, tdi_len;
        int i;
 
-       if (0 == scan_size )
+       if (0 == scan_size)
        {
                return;
        }
@@ -1201,12 +1169,12 @@ static void vsllink_scan_normal(bool ir_scan, enum scan_type type, uint8_t *buff
                {
                        // already in IRSHIFT or DRSHIFT state
                        // merge tms data in the last tms shift command into next scan command
-                       if(*vsllink_tms_cmd_pos < 1)
+                       if (*vsllink_tms_cmd_pos < 1)
                        {
                                LOG_ERROR("There MUST be some bugs in the driver");
                                exit(-1);
                        }
-                       else if(*vsllink_tms_cmd_pos < 2)
+                       else if (*vsllink_tms_cmd_pos < 2)
                        {
                                tms_tmp = vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx];
                                vsllink_usb_out_buffer_idx--;
@@ -1357,25 +1325,7 @@ static void vsllink_simple_command(uint8_t command)
        }
 }
 
-static int vsllink_register_commands(struct command_context_s *cmd_ctx)
-{
-       register_command(cmd_ctx, NULL, "vsllink_usb_vid", vsllink_handle_usb_vid_command,
-                                       COMMAND_CONFIG, NULL);
-       register_command(cmd_ctx, NULL, "vsllink_usb_pid", vsllink_handle_usb_pid_command,
-                                       COMMAND_CONFIG, NULL);
-       register_command(cmd_ctx, NULL, "vsllink_usb_bulkin", vsllink_handle_usb_bulkin_command,
-                                       COMMAND_CONFIG, NULL);
-       register_command(cmd_ctx, NULL, "vsllink_usb_bulkout", vsllink_handle_usb_bulkout_command,
-                                       COMMAND_CONFIG, NULL);
-       register_command(cmd_ctx, NULL, "vsllink_usb_interface", vsllink_handle_usb_interface_command,
-                                       COMMAND_CONFIG, NULL);
-       register_command(cmd_ctx, NULL, "vsllink_mode", vsllink_handle_mode_command,
-                                       COMMAND_CONFIG, NULL);
-
-       return ERROR_OK;
-}
-
-static int vsllink_handle_mode_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_mode_command)
 {
        if (argc != 1) {
                LOG_ERROR("parameter error, should be one parameter for VID");
@@ -1399,7 +1349,7 @@ static int vsllink_handle_mode_command(struct command_context_s *cmd_ctx, char *
        return ERROR_OK;
 }
 
-static int vsllink_handle_usb_vid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_vid_command)
 {
        if (argc != 1)
        {
@@ -1407,20 +1357,22 @@ static int vsllink_handle_usb_vid_command(struct command_context_s *cmd_ctx, cha
                return ERROR_OK;
        }
 
-       return parse_u16(args[0], &vsllink_usb_vid);
+       COMMAND_PARSE_NUMBER(u16, args[0], vsllink_usb_vid);
+       return ERROR_OK;
 }
 
-static int vsllink_handle_usb_pid_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_pid_command)
 {
        if (argc != 1)
        {
                LOG_ERROR("parameter error, should be one parameter for PID");
                return ERROR_OK;
        }
-       return parse_u16(args[0], &vsllink_usb_pid);
+       COMMAND_PARSE_NUMBER(u16, args[0], vsllink_usb_pid);
+       return ERROR_OK;
 }
 
-static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_bulkin_command)
 {
        if (argc != 1)
        {
@@ -1428,14 +1380,14 @@ static int vsllink_handle_usb_bulkin_command(struct command_context_s *cmd_ctx,
                return ERROR_OK;
        }
 
-       int retval = parse_u8(args[0], &vsllink_usb_bulkin);
-       if (ERROR_OK == retval)
-               vsllink_usb_bulkin |= 0x80;
+       COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_bulkin);
+
+       vsllink_usb_bulkin |= 0x80;
 
-       return retval;
+       return ERROR_OK;
 }
 
-static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_bulkout_command)
 {
        if (argc != 1)
        {
@@ -1443,14 +1395,14 @@ static int vsllink_handle_usb_bulkout_command(struct command_context_s *cmd_ctx,
                return ERROR_OK;
        }
 
-       int retval = parse_u8(args[0], &vsllink_usb_bulkout);
-       if (ERROR_OK == retval)
-               vsllink_usb_bulkout &= ~0x80;
+       COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_bulkout);
+
+       vsllink_usb_bulkout &= ~0x80;
 
-       return retval;
+       return ERROR_OK;
 }
 
-static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(vsllink_handle_usb_interface_command)
 {
        if (argc != 1)
        {
@@ -1458,7 +1410,8 @@ static int vsllink_handle_usb_interface_command(struct command_context_s *cmd_ct
                return ERROR_OK;
        }
 
-       return parse_u8(args[0], &vsllink_usb_interface);
+       COMMAND_PARSE_NUMBER(u8, args[0], vsllink_usb_interface);
+       return ERROR_OK;
 }
 
 /***************************************************************************/
@@ -1585,7 +1538,7 @@ static void vsllink_tap_append_scan_dma(int length, uint8_t *buffer, scan_comman
 
                for (i = 0; i < len_tmp; i++)
                {
-                       vsllink_tap_append_step(((len_all+i) < length-1 ? 0 : 1), (buffer[(len_all+i)/8] >> ((len_all+i)%8)) & 1);
+                       vsllink_tap_append_step(((len_all + i) < length-1 ? 0 : 1), (buffer[(len_all + i)/8] >> ((len_all + i)%8)) & 1);
                }
 
                pending_scan_results_length++;
@@ -1603,7 +1556,7 @@ static int vsllink_tap_execute_normal(void)
 
        if (vsllink_tms_data_len > 0)
        {
-               if((tap_get_state() != TAP_RESET) && (tap_get_state() != TAP_IDLE) && (tap_get_state() != TAP_IRPAUSE) && (tap_get_state() != TAP_DRPAUSE))
+               if ((tap_get_state() != TAP_RESET) && (tap_get_state() != TAP_IDLE) && (tap_get_state() != TAP_IRPAUSE) && (tap_get_state() != TAP_DRPAUSE))
                {
                        LOG_WARNING("%s is not in RESET or IDLE or PAUSR state", tap_state_name(tap_get_state()));
                }
@@ -1845,7 +1798,7 @@ static int vsllink_usb_message(vsllink_jtag_t *vsllink_jtag, int out_length, int
                if (in_length > 0)
                {
                        result = vsllink_usb_read(vsllink_jtag);
-                       if (result == in_length )
+                       if (result == in_length)
                        {
                                return result;
                        }
@@ -1929,3 +1882,38 @@ static void vsllink_debug_buffer(uint8_t *buffer, int length)
        }
 }
 #endif // _DEBUG_USB_COMMS_ || _DEBUG_JTAG_IO_
+
+static int vsllink_register_commands(struct command_context_s *cmd_ctx)
+{
+       register_command(cmd_ctx, NULL, "vsllink_usb_vid",
+                       vsllink_handle_usb_vid_command, COMMAND_CONFIG,
+                       NULL);
+       register_command(cmd_ctx, NULL, "vsllink_usb_pid",
+                       vsllink_handle_usb_pid_command, COMMAND_CONFIG,
+                       NULL);
+       register_command(cmd_ctx, NULL, "vsllink_usb_bulkin",
+                       vsllink_handle_usb_bulkin_command, COMMAND_CONFIG,
+                       NULL);
+       register_command(cmd_ctx, NULL, "vsllink_usb_bulkout",
+                       vsllink_handle_usb_bulkout_command, COMMAND_CONFIG,
+                       NULL);
+       register_command(cmd_ctx, NULL, "vsllink_usb_interface",
+                       vsllink_handle_usb_interface_command, COMMAND_CONFIG,
+                       NULL);
+       register_command(cmd_ctx, NULL, "vsllink_mode",
+                       vsllink_handle_mode_command, COMMAND_CONFIG,
+                       NULL);
+
+       return ERROR_OK;
+}
+
+jtag_interface_t vsllink_interface = {
+               .name = "vsllink",
+               .register_commands = &vsllink_register_commands,
+               .init = &vsllink_init,
+               .quit = &vsllink_quit,
+               .khz = &vsllink_khz,
+               .speed = &vsllink_speed,
+               .speed_div = &vsllink_speed_div,
+               .execute_queue = &vsllink_execute_queue,
+       };