mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
Previously, the LibWeb bindings generator would output multiple per interface files like Prototype/Constructor/Namespace/GlobalMixin depending on the contents of that IDL file. This complicates the build system as it means that it does not know what files will be generated without knowledge of the contents of that IDL file. Instead, for each IDL file only generate a single Bindings/<IDLFile>.h and Bindings/<IDLFile>.cpp.
133 lines
4.4 KiB
C++
133 lines
4.4 KiB
C++
/*
|
|
* Copyright (c) 2025, Edwin Hoksberg <mail@edwinhoksberg.nl>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/Bindings/SerialPort.h>
|
|
#include <LibWeb/DOM/EventTarget.h>
|
|
#include <LibWeb/Streams/ReadableStream.h>
|
|
#include <LibWeb/Streams/WritableStream.h>
|
|
#include <LibWeb/WebIDL/Types.h>
|
|
|
|
namespace Web::Serial {
|
|
|
|
// https://wicg.github.io/serial/#serialoptions-dictionary
|
|
struct SerialOptions {
|
|
Optional<WebIDL::UnsignedLong> baud_rate = {};
|
|
Optional<WebIDL::Octet> data_bits = 8;
|
|
Optional<WebIDL::Octet> stop_bits = 1;
|
|
Optional<Bindings::ParityType> parity = Bindings::ParityType::None;
|
|
Optional<WebIDL::UnsignedLong> buffer_size = 255;
|
|
Optional<Bindings::FlowControlType> flow_control = Bindings::FlowControlType::None;
|
|
};
|
|
|
|
// https://wicg.github.io/serial/#serialoutputsignals-dictionary
|
|
struct SerialOutputSignals {
|
|
Optional<WebIDL::Boolean> data_terminal_ready;
|
|
Optional<WebIDL::Boolean> request_to_send;
|
|
Optional<WebIDL::Boolean> break_;
|
|
};
|
|
|
|
// https://wicg.github.io/serial/#serialinputsignals-dictionary
|
|
struct SerialInputSignals {
|
|
WebIDL::Boolean data_carrier_detect;
|
|
WebIDL::Boolean clear_to_send;
|
|
WebIDL::Boolean ring_indicator;
|
|
WebIDL::Boolean data_set_ready;
|
|
};
|
|
|
|
// https://wicg.github.io/serial/#serialportinfo-dictionary
|
|
struct SerialPortInfo {
|
|
Optional<WebIDL::UnsignedShort> usb_vendor_id;
|
|
Optional<WebIDL::UnsignedShort> usb_product_id;
|
|
Optional<String> bluetooth_service_class_id;
|
|
};
|
|
|
|
enum SerialPortState : u8 {
|
|
Closed,
|
|
Opening,
|
|
Opened,
|
|
Closing,
|
|
Forgetting,
|
|
Forgotten,
|
|
};
|
|
|
|
// https://wicg.github.io/serial/#serialport-interface
|
|
class SerialPort : public DOM::EventTarget {
|
|
WEB_PLATFORM_OBJECT(SerialPort, DOM::EventTarget);
|
|
GC_DECLARE_ALLOCATOR(SerialPort);
|
|
|
|
// https://wicg.github.io/serial/#getinfo-method
|
|
SerialPortInfo get_info() const;
|
|
// https://wicg.github.io/serial/#open-method
|
|
GC::Ref<WebIDL::Promise> open(SerialOptions);
|
|
// https://wicg.github.io/serial/#setsignals-method
|
|
GC::Ref<WebIDL::Promise> set_signals(SerialOutputSignals = {});
|
|
// https://wicg.github.io/serial/#getsignals-method
|
|
GC::Ref<WebIDL::Promise> get_signals() const;
|
|
// https://wicg.github.io/serial/#close-method
|
|
GC::Ref<WebIDL::Promise> close();
|
|
// https://wicg.github.io/serial/#forget-method
|
|
GC::Ref<WebIDL::Promise> forget();
|
|
|
|
// https://wicg.github.io/serial/#connected-attribute
|
|
bool connected() const { return m_connected; }
|
|
// https://wicg.github.io/serial/#readable-attribute
|
|
GC::Ref<Streams::ReadableStream> readable() { return *m_readable; }
|
|
// https://wicg.github.io/serial/#writable-attribute
|
|
GC::Ref<Streams::WritableStream> writable() { return *m_writable; }
|
|
|
|
// https://wicg.github.io/serial/#onconnect-attribute-0
|
|
void set_onconnect(WebIDL::CallbackType*);
|
|
WebIDL::CallbackType* onconnect();
|
|
|
|
// https://wicg.github.io/serial/#ondisconnect-attribute-0
|
|
void set_ondisconnect(WebIDL::CallbackType*);
|
|
WebIDL::CallbackType* ondisconnect();
|
|
|
|
protected:
|
|
virtual void visit_edges(Cell::Visitor&) override;
|
|
|
|
private:
|
|
explicit SerialPort(JS::Realm&);
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
|
|
|
// https://wicg.github.io/serial/#dfn-state
|
|
// Tracks the active state of the SerialPort
|
|
SerialPortState m_state { SerialPortState::Closed };
|
|
|
|
// https://wicg.github.io/serial/#dfn-buffersize
|
|
// The amount of data to buffer for transmit and receive
|
|
unsigned long m_buffer_size = {};
|
|
|
|
// https://wicg.github.io/serial/#dfn-connected
|
|
// A flag indicating the logical connection state of serial port
|
|
bool m_connected { false };
|
|
|
|
// https://wicg.github.io/serial/#dfn-readable
|
|
// A ReadableStream that receives data from the port
|
|
GC::Ptr<Streams::ReadableStream> m_readable = {};
|
|
|
|
// https://wicg.github.io/serial/#dfn-readfatal
|
|
// A flag indicating that the port has encountered a fatal read error
|
|
bool m_read_fatal { false };
|
|
|
|
// https://wicg.github.io/serial/#dfn-writable
|
|
// A WritableStream that transmits data to the port
|
|
GC::Ptr<Streams::WritableStream> m_writable = {};
|
|
|
|
// https://wicg.github.io/serial/#dfn-writefatal
|
|
// A flag indicating that the port has encountered a fatal write error
|
|
bool m_write_fatal { false };
|
|
|
|
// https://wicg.github.io/serial/#dfn-pendingclosepromise
|
|
// A Promise used to wait for readable and writable to close
|
|
GC::Ptr<WebIDL::Promise> m_pending_close_promise = {};
|
|
};
|
|
|
|
}
|