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

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

?? unsafeaudiostix.cs

?? This is a Windows CE 6.0 Board Support Package for the Gumstix Verdex platform
?? CS
字號:
// Copyright (c) 2006 David Vescovi.  All rights reserved.
// Part of Project DrumStix
// Windows Embedded Developers Interest Group (WE-DIG) community project.
// http://www.we-dig.org

#region Using directives

using System;
using System.IO;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Gumstix;
using OpenNETCF.IO;
#endregion

namespace Gumstix.IO
{
    /// <summary>
    /// managed wrapper for accessing the AudioStix features
    /// and functions.
    /// </summary>
    unsafe public class AudioStix : StreamInterfaceDriver
    {
        [Flags]
        public enum GPIO : ushort
        {
            GPIO_0 = 0x0001,
            GPIO_1 = 0x0002,
            GPIO_2 = 0x0004,
            GPIO_3 = 0x0008,
            GPIO_4 = 0x0010,
            GPIO_5 = 0x0020,
            GPIO_6 = 0x0040,
            GPIO_7 = 0x0080,
            GPIO_8 = 0x0100,
            GPIO_9 = 0x0200
        }

        public enum InOut
        {
            Input,
            Output
        }




        #region Wave device IOCTL codes
        private const Int32 CODE_IOCTL_WAV_MESSAGE = 3;

        // read/write AC97 messages
        private const Int32 WPDM_PRIVATE_WRITE_AC97 = 0x0000040A;
        private const Int32 WPDM_PRIVATE_READ_AC97  = 0x0000040B;

//        private const Int32 FILE_DEVICE_SOUND = 0x00000022;
        private const Int32 FILE_DEVICE_SOUND = 0x0000001d;
        private const Int32 FILE_ANY_ACCESS = 0x0;
        private const Int32 METHOD_BUFFERED = 0x0;

        private static byte[] inbuffer = new byte[20];
        private static byte[] outbuffer = new byte[4];

        private const Int32 IOCTL_WAV_MESSAGE =
            ((FILE_DEVICE_SOUND) << 16) | ((FILE_ANY_ACCESS) << 14)
            | ((CODE_IOCTL_WAV_MESSAGE) << 2) | (METHOD_BUFFERED);

        /// <summary>
        /// UCB1400 register offsets
        /// </summary>
        private const Int32 IODATAREGISTER      = 0x5A;
        private const Int32 IODIRECTIONREGISTER = 0x5C;

        #endregion

        #region Native interface structures

        [StructLayout(LayoutKind.Sequential)]
        private struct WaveParameters
        {
            public Int32 DeviceId;
            public Int32 Message;
            public Int32 User;
            public Int32 Parameter1;
            public Int32 Parameter2;
        }
        [StructLayout(LayoutKind.Sequential)]
        private struct WaveParameters2
        {
            public Int32 DeviceId;
            public Int32 Message;
            public Int32 User;
            public Int32 Parameter1;
            public UInt16* Parameter2;
        }
        #endregion

        #region ctor / dtor
        /// <summary>
        /// Provides access to I/O resident on the AudioStix board.
        /// </summary>
        public AudioStix() : base("WAV1:")
        {
            // open the driver
            Open(FileAccess.ReadWrite, FileShare.ReadWrite);
        }

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

