Files
cc-haxe/src/kernel/peripherals/Drive.hx
2023-01-27 13:50:51 +01:00

95 lines
2.1 KiB
Haxe

package kernel.peripherals;
using tink.CoreApi;
class Drive implements IPeripheral {
public final onDiskInsert:Signal<Noise>;
public final onDiskEject:Signal<Noise>;
private final addr:String;
private final native:cc.periphs.Disk;
private final onDiskInsertTrigger:SignalTrigger<Noise> = Signal.trigger();
private final onDiskEjectTrigger:SignalTrigger<Noise> = Signal.trigger();
@:allow(kernel.peripherals)
private function new(native: cc.periphs.Disk,addr: String) {
this.addr = addr;
this.native = native;
this.onDiskInsert = this.onDiskInsertTrigger.asSignal();
this.onDiskEject = this.onDiskEjectTrigger.asSignal();
KernelEvents.instance.onDisk.handle((addr) ->{
if (addr == this.addr){
this.onDiskInsertTrigger.trigger(null);
}
});
KernelEvents.instance.onDiskEject.handle((addr)->{
if (addr == this.addr){
this.onDiskEjectTrigger.trigger(null);
}
});
}
public function getAddr():String {
return this.addr;
}
public inline function isDiskPresent(): Bool {
return this.native.isDiskPresent();
}
/**
The label of the disk, or `null` if either no disk is inserted or the disk doesn't have a label.
**/
public inline function getDiskLabel(): Null<String> {
return this.native.getDiskLabel();
}
public inline function clearDiskLabel() {
this.native.setDiskLabel();
}
public inline function setDiskLabel(label: String): Null<Error> {
try {
this.native.setDiskLabel(label);
return null;
} catch (e: Dynamic) {
return new Error("Invalid label");
}
}
public inline function hasData():Bool {
return this.native.hasData();
}
public inline function hasAudio():Bool {
return this.native.hasAudio();
}
public inline function getMountPath():Null<String> {
return this.getMountPath();
}
public inline function getAudioTitle(): Null<String> {
return this.native.getAudioTitle();
}
public inline function playAudio() {
this.native.playAudio();
}
public inline function stopAudio() {
this.native.stopAudio();
}
public inline function ejectDisk() {
this.native.ejectDisk();
}
public inline function getDiskID(): Int {
return this.native.getDiskID();
}
}