using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Urovo
{
    /// 
    /// Provides access to the urovo i60xx serial handheld terminals.
    /// 
    public class Device
    {
        /// 
        /// 802.1X authentication mode 
        /// 
        public enum AuthMode
        {
            /// 
            /// Specifies IEEE 802.11 Open System authentication mode 
            /// 
            Open,
            /// 
            /// Specifies IEEE 802.11 Shared Key authentication mode 
            /// 
            Shared,
            /// 
            /// Specifies WPA version 1 security for infrastructure mode
            /// 
            WPA,
            /// 
            /// Specifies WPA version 1 security (pre shared key) for infrastructure mode 
            /// 
            WPAPSK,
            /// 
            /// Specifies WPA version 1 security for ad hoc mode
            /// 
            WPANone,
            /// 
            /// Specifies WPA version 2 security for infrastructure mode 
            /// 
            WPA2,
            /// 
            /// Specifies WPA version 2 security (pre shared key) for infrastructure mode 
            /// 
            WPA2PSK
        }
        /// 
        /// 802.1X encryption mode 
        /// 
        public enum EncryptMode
        {
            /// 
            /// No WEP encryption 
            /// 
            Disabled,
            /// 
            /// WEP encryption enabled 
            /// 
            WEP,
            /// 
            /// TKIP encryption enabled  
            /// 
            TKIP,
            /// 
            /// AES encryption enabled 
            /// 
            AES
        }
        /// 
        /// 802.1X extensible authentication protocol type 
        /// 
        public enum EapType
        {
            /// 
            /// EAP-TLS authentication 
            /// 
            TLS,
            /// 
            /// PEAP authentication 
            /// 
            PEAP,
            /// 
            /// MD5 authentication 
            /// 
            MD5
        }
        /// 
        /// Encapsulates information for a Wireless Local Area Network (WLAN) access point
        /// 
        [StructLayout(LayoutKind.Sequential)]
        public class WlanInfo
        {
            /// 
            /// Specifies a media access control (MAC) address. Each access point has a unique MAC address that is the same as the BSSID. 
            /// 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
            public byte[] MacAddress;
            /// 
            /// The length of the Ssid member
            /// 
            public uint SsidLength;
            /// 
            /// The SSID
            /// 
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
            public byte[] Ssid;
            /// 
            /// The received signal strength indication (RSSI) in dBm
            /// 
            public int Rssi;
        }
        /// 
        /// This structure stores a list of WlanInfo structure.
        /// 
        [StructLayout(LayoutKind.Sequential)]
        public class WlanInfoList
        {
            /// 
            /// Number of items in the list of WlanInfo structures.
            /// 
            public uint count;
            /// 
            /// Point to an array of WlanInfo structures.
            /// 
            public IntPtr pWlanInfo;
        }
        /// 
        /// The type of the device information that is being requested
        /// 
        public enum DeviceInfoType : uint
        {
            /// 
            /// Determines whether a cold boot occurred. The pvParam parameter must point to a int variable that receives 0 if a cold boot occurred, or 1 if a warm boot occured.
            /// 
            BootType = 1,
        }
        /// 
        /// The triggering mode of the scanner.
        /// 
        public enum TriggerMode
        {
            /// 
            /// The laser is always on and decoding.
            /// 
            Normal = 0,
            /// 
            /// The laser is on when user press the "scan" key.
            /// 
            Continuous
        }
        /// 
        /// The type of the sms notification event.
        /// 
        public enum SmsNotifyType : byte
        {
            /// 
            /// Indicates that new message has been received
            /// 
            NewSms = 0x10,
            /// 
            /// Indicates that rssi has been received
            /// 
            Rssi = 0x11,
            /// 
            /// Indicates that the network status has changed
            /// 
            RegistrationState = 0x12
        }
        /// 
        /// This function is used to power on the gsm module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnableGsmModule();
        /// 
        /// This function is used to power off the gsm module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DisableGsmModule();
        /// 
        /// This function is used to get the power status of the gsm mudule
        /// 
        /// 1 when gsm module is power on, 0 when power off, -1 when unknown
        [DllImport("Device.dll")]
        public static extern int GetGsmPowerStatus();
        /// 
        /// This function is used to request that the gsm module return the received signal strength indication (rssi)
        /// 
        /// the rssi value. please see the remarks
        /// 
        /// 
        /// - 
        /// 0
        /// -113 dBm or less
        /// ///
- 
        /// 1
        /// -111 dBm
        /// ///
- 
        /// 2..30
        /// -109...-53 dBm
        /// ///
- 
        /// 31
        /// -51 dBm or greater
        /// ///
- 
        /// 99
        /// not known or not detectable
        /// ///
/// 
        [DllImport("Device.dll")]
        public static extern int GetGsmSignalStrength();
        /// 
        /// This function is used to power on the wlan module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnableWlanModule();
        /// 
        /// This function is used to power off the wlan module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DisableWlanModule();
        /// 
        /// This function is used to get the power status of the wlan module
        /// 
        /// 1 when wlan module is power on, 0 when power off, -1 when unknown
        [DllImport("Device.dll")]
        public static extern int GetWlanPowerStatus();
        /// 
        /// This function is used to request that the wlan driver return the received signal strength indication (RSSI).
        /// 
        /// the RSSI value in dBm. the normal values for the RSSI value are between -10 and -200
        [DllImport("Device.dll")]
        public static extern int GetWlanSignalStrength();
        /// 
        /// This function is used to power on the bluetooth module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnableBthModule();
        /// 
        /// This function is used to power off the bluetooth module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DisableBthModule();
        /// 
        /// get the power status of the Bluetooth module
        /// 
        /// 1 when bluetooth module is power on, 0 when power off, -1 when unknown
        [DllImport("Device.dll")]
        public static extern int GetBthPowerStatus();
        /// 
        /// This function is used to power on the GPS module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnableGpsModule();
        /// 
        /// This function is used to power off the GPS module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DisableGpsModule();
        /// 
        /// get the power status of the GPS module
        /// 
        /// 1 when GPS module is power on, 0 when power off, -1 when unknown
        [DllImport("Device.dll")]
        public static extern int GetGpsPowerStatus();
   
        /// 
        /// This function is used to power on the vibrate module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnableVibrateModule();
        /// 
        /// This function is used to power off the vibrate module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DisableVibrateModule();
        /// 
        /// This function is used to set the backlight value
        /// 
        /// the backlight value ,range is 1~20
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetBackLightLevel(int level);
        /// 
        /// GetBackLightLevel
        /// 
        /// Returns the backlight value. between 1-20. -1 indicates failed.
        [DllImport("Device.dll")]
        public static extern int GetBackLightLevel();
        /// 
        /// This function is used to Check that the device is connected to the gateway
        /// 
        /// true when the device has connected to the gateway, false when not connected
        /// this function does not distinguish between network type(such as gprs, wireless lan, usb)
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CheckNetworkStat();
        /// 
        /// This function is used to establishes a gprs connection
        /// 
        /// a ras phone book entry name
        /// the Zero indicates success. A nonzero error value, either from the set listed in the RAS header file or ERROR_NOT_ENOUGH_MEMORY, indicates failure.
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool ConnectGprs([MarshalAs(UnmanagedType.LPWStr)]string connName, out uint errorCode);
        /// 
        /// This function is used to check the gprs connection status
        /// 
        /// a ras phone book entry name
        /// true when active, false when disactive
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetGprsStatus([MarshalAs(UnmanagedType.LPWStr)]string connName);
        /// 
        /// This function is used to terminate the gprs connection
        /// 
        /// a ras phone book entry name
        [DllImport("Device.dll")]
        public static extern void DisConnectGprs([MarshalAs(UnmanagedType.LPWStr)]string connName);
        /// 
        /// creates a new phone-book entry for gprs
        /// 
        /// the string that contains an phone entry name
        /// the string that contains an acess point name
        /// the string that contains a telephone number 
        /// the string that contains the user's user name. This string is used to authenticate the user's access to the remote access server.
        /// the string that contains the user's password. This string is used to authenticate the user's access to the remote access server.
        /// string that contains the domain on which authentication is to occur. An empty string ("") specifies the domain in which the remote access server is a member. An asterisk specifies the domain stored in the phone book for the entry. 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool CreateGprsEntry([MarshalAs(UnmanagedType.LPWStr)]string connName, [MarshalAs(UnmanagedType.LPWStr)]string apn, [MarshalAs(UnmanagedType.LPWStr)]string phoneNumber, [MarshalAs(UnmanagedType.LPWStr)]string userName, [MarshalAs(UnmanagedType.LPWStr)]string password, [MarshalAs(UnmanagedType.LPWStr)]string domain);
        /// 
        /// This function provides detailed information for the Wireless NIC as they are cached in the driver .
        /// 
        /// the media access control (MAC) address of the access point associated with the NIC.
        /// The list of the SSIDs detected by the NIC.
        /// The list of preferred wireless zero configurations
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool QueryWlanInformation(byte[] currentMac, WlanInfoList pAvailableList, WlanInfoList pPreferredList);
        /// 
        /// This function is used to free the memory that was allocated by a call to QueryWlanInformation.
        /// 
        [DllImport("Device.dll")]
        public static extern void FreeWlanInformation();
        /// 
        /// Add a SSID to the "preferred network list"
        /// 
        /// the name of wireless network to connect
        /// 802.1x authentication mode
        /// 802.1x encryption  mode
        /// 
        /// for WEP-key, use 'key-index/key-value' format
        /// 'key-index' is WEP key index(1-4), 'key-value' is WEP key value (40-bit or 104-bit).
        /// 40-bit is either '10-digit hex numbers' (ex: "0x1234567890") or '5-char ASCII string' (ex: "zxcvb")
        /// 104-bit is either '26-digit hex numbers' (ex: "0x12345678901234567890123") or '13-char ASCII string' (ex: "abcdefghijklm")
        /// for TKIP-key, use 'key-value' format. (no key index)
        /// TKIP-key can be 8-63 char ASCII string (ex: "asdfghjk")
        /// 
        /// 802.1x EAP extension type. both AP and STA will get keys automatically after the successful EAP.
        /// indicates whether or not connecting to adhoc net
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool AddToWlanPreferredList([MarshalAs(UnmanagedType.LPWStr)]string szSSID, AuthMode authMode, EncryptMode encryptMode, [MarshalAs(UnmanagedType.LPWStr)]string szKey, EapType eapType, [MarshalAs(UnmanagedType.Bool)]bool bAdhoc);
        /// 
        /// Clear the "preferred networks list".
        /// 
        /// true indicates success, false indicates failure
        /// After a succ call, wireless card will disconnect if it was connected
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool ResetWlanPreferredList();
        /// 
        /// Forces the wireless card to reconnect "preferred networks list"
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool RefreshWlanPreferredList();
        /// 
        /// This functions is used to register power notification events.the developer can use these events to handle suspend of the device.
        /// 
        /// suspend event
        /// notification event
        /// true indicates success, false indicates failure
        /// when the device is about to go into a suspended state, the suspend event is signaled. the developer can do someing, then set the state of the notification event to signaled to allow the device suspend.
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool RegisterPowerEvent(out IntPtr hSuspendEvent, out IntPtr hNotifyEvent);
        /// 
        /// This functions is used to deregister the events that registered by a call to RegisterPowerEvent.
        /// 
        /// suspend event
        /// notification event
        [DllImport("Device.dll")]
        public static extern void UnRegisterPowerEvent(IntPtr hSuspendEvent,IntPtr hNotifyEvent);
        /// 
        /// This function is used to get the id of the device
        /// 
        /// the buffer to store the device id
        /// the buffer length in characters, must be large than 14.
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetDeviceID(StringBuilder deviceId, uint length);
        /// 
        /// This function is used to receive the value of one of the device infomations
        /// 
        /// The type of the device information that is being requested
        /// Depends on the device information being queried. For more information, see the DeviceInfoType enum
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetDeviceInfo(DeviceInfoType deviceInfoType, out int pvParam);
        /// 
        /// This function is used to set the mode of the keyboard.
        /// 
        /// 0,numpad mode; 1,lowercase mode; 2,uppercase mode
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SetKeyboardMode(uint uiMode);
        /// 
        /// This function is used to query the mode of the keyboard.
        /// 
        /// 0 when numpad mode, 1 when lowercase mode, 2 when uppercase mode
        [DllImport("Device.dll")]
        public static extern int GetKeyboardMode();
        /// 
        /// This function is used to enable the system cursor.
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool EnableCursor();
        /// 
        /// This function is used to enable the system cursor.
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool DisableCursor();
        /// 
        /// This function is used to enable the screen auto-lock.  After call this method, the screen will be locked after a specified period of time expires. ther user can poress Fn+5 to unlock the screen.
        /// 
        /// inteval time, in seconds
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool StartScreenLock(uint idleTime);   //in seconds
        /// 
        /// This function resets the timer that controls whether or not the screen will auto-lock.
        /// 
        [DllImport("Device.dll")]
        public static extern void ScreenLockTimerReset();
        /// 
        /// This function is used to enable the screen auto-lock.
        /// 
        [DllImport("Device.dll")]
        public static extern void StopScreenLock();
        /// 
        /// This function is used to check the screen status
        /// 
        /// true when locked, false when not
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool IsScreenLocked();
        /// 
        /// This function is used to power on the scanner module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_EnableModule();
        /// 
        /// This function is used to power off the scanner module
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_DisableModule();
        /// 
        /// This function is used to get the power status of the scanner module
        /// 
        /// 1 when power on, 0 when power off, -1 when unknown
        [DllImport("Device.dll")]
        public static extern int SCA_GetPowerStatus();
        /// 
        /// This function is used to register for scan notification events.
        /// 
        /// Handle to the application's message queue created with CreateMsgQueue
        /// Nonzero indicates success. Zero indicates failure
        /// Scan notification events are issued through message queues.
        /// The developer can use ReadMsgQueue to read a single message from the message queue.
        /// The first byte in each message indicates the barcode type. the second byte in each message indicates the length of the barcode.
        /// 
        [DllImport("Device.dll")]
        public static extern IntPtr SCA_RegisterNotification(IntPtr hMsgQ);
        /// 
        /// This function is used to stop receiving scan notification events. 
        /// 
        /// The handle returned from SCA_RegisterNotification
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_UnRegisterNotification(IntPtr hNotify);
        /// 
        /// This function is used to trigger the laser
        /// 
        /// true for laser on, false for laser off
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_SetTriggerState([MarshalAs(UnmanagedType.Bool)]bool state);
        /// 
        /// This function is used to set the trigger mode
        /// 
        /// the supported trigger mode are listed in the TriggerMode enumeration
        /// true indicates success, false indicates failure
        /// the setting of the triggermode will be lost when power removed.
        /// This function is only available on symbol scanner.
        /// 
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_SetTriggerMode(TriggerMode mode);
        /// 
        /// This functions is used to send commands to the scanner.
        /// 
        /// a buffer the contain the data of the commands
        /// the size of the buffer, in bytes
        /// Specifies whether or not the commands is lost when power down
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_SendParam(byte[] pParam, uint dwSize, [MarshalAs(UnmanagedType.Bool)]bool bPermanent);
        /// 
        /// This functions is used to request parameters of the scanner
        /// 
        /// a buffer the contain the parameters name 
        /// size of the pParam, in bytes
        /// a buffer that used to receive the parameter value
        /// size of the pParamVal, in bytes
        /// true indicates success, false indicates failure
        /// This function is only available on symbol scanner.
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_RequestParam(byte[] pParam, uint dwSize, byte[] pParamVal, ref uint dwValSize);
        /// 
        /// This function is used to set all parameters to their factory default settings.
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SCA_ResetScannerParams();
        /// 
        /// This function is used to open the sms function of the device
        /// 
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_Open();
        /// 
        /// This function is used to close the sms function of the device
        /// 
        [DllImport("Device.dll")]
        public static extern void SMS_Close();
        /// 
        /// This function is used to determine whether the sms function is opened.
        /// 
        /// true indicates the sms function is opened. false indicates not
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_IsOpened();
        /// 
        /// This function is used to register for sms notification events.
        /// 
        /// Handle to the application's message queue created with CreateMsgQueue
        /// Nonzero indicates success. Zero indicates failure
        /// sms notification events are issued through message queues.
        /// The developer can use ReadMsgQueue to read a single message from the message queue.
        /// The first byte in each message indicates the notify type. the second byte in each message contain the valid data.
        /// 
        [DllImport("Device.dll")]
        public static extern IntPtr SMS_RegisterNotification(IntPtr hMsgQ);
        /// 
        /// This function is used to stop receiving the sms notification events.
        /// 
        /// The handle returned from SMS_UnRegisterNotification
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_UnRegisterNotification(IntPtr hNotify);
        /// 
        /// This function is used to send a SMS message.New applications should call SMS_SendSMSEx instead of this function. 
        /// 
        /// The phone number of the recipient
        /// The phone number of the short message service senter, this param can be empty
        /// The content of the short message. it can be up to 160 characters (7 bit coded ) or 140 characters (8 bit coded) or 70 characters(unicode)
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_SendSMS([MarshalAs(UnmanagedType.LPWStr)]string szRecipient, [MarshalAs(UnmanagedType.LPWStr)]string szSmsc, [MarshalAs(UnmanagedType.LPWStr)]string szMsg);
        /// 
        /// This function is used to send a SMS message.
        /// 
        /// The phone number of the recipient
        /// The phone number of the short message service senter, this param can be empty
        /// The content of the short message. it can be up to 160 characters (7 bit coded ) or 140 characters (8 bit coded) or 70 characters(unicode)
        /// The reference number of the enhanced concatenated short message
        /// The maximum number of short messages in the enhanced concatenated short message.
        /// The sequence number of the current short message.
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_SendSMSEx([MarshalAs(UnmanagedType.LPWStr)]string szRecipient, [MarshalAs(UnmanagedType.LPWStr)]string szSmsc, [MarshalAs(UnmanagedType.LPWStr)]string szMsg, ushort wID, byte byTotalNum, byte byCurrentNum);
        /// 
        /// This function is used to Read a SMS messages from preferred store.New applications should call SMS_ReadSMSEx instead of this function. 
        /// 
        /// Integer type; value in the range of location numbers supported by the associated memory
        /// a buffer to receive the phone number of the recipient
        /// the size of the recipient buffer, in characters
        /// a buffer to receive the content of the message
        /// the size of the message content buffer, in characters
        /// a buffer to receive the time of the message
        /// the size of the time buffer, in characters
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_ReadSMS(int iIndex, StringBuilder szRecipient, uint dwRecpLen, StringBuilder szMsg, uint dwMsgLen, StringBuilder szTime, uint dwTimeLen);
        /// 
        /// This function is used to Read a SMS messages from preferred store.
        /// 
        /// Integer type; value in the range of location numbers supported by the associated memory
        /// a buffer to receive the phone number of the recipient
        /// the size of the recipient buffer, in characters
        /// a buffer to receive the content of the message
        /// the size of the message content buffer, in characters
        /// a buffer to receive the time of the message
        /// the size of the time buffer, in characters
        /// The reference number of the enhanced concatenated short message
        /// The maximum number of short messages in the enhanced concatenated short message.
        /// The sequence number of the current short message.
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_ReadSMSEx(int iIndex, StringBuilder szRecipient, uint dwRecpLen, StringBuilder szMsg, uint dwMsgLen, StringBuilder szTime, uint dwTimeLen, ref ushort pwID, ref byte pbyTotalNum, ref byte pbyCurrentNum);
  
        /// 
        /// This function is used to delete a SMS messages from preferred store.
        /// 
        /// Integer type; value in the range of location numbers supported by the associated memory
        /// true indicates success, false indicates failure
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_DeleteSMS(int iIndex);
        /// 
        /// This function is used to list SMS messages from preferred store.
        /// 
        /// true indicates success, false indicates failure
        /// sms notification events are issued through message queues.
        /// The first byte in each message indicates the notify type. the second byte in each message contain the sms index.
        /// 
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_ListSMS();
        /// 
        /// This function is used to request the rssi.
        /// 
        /// true indicates success, false indicates failure
        /// sms notification events are issued through message queues.
        /// The first byte in each message indicates the notify type. the second byte in each message contain the rssi.
        /// 
        /// - 
        /// 0
        /// -113 dBm or less
        /// ///
- 
        /// 1
        /// -111 dBm
        /// ///
- 
        /// 2..30
        /// -109...-53 dBm
        /// ///
- 
        /// 31
        /// -51 dBm or greater
        /// ///
- 
        /// 99
        /// not known or not detectable
        /// ///
/// 
        [DllImport("Device.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool SMS_GetSignalStrength();
        
        /// 
        /// This function is used to get the network registration status.
        /// 
        /// The network registration status ,please see the remarks
        /// 
        ///
        /// - 
        /// 0
        /// Not registered, device is currently not searching for new operator.
        /// ///
- 
        /// 1
        /// Registered to home network
        /// ///
- 
        /// 2
        /// Not registered, but device is currently searching for a new operator.
        /// ///
- 
        /// 3
        /// Registration denied
        /// ///
- 
        /// 4
        /// Unknown
        /// ///
- 
        /// 5
        /// Registered, roaming
        /// ///
/// 
        [DllImport("Device.dll")]
        public static extern int SMS_GetRegistrationState();
    }
}