220 lines
5.4 KiB
C
220 lines
5.4 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <umsd.h>
|
|
#include <msdcnvt/MsdcNvtApi.h>
|
|
|
|
#include <msdcnvt//MsdcNvtCallback.h>
|
|
#include "MsdcNvtCb_Adj.h"
|
|
|
|
//for MSDCVendorNVT_AddCallback_Bi
|
|
static void MsdcNvtCb_AdjGetNumOfItem(void *pData);
|
|
static void MsdcNvtCb_AdjGetItemsDesc(void *pData);
|
|
static void MsdcNvtCb_AdjSetItemsData(void *pData);
|
|
static void MsdcNvtCb_AdjGetItemsData(void *pData);
|
|
|
|
MSDCNVT_REG_BI_BEGIN(m_MsdcNvtAdj)
|
|
MSDCNVT_REG_BI_ITEM(MsdcNvtCb_AdjGetNumOfItem)
|
|
MSDCNVT_REG_BI_ITEM(MsdcNvtCb_AdjGetItemsDesc)
|
|
MSDCNVT_REG_BI_ITEM(MsdcNvtCb_AdjSetItemsData)
|
|
MSDCNVT_REG_BI_ITEM(MsdcNvtCb_AdjGetItemsData)
|
|
MSDCNVT_REG_BI_END()
|
|
|
|
BOOL MsdcNvtRegBi_Adj(void)
|
|
{
|
|
return MsdcNvt_AddCallback_Bi(m_MsdcNvtAdj);
|
|
}
|
|
|
|
//MsdcNvtCb_Adj.c
|
|
typedef enum _VAR_TYPE {
|
|
VAR_TYPE_BOOL,
|
|
VAR_TYPE_UINT32,
|
|
VAR_TYPE_INT32,
|
|
VAR_TYPE_UINT16,
|
|
VAR_TYPE_INT16,
|
|
VAR_TYPE_UINT8,
|
|
VAR_TYPE_INT8
|
|
} eVAR_TYPE;
|
|
|
|
typedef struct _ADJ_ITEM {
|
|
void *pVar;
|
|
eVAR_TYPE VarType;
|
|
INT32 MaxValue;
|
|
INT32 MinValue;
|
|
CHAR Tag[64];
|
|
} tADJ_ITEM;
|
|
|
|
//Step 1: Includes
|
|
//Step 2: Variables Control
|
|
//You can extern these variables at other places for temp adjustment
|
|
UINT32 MsdcPar0 = 0;
|
|
UINT32 MsdcPar1 = 0;
|
|
UINT32 MsdcPar2 = 0;
|
|
UINT32 MsdcPar3 = 0;
|
|
UINT32 MsdcPar4 = 0;
|
|
UINT32 MsdcPar5 = 0;
|
|
//Step 3: Setup Up Item
|
|
static tADJ_ITEM Items[] = {
|
|
{&MsdcPar0, VAR_TYPE_UINT32, 255, 0, "MsdcPar0"},
|
|
{&MsdcPar1, VAR_TYPE_UINT32, 255, 0, "MsdcPar1"},
|
|
{&MsdcPar2, VAR_TYPE_UINT32, 255, 0, "MsdcPar2"},
|
|
{&MsdcPar3, VAR_TYPE_UINT32, 255, 0, "MsdcPar3"},
|
|
{&MsdcPar4, VAR_TYPE_UINT32, 255, 0, "MsdcPar4"},
|
|
{&MsdcPar5, VAR_TYPE_UINT32, 255, 0, "MsdcPar5"},
|
|
};
|
|
//Step 4: (Optional) Implement Get Callback, as xxx_get_xxx to refresh your variable controls
|
|
static void ItemsGetData(void)
|
|
{
|
|
}
|
|
//Step 5: Implement Set Callback, as xxx_set_xxx to set variables to active
|
|
static void ItemsSetData(void)
|
|
{
|
|
}
|
|
|
|
static void MsdcNvtCb_AdjGetNumOfItem(void *pData)
|
|
{
|
|
tMSDCEXT_UINT32 *pDesc = MSDCNVT_CAST(tMSDCEXT_UINT32, pData);
|
|
|
|
if (pDesc == NULL) {
|
|
printf("ERR: Invalid input data.\r\n");
|
|
return;
|
|
}
|
|
|
|
pDesc->uiValue = sizeof(Items) / sizeof(Items[0]);
|
|
pDesc->tParent.bOK = TRUE;
|
|
}
|
|
|
|
static void MsdcNvtCb_AdjGetItemsDesc(void *pData)
|
|
{
|
|
tMSDCEXT_ADJ_ALL_DESC *pDesc = MSDCNVT_CAST(tMSDCEXT_ADJ_ALL_DESC, pData);
|
|
|
|
if (pDesc == NULL) {
|
|
printf("ERR: Invalid input data.\r\n");
|
|
return;
|
|
}
|
|
|
|
tMSDCEXT_ADJ_ITEM_DESC *pItemDesc = (tMSDCEXT_ADJ_ITEM_DESC *)(&pDesc[1]);
|
|
UINT32 i, nItem = sizeof(Items) / sizeof(Items[0]);
|
|
|
|
for (i = 0; i < nItem; i++) {
|
|
tADJ_ITEM *pSrc = &Items[i];
|
|
tMSDCEXT_ADJ_ITEM_DESC *pDst = pItemDesc + i;
|
|
memset(pDst, 0, sizeof(tMSDCEXT_ADJ_ITEM_DESC));
|
|
switch (pSrc->VarType) {
|
|
case VAR_TYPE_INT32:
|
|
case VAR_TYPE_INT16:
|
|
pDst->bIsSign = TRUE;
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
pDst->MaxValue = pSrc->MaxValue;
|
|
pDst->MinValue = pSrc->MinValue;
|
|
strncpy(pDst->Tag, pSrc->Tag, sizeof(pDst->Tag) - 1);
|
|
pDst->Tag[sizeof(pDst->Tag) - 1] = 0;
|
|
}
|
|
pDesc->tParent.bOK = TRUE;
|
|
}
|
|
|
|
static void MsdcNvtCb_AdjSetItemsData(void *pData)
|
|
{
|
|
tMSDCEXT_ADJ_DATA *pDesc = MSDCNVT_CAST(tMSDCEXT_ADJ_DATA, pData);
|
|
|
|
if (pDesc == NULL) {
|
|
printf("ERR: Invalid input data.\r\n");
|
|
return;
|
|
}
|
|
|
|
UINT32 *pVars = (UINT32 *)(&pDesc[1]);
|
|
UINT32 i, nItem = sizeof(Items) / sizeof(Items[0]);
|
|
|
|
for (i = 0; i < nItem; i++) {
|
|
tADJ_ITEM *pItem = &Items[i];
|
|
void *pVar = &pVars[i];
|
|
|
|
switch (pItem->VarType) {
|
|
case VAR_TYPE_BOOL:
|
|
*((BOOL *)pItem->pVar) = *((BOOL *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((BOOL *)pVar));
|
|
break;
|
|
case VAR_TYPE_UINT32:
|
|
*((UINT32 *)pItem->pVar) = *((UINT32 *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((UINT32 *)pVar));
|
|
break;
|
|
case VAR_TYPE_INT32:
|
|
*((INT32 *)pItem->pVar) = *((INT32 *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((INT32 *)pVar));
|
|
break;
|
|
case VAR_TYPE_UINT16:
|
|
*((UINT16 *)pItem->pVar) = *((UINT16 *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((UINT16 *)pVar));
|
|
break;
|
|
case VAR_TYPE_INT16:
|
|
*((INT16 *)pItem->pVar) = *((INT16 *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((INT16 *)pVar));
|
|
break;
|
|
case VAR_TYPE_UINT8:
|
|
*((UINT8 *)pItem->pVar) = *((UINT8 *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((UINT8 *)pVar));
|
|
break;
|
|
case VAR_TYPE_INT8:
|
|
*((INT8 *)pItem->pVar) = *((INT8 *)pVar);
|
|
printf("%s=%d,", pItem->Tag, (int)*((INT8 *)pVar));
|
|
break;
|
|
}
|
|
}
|
|
printf("\r\n");
|
|
|
|
ItemsSetData();
|
|
pDesc->tParent.bOK = TRUE;
|
|
}
|
|
|
|
static void MsdcNvtCb_AdjGetItemsData(void *pData)
|
|
{
|
|
tMSDCEXT_ADJ_DATA *pDesc = MSDCNVT_CAST(tMSDCEXT_ADJ_DATA, pData);
|
|
|
|
if (pDesc == NULL) {
|
|
printf("ERR: Invalid input data.\r\n");
|
|
return;
|
|
}
|
|
|
|
UINT32 *pVars = (UINT32 *)(&pDesc[1]);
|
|
UINT32 i, nItem = sizeof(Items) / sizeof(Items[0]);
|
|
|
|
ItemsGetData();
|
|
|
|
for (i = 0; i < nItem; i++) {
|
|
tADJ_ITEM *pItem = &Items[i];
|
|
void *pVar = &pVars[i];
|
|
|
|
*((UINT32 *)pVar) = 0; //Reset to 0
|
|
|
|
switch (pItem->VarType) {
|
|
case VAR_TYPE_BOOL:
|
|
*((BOOL *)pVar) = *((BOOL *)pItem->pVar);
|
|
break;
|
|
case VAR_TYPE_UINT32:
|
|
*((UINT32 *)pVar) = *((UINT32 *)pItem->pVar);
|
|
break;
|
|
case VAR_TYPE_INT32:
|
|
*((INT32 *)pVar) = *((INT32 *)pItem->pVar);
|
|
break;
|
|
case VAR_TYPE_UINT16:
|
|
*((UINT16 *)pVar) = *((UINT16 *)pItem->pVar);
|
|
break;
|
|
case VAR_TYPE_INT16:
|
|
*((INT16 *)pVar) = *((INT16 *)pItem->pVar);
|
|
break;
|
|
case VAR_TYPE_UINT8:
|
|
*((UINT8 *)pVar) = *((UINT8 *)pItem->pVar);
|
|
break;
|
|
case VAR_TYPE_INT8:
|
|
*((INT8 *)pVar) = *((INT8 *)pItem->pVar);
|
|
break;
|
|
}
|
|
}
|
|
|
|
pDesc->tParent.bOK = TRUE;
|
|
}
|