EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President...

28
EMB422 EMB422 Advanced Embedded Visual Advanced Embedded Visual C++ Application C++ Application Development Development Control - View Control - View Nat Frampton Nat Frampton President President Real Time Development Real Time Development [email protected] [email protected]

Transcript of EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President...

Page 1: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

EMB422EMB422

Advanced Embedded Visual C+Advanced Embedded Visual C++ Application Development+ Application DevelopmentControl - ViewControl - View

Nat FramptonNat FramptonPresidentPresidentReal Time DevelopmentReal Time [email protected]@realtimeonline.com

Page 2: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.
Page 3: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

MManagementanagementTToolsools

CCommunicationsommunications& & MMessagingessaging

Device Update Agent

Software Update Services

Live Communications Server

Exchange Server

Internet Security and Acceleration Server

Speech Server

Image Update

LLocation ocation SServiceservices

MMultimediaultimedia

MapPoint

DirectX

Windows Media

Visual Studio 2005DDevelopment evelopment TToolsools

MFC 8.0, ATL 8.0

Win32NNativeative

MManagedanaged

SServer erver SSideide

LLightweightightweight

RRelationalelationalSQL Server 2005 Express EditionEDB

DDa

taata

PPro

gra

mm

ing

ro

gra

mm

ing

MM

od

el

od

el

DDevice evice BBuilding uilding TToolsools

HHardware/ardware/DDriversrivers

Windows XP DDK

Windows Embedded Studio

Platform Builder

OEM/IHV SuppliedBSP

(ARM, SH4, MIPS)OEM Hardware and Standard Drivers

Standard PC Hardware and Drivers

SQL Server 2005SQL Server 2005 Mobile Edition

ASP.NET Mobile Controls ASP.NET

.NET Compact Framework .NET Framework

Microsoft Operations Manager

Systems Management Server

Page 4: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

GoalGoal

DevelopDevelopControl Control ApplicationApplication

View ApplicationView Application

LeverageLeverageeVC++eVC++

MFCMFC

Win32Win32

ObserveObserveReal Time Real Time PracticesPractices

Page 5: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

OverviewOverview

Native vs. .NET Compact FrameworkNative vs. .NET Compact Framework

SDK CreationSDK Creation

Application ArchitectureApplication Architecture

Win32 Application DevelopmentWin32 Application Development

MFC Application DevelopmentMFC Application Development

Page 6: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Windows CE 5.0Windows CE 5.0ToolsTools

Operating System DevelopmentOperating System DevelopmentWindows CE 5.0Windows CE 5.0

Platform BuilderPlatform Builder

Application DevelopmentApplication DevelopmentWindows CE 5.0Windows CE 5.0

Platform BuilderPlatform Builder

eMbedded Visual C++eMbedded Visual C++

Visual Studio .NETVisual Studio .NETSmart Device ExtensionsSmart Device Extensions

Page 7: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Windows CE 5.0Windows CE 5.0Application DevelopmentApplication Development

eMbedded Visual C++ 4.0 SP4eMbedded Visual C++ 4.0 SP4Native CodeNative Code

Win32, MFC, ATLWin32, MFC, ATL

Visual Studio .NET 2003Visual Studio .NET 2003Managed CodeManaged Code

C#, Visual Basic .NETC#, Visual Basic .NET

Page 8: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Framework SizesFramework Sizes

Win32Win32 MFCMFC

.NET.NET

FrameworkFramework

Windows XP EmbeddedWindows XP Embedded ------ 1.25 MB1.25 MB 34 MB34 MBWindows CE .NETWindows CE .NET ------ 280 KB280 KB 1.5 MB1.5 MB

Windows CE 5.0 OLECE400.DLL ~ 200 KBWindows CE 5.0 OLECE400.DLL ~ 200 KB

Windows XP Embedded ASP .NET ~ 1.5 MBWindows XP Embedded ASP .NET ~ 1.5 MB

Page 9: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Framework - StrengthsFramework - StrengthsAPIAPI StrengthsStrengths

Microsoft Win32 Microsoft Win32 (C / C++)(C / C++)

Smallest and fastest .exe files and DLLsSmallest and fastest .exe files and DLLs Lowest memory overheadLowest memory overhead Required for device drivers, control panel applets, shell extensionsRequired for device drivers, control panel applets, shell extensions No runtime required; Windows CE 5.0 No runtime required; Windows CE 5.0 isis the runtime the runtime

