#include <cyg/hal/hal_io.h> // low level i/o
#include <cyg/hal/hal_diag.h>
+#include <time.h>
+
#define ZYLIN_VERSION GIT_ZY1000_VERSION
#define ZYLIN_DATE __DATE__
#define ZYLIN_TIME __TIME__
int zy1000_init(void);
int zy1000_quit(void);
-/* interface commands */
-int zy1000_handle_zy1000_port_command(struct command_context *cmd_ctx, char *cmd, char **args, int argc);
-
static int zy1000_khz(int khz, int *jtag_speed)
{
if (khz == 0)
}
}
-int handle_power_command(struct command_context *cmd_ctx, char *cmd, char **args, int argc)
+COMMAND_HANDLER(handle_power_command)
{
- if (argc > 1)
+ switch (CMD_ARGC)
{
- return ERROR_INVALID_ARGUMENTS;
+ case 1: {
+ bool enable;
+ COMMAND_PARSE_ON_OFF(CMD_ARGV[0], enable);
+ setPower(enable);
+ // fall through
}
-
- if (argc == 1)
- {
- if (strcmp(args[0], "on") == 0)
- {
- setPower(1);
- }
- else if (strcmp(args[0], "off") == 0)
- {
- setPower(0);
- } else
- {
- command_print(cmd_ctx, "arg is \"on\" or \"off\"");
- return ERROR_INVALID_ARGUMENTS;
- }
+ case 0:
+ command_print(cmd_ctx, "Target power %s", savePower ? "on" : "off");
+ break;
+ default:
+ return ERROR_INVALID_ARGUMENTS;
}
- command_print(cmd_ctx, "Target power %s", savePower ? "on" : "off");
-
return ERROR_OK;
}
/* Give TELNET a way to find out what version this is */
static int jim_zy1000_version(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
{
- if ((argc < 1) || (argc > 2))
+ if ((argc < 1) || (argc > 3))
return JIM_ERR;
- char buff[128];
const char *version_str = NULL;
if (argc == 1)
} else
{
const char *str = Jim_GetString(argv[1], NULL);
+ const char *str2 = NULL;
+ if (argc > 2)
+ str2 = Jim_GetString(argv[2], NULL);
if (strcmp("openocd", str) == 0)
{
version_str = ZYLIN_OPENOCD;
version_str="b";
#endif
}
+#ifdef CYGPKG_HAL_NIOS2
+ else if (strcmp("fpga", str) == 0)
+ {
+
+ /* return a list of 32 bit integers to describe the expected
+ * and actual FPGA
+ */
+ static char *fpga_id = "0x12345678 0x12345678 0x12345678 0x12345678";
+ cyg_uint32 id, timestamp;
+ HAL_READ_UINT32(SYSID_BASE, id);
+ HAL_READ_UINT32(SYSID_BASE+4, timestamp);
+ sprintf(fpga_id, "0x%08x 0x%08x 0x%08x 0x%08x", id, timestamp, SYSID_ID, SYSID_TIMESTAMP);
+ version_str = fpga_id;
+ if ((argc>2) && (strcmp("time", str2) == 0))
+ {
+ time_t last_mod = timestamp;
+ char * t = ctime (&last_mod) ;
+ t[strlen(t)-1] = 0;
+ version_str = t;
+ }
+ }
+#endif
+
else
{
return JIM_ERR;
}
}
/* mask away unused bits for easier debugging */
- value&=~(((uint32_t)0xffffffff) << k);
+ if (k < 32)
+ {
+ value&=~(((uint32_t)0xffffffff) << k);
+ } else
+ {
+ /* Shifting by >= 32 is not defined by the C standard
+ * and will in fact shift by &0x1f bits on nios */
+ }
shiftValueInner(shiftState, pause_state, k, value);