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