亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c.cs

?? This is a Windows CE 6.0 Board Support Package for the Gumstix Verdex platform
?? CS
?? 第 1 頁 / 共 2 頁
字號:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using Gumstix;
using OpenNETCF.IO;

namespace Gumstix
{
    public class I2C : StreamInterfaceDriver
    {

        #region I2C device IOCTL codes

        private enum RW : byte
        {
            WRITE = 1,
            READ
        }

        private const Int32 FILE_DEVICE_BUS_EXTENDER = 0x0000002a;
        private const Int32 FILE_ANY_ACCESS = 0x0;
        private const Int32 METHOD_BUFFERED = 0x0;

        private const Int32 CODE_IOCTL_SET_SLAVE_MODE =     3000;  // Set I2C Bus to Slave Mode
        private const Int32 CODE_IOCTL_SET_MASTER_MODE =    3001;  // Set I2C Bus to Master Mode
        private const Int32 CODE_IOCTL_IS_MASTER =          3002;  // Is it in Master Mode?
        private const Int32 CODE_IOCTL_IS_SLAVE =           3003;  // Is it in Slave Mode?
        private const Int32 CODE_IOCTL_SET_FAST_BUS =       3004;  // Set Fast Bus Mode
        private const Int32 CODE_IOCTL_IS_FAST_BUS =        3005;  // Is it in Fast Bus Mode? 

        private const Int32 CODE_IOCTL_SET_SELF_ADDR =      3007;  // Set My Address (Slave Mode)
        private const Int32 CODE_IOCTL_GET_SELF_ADDR =      3008;  // Get My Address (Slave Mode)
        private const Int32 CODE_IOCTL_TRANSFER =           3009;  // Transfer Data
        private const Int32 CODE_IOCTL_RESET =              3010;  // Software Reset
        private const Int32 CODE_IOCTL_TRANSFER2 =          3015;  // Transfer Data type 2