MFC MFC (C++)(C++)

Object-oriented. Inheritance, Encapsulation, Polymorphism, also Object-oriented. Inheritance, Encapsulation, Polymorphism, also called .function overloadingcalled .function overloadingContainer classes support arrays, lists, object maps and simplify Container classes support arrays, lists, object maps and simplify data handlingdata handlingType safetyType safetyComplete MFC source code ships with Embedded Visual ToolsComplete MFC source code ships with Embedded Visual ToolsGood tool support & wizardsGood tool support & wizards

.NET Framework .NET Framework (C# and (C# and Microsoft Visual Microsoft Visual Basic® .NET)Basic® .NET)

Well-designed programming interfaceWell-designed programming interfaceObject-oriented. Inheritance, Encapsulation, Polymorphism, also called Object-oriented. Inheritance, Encapsulation, Polymorphism, also called function overloadingfunction overloadingContainer classes support arrays, lists, hashtables, dictionaries, Container classes support arrays, lists, hashtables, dictionaries, and stacksand stacksType safetyType safetyNamespacesNamespacesAutomatic garbage collection eliminates memory leaksAutomatic garbage collection eliminates memory leaksPortable machine instruction set, MSIL / CIL, provides binary portable Portable machine instruction set, MSIL / CIL, provides binary portable of executable (.exe & .dll) filesof executable (.exe & .dll) filesWeb service clients are quick and easy to writeWeb service clients are quick and easy to writeGreat support for handling XMLGreat support for handling XMLGreat tool support — Forms DesignerGreat tool support — Forms Designer

Page 10: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Framework - WeaknessesFramework - WeaknessesAPIAPI WeaknessesWeaknesses

Microsoft Win32 Microsoft Win32 (C / C++)(C / C++)

Object cleanup is the responsibility of the application/driver Object cleanup is the responsibility of the application/driver programmer, making this API prone to memory leaksprogrammer, making this API prone to memory leaks

Low-level API — can be hard to learnLow-level API — can be hard to learn

Procedure-oriented API, not object-orientedProcedure-oriented API, not object-oriented

MFC (C++)MFC (C++) Object cleanup only semi-automatic, therefore less prone to Object cleanup only semi-automatic, therefore less prone to memory leaks than Win32, but still somewhat vulnerable since MFC memory leaks than Win32, but still somewhat vulnerable since MFC is thin wrapper on top of Win32is thin wrapper on top of Win32

Size of runtime ~ 500 KB (MFC & OLECE)Size of runtime ~ 500 KB (MFC & OLECE)

.NET Framework .NET Framework

(C# and Microsoft (C# and Microsoft Visual Basic® .NET)Visual Basic® .NET)

Size of runtime ~ 1.5 MBSize of runtime ~ 1.5 MB

Overhead of calls between managed and unmanaged code is highOverhead of calls between managed and unmanaged code is high

COM Interoperability somewhat clumsy. Requires writing Win32 COM Interoperability somewhat clumsy. Requires writing Win32 wrappers that call the COM interface functionswrappers that call the COM interface functions

Source code is not availableSource code is not available

Requires display based platformRequires display based platform

Page 11: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

.NET Compact Framework.NET Compact Framework

Lightweight version of .NET FrameworkLightweight version of .NET Framework

Designed for resource-constrained devicesDesigned for resource-constrained devices

Compatible with VS.NET, C#, VB.NETCompatible with VS.NET, C#, VB.NET

Runs applications securely on-deviceRuns applications securely on-deviceHigh performance JIT compilerHigh performance JIT compiler

Guarantees robustness and securityGuarantees robustness and security

Highly interactive, offline, and networked Highly interactive, offline, and networked experiencesexperiences

Makes it easy to consume web servicesMakes it easy to consume web services

Tunable size and performanceTunable size and performance

Page 12: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

.NET Compact Framework.NET Compact Framework

SystemSystem

System.DataSystem.Data System.XmlSystem.Xml

System.WebSystem.Web

GlobalizationGlobalization

TextText

SecuritySecurity

CollectionsCollections

ResourcesResources

ReflectionReflection

NetNet

IOIO

ThreadingThreading

DiagnosticsDiagnostics

ServiceProcessServiceProcess

ConfigurationConfiguration

DesignDesign

ADO.NETADO.NET

SqlServerCeSqlServerCe

SqlClientSqlClient

Xslt/XPathXslt/XPath

XmlDocumentXmlDocument

RuntimeRuntimeInteropServicesInteropServices

RemotingRemoting

SerializationSerialization

SerializationSerialization

ConfigurationConfiguration SessionStateSessionState

CachingCaching SecuritySecurity

ServicesServicesDescriptionDescription

DiscoveryDiscovery

ProtocolsProtocols

UIUIHtmlControlsHtmlControls

WebControlsWebControls

System.DrawingSystem.Drawing

ImagingImaging

Drawing2DDrawing2D

TextText

PrintingPrinting

System.WinFormsSystem.WinForms

DesignDesign ComponentModelComponentModel

Reader/WritersReader/Writers

Page 13: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

SDK CreationSDK Creation

Encapsulation MechanismEncapsulation Mechanism

ContainsContainsCompilerCompiler

Component DocumentationComponent Documentation

OEM Help, Docs and LibrariesOEM Help, Docs and Libraries

Understand the target userUnderstand the target userApplication Only?Application Only?

Device Driver?Device Driver?

Real Time Applications?Real Time Applications?

Page 14: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Application ArchitectureApplication Architecture

Page 15: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Finished EventFinished Event

Synchronization StrategySynchronization Strategy

DemoDemoMemoryMemory

Copy EventCopy Event11

22

44

55

33

Page 16: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Control ThreadControl Thread

ISTIST

Control ArchitectureControl Architecture

Push ButtonPush Button

LEDLEDChecks for Button upChecks for Button up

Inc ButtonInc Button

Flashes the LEDFlashes the LED

Interrupt Done Interrupt Done

ISTIST

Checks for Finished FlagChecks for Finished Flag

Increments the Bin CountIncrements the Bin Count

Calcs the Bin StatsCalcs the Bin Stats

Check for Copy Request EventCheck for Copy Request Event

Copies Data to Shared MemoryCopies Data to Shared Memory

Sets the Copy Finished EventSets the Copy Finished Event

Sleeps 5 msSleeps 5 ms

LoopLoop Finished EventFinished Event

DemoDemoMemoryMemory

Copy EventCopy Event

Page 17: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

HardwareHardware

RS232 DB9 Connector

DB-9M Function Abbreviation

Pin #1 Data Carrier Detect CDPin #2 Receive Data RD or RX or RXDPin #3 Transmitted Data TD or TX or TXDPin #4 Data Terminal Ready DTRPin #5 Signal Ground GNDPin #6 Data Set Ready DSRPin #7 Request To Send RTSPin #8 Clear To Send CTSPin #9 Ring Indicator RI

Button

LED Connects Pins 5-7 (GND to RTS)

Connects Pins 4-8 (DTR To CTS)

RED LED 12V - 30 maRadio Shack Part # 276-011

Push-On/Push-Off SwitchRadio Shack Part # 275-011A

D-Sub Connector 9 Position FemaleRadio Shack Part # 276-1428

Anode

Cathode

Page 18: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

DemoControl.exeDemoControl.exeA Win32 AppA Win32 App

Page 19: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Kernel

Interrupt ArchitectureInterrupt ArchitectureH

W

All Higher EnabledAll Higher Enabled All All Except Except IDID

All All

OA

LT

hread

ISRISR

Set Set EventEvent

IDID

ISRISR

ISRISR11 ISRISRNN

ISR ISR LatencyLatency

ISTISTIST LatencyIST Latency

Page 20: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

WindowsWindowsCE 5.0 CE 5.0 Priority Priority MapMap

PriorityPriority ComponentComponent

0-190-19 Open – Real Time Above DriversOpen – Real Time Above Drivers

2020 Permedia Vertical RetracePermedia Vertical Retrace

21-8921-89 Open – Real Time Above DriversOpen – Real Time Above Drivers

9999 Power management Resume ThreadPower management Resume Thread

100-108100-108 USB OHCI UHCI, SerialUSB OHCI UHCI, Serial

109-129109-129 Irsir1, NDIS, TouchIrsir1, NDIS, Touch

130130 KITLKITL

131131 VMiniVMini

132132 CxPortCxPort

133-144133-144 Open – Device DriversOpen – Device Drivers

145145 PS2 KeyboardPS2 Keyboard

146-147146-147 Open – Device DriversOpen – Device Drivers

148148 IRCommIRComm

149149 Open – Device DriversOpen – Device Drivers

150150 TAPITAPI

151-152151-152 Open – Device DriversOpen – Device Drivers

153-247153-247 Open – Real Time Below DriversOpen – Real Time Below Drivers

248248 Power ManagementPower Management

249249 WaveDev, TVIA5000,Mouse,PnP,PowerWaveDev, TVIA5000,Mouse,PnP,Power

250250 WaveAPIWaveAPI

251251 Power Manager Battery ThreadPower Manager Battery Thread

252-257252-257 OpenOpen

Page 21: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Interrupt InitializationInterrupt Initialization// Create the Event// Create the EventgIntEventgIntEvent = CreateEvent(= CreateEvent( NULL,NULL, // NULL// NULL

FALSE,FALSE, // Manual reset// Manual resetFALSE,FALSE, // Init as not signaled// Init as not signaledNULLNULL // No Named Events );// No Named Events );

// Create a thread that waits for signaling// Create a thread that waits for signalinggThreadIntgThreadInt = CreateThread(= CreateThread( NULL,NULL, // NULL// NULL

0,0, // No Stack Size // No Stack SizeThreadInt,ThreadInt, // Interrupt Thread// Interrupt ThreadNULL,NULL, // No Parameters// No ParametersCREATE_SUSPENDED,// SuspendedCREATE_SUSPENDED,// Suspended&dwThreadID &dwThreadID // Thread Id);// Thread Id);

// Initilialize the Interrupt// Initilialize the InterruptgSysInterruptNum = KernelIoControl( IOCTL_HAL_TRANSLATE_IRQ, &gIRQNum, gSysInterruptNum = KernelIoControl( IOCTL_HAL_TRANSLATE_IRQ, &gIRQNum,

sizeof(DWORD), &gSysIntNum, sizeof(DWORD), NULL );sizeof(DWORD), &gSysIntNum, sizeof(DWORD), NULL );