        #region UCB1400 register access
        private UInt16 GetUCB1400Register(Int32 registerOffset)
        {
            WaveParameters2 wp = new WaveParameters2();
            UInt16 data;
            byte[] outbuffer = new byte[4];
            wp.Message = WPDM_PRIVATE_READ_AC97;
            wp.Parameter1 = registerOffset;
            wp.Parameter2 = &data;
            this.DeviceIoControl(IOCTL_WAV_MESSAGE, SerializeToByteArray(wp), outbuffer);
            if (BitConverter.ToUInt32(outbuffer, 0) != 0)
            {
                throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error(), "IOControl call failed");
            }
            return (data);
        }

        
        private void SetUCB1400Register(Int32 registerOffset, UInt16 Data)
        {
            WaveParameters wp = new WaveParameters();

            byte[] outbuffer = new byte[4];
            wp.Message = WPDM_PRIVATE_WRITE_AC97;
            wp.Parameter1 = registerOffset;
            wp.Parameter2 = Convert.ToInt32(Data);

            this.DeviceIoControl(IOCTL_WAV_MESSAGE, SerializeToByteArray(wp), outbuffer);
            if (BitConverter.ToUInt32(outbuffer, 0) != 0)
            {
                throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error(), "IOControl call failed");
            }
        }
        #endregion

        #region GPIO bit manipulation
        /// <summary>
        /// Sets up the GPIO direction.
        /// </summary>
        /// <param name="gpio">
        /// The GPIO(s) enum flags
        /// </param>
        /// <param name="inout">
        /// Input/Output
        /// </param>
        public void SetGPIODirection(GPIO gpio, InOut inout)
        {
            lock (typeof(AudioStix))
            {
                switch (inout)
                {
                    case InOut.Input:
                        SetUCB1400Register(IODIRECTIONREGISTER, (UInt16)(GetUCB1400Register(IODIRECTIONREGISTER) & (UInt16)(~(UInt16)gpio)));
                        break;
                    case InOut.Output:
                        SetUCB1400Register(IODIRECTIONREGISTER, (UInt16)(GetUCB1400Register(IODIRECTIONREGISTER) | (UInt16)gpio));
                        break;
                }
            }
        }

        public UInt16 GetGPIODirection()
        {
            lock (typeof(AudioStix))
            {
                return GetUCB1400Register(IODIRECTIONREGISTER);
            }
        }

        /// <summary>
        /// Sets a GPIO output bit or bits
        /// </summary>
        /// <param name="gpio">
        /// The GPIO(s) enum flags
        /// </param>
        public void BitSet(GPIO gpio)
        {
            lock (typeof(AudioStix))
            {
                SetUCB1400Register(IODATAREGISTER, (UInt16)(GetUCB1400Register(IODATAREGISTER) | (UInt16)gpio));
            }
        }

        /// <summary>
        /// Clears a GPIO output bit or bits
        /// </summary>
        /// <param name="gpio">
        /// The GPIO(s) enum flags
        /// </param>
        public void BitClear(GPIO gpio)
        {
            lock (typeof(AudioStix))
            {
                SetUCB1400Register(IODATAREGISTER, (UInt16)(GetUCB1400Register(IODATAREGISTER) & (UInt16)(~(UInt16)gpio)));
            }
        }

        /// <summary>
        /// Test a GPIO input bit
        /// </summary>
        /// <param name="gpio">
        /// GPIO(s) to test
        /// </param>
        /// <returns>
        /// Returns true if any of the selected GPIOs is high, false if 0
        /// </returns>
        public bool BitTest(GPIO gpio)
        {
           UInt16 bits;
           lock (typeof(AudioStix))
            {
               bits = (UInt16)(GetUCB1400Register(IODATAREGISTER) & (UInt16)gpio);
            }
            return (bits != 0);
        }


        #endregion

        #region P/Invokes and helpers

        /// <summary>
        /// Byte array serializer
        /// </summary>
        /// <param name="anything"></param>
        /// <returns></returns>
        private static byte[] SerializeToByteArray(object anything)
        {
            int rawsize = Marshal.SizeOf(anything);
            IntPtr buffer = Marshal.AllocHGlobal(rawsize);
            Marshal.StructureToPtr(anything, buffer, false);
            byte[] rawdatas = new byte[rawsize];
            Marshal.Copy(buffer, rawdatas, 0, rawsize);
            Marshal.FreeHGlobal(buffer);
            return rawdatas;
        }

        /// <summary>
        /// De-serializer from byte array
        /// </summary>
        /// <param name="rawdatas"></param>
        /// <param name="anytype"></param>
        /// <returns></returns>
        private static object DeserializeFromByteArray(byte[] rawdatas, Type anytype)
        {
            int rawsize = Marshal.SizeOf(anytype);
            if (rawsize > rawdatas.Length)
                return null;
            IntPtr buffer = Marshal.AllocHGlobal(rawsize);
            Marshal.Copy(rawdatas, 0, buffer, rawsize);
            object retobj = Marshal.PtrToStructure(buffer, anytype);
            Marshal.FreeHGlobal(buffer);
            return retobj;
        }


        //[DllImport("coredll.dll", EntryPoint = "DeviceIoControl", SetLastError = true)]
        //internal static extern int DeviceIoControl(
        //    IntPtr hDevice,
        //    uint dwIoControlCode,
        //    byte[] lpInBuffer,
        //    int nInBufferSize,
        //    byte[] lpOutBuffer,
        //    int nOutBufferSize,
        //    ref int lpBytesReturned,
        //    IntPtr lpOverlapped);

        #endregion

    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆一精品一av一免费| 不卡的av在线| 亚洲男同性恋视频| 精品福利一区二区三区免费视频| 99视频热这里只有精品免费| 久久国产成人午夜av影院| 亚洲一区二区免费视频| 国产精品女上位| 精品久久久久久综合日本欧美 | 国产精品亚洲一区二区三区妖精| 亚洲精品视频一区二区| 国产偷国产偷亚洲高清人白洁| 欧美性猛片xxxx免费看久爱| 成人精品在线视频观看| 国产在线精品免费av| 日日摸夜夜添夜夜添国产精品 | 国产视频在线观看一区二区三区| 欧美一级欧美一级在线播放| 欧美最猛性xxxxx直播| 91网上在线视频| 成人av午夜电影| 国产不卡在线视频| 国产精品综合网| 国产米奇在线777精品观看| 日本午夜一本久久久综合| 亚洲综合免费观看高清完整版在线| 欧美激情一二三区| 日本一区二区三区电影| 国产欧美一区二区精品秋霞影院| 欧美r级电影在线观看| 91精品国产高清一区二区三区 | 亚洲精品va在线观看| 国产精品久久久久婷婷| 国产欧美日韩一区二区三区在线观看| 久久综合九色综合欧美就去吻| 精品毛片乱码1区2区3区| 日韩欧美国产麻豆| 精品盗摄一区二区三区| 久久综合久久99| 国产午夜亚洲精品不卡| 国产情人综合久久777777| 国产婷婷色一区二区三区在线| 久久久精品免费免费| 日本一区二区高清| 亚洲男人的天堂在线aⅴ视频| 亚洲视频在线一区观看| 樱桃国产成人精品视频| 亚洲午夜一区二区三区| 日本欧美一区二区| 激情综合一区二区三区| 国产一二精品视频| 91在线观看下载| 在线观看视频一区二区欧美日韩| 欧美性生活大片视频| 日韩一区二区视频| 国产肉丝袜一区二区| 国产精品久久久久7777按摩| 亚洲男人的天堂一区二区| 五月天婷婷综合| 激情成人综合网| 99久久99久久精品免费观看| 在线国产亚洲欧美| 日韩小视频在线观看专区| 国产偷v国产偷v亚洲高清| 一区二区在线电影| 奇米色一区二区| 成人美女视频在线观看18| 欧美色偷偷大香| 精品处破学生在线二十三| 亚洲少妇30p| 免费在线观看一区| 99精品国产热久久91蜜凸| 91精品国产欧美一区二区| 欧美激情在线观看视频免费| 亚洲韩国一区二区三区| 国产精品自拍在线| 在线观看欧美日本| 久久夜色精品一区| 亚洲精品一二三四区| 麻豆国产精品777777在线| 91亚洲精华国产精华精华液| 91精品国产麻豆国产自产在线 | 色国产精品一区在线观看| 欧美一区二区大片| 亚洲色图制服诱惑 | 免费不卡在线视频| 成人黄色a**站在线观看| 欧美视频三区在线播放| 欧美激情在线观看视频免费| 日韩vs国产vs欧美| 成人成人成人在线视频| 日韩欧美一区在线| 亚洲日本丝袜连裤袜办公室| 美女在线视频一区| 色悠悠亚洲一区二区| 2017欧美狠狠色| 亚洲成人精品影院| 97久久精品人人爽人人爽蜜臀| 2021久久国产精品不只是精品| 一区二区三区加勒比av| 丁香激情综合国产| 精品国产不卡一区二区三区| 亚洲成国产人片在线观看| 成人在线视频一区| 久久综合狠狠综合久久激情| 婷婷中文字幕一区三区| 91麻豆免费看片| 国产精品久久久久久福利一牛影视 | 久久久影视传媒| 免费xxxx性欧美18vr| 欧美日韩一区二区三区不卡| 亚洲欧美日韩中文播放 | 日韩一级二级三级| 一区二区三区四区激情| 国产成人a级片| 精品国产免费一区二区三区四区 | 久久99精品国产麻豆婷婷洗澡| 欧美在线制服丝袜| 亚洲欧美韩国综合色| 成人av在线一区二区三区| 久久精品视频一区二区三区| 国内成+人亚洲+欧美+综合在线| 欧美日韩精品欧美日韩精品一 | 欧美一区二区精美| 日本vs亚洲vs韩国一区三区二区| 欧美网站大全在线观看| 亚洲欧美日本韩国| 色偷偷一区二区三区| 亚洲免费观看高清完整版在线观看 | 国产精品久久久久久久久免费相片| 国产成人综合亚洲91猫咪| 久久亚洲综合色一区二区三区| 男男视频亚洲欧美| 精品国产一区二区在线观看| 激情综合网天天干| 精品不卡在线视频| 国产经典欧美精品| 国产精品不卡视频| 色婷婷一区二区三区四区| 亚洲一区二区欧美日韩| 欧美日本一区二区| 日本三级亚洲精品| 精品久久99ma| 丁香网亚洲国际| 亚洲欧美日韩在线不卡| 欧美无人高清视频在线观看| 香蕉成人伊视频在线观看| 88在线观看91蜜桃国自产| 免费不卡在线观看| 国产欧美一区二区在线| 99久精品国产| 丝袜亚洲另类丝袜在线| 日韩欧美国产精品一区| 国产成人av自拍| 一区二区欧美国产| 717成人午夜免费福利电影| 韩国av一区二区三区四区| 国产精品的网站| 欧美日韩中字一区| 久久99精品国产麻豆不卡| 亚洲国产精品t66y| 欧美天天综合网| 理论电影国产精品| 亚洲欧美影音先锋| 欧美日韩国产小视频在线观看| 黄网站免费久久| 一区二区三区在线视频观看58| 91精品国产综合久久蜜臀| 国产在线播精品第三| 国产精品久久久久久一区二区三区| 91蜜桃视频在线| 蜜臀国产一区二区三区在线播放 | 夜夜嗨av一区二区三区网页| 欧美日韩久久久一区| 国产99一区视频免费| 亚洲第一搞黄网站| 久久久久久免费网| 欧美三级欧美一级| 懂色av一区二区三区免费观看| 亚洲最大色网站| 欧美精品一区二区久久久| 欧美伊人久久大香线蕉综合69| 国产精品一区二区男女羞羞无遮挡| 亚洲制服丝袜av| 亚洲国产精品激情在线观看| 制服丝袜av成人在线看| 成人avav影音| 免费在线观看日韩欧美| 亚洲精品国产第一综合99久久| 久久久久一区二区三区四区| 欧美老年两性高潮| 99久免费精品视频在线观看| 麻豆91在线观看| 性做久久久久久免费观看| 国产拍欧美日韩视频二区| 7777精品伊人久久久大香线蕉经典版下载| 国产成人精品影院| 精品一区二区综合| 亚洲sss视频在线视频| 亚洲欧美自拍偷拍色图|