Re: [Pharo-project] Questions of understanding

2011-05-25 Thread Friedrich Dominicus
Mariano Martinez Peck marianop...@gmail.com writes:

 https://gitorious.org/cogvm/blessed/blobs/master/platforms/unix/plugins/
 SerialPlugin/sqUnixSerial.c
This code contains the old implementaton of the Serial Plugin not the
extensions of things like openPortByName. The Serail Plugin I'm talking
about has the following implementation on the Smalltalk Size


SerialPort.st
Description: SerialPlugin code from Serge


-- 
Q-Software Solutions GmbH; Sitz: Bruchsal; Registergericht: Mannheim 
Registriernummer: HRB232138; Geschaeftsfuehrer: Friedrich Dominicus


Re: [Pharo-project] Questions of understanding

2011-05-25 Thread Mariano Martinez Peck
I have no idea. Maybe someone in the VM mailing list can help you.

Cheers

2011/5/25 Friedrich Dominicus fr...@q-software-solutions.de

 Mariano Martinez Peck marianop...@gmail.com writes:

  https://gitorious.org/cogvm/blessed/blobs/master/platforms/unix/plugins/
  SerialPlugin/sqUnixSerial.c
 This code contains the old implementaton of the Serial Plugin not the
 extensions of things like openPortByName. The Serail Plugin I'm talking
 about has the following implementation on the Smalltalk Size



 --
 Q-Software Solutions GmbH; Sitz: Bruchsal; Registergericht: Mannheim
 Registriernummer: HRB232138; Geschaeftsfuehrer: Friedrich Dominicus




-- 
Mariano
http://marianopeck.wordpress.com


Re: [Pharo-project] Questions of understanding

2011-05-25 Thread Friedrich Dominicus
Mariano Martinez Peck marianop...@gmail.com writes:

 I have no idea. Maybe someone in the VM mailing list can help you.

Ok I  finally got the serialPort access under Cog VM and Linux
I concede it is currently a hackerish solution a combination out of
Squeak sources and Cog sources with a good mixture of Cog 

So whomever may be reponsible can get in touch with me and I'll try to
work out a stable implementation on Linux.

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

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 

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 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. 

You see I'm still ignorant on how this is all supposed to work. 

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.

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]

Which is kind of unproper IMHO

Regards
Friedrich




-- 
Q-Software Solutions GmbH; Sitz: Bruchsal; Registergericht: Mannheim 
Registriernummer: HRB232138; Geschaeftsfuehrer: Friedrich Dominicus



Re: [Pharo-project] Questions of understanding

2011-05-25 Thread Mariano Martinez Peck
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


Re: [Pharo-project] Questions of understanding

2011-05-25 Thread Igor Stasenko
On 25 May 2011 17:30, Friedrich Dominicus fr...@q-software-solutions.de wrote:
 Mariano Martinez Peck marianop...@gmail.com writes:

 I have no idea. Maybe someone in the VM mailing list can help you.

 Ok I  finally got the serialPort access under Cog VM and Linux
 I concede it is currently a hackerish solution a combination out of
 Squeak sources and Cog sources with a good mixture of Cog

 So whomever may be reponsible can get in touch with me and I'll try to
 work out a stable implementation on Linux.

 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

 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

 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 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.

 You see I'm still ignorant on how this is all supposed to work.

 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.


In order to answer this question we have to see what you did.
And for that, it would be good if you register on gitorious.org
and then clone VM sources into your own branch and then push your changes there.
Then we can analyze it and integrate into a main branch.

 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]

 Which is kind of unproper IMHO


Please, create an issue on Cog issue tracker and
place a changeset for language side changes there.
You can also use that issue entry to describe your changes and point
to the VM-side source code
which you are changed.
http://code.google.com/p/cog/issues/list
Otherwise there is a risk, that your changes and comments will be
buried under tons of other mails
and will be lost.

P.S. it is great that you were able to fix plugin  build VM with little help.
If you have questions, do not hesitate to ask. We need people who are
not afraid to get their hands dirty and to fix something in VM :)


-- 
Best regards,
Igor Stasenko AKA sig.



Re: [Pharo-project] Questions of understanding

2011-05-25 Thread David T. Lewis
On Wed, May 25, 2011 at 05:46:00PM +0200, Igor Stasenko wrote:
 
 P.S. it is great that you were able to fix plugin  build VM with little help.
 If you have questions, do not hesitate to ask. We need people who are
 not afraid to get their hands dirty and to fix something in VM :)

Yes!

