xref: /utopia/UTPA2-700.0.x/projects/verify/utopia/bobbi.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //#include "MsTypes.h"
2 #include <stdio.h>
3 #include "utopia_dapi.h"
4 #include "MsOS.h"
5 #include "bobbi.h"
6 
7 // resource pool id
8 enum
9 {
10 	BOBBI_RPOOL0,
11 	BOBBI_RPOOL1,
12 	BOBBI_RPOOL2,
13 	BOBBI_RPOOL3,
14 	BOBBI_RPOOL4,
15 } eBobbiRPoolID;
16 
17 // add resource with same size for convenience
18 #define BOBBI_RESOURCE_SIZE 5
BOBBIRegisterToUtopia(void)19 void BOBBIRegisterToUtopia(void)
20 {
21 	// create module
22     void* pModule = NULL;
23 	UtopiaModuleCreate(MODULE_BOBBI, 8, &pModule);
24 	printf("\n%s, %d, bobbi pModule = %p\n", __FUNCTION__, __LINE__, pModule); // bob.fu
25 
26 	// add to utoipa framework
27     UtopiaModuleRegister(pModule);
28 
29     // register operations
30 	UtopiaModuleSetupFunctionPtr(pModule, (FUtopiaOpen)BOBBIOpen
31 			, (FUtopiaClose)BOBBIClose, (FUtopiaIOctl)BOBBIIoctl);
32 
33     void* pResource = NULL;
34 	//############################
35 	//## add resource to rpool0 ##
36 	//############################
37 	// prepare to register resource
38 	UtopiaModuleAddResourceStart(pModule, BOBBI_RPOOL0);
39 
40     // create and register rsource
41     UtopiaResourceCreate("rpool0_resource0", BOBBI_RESOURCE_SIZE, &pResource);
42     UtopiaResourceRegister(pModule, pResource, BOBBI_RPOOL0);
43 
44     // create and register rsource
45     UtopiaResourceCreate("rpool0_resource1", BOBBI_RESOURCE_SIZE, &pResource);
46     UtopiaResourceRegister(pModule, pResource, BOBBI_RPOOL0);
47 
48     // notify utopia framework to count resource nubmer in specific rpool
49 	UtopiaModuleAddResourceEnd(pModule, BOBBI_RPOOL0);
50 
51 	// skip rpool1 for purpose
52 
53 	//############################
54 	//## add resource to rpool2 ##
55 	//############################
56 	// prepare to register resource
57 	UtopiaModuleAddResourceStart(pModule, BOBBI_RPOOL2);
58 
59     // create and register rsource
60     UtopiaResourceCreate("rpool2_resource0", BOBBI_RESOURCE_SIZE, &pResource);
61     UtopiaResourceRegister(pModule, pResource, BOBBI_RPOOL2);
62 
63     // create and register rsource
64     UtopiaResourceCreate("rpool2_resource1", BOBBI_RESOURCE_SIZE, &pResource);
65     UtopiaResourceRegister(pModule, pResource, BOBBI_RPOOL2);
66 
67     // notify utopia framework to count resource nubmer in specific rpool
68 	UtopiaModuleAddResourceEnd(pModule, BOBBI_RPOOL2);
69 }
70 
71 #define BOBBI_INSTANCE_PRIVATE_SIZE 20
BOBBIOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)72 MS_U32 BOBBIOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
73 {
74 	void* pModule = NULL;
75 	printf("module BOBBI is opened\n"); // bob.fu
76 	printf("create instance with private\n"); // bob.fu
77     UtopiaInstanceCreate(BOBBI_INSTANCE_PRIVATE_SIZE, ppInstance);
78 	UtopiaModuleGetPtr(MODULE_BOBBI, &pModule);
79 	printf("\n%s, %d, bobbi pModule = %p\n", __FUNCTION__, __LINE__, pModule); // bob.fu
80 	printf("\n%s, %d, *ppInstance = 0x%X\n", __FUNCTION__, __LINE__, *ppInstance); // bob.fu
81 
82 	return 0; // FIXME: error code
83 }
84 
BOBBIIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)85 MS_U32 BOBBIIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
86 {
87 	// get module
88 	void* pModule = NULL;
89 	UtopiaInstanceGetModule(pInstance, &pModule);
90 	enum eBOBBI_IOCTL_CMD eCmd = (enum eBOBBI_IOCTL_CMD)u32Cmd;
91 	printf("\n%s, %d\n", __FUNCTION__, __LINE__); // bob.fu
92 
93     MS_U32 u32Ret = 0; // FIXME: error code
94 
95     switch(eCmd)
96     {
97 		void* pResource = NULL;
98         case BOBBI_IOCTL_CMD1:
99 			printf("bobbi ioctl cmd1\n");// bob.fu
100             if(UtopiaResourceObtain(pModule, BOBBI_RPOOL0, &pResource) != 0)
101             {
102                 printf("UtopiaResourceObtainfail\n");
103 	            return 0xFFFFFFFF;
104             }
105 			// do something
106 			sleep(10);
107             UtopiaResourceRelease(pResource);
108         default:
109             break;
110     };
111 
112 	return u32Ret; // FIXME: error code
113 }
114 
BOBBIClose(void * pInstance)115 MS_U32 BOBBIClose(void* pInstance)
116 {
117 	UtopiaInstanceDelete(pInstance);
118 
119 	return 0; // FIXME: error code
120 }
121 
122 
123 
124