Patrick here is some of the code having problems. Currently it just freezes up. I think it is due to instance variables not being accessible. The Errors due to being in a different memory pool are disturbing.
Thanks for any help,
Arthur
Code:
// Some Implementation File
void * refToSelf;
int cCallback(void *userPtr)
{
DoorManager *self = (id)userPtr;
// objc_msgSend (self, @selector(cancelAllTasks), nil);
[self cancelAllTasks];
NSLog(@"Phidget Sleep call back\n");
return 0;
}
implementation DoorManager
#pragma mark Init / Final
-(id) init {
if (self=[super init]) {
// Handle sleeping
CPhidget_set_OnWillSleep_Handler(cCallback,self);
refToSelf = self;
}
return self;
}
...
-(BOOL) cancelAllTasks {
[DBManager logStr:@"Close all doors called via Phidget Library"];
return [doorOpener cancelAllTasks];
}
@end
Code:
// Next File DoorOpener.m
-(BOOL) cancelAllTasks {
BOOL loopStatus=YES;
status =YES;
[DBManager logStr:[NSMutableString stringWithFormat:@"Canceling all tasks(%d)",[fifoOfTimers count] ]];
NSArray *temp = [NSArray arrayWithArray: fifoOfTimers];
for (NSMutableDictionary *task in temp) {
loopStatus = [self cancelTask:task];
status = (loopStatus == NO) ? loopStatus : status;
[fifoOfTimers removeObject:task];
// [NSThread sleepForTimeInterval:3];
}
return status;
}
// Cancel closes the door by setting the relay off and then cancels the timer
// Returns to the caller a boolean status of YES if phidget returned EPHIDGET_OK.
-(BOOL ) cancelTask : (NSDictionary *) dict {
int index;
RelayCard *rc;
NSNumber *taskIdNSNum ;
index = [ [dict objectForKey:@"theRelayIndex" ] intValue];
rc = [dict objectForKey:@"theRelayCard" ];
taskIdNSNum = [dict objectForKey:@"taskId" ];
id < NSObject,DoorOpenerDelegate> delegateId = [dict objectForKey:@"delegateId" ];
int resultCode = [rc setRelaysIndex:index state:NO];
status = YES;
if( resultCode != EPHIDGET_OK ) {
[DBManager logStr:[NSMutableString stringWithFormat:@"Task(%@) Cancel Completion Failed with Result:%@",taskIdNSNum,[rc lastErrorMsg]]];
status = NO;
} else {
[DBManager logStr:[NSMutableString stringWithFormat:@"Task(%@) Cancel Completion Success with Result:%@",taskIdNSNum,[rc lastErrorMsg]]];
}
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(timerHasExpired:) object:dict];
if (delegateId && [delegateId respondsToSelector:@selector(taskCompleted:taskId:)]) {
[delegateId taskCompleted:status taskId:[taskIdNSNum intValue]];
} else {
if (delegateId && [delegateId respondsToSelector:@selector(taskCompleted:)]) {
// [delegate taskCompleted:status];
}
}
return status;
}
// File relayCard.m
-(int) setRelaysIndex:(int) index state:(BOOL) state {
if( hwIsSimulated )
return EPHIDGET_OK;
resultCode = CPhidgetInterfaceKit_setOutputState(ifkit, index , state);
if( resultCode != EPHIDGET_OK ) {
CPhidget_getErrorDescription(resultCode,&lastErrorResultStr);
// NSLog(@"Failed to set card's relay index(%d) with serial number%d, its state is unknown",index,serialNumber); // Caller should log the error
}
relayStates[index] = state;
return resultCode;
}