        private const Int32 IOCTL_SET_SLAVE_MODE =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_SET_SLAVE_MODE) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_SET_MASTER_MODE =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_SET_MASTER_MODE) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_IS_MASTER =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_IS_MASTER) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_IS_SLAVE =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_IS_SLAVE) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_SET_FAST_BUS =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_SET_FAST_BUS) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_IS_FAST_BUS =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_IS_FAST_BUS) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_SET_SELF_ADDR =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_SET_SELF_ADDR) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_GET_SELF_ADDR =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_GET_SELF_ADDR) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_TRANSFER =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_TRANSFER) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_TRANSFER2 =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_TRANSFER2) << 2) | (METHOD_BUFFERED);

        private const Int32 IOCTL_RESET =
            ((FILE_DEVICE_BUS_EXTENDER) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_RESET) << 2) | (METHOD_BUFFERED);

        #endregion

        #region Native interface structures

        [StructLayout(LayoutKind.Sequential)]
        private struct Packet
        {
            public byte slaveAddress;   // I2C slave device address for this I2C operation
            public RW readWrite;        // Read = I2C_READ or Write = I2C_WRITE
            public IntPtr buffer;
            public UInt16 length;
            public IntPtr result;       // Contains the result of last operation

            public Packet(byte slaveAddress, RW readWrite, IntPtr data, int dataLength, IntPtr result)
            {
                this.slaveAddress = slaveAddress;
                this.readWrite = readWrite;
                this.buffer = data;
                this.length = (UInt16)dataLength;
                this.result = result;
            }
        }
        #endregion

        #region ctor / dtor
        /// <summary>
        /// Provides access to the I2C bus on the PXA270.
        /// </summary>
        public I2C() : base("I2C1:")
        {
            // open the driver
            Open(FileAccess.ReadWrite, FileShare.ReadWrite);
        }

        ~I2C()
        {
            // close the driver
            Close();
        }
        #endregion

        #region error handler
        private void BusError(Int32 result)
        {
            switch (result)
            {
                case -7:
                    throw new Exception("No Acknowledge Issued:" + Marshal.GetLastWin32Error());
                case -8:
                    throw new Exception("NULL Buffer:" + Marshal.GetLastWin32Error());
                case -9:
                    throw new Exception("Invalid Buffer Size:" + Marshal.GetLastWin32Error());
                case -10:
                    throw new Exception("NULL lpiResult field:" + Marshal.GetLastWin32Error());
                case -11:
                    throw new Exception("CRM Operation Failure:" + Marshal.GetLastWin32Error());
                case -12:
                    throw new Exception("I2C transmit timeout error:" + Marshal.GetLastWin32Error());
                case -13:
                    throw new Exception("I2C arbitration lost error:" + Marshal.GetLastWin32Error());
            }
        }

        #endregion

        #region transfer

        /// <summary>
        /// Transfer one byte of data to the I2C bus
        /// </summary>
        /// <param name="address">Slave address</param>
        /// <param name="data">Data byte</param>
        public void Write(byte address, byte data)
        {
            Int32 result = 0;
            IntPtr pResult = Marshal.AllocHGlobal(Marshal.SizeOf(result));

            int rawsize = Marshal.SizeOf(data);
            IntPtr buffer = Marshal.AllocHGlobal(rawsize);
            Marshal.StructureToPtr(data, buffer, false);

            Packet packet = new Packet(address, RW.WRITE, buffer, rawsize, pResult);

            try
            {
                this.DeviceIoControl(IOCTL_TRANSFER2, SerializeToByteArray(packet), null);
                result = (Int32)Marshal.PtrToStructure(pResult, typeof(Int32));
                if (result < 0)
                    BusError(result);
            }
            catch (Exception)
            {
                throw new Exception("Unable to complete I2C transaction:" + Marshal.GetLastWin32Error());
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
                Marshal.FreeHGlobal(pResult);
            }
        }

        /// <summary>
        /// Transfer two bytes (MSB first) to the I2C bus
        /// </summary>
        /// <param name="address">Slave address</param>
        /// <param name="data">MSB transfered first</param>
        public void Write(byte address, UInt16 data)
        {
            Int32 result = 0;
            IntPtr pResult = Marshal.AllocHGlobal(Marshal.SizeOf(result));

            int rawsize = Marshal.SizeOf(data);
            IntPtr buffer = Marshal.AllocHGlobal(rawsize);
            Marshal.StructureToPtr(data, buffer, false);

            Packet packet = new Packet(address, RW.WRITE, buffer, rawsize, pResult);

            try
            {
                this.DeviceIoControl(IOCTL_TRANSFER2, SerializeToByteArray(packet), null);
                result = (Int32)Marshal.PtrToStructure(pResult, typeof(Int32));
                if (result < 0)
                    BusError(result);
            }
            catch (Exception)
            {
                throw new Exception("Unable to complete I2C transaction:" + Marshal.GetLastWin32Error());
            }
            finally
            {
                Marshal.FreeHGlobal(buffer);
                Marshal.FreeHGlobal(pResult);
            }
        }

        /// <summary>
        /// Transfer four bytes (MSB first) to the I2C bus
        /// </summary>
        /// <param name="address">Slave address</param>
        /// <param name="data">MSB transfered first</param>
        public void Write(byte address, UInt32 data)
        {
            Int32 result = 0;
            IntPtr pResult = Marshal.AllocHGlobal(Marshal.SizeOf(result));

            int rawsize = Marshal.SizeOf(data);
            IntPtr buffer = Marshal.AllocHGlobal(rawsize);
            Marshal.StructureToPtr(data, buffer, false);

            Packet packet = new Packet(address, RW.WRITE, buffer, rawsize, pResult);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品福利久久久| 亚洲一区自拍偷拍| 国产精品一二三区| 国产精品家庭影院| 欧美日韩亚洲国产综合| 久久99精品久久只有精品| 国产精品青草综合久久久久99| 在线观看日韩av先锋影音电影院| 日本亚洲三级在线| 亚洲天堂免费在线观看视频| 欧洲精品一区二区| 粉嫩蜜臀av国产精品网站| 午夜亚洲福利老司机| 中文字幕精品三区| 日韩欧美中文字幕制服| 91视频免费看| 日韩三级精品电影久久久| 成人午夜激情在线| 乱中年女人伦av一区二区| 一区二区三区高清| 国产精品欧美久久久久一区二区| 欧美精品日韩精品| 一本色道亚洲精品aⅴ| 免费成人av在线播放| 一区二区三区欧美在线观看| 精品成人在线观看| 欧美三级电影一区| 99综合影院在线| 国产乱国产乱300精品| 艳妇臀荡乳欲伦亚洲一区| 国产精品久久久久久久裸模| 精品国产不卡一区二区三区| 欧美日韩国产综合一区二区 | 99视频在线观看一区三区| 裸体在线国模精品偷拍| 三级影片在线观看欧美日韩一区二区| 中文字幕日韩精品一区| 国产丝袜美腿一区二区三区| 欧美一区二区三区系列电影| 欧洲一区二区av| 成人高清在线视频| 国产一区二区三区久久悠悠色av| 五月天久久比比资源色| 亚洲综合一区二区三区| 中文字幕精品一区二区三区精品| 久久久天堂av| 日韩免费在线观看| 日韩无一区二区| 欧美老人xxxx18| 欧美三级中文字| 色老综合老女人久久久| 一本一道久久a久久精品综合蜜臀| 丰满放荡岳乱妇91ww| 日本中文在线一区| 人人精品人人爱| 久久精品国产在热久久| 毛片av中文字幕一区二区| 亚洲午夜视频在线| 国产色一区二区| 亚洲国产精品t66y| 中文字幕欧美激情一区| 国产精品国模大尺度视频| 久久婷婷国产综合国色天香 | 久久香蕉国产线看观看99| 精品少妇一区二区三区免费观看| 国产欧美一区二区在线观看| 亚洲精品国产无套在线观| 天天综合网天天综合色| 国精产品一区一区三区mba桃花 | 日韩一区二区在线观看视频| 久久久久久久久久久久久久久99| 国产精品久久久久国产精品日日 | 亚洲国产aⅴ成人精品无吗| 男男视频亚洲欧美| 成人av在线资源网站| 欧美精选午夜久久久乱码6080| 欧美大片一区二区| 自拍偷拍国产亚洲| 精品一区二区三区在线视频| 99久久精品99国产精品| 日韩三级.com| 尤物在线观看一区| 国产综合久久久久久鬼色 | 欧美一区二区在线视频| 欧美激情综合五月色丁香小说| 亚洲综合免费观看高清在线观看| 久久av老司机精品网站导航| 91麻豆国产自产在线观看| 精品国产一区二区三区四区四 | 日本韩国视频一区二区| 精品国产精品网麻豆系列| 亚洲精品写真福利| 国产毛片精品视频| 欧美日本精品一区二区三区| 中文字幕精品在线不卡| 美女视频黄a大片欧美| 91香蕉国产在线观看软件| 26uuu精品一区二区在线观看| 亚洲午夜久久久久中文字幕久| 国产一区二区三区久久久| 欧美妇女性影城| 日韩美女啊v在线免费观看| 激情成人午夜视频| 正在播放一区二区| 亚洲精品高清在线| 成人福利视频网站| 久久综合五月天婷婷伊人| 日韩av二区在线播放| 色婷婷亚洲综合| 国产精品美女久久久久久久网站| 美女一区二区三区| 欧美精品一级二级| 一区二区免费在线播放| av成人动漫在线观看| 欧美精品一区二区三区高清aⅴ| 亚洲国产精品一区二区尤物区| 9久草视频在线视频精品| 久久精品视频一区| 国产综合久久久久影院| 欧美mv日韩mv国产| 九色|91porny| 精品国产亚洲一区二区三区在线观看| 婷婷丁香久久五月婷婷| 欧美久久久久免费| 日韩国产欧美三级| 91精品欧美久久久久久动漫| 亚洲图片欧美一区| 欧美日韩另类一区| 亚洲国产乱码最新视频| 欧美亚洲一区二区三区四区| 亚洲黄色尤物视频| 欧美中文字幕久久| 亚洲一区二区三区在线| 欧美亚洲国产一区二区三区va| 亚洲男人的天堂在线aⅴ视频| 99re这里都是精品| 亚洲欧美色综合| 在线观看免费成人| 亚洲国产精品视频| 欧美高清精品3d| 日本三级亚洲精品| 91精品国产综合久久小美女| 奇米精品一区二区三区在线观看 | 亚洲精品欧美综合四区| 欧美综合在线视频| 日韩专区一卡二卡| 欧美成人一区二区三区在线观看| 久久国产精品免费| 欧美激情综合五月色丁香| 北岛玲一区二区三区四区| 亚洲男人的天堂在线aⅴ视频| 欧美色精品天天在线观看视频| 日韩精品五月天| 亚洲精品一区二区三区蜜桃下载 | 床上的激情91.| 亚洲三级视频在线观看| 欧美日韩国产高清一区二区| 奇米综合一区二区三区精品视频| 久久先锋影音av鲁色资源网| 99久久精品99国产精品| 亚洲国产精品一区二区www| 精品免费日韩av| 91在线小视频| 视频一区视频二区中文| 久久久久久一二三区| 99精品视频免费在线观看| 亚洲第一在线综合网站| 欧美精品一区二区三区视频 | 日韩一级二级三级精品视频| 国产一区福利在线| 亚洲少妇屁股交4| 日韩一区二区中文字幕| 成人av资源网站| 日本在线播放一区二区三区| 国产午夜精品一区二区三区视频| 色婷婷精品大在线视频| 麻豆91小视频| 亚洲欧美日韩一区二区| 日韩午夜电影av| 色94色欧美sute亚洲线路一久 | 国产·精品毛片| 日日欢夜夜爽一区| 国产精品国产三级国产普通话99| 欧美精三区欧美精三区| 99国产精品久久久久久久久久久| 无码av免费一区二区三区试看 | 欧美日韩免费在线视频| 风间由美性色一区二区三区| 天天综合网 天天综合色| 中文在线一区二区| 欧美一区二区视频在线观看2022| 成人av电影在线观看| 蜜臀久久久久久久| 最近日韩中文字幕| 精品国产乱码久久久久久图片 | 不卡av在线网| 久久国产精品无码网站| 亚洲国产精品久久久男人的天堂| 欧美极品美女视频| 精品国产91九色蝌蚪|