If you have a problem or need to report a bug please email : support@dsprobotics.com
There are 3 sections to this support area:
DOWNLOADS: access to product manuals, support files and drivers
HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects
USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here
NEW REGISTRATIONS - please contact us if you wish to register on the forum
Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright
Ruby Decode Bytes from COM Port Module
19 posts
• Page 2 of 2 • 1, 2
Re: Ruby Decode Bytes from COM Port Module
Please could you give a test-byte containing some value to the respective bytes, and their relative value to be obtained?
otherwise we could not help effectively, as I have not yet understood what his bit endianess order,
it seems to me that the example that represents the byte is in little-endian,
then offer us a test-bytes in this way, for example:
80, 2F, 58, 59, 22, 0 =
cursor = the value you should get;
x_lo_hi = the value you should get;
etc. etc
so it will be easier to make a check if the routine works.
otherwise we could not help effectively, as I have not yet understood what his bit endianess order,
it seems to me that the example that represents the byte is in little-endian,
then offer us a test-bytes in this way, for example:
80, 2F, 58, 59, 22, 0 =
cursor = the value you should get;
x_lo_hi = the value you should get;
etc. etc
so it will be easier to make a check if the routine works.
- Tronic
- Posts: 539
- Joined: Wed Dec 21, 2011 12:59 pm
Re: Ruby Decode Bytes from COM Port Module
# Decoder for the CalComp DrawingBoard Digitizer
# CalComp DrawingBoard binary format #22
# byte B7 B6 B5 B4 B3 B2 B1 B0
# 0 1 C4 C3 C2 C1 C0 X15 X14
# 1 0 X13 X12 X11 X10 X9 X8 X7
# 2 0 X6 X5 X4 X3 X2 X1 X0
# 3 0 0 PROX 0 X16 Y16 Y15 Y14
# 4 0 Y13 Y12 Y11 Y10 Y9 Y8 Y7
# 5 0 Y6 Y5 Y4 Y3 Y2 Y1 Y0
is this scheme of bit correct?
# CalComp DrawingBoard binary format #22
# byte B7 B6 B5 B4 B3 B2 B1 B0
# 0 1 C4 C3 C2 C1 C0 X15 X14
# 1 0 X13 X12 X11 X10 X9 X8 X7
# 2 0 X6 X5 X4 X3 X2 X1 X0
# 3 0 0 PROX 0 X16 Y16 Y15 Y14
# 4 0 Y13 Y12 Y11 Y10 Y9 Y8 Y7
# 5 0 Y6 Y5 Y4 Y3 Y2 Y1 Y0
is this scheme of bit correct?
Last edited by Tronic on Mon Nov 23, 2015 2:01 pm, edited 1 time in total.
- Tronic
- Posts: 539
- Joined: Wed Dec 21, 2011 12:59 pm
Re: Ruby Decode Bytes from COM Port Module
Ok found some documents, is this your model?
http://www.gtcocalcomp.com/pdf/userguid ... e-5of5.pdf
http://www.gtcocalcomp.com/pdf/userguid ... e-5of5.pdf
- Tronic
- Posts: 539
- Joined: Wed Dec 21, 2011 12:59 pm
Re: Ruby Decode Bytes from COM Port Module
Hi Tronic,
Yes, the manual can be used to get the Formats for my Digitizer, I could not find my manual (found and bought another CalComp Digitizer on eBay with manual - will have it in a few days). So I used this PDF you also found, myself. I am very familiar with these Digitizers, as we used them to digitize artwork for laser shows from the early 80's to 2003, where I did R&D Engineering.
I believe the tablet is set up for "Format 23: 9500 Format #5", but as you can see a few are very similar and only vary in low / high byte pattern and resolution based on the size of the Digitizer (12" x 12" to more than 22" x 34"), and thus the high order bits may not be used, and on my Digitizer bits 16, 15, 14 for x and y are not used (I am 98% sure, the manual will tell me more). This Digitizer has a menu strip at the top, and while I can read what has been set, the "Format Mode" is a number between 1 and 9, and not the number of the Format - so that is why I need the manual.
So from the PDF you found, you can see that byte 3 is not used (proximity is not working, as it is a setup mode which I need the manual for, but merely tells the user if the cursor is not getting data from the Digitizer, i.e. out of range, etc.) And on byte 0, only the cursor info is used, and not the high order x bits. Note that C4 indicates a button has been pressed, and C3, C2, C1, & C0 indicate which of the 16 buttons (0 through F) have been pushed.
The bit mask decoding I am using seems to be working just fine, except for the the fact that when the incoming numbers are converted somewhere, sometimes they evaluate to false which causes the error when you try to perform math on a "false" and not an actual number and probably why Ruby throws and that particular error - it gets a number and everything is fine, but when a "false" enters the math messes up.
The final X and Y values are about 0 to 15239, for example the x position is on byte 1 (xhi 6 bits) and 2 (xlo 6 bits), so xlo + ( xhi * 128) is equal to the x position value, and the same for y on bytes 4 and 5. The number typically does not go up to 16384 due to mechanical limits of the internal PCB, but does meet the value of 0 to 15000 which is 1250 samples per inch over 12" (12" x 1250 = 15000) in high resolution mode.
I hope that helps you, just let me know and I will get more info to you.
Note: I tried to create the simulation array the same way the data enters the Ruby module from the Com Module... but could not capture the array of values properly. I believe that at various times the data may contain empty values, since the data streaming speed from the Digitizer can be changed, but of course the baud rate is always 9600, so data may get extra null or empty values, but I have not 100% verified this...
I have included the latest version code as well...
Thanks so much for helping me on this !
Aron
Yes, the manual can be used to get the Formats for my Digitizer, I could not find my manual (found and bought another CalComp Digitizer on eBay with manual - will have it in a few days). So I used this PDF you also found, myself. I am very familiar with these Digitizers, as we used them to digitize artwork for laser shows from the early 80's to 2003, where I did R&D Engineering.
I believe the tablet is set up for "Format 23: 9500 Format #5", but as you can see a few are very similar and only vary in low / high byte pattern and resolution based on the size of the Digitizer (12" x 12" to more than 22" x 34"), and thus the high order bits may not be used, and on my Digitizer bits 16, 15, 14 for x and y are not used (I am 98% sure, the manual will tell me more). This Digitizer has a menu strip at the top, and while I can read what has been set, the "Format Mode" is a number between 1 and 9, and not the number of the Format - so that is why I need the manual.
So from the PDF you found, you can see that byte 3 is not used (proximity is not working, as it is a setup mode which I need the manual for, but merely tells the user if the cursor is not getting data from the Digitizer, i.e. out of range, etc.) And on byte 0, only the cursor info is used, and not the high order x bits. Note that C4 indicates a button has been pressed, and C3, C2, C1, & C0 indicate which of the 16 buttons (0 through F) have been pushed.
The bit mask decoding I am using seems to be working just fine, except for the the fact that when the incoming numbers are converted somewhere, sometimes they evaluate to false which causes the error when you try to perform math on a "false" and not an actual number and probably why Ruby throws and that particular error - it gets a number and everything is fine, but when a "false" enters the math messes up.
The final X and Y values are about 0 to 15239, for example the x position is on byte 1 (xhi 6 bits) and 2 (xlo 6 bits), so xlo + ( xhi * 128) is equal to the x position value, and the same for y on bytes 4 and 5. The number typically does not go up to 16384 due to mechanical limits of the internal PCB, but does meet the value of 0 to 15000 which is 1250 samples per inch over 12" (12" x 1250 = 15000) in high resolution mode.
I hope that helps you, just let me know and I will get more info to you.
Note: I tried to create the simulation array the same way the data enters the Ruby module from the Com Module... but could not capture the array of values properly. I believe that at various times the data may contain empty values, since the data streaming speed from the Digitizer can be changed, but of course the baud rate is always 9600, so data may get extra null or empty values, but I have not 100% verified this...
I have included the latest version code as well...
Thanks so much for helping me on this !
Aron
-
aronb - Posts: 154
- Joined: Sun Apr 17, 2011 3:08 am
- Location: Florida, USA
Re: Ruby Decode Bytes from COM Port Module
i have added an check before parse the buffer,
I think now you not get any error, the block of code is processed only if the buffer has valid nByte.
I think now you not get any error, the block of code is processed only if the buffer has valid nByte.
- Attachments
-
- CalComp_v2_(Tronic).fsm
- (27.18 KiB) Downloaded 773 times
- Tronic
- Posts: 539
- Joined: Wed Dec 21, 2011 12:59 pm
Re: Ruby Decode Bytes from COM Port Module
Tronic,
I will give your version of the code a try when I get home today from work... I live on the east coast of the US so -5 GMT; I get home about 5 PM to 5:30 PM today based on traffic. I will try it as soon as I get home !
I hope my comments made sense, I am still learning Ruby - it is way different than most any other language I know
Thanks again,
Aron
I will give your version of the code a try when I get home today from work... I live on the east coast of the US so -5 GMT; I get home about 5 PM to 5:30 PM today based on traffic. I will try it as soon as I get home !
I hope my comments made sense, I am still learning Ruby - it is way different than most any other language I know
Thanks again,
Aron
-
aronb - Posts: 154
- Joined: Sun Apr 17, 2011 3:08 am
- Location: Florida, USA
Re: Ruby Decode Bytes from COM Port Module
Tronic
That was the ticket - it works perfectly now !
I am still figuring out exactly what your additional code does, but it looks like it gets the required number of samples (6 in this case) and only updates the data buffer then output when it is full... again 6 bytes. Something I played with but did not get it working as well as yours of course. It sure seems like you can do things more than one way with Ruby, and that is great but seems hard for an older programmer like me to "get" !
Thanks a lot, I learned even more Ruby code techniques on this one !!!
It is great having smart teacher to help out an "old" student like me
Aron
That was the ticket - it works perfectly now !
I am still figuring out exactly what your additional code does, but it looks like it gets the required number of samples (6 in this case) and only updates the data buffer then output when it is full... again 6 bytes. Something I played with but did not get it working as well as yours of course. It sure seems like you can do things more than one way with Ruby, and that is great but seems hard for an older programmer like me to "get" !
Thanks a lot, I learned even more Ruby code techniques on this one !!!
It is great having smart teacher to help out an "old" student like me
Aron
-
aronb - Posts: 154
- Joined: Sun Apr 17, 2011 3:08 am
- Location: Florida, USA
Re: Ruby Decode Bytes from COM Port Module
Hi aron,
this is my version of how I translated the CaclComp 9100 Format5 #23,
I hope conversions bits are not all wrong ....
All code is now commented for easy understanding,
I used other practical methods of Ruby and FS, like the hash, to brighten up your "old 8-bit" mind
like a mini tutorial for your case
Also I wonder, reading the manual
<< the higher number of bits Xn represents the MSB >>
then the resolution should be 17-bit?
however there are both versions.
Let me know if my conversion is correct, otherwise I have to study again, I will always slam my head.
this is my version of how I translated the CaclComp 9100 Format5 #23,
I hope conversions bits are not all wrong ....
All code is now commented for easy understanding,
I used other practical methods of Ruby and FS, like the hash, to brighten up your "old 8-bit" mind
like a mini tutorial for your case
Also I wonder, reading the manual
<< the higher number of bits Xn represents the MSB >>
then the resolution should be 17-bit?
however there are both versions.
Let me know if my conversion is correct, otherwise I have to study again, I will always slam my head.
- Attachments
-
- CalComp_v2_Alternative(Tronic).fsm
- (33.84 KiB) Downloaded 764 times
- Tronic
- Posts: 539
- Joined: Wed Dec 21, 2011 12:59 pm
Re: Ruby Decode Bytes from COM Port Module
Tronic,
THANK YOU VERY MUCH ! ! ! !
You essentially created another working custom Ruby (Flowstone version) lesson for me in a way I can understand because it is an application I have done before in PowerBASIC and C++ - WOW
Thank you to tulamide as well, because it got me thinking as well in a different way to solve and trouble shoot
I feel I have learned more Ruby this week than ever before and I cannot thank you all / this group / Flowstone enough - this is such an amazing program and helpful smart people too !
I'll post something again soon - need to figure out how to get data out of Flowstone... look for my post if you are interested !
Thanks Again,
Aron
THANK YOU VERY MUCH ! ! ! !
You essentially created another working custom Ruby (Flowstone version) lesson for me in a way I can understand because it is an application I have done before in PowerBASIC and C++ - WOW
Thank you to tulamide as well, because it got me thinking as well in a different way to solve and trouble shoot
I feel I have learned more Ruby this week than ever before and I cannot thank you all / this group / Flowstone enough - this is such an amazing program and helpful smart people too !
I'll post something again soon - need to figure out how to get data out of Flowstone... look for my post if you are interested !
Thanks Again,
Aron
-
aronb - Posts: 154
- Joined: Sun Apr 17, 2011 3:08 am
- Location: Florida, USA
19 posts
• Page 2 of 2 • 1, 2
Who is online
Users browsing this forum: No registered users and 63 guests