95 lines
2.1 KiB
Haxe
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();
|
|
}
|
|
}
|