Commit b8c6b98f authored by Alén Arias Vázquez's avatar Alén Arias Vázquez 😎

solve the problem when you call more than one param

parent 4ae9de60
......@@ -15,21 +15,25 @@ static int cmd_fpga_status (char *params);
/******************************** Structs *************************************/
struct command_entry commands_list_fpga_device[] = {
{ .cmd_name = "status", .cmd_func = cmd_fpga_status, .cmd_help_string = "Get all the information about FPGA convention\n", .cmd_params = "<all>"}
{ .cmd_name = "status", .cmd_func = cmd_fpga_status, .cmd_help_string = "Get all the information about FPGA convention\n", .cmd_params = "<all>"},
{ .cmd_name = NULL }
};
/******************************* Functions ************************************/
static int cmd_fpga_status(char *params) {
/*{
/******************************************************************************/
/**
* This function print the information related with FPGA convention
*
******************************************************************************/
int get_fpga_status(bool full_info){
struct tm build_date_s;
char core_id_c[4] = { [0 ... 3] = 0 };
char name_c[9] = { [0 ... 8] = 0 };
char build_date_c[80] = { [0 ... 79] = 0 };
char git_tag_c[9] = { [0 ... 8] = 0 };
char core_id_c[4] = { [0 ... 3] = 0 };
uintptr_t auxaddr = FPGA_DEVICE_ADDR;
uintptr_t auxaddr = c_ADDR_IP_CORE;
int fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0) {
......@@ -37,96 +41,139 @@ static int cmd_fpga_status(char *params) {
return fd;
}
uint32_t * regs_32b = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, auxaddr);
uint32_t * regs_32b = mmap(0, c_SIZE_BYTES, PROT_READ | PROT_WRITE, MAP_SHARED, fd, auxaddr);
if (regs_32b == MAP_FAILED) {
close(fd);
perror("Failed in Mmap device");
return -2;
}
//! Read Core ID
uint32_t aux_core_id = bswap_32(regs_32b[16]);
memcpy(&core_id_c,&aux_core_id,4);
printf("Gateware information\n");
//! Read Project Name
uint64_t name_u64 = bswap_64(((uint64_t) regs_32b[18] << 32) + (uint64_t) regs_32b[17]);
memcpy(&name_c,&name_u64,8);
if (full_info) {
//! Read Core ID
uint32_t aux_core_id = bswap_32(regs_32b[c_ADDR_CORE_ID]);
memcpy(&core_id_c,&aux_core_id,4);
//! Read Project Name
uint64_t name_u64 = bswap_64(((uint64_t) regs_32b[c_ADDR_NAME_MSB] << 32) + (uint64_t) regs_32b[c_ADDR_NAME_LSB]);
memcpy(&name_c,&name_u64,8);
}
//! Read Build Date
time_t date = (time_t) regs_32b[19];
time_t date = (time_t) regs_32b[c_ADDR_BUILD_T];
build_date_s = *localtime(&date);
strftime(build_date_c, sizeof(build_date_c), "%a %Y-%m-%d %H:%M:%S", &build_date_s);
//! Read String Tag
uint64_t git_tag_u64 = bswap_64(((uint64_t) regs_32b[35] << 32) + (uint64_t) regs_32b[34]);
uint64_t git_tag_u64 = bswap_64(((uint64_t) regs_32b[c_ADDR_TAG_MSB] << 32) + (uint64_t) regs_32b[c_ADDR_TAG_LSB]);
memcpy(&git_tag_c,&git_tag_u64,8);
printf("Gateware version information:\n");
printf("VENDOR ID : %08x\n",regs_32b[0]);
printf("DEVICE ID : %08x\n",regs_32b[1]);
printf("VERSION : %08x\n",regs_32b[2]);
printf("Byte Order Map : %08x\n",regs_32b[3]);
printf("Source ID : %08x%08x%08x%08x\n",regs_32b[7],regs_32b[6],regs_32b[5],regs_32b[4]);
printf("Capability Mask : %08x\n",regs_32b[8]);
printf("UUID : %08x%08x%08x%08x\n",regs_32b[15],regs_32b[14],regs_32b[13],regs_32b[12]);
printf("IP CORE ID : %s\n",core_id_c);
printf("NAME : %s\n",name_c);
printf("BUILD DATE : %s\n",build_date_c);
printf("GIT HASH : %08x%08x%08x%08x%08x\n",regs_32b[24],regs_32b[23],regs_32b[22],regs_32b[21],regs_32b[20]);
printf("DNA : %08x%08x%08x\n",regs_32b[27],regs_32b[26],regs_32b[25]);
printf("GIT TAG : %s\n\n",git_tag_c);
if (full_info) {
printf("VENDOR ID : %08x\n",regs_32b[c_ADDR_VENDOR_ID]);
printf("DEVICE ID : %08x\n",regs_32b[c_ADDR_DEVICE_ID]);
printf("VERSION : %08x\n",regs_32b[c_ADDR_VERSION]);
printf("Byte Order Map : %08x\n",regs_32b[c_ADDR_BYTE_ORD_MARK]);
printf("Source ID : %08x%08x%08x%08x\n",regs_32b[c_ADDR_SOURCE_ID_3],regs_32b[c_ADDR_SOURCE_ID_2],regs_32b[c_ADDR_SOURCE_ID_1],regs_32b[c_ADDR_SOURCE_ID_0]);
printf("Capability Mask : %08x\n",regs_32b[c_ADDR_CAP_MASK]);
printf("UUID : %08x%08x%08x%08x\n",regs_32b[c_ADDR_VENDOR_UUID_3],regs_32b[c_ADDR_VENDOR_UUID_2],regs_32b[c_ADDR_VENDOR_UUID_1],regs_32b[c_ADDR_VENDOR_UUID_0]);
printf("IP CORE ID : %s\n",core_id_c);
printf("NAME : %s\n",name_c);
printf("BUILD DATE : %s\n",build_date_c);
printf("GIT HASH : %08x%08x%08x%08x%08x\n",regs_32b[c_ADDR_HASH_4],regs_32b[c_ADDR_HASH_3],regs_32b[c_ADDR_HASH_2],regs_32b[c_ADDR_HASH_1],regs_32b[c_ADDR_HASH_0]);
printf("GIT TAG : %s\n",git_tag_c);
printf("DNA : %08x%08x%08x\n",regs_32b[c_ADDR_DNA_2],regs_32b[c_ADDR_DNA_1],regs_32b[c_ADDR_DNA_0]);
} else {
printf("BUILD DATE : %s\n",build_date_c);
printf("GIT HASH : %08x%08x%08x%08x%08x\n",regs_32b[c_ADDR_HASH_4],regs_32b[c_ADDR_HASH_3],regs_32b[c_ADDR_HASH_2],regs_32b[c_ADDR_HASH_1],regs_32b[c_ADDR_HASH_0]);
printf("GIT TAG : %s\n",git_tag_c);
}
munmap(regs_32b, c_SIZE_BYTES);
close(fd);
return;
*/
printf("FPGA STATUS TO BE DONE");
return 0;
}
/******************************************************************************/
/**
* This function seach for subcommands related with FPGA information
* This function implemets subcommand status related with FPGA information
*
******************************************************************************/
static int cmd_fpga_status(char *params) {
int ret = 0;
char *aux_params = NULL;
if (!params || !(*params)) {
printf("case no params \n");
ret = get_fpga_status(false);
} else {
aux_params = strchr(params, ' ');
if (!aux_params || !(*aux_params)) {
if (!strncmp(params, "all", strlen("all"))) {
ret = get_fpga_status(true);
} else {
cmd_help("gateware");
}
} else {
cmd_help("gateware");
}
}
if (ret != 0) {
perror("Command gateware status failed");
}
return ret;
}
/******************************************************************************/
/**
* This function search for subcommands related with FPGA information
*
******************************************************************************/
int cmd_fpga (char *params) {
struct command_entry *entry;
char *cmd_start_p = params;
int ret;
int ret = 0;
int cmd_len;
if (!params || !(*params)) {
printf("Please provide subcommand for the Gateware command\n");
printf("Please provide subcommand for the gateware command\n");
cmd_help("gateware");
return -ENOENT;
}
ret = -ENOENT;
} else {
params = strchr(params, ' ');
if (params) {
cmd_len = params - cmd_start_p;
/* skip spaces for params */
while (*params && (*params == ' ')) {
params++;
params = strchr(params, ' ');
if (params) {
cmd_len = params - cmd_start_p;
/* skip spaces for params */
while (*params && (*params == ' ')) {
params++;
}
} else {
cmd_len = strlen(cmd_start_p);
}
} else {
cmd_len = strlen(cmd_start_p);
}
entry = commands_list_fpga_device;
while (entry && entry->cmd_name) {
if (cmd_len == strlen(entry->cmd_name) && !strncmp(entry->cmd_name, cmd_start_p, cmd_len)) {
ret = entry->cmd_func(params);
break;
entry = commands_list_fpga_device;
while (entry && entry->cmd_name) {
if (cmd_len == strlen(entry->cmd_name) && !strncmp(entry->cmd_name, cmd_start_p, cmd_len)) {
ret = entry->cmd_func(params);
break;
}
entry++;
}
if (!(entry && entry->cmd_name)) {
printf("Commad \"%s\" not found\n", cmd_start_p);
ret = -ENOENT;
}
entry++;
}
if (!(entry && entry->cmd_name)) {
printf("Commad \"%s\" not found\n", cmd_start_p);
ret = -ENOENT;
}
return 0;
return ret;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment