亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩成人av影视| 夜夜夜精品看看| 一个色在线综合| 国产一区二区三区国产| 欧美亚洲丝袜传媒另类| 亚洲精品一区二区三区香蕉| 一区二区在线免费观看| 国产不卡视频在线观看| 欧美一级艳片视频免费观看| 国产精品视频一区二区三区不卡| 视频一区二区国产| 91成人免费在线| 国产精品沙发午睡系列990531| 日韩国产成人精品| 色综合天天天天做夜夜夜夜做| 久久久一区二区三区| 图片区小说区国产精品视频| 91同城在线观看| 国产精品嫩草99a| 国产成人无遮挡在线视频| 亚洲精品一区二区三区香蕉| 日本亚洲电影天堂| 91麻豆精品国产91久久久久| 亚洲综合另类小说| 在线观看国产91| 亚洲精品免费一二三区| 成人福利在线看| 亚洲国产精华液网站w| 国产伦精品一区二区三区免费| 91精品国产91久久综合桃花| 天天综合日日夜夜精品| 欧美色视频在线观看| 亚洲1区2区3区视频| 在线观看视频一区| 亚洲一区二区影院| 欧美群妇大交群中文字幕| 亚洲第一福利视频在线| 制服.丝袜.亚洲.中文.综合| 视频在线观看91| 精品国产在天天线2019| 国产成人免费视频 | 国产老女人精品毛片久久| 日韩色视频在线观看| 蜜臀av一级做a爰片久久| 2020日本不卡一区二区视频| 国产一区二区视频在线播放| 国产日韩综合av| 99久久99久久综合| 亚洲曰韩产成在线| 国产精品久久久久久久久免费相片 | 亚洲在线免费播放| 欧美美女网站色| 紧缚奴在线一区二区三区| 久久久影视传媒| 91亚洲精品乱码久久久久久蜜桃| 亚洲一区电影777| 欧美成人艳星乳罩| 成人精品一区二区三区中文字幕| 亚洲精品国产一区二区三区四区在线 | 秋霞电影网一区二区| 久久影音资源网| 99在线精品一区二区三区| 亚洲精品国产品国语在线app| 欧美日韩免费观看一区三区| 精品一区二区三区香蕉蜜桃 | 91麻豆精品视频| 香蕉成人啪国产精品视频综合网| 久久国产精品99久久人人澡| 欧美亚洲国产一区二区三区va| 中文字幕一区在线观看视频| 欧美午夜精品一区二区蜜桃| 久久99精品网久久| 亚洲精品国产无天堂网2021| 欧美成人a在线| 在线视频国内一区二区| 极品少妇一区二区三区精品视频 | 久久精品国产精品亚洲红杏| 中文一区一区三区高中清不卡| 欧美吞精做爰啪啪高潮| 9191久久久久久久久久久| 国产一区 二区| 亚洲精品你懂的| 国产欧美久久久精品影院| 欧美日韩美女一区二区| 丁香另类激情小说| 久久精品国产精品亚洲精品| 亚洲韩国精品一区| 亚洲日本va午夜在线电影| 久久综合色婷婷| 欧美日韩色综合| 99精品久久只有精品| 国产久卡久卡久卡久卡视频精品| 亚洲妇熟xx妇色黄| 一区二区三区在线观看国产| 久久精品免视看| 亚洲精品一区二区三区在线观看| 一本久久a久久精品亚洲| 国产精品一区三区| 看电视剧不卡顿的网站| 亚洲欧洲精品一区二区三区| 久久精品这里都是精品| 久久久影视传媒| 日韩一区二区精品葵司在线| 欧美日韩精品一区二区三区| 91欧美一区二区| 国产一区二区0| 久久丁香综合五月国产三级网站| 日韩精品欧美精品| 丝袜美腿亚洲色图| 亚洲444eee在线观看| 亚洲综合清纯丝袜自拍| 玉足女爽爽91| 亚洲综合在线视频| 国产视频不卡一区| 成人国产一区二区三区精品| 狠狠色丁香婷婷综合| 国产一区二区三区免费看| 久久99热狠狠色一区二区| 日韩高清不卡一区二区| 日本亚洲电影天堂| 99在线精品视频| 91影院在线免费观看| 成人av在线一区二区三区| av一二三不卡影片| 一本一道久久a久久精品| 色av成人天堂桃色av| 色乱码一区二区三区88| 欧美亚洲图片小说| 777xxx欧美| 久久久精品欧美丰满| 久久精品视频在线免费观看| 国产精品久久久久久久浪潮网站| 亚洲人妖av一区二区| 亚洲午夜免费电影| 美女性感视频久久| 成人黄色在线看| 色综合天天综合网天天看片| 欧美日韩mp4| 精品理论电影在线观看 | 看电影不卡的网站| 国产成人啪午夜精品网站男同| av男人天堂一区| 欧美日韩黄色影视| 久久天堂av综合合色蜜桃网| 亚洲天堂网中文字| 日韩精品久久久久久| 国产成人在线免费观看| 色综合色综合色综合| 日韩精品最新网址| 亚洲人成网站在线| 精品一区二区三区免费| 91偷拍与自偷拍精品| 色综合 综合色| 欧美大片一区二区| 国产精品美女久久久久久| www.视频一区| 在线视频你懂得一区| 久久久久久久综合日本| 亚洲精品国产一区二区精华液| 日韩不卡一区二区三区| 91亚洲国产成人精品一区二区三| 久久精品免费在线观看| 久久影院视频免费| 免费观看一级特黄欧美大片| 色综合中文综合网| 日本伊人色综合网| 久久精品国产精品亚洲精品| 99re热视频这里只精品| 欧美一区二区三区喷汁尤物| 国产精品久久久久毛片软件| 日韩高清一区二区| 91在线国产福利| 久久久久久毛片| 蜜臀a∨国产成人精品| 欧美在线一区二区| 亚洲欧洲国产日本综合| 国产麻豆9l精品三级站| 91精品国产福利在线观看 | 国产精品久久久久久亚洲毛片| 日韩av网站在线观看| 欧美在线观看视频一区二区三区| 欧美国产成人精品| 国产精品99久久久久久久vr| 欧美一区二区三区视频在线| 午夜影视日本亚洲欧洲精品| 色先锋资源久久综合| 中文无字幕一区二区三区| 免费成人美女在线观看.| 欧美日韩国产综合一区二区| 亚洲激情中文1区| 99re在线视频这里只有精品| 中文字幕欧美区| 国产99久久久久| 国产欧美一区二区精品忘忧草| 免费的国产精品| 精品裸体舞一区二区三区| 另类小说综合欧美亚洲| 日韩精品一区二区三区四区| 久久精品国产一区二区| 欧美一区二区日韩|