InterruptInitialize(InterruptInitialize( gSysIntNum,gSysIntNum, // From Map// From MapgIntEvent,gIntEvent, // Global Event// Global EventNULL,NULL, // Not Used// Not Used(DWORD)NULL(DWORD)NULL // Not Used ) )// Not Used ) )

// Get the thread going// Get the thread goingResumeThread( gThreadInt );ResumeThread( gThreadInt );

// Create the Event// Create the EventgIntEventgIntEvent = CreateEvent(= CreateEvent( NULL,NULL, // NULL// NULL

FALSE,FALSE, // Manual reset// Manual resetFALSE,FALSE, // Init as not signaled// Init as not signaledNULLNULL // No Named Events );// No Named Events );

// Create a thread that waits for signaling// Create a thread that waits for signalinggThreadIntgThreadInt = CreateThread(= CreateThread( NULL,NULL, // NULL// NULL

0,0, // No Stack Size // No Stack SizeThreadInt,ThreadInt, // Interrupt Thread// Interrupt ThreadNULL,NULL, // No Parameters// No ParametersCREATE_SUSPENDED,// SuspendedCREATE_SUSPENDED,// Suspended&dwThreadID &dwThreadID // Thread Id);// Thread Id);

// Initilialize the Interrupt// Initilialize the InterruptgSysInterruptNum = KernelIoControl( IOCTL_HAL_TRANSLATE_IRQ, &gIRQNum, gSysInterruptNum = KernelIoControl( IOCTL_HAL_TRANSLATE_IRQ, &gIRQNum,

sizeof(DWORD), &gSysIntNum, sizeof(DWORD), NULL );sizeof(DWORD), &gSysIntNum, sizeof(DWORD), NULL );

