But I think there are a few problems with Pharo 1.3 and Cog. AFAIKT one > needs AbstractLauncher. I shamlessly stole it from Squeak. If I do > not have it and start my generated CogVM I just get an open window with > some black rectangle in the upper left. > This problem was mentioned at: > > http://code.google.com/p/pharo/issues/detail?id=4002 > >
yes. Cog doesn't load in Pharo 1.3 anymore. We will fix it. > Now what did I have to do? > I downloaded the sources from squeak-vm and Cog and there are at least > two different C files and probably a header files with the prototyps: > The two files are > sqUnixSerial.c which is in platforms/unix/plugins/SerialPlugin > SerialPlugin in src/plugins/SerialPlugin > > It seems the first is the handwritten C-code > yes, everything under /platform is the hand written part and known as "platform code" > > The first is needed to "offer" the functionality and the later is > probabl seems t be the interface to Squeak. I guess this is generated > code from some Slang code yes, and that's what is known as "VM sources", the auto generated C code from SLANG that is usually placed in /src > which looks like this: > > parityType dataBits: dataBits inFlowControlType: inFlowControl > outFlowControlType: outFlowControl xOnByte: xOnChar xOffByte: xOffChar > > | cString | > self primitive: 'primitiveSerialPortOpenByName' > parameters: #(ByteArray SmallInteger SmallInteger > SmallInteger SmallInteger SmallInteger SmallInteger SmallInteger > SmallInteger ). > self var: #cString type: 'char *'. > cString := self allocateTerminatedString: deviceName. > self cCode: 'serialPortOpenByName( > cString, baudRate, stopBitsType, parityType, > dataBits, > inFlowControl, outFlowControl, xOnChar, xOffChar)' > > which then write out the proper C code for that plugin. > > yep > You see I'm still ignorant on how this is all supposed to work. > > so do I :) > Nevertheless copying the files at the proper places in the src and > platform tree. This codes get's compiled into the VirtualMachine. > > And I can use this "machine" for accessing the serial interfaces, (it > even works for '/dev/ttyUSBx' devices. For me this is a great thing > because I'm forced to access some periperal devices via serial lines. > > I need some extra hack in the generated file (I know this is "dirty" a > missing #define was introduced. I bet there is a better place for that > but in genrated code. But well it's just an intermediate step. > > If someone here may be interested just drop me a mail and with some help > we'll be able to modify the Cog sources cleanly to use this modified > Plugin for intefacing to serial lines in Linux. > Eliot should be interested. But you didn't comment your changes. Maybe you can push them in git ? > > I'm also quite aware that the Smalltalk side of the code could need a > little attention: It looks like: > > > > nextPutAll: aStringOrByteArray > "Send the given bytes out this serial port. The port must be > open. " > ^ port isString > ifTrue: [self > primWritePortByName: port > from: aStringOrByteArray > startingAt: 1 > count: aStringOrByteArray size] > ifFalse: [self > primWritePort: port > from: aStringOrByteArray > startingAt: 1 > count: aStringOrByteArray size] > > > for this you can open a pharo issue -- Mariano http://marianopeck.wordpress.com