nt9856x/code/application/source/cardv/SrcCode/UIApp/UsbMsdcCb/MsdcNvtCb_Adj.c
2023-03-28 15:07:53 +08:00

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;
}