MCPcopy Create free account
hub / github.com/RPCSX/rpcsx / cellCrossControllerInitialize

Function cellCrossControllerInitialize

ps3fw/cellCrossController.cpp:130–186  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

128}
129
130error_code cellCrossControllerInitialize(vm::cptr<CellCrossControllerParam> pParam, vm::cptr<CellCrossControllerPackageInfo> pPkgInfo, vm::ptr<CellCrossControllerCallback> cb, vm::ptr<void> userdata) // LittleBigPlanet 2 and 3
131{
132 cellCrossController.todo("cellCrossControllerInitialize(pParam=*0x%x, pPkgInfo=*0x%x, cb=*0x%x, userdata=*0x%x)", pParam, pPkgInfo, cb, userdata);
133
134 if (pParam)
135 {
136 cellCrossController.notice("cellCrossControllerInitialize: pParam: pPackageFileName=%s, pSignatureFileName=%s, pIconFileName=%s", pParam->pPackageFileName, pParam->pSignatureFileName, pParam->pIconFileName);
137 }
138
139 if (pPkgInfo)
140 {
141 cellCrossController.notice("cellCrossControllerInitialize: pPkgInfo: pTitle=%s, pTitleId=%s, pAppVer=%s", pPkgInfo->pTitle, pPkgInfo->pTitleId, pPkgInfo->pAppVer);
142 }
143
144 cross_controller& cc = g_fxo->get<cross_controller>();
145
146 if (cc.status == CELL_CROSS_CONTROLLER_STATUS_INITIALIZED) // TODO: confirm this logic
147 {
148 return CELL_CROSS_CONTROLLER_ERROR_INVALID_STATE;
149 }
150
151 if (!pParam || !pPkgInfo)
152 {
153 return CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE;
154 }
155
156 // Check if the strings exceed the allowed size (not counting null terminators)
157
158 if (!pParam->pPackageFileName || !memchr(pParam->pPackageFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1))
159 {
160 return CELL_CROSS_CONTROLLER_ERROR_INVALID_PKG_FILENAME;
161 }
162
163 if (!pParam->pSignatureFileName || !memchr(pParam->pSignatureFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1))
164 {
165 return CELL_CROSS_CONTROLLER_ERROR_INVALID_SIG_FILENAME;
166 }
167
168 if (!pParam->pIconFileName || !memchr(pParam->pIconFileName.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PARAM_FILE_NAME_LEN + 1))
169 {
170 return CELL_CROSS_CONTROLLER_ERROR_INVALID_ICON_FILENAME;
171 }
172
173 if (!pPkgInfo->pAppVer || !memchr(pPkgInfo->pAppVer.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_APP_VER_LEN + 1) ||
174 !pPkgInfo->pTitleId || !memchr(pPkgInfo->pTitleId.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_TITLE_ID_LEN + 1) ||
175 !pPkgInfo->pTitle || !memchr(pPkgInfo->pTitle.get_ptr(), '\0', CELL_CROSS_CONTROLLER_PKG_TITLE_LEN + 1) ||
176 !cb)
177 {
178 return CELL_CROSS_CONTROLLER_ERROR_INVALID_VALUE;
179 }
180
181 cc.callback = cb;
182 cc.userdata = userdata;
183 cc.run_thread(pPkgInfo);
184
185 return CELL_OK;
186}
187

Callers

nothing calls this directly

Calls 2

run_threadMethod · 0.80
get_ptrMethod · 0.45

Tested by

no test coverage detected