From: SourceForge.net <no...@so...> - 2011-09-14 10:07:49
|
Bugs item #3407260, was opened at 2011-09-10 13:41 Message generated for change (Comment added) made by jbparker1 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101355&aid=3407260&group_id=1355 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: clisp Group: lisp error Status: Open Resolution: None Priority: 5 Private: No Submitted By: Brad Parker (jbparker1) Assigned to: Bruno Haible (haible) Summary: linux:tcsetattr fails - ffi problem Initial Comment: I'm using the stock clisp on ubuntu 9.1 (which is admitted, old). The linux:tcsettattr call fails with an ffi problem. sorry if this has been fixed. Welcome to GNU CLISP 2.44.1 (2008-02-23) <http://clisp.cons.org/> (let* ((descriptor (linux:open "/dev/ttyS0" ;;(device port) (logior linux:O_RDWR linux:O_NDELAY) (logior linux:S_IRUSR linux:S_IWUSR))) (attributes (get-attributes descriptor))) (linux:tcsetattr descriptor linux:TCSANOW (linux:tcgetattr descriptor))) *** - FFI::FOREIGN-CALL-OUT: Illegal foreign data type "tcflag_t" ---------------------------------------------------------------------- >Comment By: Brad Parker (jbparker1) Date: 2011-09-14 06:07 Message: Right. I see that. But you're not doing what I did. linux:txgetattr returns a structure. linix:tcsetattr takes a structure. what you did, namely: Break 1 [4]> [9]> (linux:tcsetattr 4 linux:TCSANOW (nth-value 1 (linux:tcgetattr 4))) -1 does not send a structure to linux:tcsetattr. So, it failed and returned an error (-1). I want you to try this: (linux:tcsetattr 4 linux:TCSANOW (linux:tcgetattr 4)) Which will send the entire output of tcgetattr to tcsetattr. That is what I did and that is what failed. thanks ---------------------------------------------------------------------- Comment By: Sam Steingold (sds) Date: 2011-09-14 00:20 Message: [1]> (linux:open "/dev/ttyS0" ;;(device port) (logior linux:O_RDWR linux:O_NDELAY) (logior linux:S_IRUSR linux:S_IWUSR))) 4 [2]> (linux:tcgetattr 4) -1 ; #S(LINUX:termios :C_IFLAG 0 :C_OFLAG 0 :C_CFLAG 0 :C_LFLAG 0 :C_LINE 0 :C_CC #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) :C_ISPEED 0 :C_OSPEED 0) [3]> (linux:tcsetattr 4 linux:TCSANOW -1) *** - FFI::FOREIGN-CALL-OUT: -1 cannot be converted to the foreign type #(FFI:C-STRUCT LINUX:termios NIL #(LINUX::c_iflag LINUX::c_oflag LINUX::c_cflag LINUX::c_lflag LINUX::c_line LINUX::c_cc LINUX::c_ispeed LINUX::c_ospeed) #<COMPILED-FUNCTION LINUX:make-termios> #1="tcflag_t" #1# #1# #1# #2="cc_t" #(FFI:C-ARRAY #2# 32) #3="speed_t" #3#) Break 1 [4]> [9]> (linux:tcsetattr 4 linux:TCSANOW (nth-value 1 (linux:tcgetattr 4))) -1 i.e., I do not get the 'illegal foreign data type" error. ---------------------------------------------------------------------- Comment By: Brad Parker (jbparker1) Date: 2011-09-13 20:22 Message: it's the tcsetattr that is failing; can you try this: (linux:tcsetattr descriptor linux:TCSANOW (linux:tcgetattr descriptor)) That is what is failing - it returns "*** - FFI::FOREIGN-CALL-OUT: Illegal foreign data type "tcflag_t"" ---------------------------------------------------------------------- Comment By: Sam Steingold (sds) Date: 2011-09-13 18:31 Message: I do not have the "get-attributes" function. here is what I see with the current hg head: [1]> (linux:open "/dev/ttyS0" ;;(device port) (logior linux:O_RDWR linux:O_NDELAY) (logior linux:S_IRUSR linux:S_IWUSR))) 4 [2]> (linux:tcgetattr 4) -1 ; #S(LINUX:termios :C_IFLAG 0 :C_OFLAG 0 :C_CFLAG 0 :C_LFLAG 0 :C_LINE 0 :C_CC #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) :C_ISPEED 0 :C_OSPEED 0) [3]> is this reasonable? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101355&aid=3407260&group_id=1355 |