Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FeatureRequest]: Meta Gcode int to ascii function #1078

Open
AndyEveritt opened this issue Feb 6, 2025 · 0 comments
Open

[FeatureRequest]: Meta Gcode int to ascii function #1078

AndyEveritt opened this issue Feb 6, 2025 · 0 comments
Assignees
Labels
enhancement Additional functionality, performance or other feature request

Comments

@AndyEveritt
Copy link
Collaborator

Is your feature request related to a problem? Please describe.

Being able to convert an array of ints into the corresponding ascii string would be useful when interacting with devices that respond in ascii over UART

The opposite to convert a string to an array of ints may also be useful.

Describe the solution you propose.

A new meta gcode function

var str = str({0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21})
echo var.str ; Hello World!
var arr = int("Hello World!")
echo var.arr ; {0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57, 0x6F, 0x72, 0x6C, 0x64, 0x21}

Describe alternatives you've considered

Currently I have a macro to do this conversion but it is slow to iterate it over a long array.

var int = param.V

var searchArr = null;
var asciiArr = null;
var searchOffset = null;

if (var.int < 0x10)
    set var.searchArr = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}
    set var.asciiArr = {"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "\n", "VT", "FF", "CR", "SO", "SI"}
    set var.searchOffset = 0
elif (var.int < 0x20)
    set var.searchArr = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F}
    set var.asciiArr = {"DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US"}
    set var.searchOffset = 0x10
elif (var.int < 0x30)
    set var.searchArr = {0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F}
    set var.asciiArr = {" ", "!", """", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/"}
    set var.searchOffset = 0x20
elif (var.int < 0x40)
    set var.searchArr = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F}
    set var.asciiArr = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?"}
    set var.searchOffset = 0x30
elif (var.int < 0x50)
    set var.searchArr = {0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F}
    set var.asciiArr = {"@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O"}
    set var.searchOffset = 0x40
elif (var.int < 0x60)
    set var.searchArr = {0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F}
    set var.asciiArr = {"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_"}
    set var.searchOffset = 0x50
elif (var.int < 0x70)
    set var.searchArr = {0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F}
    set var.asciiArr = {"`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o"}
    set var.searchOffset = 0x60
elif (var.int < 0x80)
    set var.searchArr = {0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F}
    set var.asciiArr = {"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "DEL"}
    set var.searchOffset = 0x70
else
    echo "Error: Invalid input"
    M99

var index = floor(var.int - var.searchOffset)

if (exists(param.D))
    echo "int:", var.int
    echo "searchArr:", var.searchArr
    echo "searchOffset:", var.searchOffset
    echo "asciiArr:", var.asciiArr
    echo "index:", var.index
    echo var.searchArr[var.index]
    echo var.asciiArr[var.index]

set global.ret = var.asciiArr[var.index]

Provide any additional context or information.

@AndyEveritt AndyEveritt added the enhancement Additional functionality, performance or other feature request label Feb 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Additional functionality, performance or other feature request
Projects
None yet
Development

No branches or pull requests

2 participants