InterruptInitialize(InterruptInitialize( gSysIntNum,gSysIntNum, // From Map// From MapgIntEvent,gIntEvent, // Global Event// Global EventNULL,NULL, // Not Used// Not Used(DWORD)NULL(DWORD)NULL // Not Used ) )// Not Used ) )

// Get the thread going// Get the thread goingResumeThread( gThreadInt );ResumeThread( gThreadInt );

Page 22: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Interrupt Service ThreadInterrupt Service Thread

DWORDDWORD WINAPIWINAPI ThreadInt( LPVOID lpvParam )ThreadInt( LPVOID lpvParam ){{

// The magic thread waits for the event.// The magic thread waits for the event.while( gRun )while( gRun ){{

// Wait until we have been signaled that there is an interrupt// Wait until we have been signaled that there is an interruptWaitForSingleObject( gIntEvent, INFINITE );WaitForSingleObject( gIntEvent, INFINITE );

// Increment the counter// Increment the countergInterruptCount ++;gInterruptCount ++;

// Run your logic here// Run your logic here

// Reset the interrupt so we can get another one// Reset the interrupt so we can get another oneInterruptDone( gSysIntNum );InterruptDone( gSysIntNum );

}}return 0;return 0;

}}

DWORDDWORD WINAPIWINAPI ThreadInt( LPVOID lpvParam )ThreadInt( LPVOID lpvParam ){{

// The magic thread waits for the event.// The magic thread waits for the event.while( gRun )while( gRun ){{

// Wait until we have been signaled that there is an interrupt// Wait until we have been signaled that there is an interruptWaitForSingleObject( gIntEvent, INFINITE );WaitForSingleObject( gIntEvent, INFINITE );

// Increment the counter// Increment the countergInterruptCount ++;gInterruptCount ++;

// Run your logic here// Run your logic here

// Reset the interrupt so we can get another one// Reset the interrupt so we can get another oneInterruptDone( gSysIntNum );InterruptDone( gSysIntNum );

}}return 0;return 0;

}}

