lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]




On Thu, Oct 17, 2019 at 12:00 PM Russell Haley <russ.haley@gmail.com> wrote:
Hi,

My project is a serial port console written in C# that uses an embedded Lua interpreter via NLua. I have a lua script to send a binary messages out the serial port. I am using string.pack to create the message. My lua script:

local bytes = {0x5AA5}
local cable_info_msg = ""

for i,v in pairs(bytes) do
    print (v)
    print(string.format("%x",tonumber(v)))
    cable_info_msg = cable_info_msg .. string.pack("<h", v)
    num =  string.unpack("<h",cable_info_msg)
    if not num then print ('nil')
    else
        print(cable_info_msg)
        print(num)
        print(string.format("%x",num))    
    end
end
--A C# function...
WriteRemote(cable_info_msg, false)

-------------------------------------------------------------------
My console output from the script seems to be consistent with what I expect: 

-- Input
23205
5aa5
-- Output
ÑZ
23205
5aa5
---------------------------------------------------------------------
My C# WriteRemote is simple: 
        public void WriteRemote(string data, bool appendLineEnding = true)
        {
            if(_logging)
            {
                _scriptLog.WriteLine(data);
            }
            data = "" ? data + _lineEnding : data;
            byte[] bytes = Encoding.UTF8.GetBytes(data);
            src.Write(bytes,0,bytes.Length);
        }
And the Lua/C# bindings are simple too:

        private Lua NewEnv()
        {
            Lua env = new Lua();
            env["WriteConsole"] = new Action<string>(WriteConsole);
            env["ReadConsole"] = new Func<string>(ReadConsole);
            env["WriteRemote"] = new Action<string,bool>(WriteRemote);
...                
            return env;
        }

When I look at the final bytes I am about to send on the C# debugger, the value seems to have been mangled (truncated?) to 0x3F5A. That value is also what I get on the other end of the serial port but I was expecting 0xA55A.

At this point I have two candidates for the cause:
- I'm an idiot and this is perfectly explainable behaviour (most probable)
- Something bad is happening in the translation between Lua and C#
-?

Does anyone have a Lua explanation why I would be getting different values sent out the port than what I am expecting? I'd like to rule that out before I start investigating NLua.

All input welcome. Thanks,

Russ

Sorry, the source code for the project is here: https://github.com/RussellHaley/NLuaSerialConsole

Russ