--- /dev/null
+/**************************************************************************/
+/*!
+ @file isl12022m.c
+ @author K. Townsend (microBuilder.eu)
+
+ @brief Drivers for the ISL12022M RTC
+
+ @section DESCRIPTION
+
+ The ISL12022M is an I2C RTC with 128 bytes battery-backed up SRAM.
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2010, microBuilder SARL
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holders nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "isl12022m.h"
+#include "core/systick/systick.h"
+
+extern volatile uint8_t I2CMasterBuffer[I2C_BUFSIZE];
+extern volatile uint8_t I2CSlaveBuffer[I2C_BUFSIZE];
+extern volatile uint32_t I2CReadLength, I2CWriteLength;
+
+uint32_t i;
+uint8_t monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};
+
+static bool _isl12022mInitialised = false;
+
+/**************************************************************************/
+/*!
+ @brief Standard decimal to binary coded decimal
+*/
+/**************************************************************************/
+uint8_t isl12022mDecToBCD(uint8_t val)
+{
+ return ( (val/10*16) + (val%10) );
+}
+
+/**************************************************************************/
+/*!
+ @brief Binary coded decimal to standard decimal
+*/
+/**************************************************************************/
+uint8_t isl12022mBCDToDec(uint8_t val)
+{
+ return ( (val/16*10) + (val%16) );
+}
+
+/**************************************************************************/
+/*!
+ @brief Writes an 8 bit value
+*/
+/**************************************************************************/
+isl12022mError_t isl12022mWrite8 (uint8_t address, uint8_t reg, uint32_t value)
+{
+ // Clear write buffers
+ for ( i = 0; i < I2C_BUFSIZE; i++ )
+ {
+ I2CMasterBuffer[i] = 0x00;
+ }
+
+ I2CWriteLength = 3;
+ I2CReadLength = 0;
+ I2CMasterBuffer[0] = address;
+ I2CMasterBuffer[1] = reg; // Command register
+ I2CMasterBuffer[2] = (value & 0xFF); // Value to write
+ i2cEngine();
+ return ISL12022M_ERROR_OK;
+}
+
+/**************************************************************************/
+/*!
+ @brief Reads x bytes into a buffer
+*/
+/**************************************************************************/
+isl12022mError_t isl12022mReadBuffer(uint8_t address, uint8_t reg, uint8_t *buffer, uint32_t len)
+{
+ if (len > I2C_BUFSIZE)
+ return ISL12022M_ERROR_I2C_BUFFEROVERFLOW;
+
+ // Clear write buffers
+ for ( i = 0; i < I2C_BUFSIZE; i++ )
+ {
+ I2CMasterBuffer[i] = 0x00;
+ }
+
+ I2CWriteLength = 2;
+ I2CReadLength = len;
+ I2CMasterBuffer[0] = address;
+ I2CMasterBuffer[1] = reg; // Command register
+ // Append address w/read bit
+ I2CMasterBuffer[2] = address | ISL12022M_READBIT;
+ i2cEngine();
+
+ // Push response into buffer
+ for ( i = 0; i < len; i++ )
+ {
+ buffer[i] = I2CSlaveBuffer[i];
+ }
+
+ return ISL12022M_ERROR_OK;
+}
+
+/**************************************************************************/
+/*!
+ @brief Initialises the I2C block
+*/
+/**************************************************************************/
+isl12022mError_t isl12022mInit(void)
+{
+ isl12022mError_t error = ISL12022M_ERROR_OK;
+ uint8_t buffer[1];
+
+ // Initialise I2C
+ if (i2cInit(I2CMASTER) == false)
+ {
+ return ISL12022M_ERROR_I2C_INIT; /* Fatal error */
+ }
+
+ // Make sure write is enabled on the ISL12202M (factory default = disabled)
+ error = isl12022mReadBuffer(ISL12022M_RTC_ADDRESS, ISL12022M_REG_CSR_INT, buffer, sizeof(buffer));
+ if (!error)
+ {
+ if (!(buffer[0] & ISL12022M_INT_WRITEENABLE))
+ {
+ // Write is not enabled on the RTC ... enable it now
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_CSR_INT, buffer[0] | ISL12022M_INT_WRITEENABLE);
+ }
+ _isl12022mInitialised = true;
+ }
+
+ return error;
+}
+
+/**************************************************************************/
+/*!
+ @brief Gets the current date/time from the RTC
+
+ @section EXAMPLE
+
+ @code
+ #include "drivers/rtc/isl12022m.h"
+ ...
+ isl12022mInit();
+
+ // Set the time to 12 June 2011 @ 11:59:30
+ isl12022mSetTime(0, 11, 6, 12, 11, 59, 30);
+
+ // Wait 5 seconds
+ systickDelay(5000);
+
+ // Display the current time
+ isl12022mTime_t time;
+ isl12022mGetTime(&time);
+ printf("DW:%d, Y:%d, M:%d, D:%d, H:%d, M:%d, S:%d\r\n",
+ time.dayofweek,
+ time.year,
+ time.month,
+ time.day,
+ time.hour,
+ time.minute,
+ time.second);
+ @endcode
+*/
+/**************************************************************************/
+isl12022mError_t isl12022mGetTime(isl12022mTime_t *time)
+{
+ isl12022mError_t error = ISL12022M_ERROR_OK;
+ uint8_t buffer[9];
+
+ if (!_isl12022mInitialised)
+ {
+ error = isl12022mInit();
+ if (error) return error;
+ }
+
+ // Read 9 bytes at once into buffer
+ error = isl12022mReadBuffer(ISL12022M_RTC_ADDRESS,
+ ISL12022M_REG_RTC_SC,
+ buffer, sizeof(buffer));
+
+ if (!error)
+ {
+ // Check status register
+ if (buffer[7] & (ISL12022M_STATUS_LOWBATT85 | ISL12022M_STATUS_LOWBATT75))
+ {
+ // Set low battery flag to indicate that the RTC value may not be accurate
+ error = ISL12022M_ERROR_RTC_LOWBATT;
+ }
+
+ time->second = isl12022mBCDToDec(buffer[0]);
+ time->minute = isl12022mBCDToDec(buffer[1]);
+ time->hour = buffer[2] & 0x1F; // 0x3F;
+ time->day = buffer[3] & 0x3F;
+ time->month = buffer[4] & 0x1F;
+ time->year = buffer[5];
+ time->dayofweek = buffer[6] & 0x07;
+ time->status = buffer[7];
+ time->interrupt = buffer[8];
+ }
+
+ return error;
+}
+
+/**************************************************************************/
+/*!
+ @brief Sets the current date/time from the RTC
+
+ @section EXAMPLE
+
+ @code
+ #include "drivers/rtc/isl12022m.h"
+ ...
+ isl12022mInit();
+
+ // Set the time to 12 June 2011 @ 11:59:30
+ isl12022mSetTime(0, 11, 6, 12, 11, 59, 30);
+
+ // Wait 5 seconds
+ systickDelay(5000);
+
+ // Display the current time
+ isl12022mTime_t time;
+ isl12022mGetTime(&time);
+ printf("DW:%d, Y:%d, M:%d, D:%d, H:%d, M:%d, S:%d\r\n",
+ time.dayofweek,
+ time.year,
+ time.month,
+ time.day,
+ time.hour,
+ time.minute,
+ time.second);
+ @endcode
+*/
+/**************************************************************************/
+isl12022mError_t isl12022mSetTime(uint8_t dayofweek, uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second)
+{
+ isl12022mError_t error = ISL12022M_ERROR_OK;
+
+ if (!_isl12022mInitialised)
+ {
+ error = isl12022mInit();
+ if (error) return error;
+ }
+
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_SC, isl12022mDecToBCD(second));
+ if (error) return error;
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_MN, isl12022mDecToBCD(minute));
+ if (error) return error;
+ // Always append military flag to hour (24 hour only)
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_HR, hour & 0x3F) | ISL12022M_HR_MILITARY;
+ if (error) return error;
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_DT, day & 0x3F);
+ if (error) return error;
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_MO, month & 0x1F);
+ if (error) return error;
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_YR, year);
+ if (error) return error;
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_RTC_DW, dayofweek & 0x07);
+ if (error) return error;
+
+ return error;
+}
+
+/**************************************************************************/
+/*!
+ @brief Reads the current temperature from the ISL12022
+
+ @section EXAMPLE
+
+ @code
+ #include "drivers/rtc/isl12022m.h"
+ ...
+ isl12022mInit();
+
+ uint32_t temperature;
+ isl12022mGetTemp(&temperature);
+ printf("Temperature: %u C\r\n", temperature);
+
+ @endcode
+*/
+/**************************************************************************/
+isl12022mError_t isl12022mGetTemp(uint8_t *celsius)
+{
+ isl12022mError_t error = ISL12022M_ERROR_OK;
+ uint8_t buffer[2];
+ uint32_t temp;
+
+ if (!_isl12022mInitialised)
+ {
+ error = isl12022mInit();
+ if (error) return error;
+ }
+
+ // Enable temperature sensing if required
+ error = isl12022mReadBuffer(ISL12022M_RTC_ADDRESS, ISL12022M_REG_CSR_BETA, buffer, 1);
+ if (!error)
+ {
+ if (!(buffer[0] & ISL12022M_BETA_TEMPENABLE))
+ {
+ // Temp sensor is not enabled ... enable it now
+ error = isl12022mWrite8(ISL12022M_RTC_ADDRESS, ISL12022M_REG_CSR_BETA, buffer[0] | ISL12022M_BETA_TEMPENABLE);
+ if (error)
+ return error;
+ }
+ }
+
+ // Wait 100ms for conversion to complete
+ systickDelay(100);
+ // Read low and high temp bytes (0x28 and 0x29)
+ error = isl12022mReadBuffer(ISL12022M_RTC_ADDRESS, ISL12022M_REG_TEMP_TKOL, buffer, 2);
+ if (error)
+ return error;
+ // Convert value to degrees celsius (value/2 - 273 = degrees C)
+ temp = ((buffer[0]) | (buffer[1] << 8)) / 2 - 273;
+ *celsius = (uint8_t)temp & 0xFF;
+
+ return error;
+}
--- /dev/null
+/**************************************************************************/
+/*!
+ @file isl12022m.h
+ @author K. Townsend (microBuilder.eu)
+
+ @section LICENSE
+
+ Software License Agreement (BSD License)
+
+ Copyright (c) 2010, microBuilder SARL
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. Neither the name of the copyright holders nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+
+#ifndef _ISL12022M_H_
+#define _ISL12022M_H_
+
+#include "projectconfig.h"
+#include "core/i2c/i2c.h"
+
+#define ISL12022M_RTC_ADDRESS (0xDE) // 1101111 shifted left 1 bit = 0xDE
+#define ISL12022M_SRAM_ADDRESS (0xAE) // 1010111 shifted left 1 bit = 0xAE
+#define ISL12022M_READBIT (0x01)
+
+#define ISL12022M_HR_MILITARY (1<<7) // 1 = 24-Hour, 0 = 12-Hour
+#define ISL12022M_HR_AMPM (1<<5) // If 24-hour time enabled, 0 = AM, 1 = PM
+
+#define ISL12022M_STATUS_BUSY (1<<7)
+#define ISL12022M_STATUS_OSCFAIL (1<<6)
+#define ISL12022M_STATUS_DSTADJUST (1<<5)
+#define ISL12022M_STATUS_ALARM (1<<4)
+#define ISL12022M_STATUS_LOWVDD (1<<3)
+#define ISL12022M_STATUS_LOWBATT85 (1<<2)
+#define ISL12022M_STATUS_LOWBATT75 (1<<1)
+#define ISL12022M_STATUS_RTCFAIL (1<<0)
+
+#define ISL12022M_INT_AUTORESET (1<<7)
+#define ISL12022M_INT_WRITEENABLE (1<<6)
+#define ISL12022M_INT_INTALARM (1<<5)
+#define ISL12022M_INT_FOBATB (1<<4)
+
+#define ISL12022M_BETA_TEMPENABLE (1<<7) // Temperature Sensor Enabled Bit
+
+enum
+{
+ // RTC Registers
+ ISL12022M_REG_RTC_SC = 0x00,
+ ISL12022M_REG_RTC_MN = 0x01,
+ ISL12022M_REG_RTC_HR = 0x02,
+ ISL12022M_REG_RTC_DT = 0x03,
+ ISL12022M_REG_RTC_MO = 0x04,
+ ISL12022M_REG_RTC_YR = 0x05,
+ ISL12022M_REG_RTC_DW = 0x06,
+ // Control and Status Registers
+ ISL12022M_REG_CSR_SR = 0x07,
+ ISL12022M_REG_CSR_INT = 0x08,
+ ISL12022M_REG_CSR_PWR_VDD = 0x09,
+ ISL12022M_REG_CSR_PWR_VBAT = 0x0A,
+ ISL12022M_REG_CSR_ITRO = 0x0B,
+ ISL12022M_REG_CSR_ALPHA = 0x0C,
+ ISL12022M_REG_CSR_BETA = 0x0D,
+ ISL12022M_REG_CSR_FATR = 0x0E,
+ ISL12022M_REG_CSR_FDTR = 0x0F,
+ // Alarm Registers
+ ISL12022M_REG_ALARM_SCA0 = 0x10,
+ ISL12022M_REG_ALARM_MNA0 = 0x11,
+ ISL12022M_REG_ALARM_HRA0 = 0x12,
+ ISL12022M_REG_ALARM_DTA0 = 0x13,
+ ISL12022M_REG_ALARM_MOA0 = 0x14,
+ ISL12022M_REG_ALARM_DWA0 = 0x15,
+ //
+ ISL12022M_REG_TSV2B_VSC = 0x16,
+ ISL12022M_REG_TSV2B_VMN = 0x17,
+ ISL12022M_REG_TSV2B_VHR = 0x18,
+ ISL12022M_REG_TSV2B_VDT = 0x19,
+ ISL12022M_REG_TSV2B_VMO = 0x1A,
+ ISL12022M_REG_TSV2B_TSB2V = 0x1B,
+ ISL12022M_REG_TSV2B_BMN = 0x1C,
+ ISL12022M_REG_TSV2B_BHR = 0x1D,
+ ISL12022M_REG_TSV2B_BDT = 0x1E,
+ ISL12022M_REG_TSV2B_BMO = 0x1F,
+ // DST Control Registers
+ ISL12022M_REG_DSTCR_DSTMOFD = 0x20,
+ ISL12022M_REG_DSTCR_DSTDWFD = 0x21,
+ ISL12022M_REG_DSTCR_DSTDTFD = 0x22,
+ ISL12022M_REG_DSTCR_DSTHRFD = 0x23,
+ ISL12022M_REG_DSTCR_DSTMORV = 0x24,
+ ISL12022M_REG_DSTCR_DSTDWRV = 0x25,
+ ISL12022M_REG_DSTCR_DSTDTRV = 0x26,
+ ISL12022M_REG_DSTCR_DSTHRRV = 0x27,
+ // Temperature Registers
+ ISL12022M_REG_TEMP_TKOL = 0x28,
+ ISL12022M_REG_TEMP_TKOM = 0x29,
+ // NPPM Registers
+ ISL12022M_REG_NPPM_NPPML = 0x2A,
+ ISL12022M_REG_NPPM_NPPMH = 0x2B,
+ // XTO Register
+ ISL12022M_REG_XT0_XT0 = 0x2C,
+ // Alpha Hot Register
+ ISL12022M_REG_ALPHAH_ALPHAH = 0x2D,
+ // General Purpose Memory (SRAM) Registers
+ ISL12022M_REG_GPM_GPM1 = 0x2E,
+ ISL12022M_REG_GPM_GPM2 = 0x2F
+};
+
+typedef enum
+{
+ ISL12022M_ERROR_OK = 0, // Everything executed normally
+ ISL12022M_ERROR_I2C_INIT, // Unable to initialise I2C
+ ISL12022M_ERROR_I2C_BUSY, // I2C already in use
+ ISL12022M_ERROR_I2C_BUFFEROVERFLOW, // I2C Buffer is too small
+ ISL12022M_ERROR_RTC_LOWBATT, // RTC battery low ... value may not be accurate
+ ISL12022M_ERROR_LAST
+}
+isl12022mError_t;
+
+// ISL12022M time + status placeholder
+typedef struct
+{
+ uint8_t interrupt;
+ uint8_t status;
+ uint8_t dayofweek;
+ uint8_t year;
+ uint8_t month;
+ uint8_t day;
+ uint8_t hour;
+ uint8_t minute;
+ uint8_t second;
+}
+isl12022mTime_t;
+
+isl12022mError_t isl12022mInit(void);
+isl12022mError_t isl12022mGetTime(isl12022mTime_t *time);
+isl12022mError_t isl12022mSetTime(uint8_t dayofweek, uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second);
+isl12022mError_t isl12022mGetTemp(uint8_t *celsius);
+
+#endif
+++ /dev/null
-;
-; Keil - An ARM Company Comunication Device Class driver installation file
-; (C)2007 Copyright
-;
-
-[Version]
-Signature="$Windows NT$"
-Class=Ports
-ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
-Provider=%Keil%
-;LayoutFile=layout.inf
-DriverVer=01/06/07
-
-[Manufacturer]
-%Keil%=DeviceList
-
-[DestinationDirs]
-DefaultDestDir=12
-
-[SourceDisksFiles]
-
-[SourceDisksNames]
-
-[DeviceList]
-%DESCRIPTION%=LPC134xUSB, USB\VID_239A&PID_1002
-
-;------------------------------------------------------------------------------
-; Windows 2000/XP Sections
-;------------------------------------------------------------------------------
-
-[LPC134xUSB.nt]
-include=mdmcpq.inf
-CopyFiles=DriverCopyFiles
-AddReg=LPC134xUSB.nt.AddReg
-
-[DriverCopyFiles]
-usbser.sys,,,0x20
-
-[LPC134xUSB.nt.AddReg]
-HKR,,DevLoader,,*ntkern
-HKR,,NTMPDriver,,usbser.sys
-HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
-
-[LPC134xUSB.nt.Services]
-include=mdmcpq.inf
-AddService=usbser, 0x00000002, DriverService
-
-
-[LPC134xUSB.nt.HW]
-include=mdmcpq.inf
-
-[DriverService]
-DisplayName=%DESCRIPTION%
-ServiceType=1
-StartType=3
-ErrorControl=1
-ServiceBinary=%12%\usbser.sys
-
-;------------------------------------------------------------------------------
-; String Definitions
-;------------------------------------------------------------------------------
-
-[Strings]
-NXP="NXP - Founded by Philips"
-DESCRIPTION="LPC134x USB VCom Port"
--- /dev/null
+;---------------------------------------------------------------------------------------
+; Windows USB CDC Driver Setup File for ATMEL AT91SAM products
+; Improved by Pavel K, pasha_nik@mail.ru
+;---------------------------------------------------------------------------------------
+
+[Version]
+Signature= "$Windows NT$"; Windows 200 and later versions
+Class= Ports; This is a serial port driver
+ClassGuid= {4D36E978-E325-11CE-BFC1-08002BE10318}
+Provider= %Keil%
+DriverVer= 09/25/2009,1.0.0.0; Driver version 1.0.0.0 published on 25 September 2009
+
+[Manufacturer]
+%DriverProvider%= DeviceList, NT, NTia64, NTamd64
+
+[DestinationDirs]
+DefaultDestDir= 12; Default install directory is \drivers or \IOSubSys
+
+[DeviceList.NT]
+%Description%= DriverInstall,USB\VID_03EB&PID_6124
+%Description%= LPC134xUSB, USB\VID_239A&PID_1002
+
+[DeviceList.NTia64]
+%Description%= DriverInstall,USB\VID_03EB&PID_6124
+%Description%= LPC134xUSB, USB\VID_239A&PID_1002
+
+[DeviceList.NTamd64]
+%Description%= DriverInstall,USB\VID_03EB&PID_6124
+%Description%= LPC134xUSB, USB\VID_239A&PID_1002
+
+
+;---------------------------------------------------------------------------------------
+; 32 bit section for Windows 2000/2003/XP/Vista/7
+;---------------------------------------------------------------------------------------
+
+[LPC134xUSB.nt]
+include=mdmcpq.inf
+CopyFiles=DriverCopyFiles
+AddReg=LPC134xUSB.nt.AddReg
+
+[DriverCopyFiles]
+usbser.sys,,,0x20
+
+[LPC134xUSB.nt.AddReg]
+HKR,,DevLoader,,*ntkern
+HKR,,NTMPDriver,,usbser.sys
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
+
+[LPC134xUSB.nt.Services]
+include=mdmcpq.inf
+AddService=usbser, 0x00000002, DriverService
+
+[LPC134xUSB.nt.HW]
+include=mdmcpq.inf
+
+[DriverService]
+DisplayName=%DESCRIPTION%
+ServiceType=1
+StartType=3
+ErrorControl=1
+ServiceBinary=%12%\usbser.sys
+
+
+
+;---------------------------------------------------------------------------------------
+; 64 bit section for Intel Itanium based systems
+;---------------------------------------------------------------------------------------
+
+[DriverInstall.NTia64]
+include= mdmcpq.inf
+CopyFiles= DriverInstall.NTia64.Files
+AddReg= DriverInstall.NTia64.AddReg
+
+[DriverInstall.NTia64.Files]
+usbser.sys,,,0x20
+
+[DriverInstall.NTia64.AddReg]
+HKR,,DevLoader,,*ntkern
+HKR,,NTMPDriver,,usbser.sys
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
+
+[DriverInstall.NTia64.Services]
+AddService=usbser,0x00000002,usbser_sys_service
+
+
+;---------------------------------------------------------------------------------------
+; 64 bit section for AMD64 and Intel EM64T based systems
+;---------------------------------------------------------------------------------------
+
+[DriverInstall.NTamd64]
+include= mdmcpq.inf
+CopyFiles= DriverInstall.NTamd64.Files
+AddReg= DriverInstall.NTamd64.AddReg
+
+[DriverInstall.NTamd64.Files]
+usbser.sys,,,0x20
+
+[DriverInstall.NTamd64.AddReg]
+HKR,,DevLoader,,*ntkern
+HKR,,NTMPDriver,,usbser.sys
+HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
+
+[DriverInstall.NTamd64.Services]
+AddService= usbser,0x00000002,usbser_sys_service
+
+;---------------------------------------------------------------------------------------
+; usbser.sys service
+;---------------------------------------------------------------------------------------
+
+[usbser_sys_service]
+DisplayName= %ServiceDescription%
+ServiceType= 1; SERVICE_KERNEL_DRIVER, Service kernel driver
+StartType= 3; SERVICE_DEMAND_START, Driver is started by the PnP manager
+ErrorControl= 1; SERVICE_ERROR_NORMAL, Warn about errors
+ServiceBinary= %12%\usbser.sys
+LoadOrderGroup = Base
+
+;---------------------------------------------------------------------------------------
+; strings
+;---------------------------------------------------------------------------------------
+
+[Strings]
+DriverProvider= "Microsoft"
+NXP="NXP - Founded by Philips"
+DESCRIPTION="LPC134x USB VCom Port"
+
+;---------------------------------------------------------------------------------------