68 lines
2.0 KiB
C
68 lines
2.0 KiB
C
|
/*
|
||
|
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*
|
||
|
* Change Logs:
|
||
|
* Date Author Notes
|
||
|
* 2023-11-13 Shell init ver.
|
||
|
*/
|
||
|
#ifndef __LWP_TTY_INTERNAL_H__
|
||
|
#define __LWP_TTY_INTERNAL_H__
|
||
|
|
||
|
#include "lwp.h"
|
||
|
#include "terminal.h"
|
||
|
|
||
|
extern struct cdevsw bsd_ttydev_methods;
|
||
|
|
||
|
extern struct bsd_fileops bsd_ptsdev_methods;
|
||
|
|
||
|
/* bsd devsw porting */
|
||
|
void bsd_devsw_init(struct lwp_ttydevsw *tsw);
|
||
|
|
||
|
/**
|
||
|
* Do not assert RTS or DTR automatically. If CNO_RTSDTR is set then the RTS and
|
||
|
* DTR lines will not be asserted when the device is opened. As a result, this
|
||
|
* flag is only useful on initial-state devices.
|
||
|
*
|
||
|
* Note: this feature is not using on smart system, so this flag is always 0.
|
||
|
*/
|
||
|
#define CNO_RTSDTR 0
|
||
|
|
||
|
/* Waking up readers/writers. */
|
||
|
int tty_wait(struct lwp_tty *tp, struct rt_condvar *cv);
|
||
|
int tty_wait_background(struct lwp_tty *tp, struct rt_thread *td, int sig);
|
||
|
int tty_timedwait(struct lwp_tty *tp, struct rt_condvar *cv, rt_tick_t timeout);
|
||
|
void tty_wakeup(struct lwp_tty *tp, int flags);
|
||
|
|
||
|
void tty_info(struct lwp_tty *tp);
|
||
|
|
||
|
void pts_set_lock(lwp_tty_t pts, rt_bool_t is_lock);
|
||
|
rt_bool_t pts_is_locked(lwp_tty_t pts);
|
||
|
int pts_get_pktmode(lwp_tty_t pts);
|
||
|
int pts_alloc(int fflags, struct rt_thread *td, struct dfs_file *ptm_file);
|
||
|
|
||
|
int lwp_tty_ioctl_adapter(lwp_tty_t tp, int cmd, int oflags, void *args, rt_thread_t td);
|
||
|
|
||
|
int lwp_tty_set_ctrl_proc(lwp_tty_t tp, rt_thread_t td);
|
||
|
int lwp_tty_assign_foreground(lwp_tty_t tp, rt_thread_t td, int pgid);
|
||
|
int lwp_tty_bg_stop(struct lwp_tty *tp, struct rt_condvar *cv);
|
||
|
|
||
|
rt_inline rt_bool_t is_sess_leader(rt_lwp_t p)
|
||
|
{
|
||
|
/**
|
||
|
* Note: a pgrp leader is never lose its group, so once it's
|
||
|
* true then it's always true
|
||
|
*/
|
||
|
return p->pid == p->sid;
|
||
|
}
|
||
|
|
||
|
rt_inline int tty_is_ctty(struct lwp_tty *tp, struct rt_lwp *p)
|
||
|
{
|
||
|
tty_assert_locked(tp);
|
||
|
|
||
|
return p->pgrp->session == tp->t_session && p->term_ctrlterm;
|
||
|
}
|
||
|
|
||
|
#endif /* __LWP_TTY_INTERNAL_H__ */
|