GBA SIO: Build up lockstep driver a bit more

This commit is contained in:
Jeffrey Pfau 2015-02-26 00:07:12 -08:00
parent 1e912abf4b
commit 5b40951c05
2 changed files with 22 additions and 0 deletions

View File

@ -21,10 +21,12 @@ void GBASIOLockstepInit(struct GBASIOLockstep* lockstep) {
lockstep->players[3] = 0;
lockstep->attached = 0;
ConditionInit(&lockstep->barrier);
MutexInit(&lockstep->mutex);
}
void GBASIOLockstepDeinit(struct GBASIOLockstep* lockstep) {
ConditionDeinit(&lockstep->barrier);
MutexDeinit(&lockstep->mutex);
}
void GBASIOLockstepNodeCreate(struct GBASIOLockstepNode* node) {
@ -45,6 +47,23 @@ bool GBASIOLockstepAttachNode(struct GBASIOLockstep* lockstep, struct GBASIOLock
return true;
}
void GBASIOLockstepDetachNode(struct GBASIOLockstep* lockstep, struct GBASIOLockstepNode* node) {
if (lockstep->attached == 0) {
return;
}
int i;
for (i = 0; i < lockstep->attached; ++i) {
if (lockstep->players[i] != node) {
continue;
}
for (++i; i < lockstep->attached; ++i) {
lockstep->players[i - 1] = lockstep->players[i];
}
--lockstep->attached;
break;
}
}
bool GBASIOLockstepNodeInit(struct GBASIODriver* driver) {
UNUSED(driver);
return true;

View File

@ -15,6 +15,7 @@ struct GBASIOLockstep {
int attached;
uint16_t data[MAX_GBAS];
Mutex mutex;
Condition barrier;
};
@ -27,6 +28,8 @@ void GBASIOLockstepInit(struct GBASIOLockstep*);
void GBASIOLockstepDeinit(struct GBASIOLockstep*);
void GBASIOLockstepNodeCreate(struct GBASIOLockstepNode*);
bool GBASIOLockstepAttachNode(struct GBASIOLockstep*, struct GBASIOLockstepNode*);
void GBASIOLockstepDetachNode(struct GBASIOLockstep*, struct GBASIOLockstepNode*);
#endif