7 #ifndef _UGCS_VSM_ANDROID_SERIAL_PROCESSOR_H_
8 #define _UGCS_VSM_ANDROID_SERIAL_PROCESSOR_H_
11 #error "This file should be included only for Android target"
15 #include <ugcs/vsm/java.h>
22 JNIEXPORT
void JNICALL
23 Java_com_ugcs_vsm_Vsm_StreamReady(JNIEnv *env, jobject _this, jint streamId);
25 JNIEXPORT
void JNICALL
26 Java_com_ugcs_vsm_Vsm_StreamClosed(JNIEnv *env, jobject _this, jint streamId);
28 JNIEXPORT
void JNICALL
29 Java_com_ugcs_vsm_Vsm_StreamWriteComplete(JNIEnv *env, jobject _this, jint streamId,
32 JNIEXPORT
void JNICALL
33 Java_com_ugcs_vsm_Vsm_StreamReadComplete(JNIEnv *env, jobject _this,
34 jint streamId, jobject buf);
57 const std::
string &name, const Mode &mode);
66 friend class Android_serial_processor;
77 Write_handler completion_handler,
82 Read_impl(
size_t max_to_read,
size_t min_to_read, Offset offset,
83 Read_handler completion_handler,
88 Close_impl(Close_handler completion_handler,
92 Complete_open(
bool succeeded)
106 template <
typename... Args>
110 return singleton.Get_instance(std::forward<Args>(args)...);
118 static std::list<std::string>
119 Enumerate_port_names();
129 Open_handler completion_handler = Make_dummy_callback<void, Stream::Ref>(),
133 friend void Java_com_ugcs_vsm_Vsm_StreamReady(
134 JNIEnv *env, jobject _this, jint streamId);
135 friend void Java_com_ugcs_vsm_Vsm_StreamClosed(
136 JNIEnv *env, jobject _this, jint streamId);
137 friend void Java_com_ugcs_vsm_Vsm_StreamWriteComplete(
138 JNIEnv *env, jobject _this, jint streamId, jboolean succeeded);
139 friend void Java_com_ugcs_vsm_Vsm_StreamReadComplete(
140 JNIEnv *env, jobject _this, jint streamId, jobject buf);
142 class Open_request:
public Request {
147 bool succeeded = false;
150 class Write_request: public Request {
158 stream(stream), buf(buf), result_ref(result_ref)
169 class Read_request:
public Request {
174 size_t max_to_read, min_to_read;
176 Io_buffer::
Ptr &buf_ref;
178 Read_request(Stream::Ref stream,
size_t max_to_read,
size_t min_to_read,
181 max_to_read(max_to_read), min_to_read(min_to_read),
182 buf_ref(buf_ref), result_ref(result_ref)
207 State state = State::INITIAL;
208 Open_request::Ptr open_req;
210 std::list<Write_request::Ptr> write_queue;
212 std::list<Read_request::Ptr> read_queue;
215 const std::string &name,
const Stream::Mode &mode,
216 Open_request::Ptr open_req);
219 Complete_open(
bool succeeded);
225 Write_done(
bool succeeded);
238 static Singleton<Android_serial_processor> singleton;
241 std::map<int, Stream_entry::Ptr> streams;
244 On_enable()
override;
247 On_disable()
override;
253 Handle_open(Stream_entry::Ptr stream);
256 Handle_open_completion(Open_request::Ptr req, Stream_entry::Ptr stream,
260 Stream_ready(
int stream_id);
263 Stream_closed(
int stream_id);
266 Find_stream(
int stream_id);
269 Handle_stream_status(
Request::Ptr req,
int stream_id,
bool succeeded);
272 Close_stream_impl(
int stream_id);
281 On_write_complete(
int stream_id,
bool succeeded);
284 Process_write_complete(
Request::Ptr req,
int stream_id,
bool succeeded);
Generic request for implementing inter-threads communications and asynchronous operations.
Definition: request_container.h:37
TValue data[size]
Values array itself.
Definition: mavlink.h:192
Callback_proxy< void, Io_stream::Ref > Open_handler
Default prototype for open operation completion handler.
Definition: android_serial_processor.h:116
Serial port I/O processor.
Operation_waiter Open(const std::string &port_name, const Stream::Mode &mode=Stream::Mode(), Open_handler completion_handler=Make_dummy_callback< void, Stream::Ref >(), Request_completion_context::Ptr comp_ctx=Request_temp_completion_context::Create())
Open serial device stream.
static Ptr Create(Args &&...args)
Create an instance.
Definition: request_temp_completion_context.h:19
Io_result
Result of I/O operation.
Definition: io_stream.h:37
std::shared_ptr< Android_serial_processor > Ptr
Pointer type.
Definition: android_serial_processor.h:42
std::weak_ptr< Stream > Weak_ptr
Pointer type.
Definition: android_serial_processor.h:48
void Complete(Status status=Status::OK, Locker locker=Locker())
Complete the request processing.
Communication mode parameters for a serial port.
Definition: serial_processor.h:34
std::shared_ptr< Request > Ptr
Pointer type.
Definition: request_container.h:38
Abstract I/O stream interface.
Definition: io_stream.h:66
std::shared_ptr< Request_worker > Ptr
Pointer type.
Definition: request_worker.h:25
std::weak_ptr< Android_serial_processor > Weak_ptr
Pointer type.
Definition: android_serial_processor.h:42
Request execution context.
Definition: request_context.h:24
Helper class for proxying callback invocation.
Definition: callback.h:699
static Ptr Get_instance(Args &&...args)
Get global or create new processor instance.
Definition: android_serial_processor.h:108
Generic I/O buffer.
Definition: io_buffer.h:33
std::shared_ptr< Read_request > Ptr
Shared pointer to read request.
Definition: io_request.h:147
Generic container for queued requests.
Definition: request_container.h:30
Definition: android_serial_processor.h:47
std::shared_ptr< Stream > Ptr
Pointer type.
Definition: android_serial_processor.h:48
std::shared_ptr< Write_request > Ptr
Shared pointer to write request.
Definition: io_request.h:111
std::shared_ptr< Request_context > Ptr
Pointer type.
Definition: request_context.h:25
std::shared_ptr< Io_buffer > Ptr
Pointer type.
Definition: io_buffer.h:34
#define DEFINE_COMMON_CLASS(__class_name,...)
Use this macro to define some common attributes for a class.
Definition: utils.h:25
Request_container::Request Request
Request type for convenient usage.
Definition: request_container.h:694
Reference_guard< Ptr > Ref
Reference type.
Definition: android_serial_processor.h:52
Reference guard objects keep references for managed objects.
Definition: reference_guard.h:31
Stream has been or is closed.
Serial ports I/O processor.
Definition: serial_processor.h:21
Class for synchronizing with request execution.
Definition: operation_waiter.h:24
Working with serial ports on Android platform.
Definition: android_serial_processor.h:41