コード例 #1
0
ファイル: UsbLayerATC.cs プロジェクト: rajeper/ikarus-osd
        public USBXpress.ReturnCodes WriteRAW(int cmd, byte[] buff)
        {
            if (this.IsOpen())
            {
                byte[]                buffer      = new byte[64];
                const int             max_payload = 64 - 4; // 64 (long paquete) - 4 (long. cabecera)
                int                   nbytes      = 0;
                USBXpress.ReturnCodes ret         = USBXpress.ReturnCodes.SI_SUCCESS;

                ClearInputBuffer(handle);
                buffer[0] = (byte)'A';
                buffer[1] = (byte)'T';
                buffer[2] = (byte)'C';
                buffer[3] = (byte)cmd;

                for (int i = 0; i < max_payload && i < buff.Length; i++)
                {
                    buffer[4 + i] = buff[i];
                }

                ret = usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0);
                WaitACK_USB();

                if (ret != USBXpress.ReturnCodes.SI_SUCCESS)
                {
                    isOpen = false;
                }

                return(ret);
            }
            else
            {
                return(USBXpress.ReturnCodes.SI_WRITE_ERROR);
            }
        }
コード例 #2
0
        protected byte[] ReadRAW(int cmd, int addr)
        {
            if (this.IsOpen())
            {
                byte[] buff     = new byte[64];
                byte[] buffer   = new byte[64];
                uint   numbytes = 0;
                int    i;

                int nbytes = 0;
                USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS;

                ClearInputBuffer(handle);
                buffer[0] = (byte)'F';
                buffer[1] = (byte)'R';
                buffer[2] = (byte)'M';
                buffer[3] = (byte)cmd;
                buffer[4] = (byte)(addr & 0xff);
                buffer[5] = (byte)((addr >> 8) & 0xff);


                for (i = 4; i < 64; i++)
                {
                    buffer[i] = 0;
                }
                usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0);

                USBXpress.RXQueueStatus queueStatus = USBXpress.RXQueueStatus.SI_RX_EMPTY;
                numbytes = 0;

                for (i = 0; i < 50 && numbytes < ILEN; i++)
                {
                    usbXpress.SI_CheckRXQueue(handle, ref numbytes, ref queueStatus);
                    Thread.Sleep(20);
                }
                ret = usbXpress.SI_Read(handle, buffer, 64, ref nbytes, 0);
                for (i = 0; i < 64; i++)
                {
                    buff[i] = buffer[i];
                }

                if (ret != USBXpress.ReturnCodes.SI_SUCCESS)
                {
                    isOpen = false;
                }

                return(buff);
            }
            else
            {
                return(null);
            }
        }
コード例 #3
0
ファイル: UsbLayerATC.cs プロジェクト: rajeper/ikarus-osd
        public USBXpress.ReturnCodes Write(int cmd, int id, int offset, byte[] buff)
        {
            if (this.IsOpen())
            {
                byte[]                buffer      = new byte[64];
                const int             max_payload = 64 - 7; // 64 (long paquete) - 7 (long. cabecera)
                int                   nbytes      = 0;
                USBXpress.ReturnCodes ret         = USBXpress.ReturnCodes.SI_SUCCESS;

                for (int j = 0; j < buff.Length; j += max_payload)
                {
                    ClearInputBuffer(handle);
                    buffer[0] = (byte)'A';
                    buffer[1] = (byte)'T';
                    buffer[2] = (byte)'C';
                    buffer[3] = (byte)((int)cmd | 0x10);
                    buffer[4] = (byte)id;
                    buffer[5] = (byte)(offset + j);
                    if (buff.Length - j >= max_payload)
                    {
                        buffer[6] = (byte)max_payload;
                    }
                    else
                    {
                        buffer[6] = (byte)(buff.Length - j);
                    }
                    for (int i = 0; i < max_payload && i < (buff.Length - j); i++)
                    {
                        buffer[7 + i] = buff[i + j];
                    }

                    ret = usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0);
                    WaitACK_USB();
                }
                if (ret != USBXpress.ReturnCodes.SI_SUCCESS)
                {
                    isOpen = false;
                }

                return(ret);
            }
            else
            {
                return(USBXpress.ReturnCodes.SI_WRITE_ERROR);
            }
        }
コード例 #4
0
        protected byte[] WriteRAW(int cmd, int addr, byte[] buff)
        {
            if (this.IsOpen())
            {
                byte[]                buffer      = new byte[64];
                const int             max_payload = 32;
                int                   nbytes      = 0;
                USBXpress.ReturnCodes ret         = USBXpress.ReturnCodes.SI_SUCCESS;

                ClearInputBuffer(handle);
                buffer[0] = (byte)'F';
                buffer[1] = (byte)'R';
                buffer[2] = (byte)'M';
                buffer[3] = (byte)cmd;
                buffer[4] = (byte)(addr & 0xff);
                buffer[5] = (byte)((addr >> 8) & 0xff);

                if (buff != null)
                {
                    for (int i = 0; i < max_payload && i < buff.Length; i++)
                    {
                        buffer[6 + i] = buff[i];
                    }
                }
                ret    = usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0);
                buffer = WaitACK_USB();

                if (ret != USBXpress.ReturnCodes.SI_SUCCESS)
                {
                    isOpen = false;
                }

                return(buffer);
            }
            else
            {
                return(null);
            }
        }
コード例 #5
0
ファイル: UsbLayerATC.cs プロジェクト: rajeper/ikarus-osd
        public byte[] Read(int cmd, byte id, int offset, int len)
        {
            if (this.IsOpen())
            {
                byte[]    buff        = new byte[len];
                byte[]    buffer      = new byte[64];
                const int max_payload = 64; // 64 (long paquete)
                uint      numbytes    = 0;

                int nbytes = 0;
                USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS;

                ClearInputBuffer(handle);

                for (int j = 0; j < buff.Length; j += max_payload)
                {
                    buffer[0] = (byte)'A';
                    buffer[1] = (byte)'T';
                    buffer[2] = (byte)'C';
                    buffer[3] = (byte)cmd;
                    buffer[4] = (byte)id;
                    buffer[5] = (byte)j;
                    if (len - j > max_payload)
                    {
                        buffer[6] = (byte)max_payload;
                    }
                    else
                    {
                        buffer[6] = (byte)(len - j);
                    }
                    for (int i = 7; i < 64; i++)
                    {
                        buffer[i] = 0;
                    }
                    usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0);

                    USBXpress.RXQueueStatus queueStatus = USBXpress.RXQueueStatus.SI_RX_EMPTY;

                    numbytes = 0;
                    for (int i = 0; i < 100 && numbytes < ILEN; i++)
                    {
                        usbXpress.SI_CheckRXQueue(handle, ref numbytes, ref queueStatus);
                        Thread.Sleep(10);
                    }
                    if (numbytes >= ILEN)
                    {
                        ret = usbXpress.SI_Read(handle, buffer, 64, ref nbytes, 0);
                        for (int i = 0; i < 64 && i + j < len; i++)
                        {
                            buff[j + i] = buffer[i];
                        }
                    }
                }
                if (ret != USBXpress.ReturnCodes.SI_SUCCESS)
                {
                    isOpen = false;
                }

                return(buff);
            }
            else
            {
                return(null);
            }
        }