[Vm-dev] VM Maker: VMMaker.oscog-ul.2354.mcz

Guillermo Polito guillermopolito at gmail.com
Sun Mar 18 10:29:45 UTC 2018


Hi,

I've seen also some hiccups with that. I had students that could not use
serial port on mac to connect to arduinos and they had to default to a
linux virtual box or similar to work... :/

If there is an easy way to replace the "unimplemented" serial port by the
unix one without duplicating the code that would be already an improvement
by large and I would reaaaally be greatful. Then if there are bugs with
reading speed, fixing one would suffice to fix both :).

I can offer myself to test on osx arduinos and maybe connecting to an xbox
controller.

Tx!
Guille

On Sat, Mar 17, 2018 at 7:03 PM, Javier Diaz-Reinoso <javier_diaz_r at mac.com>
wrote:

>
> Yes that is right, you can use sqUnixSerial.c instead of the
> sqMacSerialPort.c but there are limitation about the maximum speed, I have
> a hacked version of sqUnixSerial.c using the the same way that pyserial
> use, using this file my program sqPronterface works well at 250000 bps in
> intel mac, and a maximum of  230400 bps in ppc mac:
>
>
>
>
> On 17 Mar 2018, at 03:02, Clément Bera <bera.clement at gmail.com> wrote:
>
>
>
> On Sat, Mar 17, 2018 at 1:09 AM, Levente Uzonyi <leves at caesar.elte.hu>
> wrote:
>
>>
>> Hi Eliot,
>>
>> I wonder how the Pharo builds handle those. Because these have always
>> been enabled there.
>> Also, these primitives are from the original SqueakVM branch
>> (interpreter), so there should be problems as well if the primitives are
>> missing.
>>
>> Levente
>>
>> On Fri, 16 Mar 2018, Eliot Miranda wrote:
>>
>> Hi Levente,
>>>    no need for any action on your part.  I see that the Serial Port
>>> primitives are essentially unimplemented on Mac OS so it is trivial to
>>> provide null implementations for the "ByName" ones.
>>>
>>
> Last time I talked with the people using the SerialPort plugin they said
> on Mac they use the linux plugin since the Mac plugin is not implemented,
> the linux plugin is, and the linux plugin works on all unix systems
> including Mac.
>
>
>
>>
>>> On Fri, Mar 16, 2018 at 3:46 PM, Eliot Miranda <eliot.miranda at gmail.com>
>>> wrote:
>>>       Hi Levente,
>>>     when I try and build on Mac OS X I get this:
>>>
>>>   "_serialPortOpenByName", referenced from:
>>>       _primitiveSerialPortOpenByName in SerialPlugin.lib(SerialPlugin.o)
>>>   "_serialPortReadIntoByName", referenced from:
>>>       _primitiveSerialPortReadByName in SerialPlugin.lib(SerialPlugin.o)
>>>   "_serialPortWriteFromByName", referenced from:
>>>       _primitiveSerialPortWriteByName in SerialPlugin.lib(SerialPlugin.
>>> o)
>>>
>>> The implementations are missing in both platforms/Mac
>>> OS/plugins/SerialPlugin/sqMacSerialPort.c and
>>> platforms/iOS/plugins/SerialPlugin/sqMacSerialPort.c.  They are there in
>>> platforms/unix/plugins/SerialPlugin/sqUnixSerial.c and
>>> platforms/win32/plugins/SerialPlugin/sqWin32SerialPort.c.
>>>
>>> :-(
>>>
>>>
>>> On Sat, Mar 10, 2018 at 1:58 PM, <commits at source.squeak.org> wrote:
>>>
>>>       Levente Uzonyi uploaded a new version of VMMaker to project VM
>>> Maker:
>>>       http://source.squeak.org/VMMaker/VMMaker.oscog-ul.2354.mcz
>>>
>>>       ==================== Summary ====================
>>>
>>>       Name: VMMaker.oscog-ul.2354
>>>       Author: ul
>>>       Time: 10 March 2018, 10:56:45.349653 pm
>>>       UUID: b8f3192d-2b33-4a5d-83f9-785fbefbc570
>>>       Ancestors: VMMaker.oscog-eem.2353
>>>
>>>       Restored SerialPlugin's *byName* primitives on non-PharoVM VMs.
>>>
>>>       =============== Diff against VMMaker.oscog-eem.2353
>>> ===============
>>>
>>>       Item was changed:
>>>         ----- Method: SerialPlugin>>primitiveSerialP
>>> ortOpenByName:baudRate:stopBitsType:parityType:dataBits:
>>> inFlowControlType:outFlowControlType:xOnByte:xOffByte: (in category
>>> 'primitives') -----
>>>         primitiveSerialPortOpenByName: portName baudRate: baudRate
>>> stopBitsType: stopBitsType parityType: parityType dataBits: dataBits
>>> inFlowControlType: inFlowControl outFlowControlType:
>>>       outFlowControl xOnByte: xOnChar xOffByte: xOffChar
>>>       -       <option: #PharoVM>
>>>               <var: #port type: 'char *'>
>>>
>>>               | port portNameSize |
>>>
>>>               self primitive: 'primitiveSerialPortOpenByName'
>>>                       parameters: #(String SmallInteger SmallInteger
>>> SmallInteger SmallInteger SmallInteger SmallInteger SmallInteger
>>> SmallInteger ).
>>>
>>>               portNameSize := interpreterProxy slotSizeOf: (portName
>>> asOop: String).
>>>               port := self cCode: 'calloc(portNameSize+1,
>>> sizeof(char))'.
>>>               self cCode: 'memcpy(port, portName, portNameSize)'.
>>>
>>>               self cCode: 'serialPortOpenByName(
>>>                               port, baudRate, stopBitsType, parityType,
>>> dataBits,
>>>                               inFlowControl, outFlowControl, xOnChar,
>>> xOffChar)'.
>>>
>>>               self free: port.!
>>>
>>>       Item was changed:
>>>         ----- Method: SerialPlugin>>primitiveSerialP
>>> ortReadByName:into:startingAt:count: (in category 'primitives') -----
>>>         primitiveSerialPortReadByName: portName into: array startingAt:
>>> startIndex count: count
>>>       -       <option: #PharoVM>
>>>               <var: #port type: 'char *'>
>>>
>>>               | port portNameSize bytesRead arrayPtr |
>>>
>>>               self primitive: 'primitiveSerialPortReadByName'
>>>                       parameters: #(String  ByteArray SmallInteger
>>> SmallInteger ).
>>>
>>>               interpreterProxy success: (startIndex >= 1 and:
>>> [startIndex + count - 1 <= (interpreterProxy byteSizeOf: array cPtrAsOop)]).
>>>               "adjust for zero-origin indexing"
>>>
>>>               portNameSize := interpreterProxy slotSizeOf: (portName
>>> asOop: String).
>>>               port := self cCode: 'calloc(portNameSize+1,
>>> sizeof(char))'.
>>>               self cCode: 'memcpy(port, portName, portNameSize)'.
>>>
>>>               arrayPtr := array + startIndex - 1.
>>>               bytesRead := self cCode: 'serialPortReadIntoByName( port,
>>> count, arrayPtr)'.
>>>
>>>               self free: port.
>>>
>>>               ^ bytesRead asSmallIntegerObj!
>>>
>>>       Item was changed:
>>>         ----- Method: SerialPlugin>>primitiveSerialP
>>> ortWriteByName:from:startingAt:count: (in category 'primitives') -----
>>>         primitiveSerialPortWriteByName: portName from: array
>>> startingAt: startIndex count: count
>>>       -       <option: #PharoVM>
>>>               <var: #port type: 'char *'>
>>>
>>>               | bytesWritten arrayPtr portNameSize port |
>>>
>>>               self primitive: 'primitiveSerialPortWriteByName'
>>>                       parameters: #(String ByteArray SmallInteger
>>> SmallInteger ).
>>>
>>>               portNameSize := interpreterProxy slotSizeOf: (portName
>>> asOop: String).
>>>               port := self cCode: 'calloc(portNameSize+1,
>>> sizeof(char))'.
>>>               self cCode: 'memcpy(port, portName, portNameSize)'.
>>>
>>>               interpreterProxy success: (startIndex >= 1 and:
>>> [startIndex + count - 1 <= (interpreterProxy byteSizeOf: array cPtrAsOop)]).
>>>               interpreterProxy failed
>>>                       ifFalse: [arrayPtr := array + startIndex - 1.
>>>                               bytesWritten := self cCode:
>>> 'serialPortWriteFromByName(port, count, arrayPtr)' ].
>>>
>>>               self free: port.
>>>
>>>               ^ bytesWritten asSmallIntegerObj!
>>>
>>>
>>>
>>>
>>> --
>>> _,,,^..^,,,_
>>> best, Eliot
>>>
>>>
>>>
>>>
>>> --
>>> _,,,^..^,,,_
>>> best, Eliot
>>>
>>>
>>
>
>
> --
> Clément Béra
> https://clementbera.github.io/
> https://clementbera.wordpress.com/
>
>
>
>


-- 



Guille Polito

Research Engineer

Centre de Recherche en Informatique, Signal et Automatique de Lille

CRIStAL - UMR 9189

French National Center for Scientific Research - *http://www.cnrs.fr
<http://www.cnrs.fr>*


*Web:* *http://guillep.github.io* <http://guillep.github.io>

*Phone: *+33 06 52 70 66 13
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20180318/715b22dd/attachment-0001.html>


More information about the Vm-dev mailing list