| // Copyright 2015 The Android Open Source Project |
| // |
| // This software is licensed under the terms of the GNU General Public |
| // License version 2, as published by the Free Software Foundation, and |
| // may be copied, distributed, and modified under those terms. |
| // |
| // This program is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| // GNU General Public License for more details. |
| |
| #include "android-qemu2-glue/emulation/serial_line.h" |
| |
| #include "android-qemu2-glue/emulation/charpipe.h" |
| #include "android-qemu2-glue/emulation/CharSerialLine.h" |
| |
| using android::qemu2::CharSerialLine; |
| using android::SerialLine; |
| |
| CSerialLine* android_serialline_from_cs(CharDriverState* cs) { |
| return new CharSerialLine(cs); |
| } |
| |
| CharDriverState* android_serialline_get_cs(CSerialLine* sl) { |
| return static_cast<CharSerialLine*>(sl)->state(); |
| } |
| |
| CharDriverState* android_serialline_release_cs(CSerialLine* sl) { |
| CharSerialLine* csl = static_cast<CharSerialLine*>(sl); |
| CharDriverState* result = csl->release(); |
| delete csl; |
| return result; |
| } |
| |
| static SerialLine* qemu_serialline_buffer_open(SerialLine* sl) { |
| CharDriverState* cs = static_cast<CharSerialLine*>(sl)->state(); |
| return new CharSerialLine(qemu_chr_open_buffer(cs)); |
| } |
| |
| static bool qemu_serialline_pipe_open(SerialLine** pfirst, |
| SerialLine** psecond) { |
| CharDriverState* first_cs = NULL; |
| CharDriverState* second_cs = NULL; |
| |
| if (qemu_chr_open_charpipe(&first_cs, &second_cs)) { |
| *pfirst = NULL; |
| *psecond = NULL; |
| return false; |
| } |
| |
| *pfirst = new CharSerialLine(first_cs); |
| *psecond = new CharSerialLine(second_cs); |
| return true; |
| } |
| |
| void qemu2_android_serialline_init() { |
| static const android::SerialLine::Funcs kQemuSerialLineFuncs = { |
| .openBuffer = qemu_serialline_buffer_open, |
| .openPipe = qemu_serialline_pipe_open |
| }; |
| |
| android::SerialLine::Funcs::reset(&kQemuSerialLineFuncs); |
| } |