diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 4411f1a27..bac55cdc2 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -674,8 +674,8 @@ class MachineDocument: // Apply labels and create leds entries. for c in 0 ..< leds.count { - textFields[c].stringValue = leds[c] - self.leds[leds[c]] = LED(levelIndicator: activityIndicators[c]) + textFields[c].stringValue = leds[c].name + self.leds[leds[c].name] = LED(levelIndicator: activityIndicators[c]) } // Create a fader. diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.h b/OSBindings/Mac/Clock Signal/Machine/CSMachine.h index 258073934..745bc9eb3 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.h +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.h @@ -33,6 +33,11 @@ typedef NS_ENUM(NSInteger, CSMachineKeyboardInputMode) { CSMachineKeyboardInputModeJoystick, }; +@interface CSMachineLED: NSObject +@property(nonatomic, nonnull, readonly) NSString *name; +@property(nonatomic, readonly) BOOL isPersisent; +@end + // Deliberately low; to ensure CSMachine has been declared as an @class already. #import "CSAtari2600.h" #import "CSZX8081.h" @@ -99,7 +104,7 @@ typedef NS_ENUM(NSInteger, CSMachineKeyboardInputMode) { @property (nonatomic, nullable) CSJoystickManager *joystickManager; // LED list. -@property (nonatomic, readonly, nonnull) NSArray *leds; +@property (nonatomic, readonly, nonnull) NSArray *leds; // Special-case accessors; undefined behaviour if accessed for a machine not of the corresponding type. @property (nonatomic, readonly, nullable) CSAtari2600 *atari2600; diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm index 9e7883fa5..843009e58 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm @@ -37,7 +37,7 @@ @interface CSMachine() - (void)speaker:(Outputs::Speaker::Speaker *)speaker didCompleteSamples:(const int16_t *)samples length:(int)length; - (void)speakerDidChangeInputClock:(Outputs::Speaker::Speaker *)speaker; -- (void)addLED:(NSString *)led; +- (void)addLED:(NSString *)led isPersistent:(BOOL)isPersistent; @end struct LockProtectedDelegate { @@ -61,8 +61,8 @@ struct SpeakerDelegate: public Outputs::Speaker::Speaker::Delegate, public LockP }; struct ActivityObserver: public Activity::Observer { - void register_led(const std::string &name, uint8_t) final { - [machine addLED:[NSString stringWithUTF8String:name.c_str()]]; + void register_led(const std::string &name, uint8_t flags) final { + [machine addLED:[NSString stringWithUTF8String:name.c_str()] isPersistent:flags & Activity::Observer::LEDPresentation::Persistent]; } void set_led_status(const std::string &name, bool lit) final { @@ -76,6 +76,19 @@ struct ActivityObserver: public Activity::Observer { __unsafe_unretained CSMachine *machine; }; +@implementation CSMachineLED + +- (instancetype)initWithName:(NSString *)name isPersistent:(BOOL)isPersistent { + self = [super init]; + if(self) { + _name = name; + _isPersisent = isPersistent; + } + return self; +} + +@end + @implementation CSMachine { SpeakerDelegate _speakerDelegate; ActivityObserver _activityObserver; @@ -86,7 +99,7 @@ struct ActivityObserver: public Activity::Observer { MachineTypes::JoystickMachine *_joystickMachine; CSJoystickManager *_joystickManager; - NSMutableArray *_leds; + NSMutableArray *_leds; CSHighPrecisionTimer *_timer; std::atomic_flag _isUpdating; @@ -623,11 +636,11 @@ struct ActivityObserver: public Activity::Observer { #pragma mark - Activity observation -- (void)addLED:(NSString *)led { - [_leds addObject:led]; +- (void)addLED:(NSString *)led isPersistent:(BOOL)isPersistent { + [_leds addObject:[[CSMachineLED alloc] initWithName:led isPersistent:isPersistent]]; } -- (NSArray *)leds { +- (NSArray *)leds { return _leds; }