mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-30 11:37:06 +08:00
set_baudrate (not tested)
This commit is contained in:
@@ -89,3 +89,31 @@ value c_set_dtr(value val_fd, value val_bit) {
|
|||||||
ioctl(fd, TIOCMSET, &status);
|
ioctl(fd, TIOCMSET, &status);
|
||||||
return Val_unit;
|
return Val_unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* From the gPhoto I/O library */
|
||||||
|
value c_serial_set_baudrate(value val_fd, value speed)
|
||||||
|
{
|
||||||
|
struct termios tio;
|
||||||
|
int fd = Int_val(val_fd);
|
||||||
|
|
||||||
|
if (tcgetattr(fd, &tio) < 0) {
|
||||||
|
failwith("tcgetattr");
|
||||||
|
}
|
||||||
|
tio.c_iflag = 0;
|
||||||
|
tio.c_oflag = 0;
|
||||||
|
tio.c_cflag = CS8 | CREAD | CLOCAL;
|
||||||
|
tio.c_cc[VMIN] = 1;
|
||||||
|
tio.c_cc[VTIME] = 5;
|
||||||
|
|
||||||
|
tio.c_lflag &= ~(ICANON | ISIG | ECHO | ECHONL | ECHOE | ECHOK);
|
||||||
|
|
||||||
|
int br = baudrates[Int_val(speed)];
|
||||||
|
|
||||||
|
cfsetispeed(&tio, br);
|
||||||
|
cfsetospeed(&tio, br);
|
||||||
|
if (tcsetattr(fd, TCSANOW | TCSAFLUSH, &tio) < 0) {
|
||||||
|
failwith("tcsetattr");
|
||||||
|
}
|
||||||
|
return Val_unit;
|
||||||
|
}
|
||||||
|
|||||||
@@ -77,8 +77,9 @@ let string_of_payload = fun x -> x
|
|||||||
let payload_of_string = fun x -> x
|
let payload_of_string = fun x -> x
|
||||||
|
|
||||||
|
|
||||||
external init_serial : string -> speed -> Unix.file_descr = "c_init_serial";;
|
external init_serial : string -> speed -> Unix.file_descr = "c_init_serial"
|
||||||
external set_dtr : Unix.file_descr -> bool -> unit = "c_set_dtr"
|
external set_dtr : Unix.file_descr -> bool -> unit = "c_set_dtr"
|
||||||
|
external set_speed : Unix.file_descr -> speed -> unit = "c_serial_set_baudrate"
|
||||||
|
|
||||||
let opendev device speed =
|
let opendev device speed =
|
||||||
try
|
try
|
||||||
@@ -109,6 +110,10 @@ let input = fun f ->
|
|||||||
(* Printf.fprintf stderr "n'=%d\n" nb_used; flush stderr; *)
|
(* Printf.fprintf stderr "n'=%d\n" nb_used; flush stderr; *)
|
||||||
if nb_used > 0 then
|
if nb_used > 0 then
|
||||||
parse (start + nb_used) (n - nb_used)
|
parse (start + nb_used) (n - nb_used)
|
||||||
|
else if n = buffer_len then
|
||||||
|
(* The buffer is full and the user does not consume any. We have to
|
||||||
|
discard one char to avoid a dead lock *)
|
||||||
|
parse (start + 1) (n - 1)
|
||||||
else
|
else
|
||||||
wait start n in
|
wait start n in
|
||||||
parse 0 n)
|
parse 0 n)
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ val speed_of_baudrate : string -> speed
|
|||||||
val opendev : string -> speed -> Unix.file_descr
|
val opendev : string -> speed -> Unix.file_descr
|
||||||
val close : Unix.file_descr -> unit
|
val close : Unix.file_descr -> unit
|
||||||
val set_dtr : Unix.file_descr -> bool -> unit
|
val set_dtr : Unix.file_descr -> bool -> unit
|
||||||
|
val set_speed : Unix.file_descr -> speed -> unit
|
||||||
|
|
||||||
val input : (string -> int) -> (Unix.file_descr -> unit) closure
|
val input : (string -> int) -> (Unix.file_descr -> unit) closure
|
||||||
(** Buffered input. [input f] Returns a closure which must be called when
|
(** Buffered input. [input f] Returns a closure which must be called when
|
||||||
|
|||||||
Reference in New Issue
Block a user