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

123 lines
4.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <umsd.h>
#include <msdcnvt/MsdcNvtApi.h>
#include "MsdcNvtCb_CustomSi.h"
//Step 1: Declare custom functions
//Declare Gets Functions
static void GetSayHi(void);
static void GetSayHello(void);
//Declare Sets Functions
static void SetSayHi(void);
static void SetSayHello(void);
//Step 2: Create your function mapping table for 'Get' Command
static void (*MSDCCustomGet[])(void) = {
GetSayHi, // 0, #define ID_GET_SAY_HI 0 //in AP Side
GetSayHello, // 1, #define ID_GET_SAY_HELLO 1 //in AP Side
};
//Step 3: Create your function mapping table for 'Set' Command
static void (*MSDCCustomSet[])(void) = {
SetSayHi, // 0, #define ID_SET_SAY_HI 0 //in AP Side
SetSayHello, // 1, #define ID_SET_SAY_HELLO 1 //in AP Side
};
//Step 4: Provide API for Register Single Direction Functions
BOOL MsdcNvtRegSi_CustomSi(void)
{
return MsdcNvt_AddCallback_Si(MSDCCustomGet, sizeof(MSDCCustomGet) / sizeof(MSDCCustomGet[0]), MSDCCustomSet, sizeof(MSDCCustomSet) / sizeof(MSDCCustomSet[0]));
}
//Step 5: Start to implement your custom function
static void GetSayHi(void)
{
UINT32 *pData = (UINT32 *)MsdcNvt_GetDataBufferAddress();
UINT32 uiLength = MsdcNvt_GetTransSize();
//1. pData could be a structure, just the PC side and Firmware side use the
// same structure define. such as
// STRUCT_DATA *pData = (STRUCT_DATA*)MsdcNvt_GetDataBufferAddress();
// then you can check size as if(uiLength!=sizeof(STRUCT_DATA))
//2. pData could be a string. if the string is not fixed length, you have
// to remove check size if condition for invalid data. and the string
// length have to smaller than uiLength-1
//uiLength have to equal to PC data size
//if PC only send 4 bytes data, here uiLength have to be 4
if (uiLength != sizeof(UINT32)) {
return;
}
printf("@@@@@@ Get Say Hi @@@@@@\r\n");
*pData = 12345;
}
static void GetSayHello(void)
{
UINT32 *pData = (UINT32 *)MsdcNvt_GetDataBufferAddress();
UINT32 uiLength = MsdcNvt_GetTransSize();
printf("uiLength=%d\r\n", (int)uiLength);
//1. pData could be a structure, just the PC side and Firmware side use the
// same structure define. such as
// STRUCT_DATA *pData = (STRUCT_DATA*)MsdcNvt_GetDataBufferAddress();
// then you can check size as if(uiLength!=sizeof(STRUCT_DATA))
//2. pData could be a string. if the string is not fixed length, you have
// to remove check size if condition for invalid data. and the string
// length have to < uiLength
//uiLength have to equal to PC data size
//if PC only send 4 bytes data, here uiLength have to be 4
if (uiLength != sizeof(UINT32)) {
return;
}
printf("@@@@@@ Get Say Hello @@@@@@\r\n");
*pData = 67890;
}
static void SetSayHi(void)
{
UINT32 i;
UINT32 *pData = (UINT32 *)MsdcNvt_GetDataBufferAddress();
UINT32 uiLength = MsdcNvt_GetTransSize();
printf("###### Set Say Hi ###### \r\n");
//1. pData could be a structure, just the PC side and Firmware side use the
// same structure define. such as
// STRUCT_DATA *pData = (STRUCT_DATA*)MsdcNvt_GetDataBufferAddress();
// then you can check size as if(uiLength!=sizeof(STRUCT_DATA))
//2. pData could be a string.
if (uiLength) {
for (i = 0; i < uiLength; i += 4) {
printf("Data[%d]=%d\r\n", (int)i, (int)*pData);
pData++;
}
}
}
static void SetSayHello(void)
{
UINT32 i;
UINT32 *pData = (UINT32 *)MsdcNvt_GetDataBufferAddress();
UINT32 uiLength = MsdcNvt_GetTransSize();
printf("###### Set Say Hello ###### \r\n");
//1. pData could be a structure, just the PC side and Firmware side use the
// same structure define. such as
// STRUCT_DATA *pData = (STRUCT_DATA*)MsdcNvt_GetDataBufferAddress();
// then you can check size as if(uiLength!=sizeof(STRUCT_DATA))
//2. pData could be a string.
if (uiLength) {
for (i = 0; i < uiLength; i += 4) {
printf("Data[%d]=%d\r\n", (int)i, (int)*pData);
pData++;
}
}
}