Dave
 



Re: [Pharo-project] Questions of understanding

2011-05-24 Thread Friedrich Dominicus
Ok I spend my time today on building a new virtual machine. And my
assumptions in my last mail were  wrong. The code is not hand-written
but is generated. Now I  understand that. But now I see that while
building the virtual machine the stuff probabably is taken form the
PharoV10.sources file  from which it seems SerialPlugin.c is build. 

Now in PharoV10.sources there is are not the patches to use ports by
Name as needed in Linux. So now my question is. After I've build a new
virtual machine how can I  modify one of the plugins to update  them.

So the sources file contains things like openPort but not
openPortByName. So what do I have to do to get into the patches such
that the new SerialPlugin.c can be generated?

Ah yes I used the pages at
http://marianopeck.wordpress.com/2011/04/10/building-the-vm-from-scratch-using-git-and-cmakevmmaker/

for learning that

Regards
Friedrich



Re: [Pharo-project] Questions of understanding

2011-05-24 Thread Marcus Denker

On May 24, 2011, at 5:37 PM, Friedrich Dominicus wrote:

 Ok I spend my time today on building a new virtual machine. And my
 assumptions in my last mail were  wrong. The code is not hand-written
 but is generated. Now I  understand that. But now I see that while
 building the virtual machine the stuff probabably is taken form the
 PharoV10.sources file  from which it seems SerialPlugin.c is build. 
 

PharoV10.sources should not contain any VM Related sources... the VMMaker 
package
has the source for the VM.

Marcus

--
Marcus Denker  -- http://www.marcusdenker.de
INRIA Lille -- Nord Europe. Team RMoD.




Re: [Pharo-project] Questions of understanding

2011-05-24 Thread Mariano Martinez Peck
On Tue, May 24, 2011 at 5:37 PM, Friedrich Dominicus 
fr...@q-software-solutions.de wrote:

 Ok I spend my time today on building a new virtual machine. And my
 assumptions in my last mail were  wrong. The code is not hand-written
 but is generated. Now I  understand that. But now I see that while
 building the virtual machine the stuff probabably is taken form the
 PharoV10.sources file  from which it seems SerialPlugin.c is build.


Sorry, I didn't read the email until now, the subject was not very good ;)


 Now in PharoV10.sources there is are not the patches to use ports by
 Name as needed in Linux. So now my question is. After I've build a new
 virtual machine how can I  modify one of the plugins to update  them.


For the plugins, there are two parts: the VMMaker part (usually a plugin is
a subclass of InterpreterPlugin) and the C part.
Some plugins are directly included in the VMMaker package/repostitory and
some others are in different places (usually when they are not core
plugins).

The VMMaker part of SerialPlugin, is in VMMaker package, so if you followed
my instructions, when you downloaded VMMAker, you should have downloaded the
class SerialPlugin which is in the 'VMMaker-Plugins' category.

Now, if you need to modify something to the platform code, hand written C
code, then such plugins can be found in Git or in the SVN.
In git, they are in https://gitorious.org/cogvm/

For your case it should be:

https://gitorious.org/cogvm/blessed/blobs/master/platforms/unix/plugins/SerialPlugin/sqUnixSerial.c



 So the sources file contains things like openPort but not
 openPortByName. So what do I have to do to get into the patches such
 that the new SerialPlugin.c can be generated?

 Ah yes I used the pages at

 http://marianopeck.wordpress.com/2011/04/10/building-the-vm-from-scratch-using-git-and-cmakevmmaker/


now you can read:
http://marianopeck.wordpress.com/2011/04/05/first-stop-vms-scm-and-related-stuff

:)


 for learning that

 Regards
 Friedrich




-- 
Mariano
http://marianopeck.wordpress.com


Re: [Pharo-project] Questions of understanding

2011-05-24 Thread Friedrich Dominicus
 https://gitorious.org/cogvm/blessed/blobs/master/platforms/unix/plugins/
 SerialPlugin/sqUnixSerial.c

  

 So the sources file contains things like openPort but not
 openPortByName. So what do I have to do to get into the patches such
 that the new SerialPlugin.c can be generated?

 Ah yes I used the pages at
 http://marianopeck.wordpress.com/2011/04/10/
 building-the-vm-from-scratch-using-git-and-cmakevmmaker/



 now you can read: http://marianopeck.wordpress.com/2011/04/05/
 first-stop-vms-scm-and-related-stuff

 :)
  

 for learning that
Thanks  I'll  have another  look. 

Regards
Friedrich