You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
3.8 KiB

/*
* Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2021. All rights reserved.
* Description: This is a head file for otp test
* Author: Hisilicon
* Create: 2019-09-19
*/
#ifndef __SAMPLE_OTP_BASE_H__
#define __SAMPLE_OTP_BASE_H__
#include <stdio.h>
#include <string.h>
#include "td_type.h"
#include "soc_errno.h"
#include "uapi_otp.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define sample_printf(fmt...) printf(fmt)
#define KEY_LEN 16
#define NAME_MAX_SIZE 32
#define STRING_MAX_SIZE 64
#define TYPE_INDEX 2
#define unused(x) (x) = (x)
typedef struct otp_sample {
td_u32 index;
td_char name[NAME_MAX_SIZE];
td_s32(*run_sample)(td_s32, td_char **);
td_u8 help[0x3][0x80];
} otp_sample;
typedef struct otp_vendorid_string {
uapi_otp_vendorid index;
td_char string[STRING_MAX_SIZE];
} otp_vendorid_string;
td_bool case_strcmp(const td_char *s1, const td_char *s2)
{
td_u32 s1_len = strlen(s1);
td_u32 s2_len = strlen(s2);
if (s1_len == s2_len && s1_len > 0) {
return (strncasecmp(s1, s2, s1_len) == 0) ? TD_TRUE : TD_FALSE;
}
return TD_FALSE;
}
td_void print_buffer(const td_char *string, const td_u8 *buf, td_u32 len)
{
td_u32 i;
if (buf == NULL || string == NULL) {
sample_printf("null pointer input in function print_buf!\n");
return;
}
sample_printf("%s:\n", string);
for (i = 0; i < len; i++) {
if ((i != 0) && ((i % 0x10) == 0)) {
sample_printf("\n");
}
sample_printf("0x%02x ", buf[i]);
}
sample_printf("\n");
return;
}
td_void show_usage(otp_sample sample_table[], td_u32 len)
{
td_u32 i, k;
sample_printf("Usage:\n");
sample_printf("----------------------------------------------------\n");
for (i = 0; i < len; i++) {
sample_printf(" %10s %-16s %s\n", "name:", sample_table[i].name, sample_table[i].help[0]);
for (k = 1; k < sizeof(sample_table[i].help) / sizeof(sample_table[i].help[0]); k++) {
if (sample_table[i].help[k][0] == 0) {
break;
}
sample_printf(" %10s %-16s %s\n", "", "", sample_table[i].help[k]);
}
}
return;
}
void show_returne_msg(otp_sample *sample_table, td_u32 len, td_s32 ret)
{
if (sample_table == TD_NULL) {
return;
}
if (ret == TD_SUCCESS) {
sample_printf("Sample executed successfully. \n");
return;
}
if (ret == SOC_ERR_OTP_NOT_SUPPORT_INTERFACE) {
sample_printf("This chipset not support this interface. ret:0X%X\n", ret);
} else {
sample_printf("Sample executed failed. ret:0X%X\n", ret);
}
if (ret == SOC_ERR_OTP_INVALID_PARA) {
show_usage(sample_table, len);
}
return;
}
static otp_sample *get_opt(td_char *argv, otp_sample *otp_table, td_u32 len)
{
td_u32 i;
for (i = 0; i < len; i++) {
if (case_strcmp(otp_table[i].name, argv)) {
return &otp_table[i];
}
}
return NULL;
}
td_s32 run_cmdline(td_s32 argc, td_char **argv, otp_sample *otp_table, td_u32 len)
{
td_s32 ret = TD_FAILURE;
otp_sample *sample = NULL;
if (argv == TD_NULL || argv[1] == TD_NULL) {
sample_printf("argv[1] is NULL\n");
goto out;
}
if (otp_table == TD_NULL || len == 0) {
sample_printf("otp_sample table data is NULL or len == 0\n");
goto out;
}
sample = get_opt(argv[1], otp_table, len);
if (sample == TD_NULL) {
sample_printf("failed to get_opt func\n");
goto out;
}
if (sample->run_sample != TD_NULL) {
ret = (*sample->run_sample)(argc, argv);
} else {
sample_printf(" otp sample error.\n");
}
out:
return ret;
}
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* End of #ifndef __SAMPLE_OTP_BASE_H__ */