mirror of
				https://github.com/TomHarte/CLK.git
				synced 2025-10-31 20:16:07 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| //  ActivityObserver.h
 | |
| //  Clock Signal
 | |
| //
 | |
| //  Created by Thomas Harte on 07/05/2018.
 | |
| //  Copyright 2018 Thomas Harte. All rights reserved.
 | |
| //
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <cstdint>
 | |
| #include <string>
 | |
| 
 | |
| namespace Activity {
 | |
| 
 | |
| /*!
 | |
| 	Provides a purely virtual base class for anybody that wants to receive notifications of
 | |
| 	'activity': any feedback from an emulated system which a user could perceive other than
 | |
| 	through the machine's native audio and video outputs.
 | |
| 
 | |
| 	So: status LEDs, drive activity, etc. A receiver may choose to make appropriate noises
 | |
| 	and/or to show or unshow status indicators.
 | |
| */
 | |
| class Observer {
 | |
| public:
 | |
| 	virtual ~Observer() = default;
 | |
| 
 | |
| 	/// Provides hints as to the sort of information presented on an LED.
 | |
| 	enum LEDPresentation: uint8_t {
 | |
| 		/// This LED informs the user of some sort of persistent state, e.g. scroll lock.
 | |
| 		/// If this flag is absent then the LED describes an ephemeral state, such as media access.
 | |
| 		Persistent = (1 << 0),
 | |
| 	};
 | |
| 
 | |
| 	/// Announces to the receiver that there is an LED of name @c name.
 | |
| 	virtual void register_led([[maybe_unused]] const std::string &name, [[maybe_unused]] uint8_t presentation = 0) {}
 | |
| 
 | |
| 	/// Announces to the receiver that there is a drive of name @c name.
 | |
| 	///
 | |
| 	/// If a drive has the same name as an LED, that LED goes with this drive.
 | |
| 	virtual void register_drive([[maybe_unused]] const std::string &name) {}
 | |
| 
 | |
| 	/// Informs the receiver of the new state of the LED with name @c name.
 | |
| 	virtual void set_led_status([[maybe_unused]] const std::string &name, [[maybe_unused]] bool lit) {}
 | |
| 
 | |
| 	enum class DriveEvent {
 | |
| 		StepNormal,
 | |
| 		StepBelowZero,
 | |
| 		StepBeyondMaximum
 | |
| 	};
 | |
| 
 | |
| 	/// Informs the receiver that the named event just occurred for the drive with name @c name.
 | |
| 	virtual void announce_drive_event([[maybe_unused]] const std::string &name, [[maybe_unused]] DriveEvent event) {}
 | |
| 
 | |
| 	/// Informs the receiver of the motor-on status of the drive with name @c name.
 | |
| 	virtual void set_drive_motor_status([[maybe_unused]] const std::string &name, [[maybe_unused]] bool is_on) {}
 | |
| };
 | |
| 
 | |
| }
 |