Page 23: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

DemoView.exe a MFC AppDemoView.exe a MFC App

Page 24: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

ReviewReview

Native and .NET CFW applications both Native and .NET CFW applications both have their placehave their place

Complex Applications can be rapidly Complex Applications can be rapidly Development in Embedded Visual C++Development in Embedded Visual C++

Windows CE provides a rich real-time Windows CE provides a rich real-time environment for a variety of application environment for a variety of application architecturesarchitectures

Embedded Visual C++ is now your Embedded Visual C++ is now your most powerful tool!most powerful tool!

Page 25: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

While at MEDC 2005…While at MEDC 2005…Fill outFill out an evaluation for this session an evaluation for this session

Randomly selected instant Randomly selected instant WINWIN prizes! prizes!

Use Use real technology in a labreal technology in a lab Instructor led Instructor led Reef E/FReef E/F & & Breakers LBreakers L

Self-paced Self-paced Reef B/CReef B/C

VisitVisit the Microsoft Product Pavilion the Microsoft Product Pavilion

in the Exhibit Hall in the Exhibit Hall Shorelines BShorelines B

Page 26: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

After The Conference…After The Conference…

DevelopDevelop

BuildBuild

InstallInstall

BuildBuild

JoinJoin

InstallInstall

EnterEnter

JoinJoin

Full-featured trial versions of Windows CE Full-featured trial versions of Windows CE and/or Windows XP Embeddedand/or Windows XP Embedded

Cool stuff & tell us about it: Cool stuff & tell us about it: msdn.microsoft.com/embedded/community

Windows Embedded Partner Program:Windows Embedded Partner Program:www.mswep.com

Windows Mobile 5.0 Eval Kit including Windows Mobile 5.0 Eval Kit including Visual Studio 2005 Beta 2Visual Studio 2005 Beta 2

Mobile2Market Contest and win up to $25000: Mobile2Market Contest and win up to $25000: mobile2marketcontest.com

Microsoft Solutions Partner Program:Microsoft Solutions Partner Program:partner.microsoft.com

Page 27: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.

Tools & ResourcesTools & Resources

msdn.microsoft.com/msdn.microsoft.com/ embeddedembedded

microsoft.public.microsoft.public. windowsxp.embeddedwindowsxp.embedded windowsce.platbuilderwindowsce.platbuilder windowsce.embedded.vcwindowsce.embedded.vc

blogs.msdn.com/blogs.msdn.com/ mikehallmikehall

Windows CE 5.0 Eval KitWindows CE 5.0 Eval KitWindows XP Embedded Eval KitWindows XP Embedded Eval Kit

msdn.microsoft.com/msdn.microsoft.com/ mobilitymobility

microsoft.public.microsoft.public. pocketpc.developer pocketpc.developer smartphone.developer smartphone.developer dotnet.framework.compactframeworkdotnet.framework.compactframework

blogs.msdn.com/blogs.msdn.com/ windowsmobilewindowsmobile vsdteamvsdteam netcfteamnetcfteam

Windows Mobile 5.0 Eval KitWindows Mobile 5.0 Eval Kit

WebsitesWebsites

NewsgroupsNewsgroups

BlogsBlogs

ToolsTools

BuildBuild DevelopDevelop

Page 28: EMB422 Advanced Embedded Visual C++ Application Development Control - View Nat Frampton President Real Time Development nat@realtimeonline.com.