Apple have define an IOCTL (since Tiger) called IOSSIOSPEED which facilitates non-standard baud rates.
They publish a C example which explains it: http://developer.apple.com/library/mac/#samplecode/SerialPortSample/Introduction/Intro.html Attached is a patch for FPC's darwin RTL which adds this IOCTL. I think it's correct (i.e. it evaluates to the same value, 0x80045402, as some C I threw together using Apple's headers, see attached). I've appended this definition in termios.inc as this seems the most appropriate place for it. Jonas? Cheers, Bruce.
*** a/rtl/darwin/termios.inc Mon Aug 15 15:05:10 2011 --- b/rtl/darwin/termios.inc Mon Aug 15 15:05:10 2011 *************** *** 601,605 **** --- 601,609 ---- FIOGETOWN = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 123); FIODTYPE = (IOC_OUT or (sizeof(cint) and IOCPARM_MASK) << 16) or ((ord('f') << 8) or 122); + // from /System/Library/Frameworks/IOKit.framework/Versions/A/Headers/serial/ioss.h + + FIOSSIOSPEED = (IOC_IN or (sizeof(culong) and IOCPARM_MASK) << 16) or ((ord('T') << 8) or 2); + {$endif}
#include <stdio.h> #define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */ #define IOC_IN (unsigned long)0x80000000 #define _IOC(inout,group,num,len) \ (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num)) #define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t)) #define IOSSIOSPEED _IOW('T', 2, speed_t) typedef unsigned long speed_t; int main() { printf("IOSSIOSPEED = 0x%x\n",IOSSIOSPEED); return 0; }
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal