Software Overview: Difference between revisions

From Phidgets Support
(Redirected page to Phidget Programming Basics)
 
(293 intermediate revisions by 10 users not shown)
Line 1: Line 1:
== Operating System Support ==
#REDIRECT [[Phidget Programming Basics]]
 
Phidgets can '''run directly''' on these operating systems:
 
* [[OS - Windows]]
* [[OS - Mac OSX]]
* [[OS - Linux]]
* [[OS - Windows CE]] ??
* [[OS - Android]] (3.1 and above)
 
Phidgets can be '''driven remotely''' by these operating systems:
 
* [[OS - Windows]]
* [[OS - Mac OSX]]
* [[OS - Linux]]
* [[OS - Windows CE]]
* [[OS - iOS]]
* [[OS - Android]]
 
== Language Support ==
 
Phidgets can be programmed either by an '''event-driven''' model, or by traditional '''linear code'''.  All languages below support linear code.  Some languages support our complete API, which includes support for event-driven design.
 
If you are flexible on what language you can use, we suggest choosing a language which supports event-driven code.
 
Phidgets have libraries to support [[#Event Driven Code|Event Driven Code]] in the following languages:
 
* [[Language - C/C++]]
* ...
 
Phidgets have libraries to support only [[#Linear Code|Linear Code]] in the following languages:
 
* [[Language - MATLAB]]
* ...
 
== Different Code Styles ==
 
User and device actions can be handled by either:
*Letting the program tell you when they happen and then doing something (event driven code)
*Polling for things to happen then doing something (linear code)
 
These styles can mix.  For example, you can take a defined set of steps at first such as turning on an LED or antenna (linear code) and then doing nothing until an output change event is fired (event code).
 
With languages that support both styles, you can mix and match.  For languages that support only linear code (see the [[#Language Support|Language Support Categories]] above) you can only use the linear style.
 
Examples in pseudo-code are given below for each style type so you can see how your language choice can affect your code design.
 
=== Event Driven Code ===
 
Event driven code allows for ''smooth handling of complex programs''.  Event driven code is useful for:
*Handling multiple Phidgets
*Handling active plugging or unplugging of the Phidget (multiple attach and detach events)
*Working behind a GUI, as many GUIs are already event driven
*Capturing all sensor data - or input and output - device changes
 
Without event driven code, you will need to constantly poll the device to see if any state has changed.  If you poll at a slower rate than your input or output changes, you will not capture all data.
 
However, event driven code is relatively hard to design well.  It may help to draw out a '''flowchart''', '''state machine''', or at least a '''pseudo-code outline''' of your system design and all events you wish to handle before writing code.
 
All [[#Language Support|Supported Languages]] that handle event driven code have examples of how to write such code on the specific language pages.  Event driven examples follow this structure:
 
<div style="background-color: #f3f3f3; border-color: #1c9edb; border-width:1px; border-style: dashed;">
<font size="3">
<source lang=text>
 
  // --- Event Functions ---
 
  Create any Language-Specific Functions (error handling, etc)
 
  Create General Attach, Detach, and Error Handling Functions
    On attach: Initialize hardware (antennas, etc)
    On detach: Reset any state variables (attached boolean, etc)
 
  Create Hardware-Specific Functions
    On data input change: Notify using basic output (screen message, turn on LED, etc)
 
  // --- Main Code ---
 
  Create Device Software Object
  Attach Event Functions created above to Device
  Open Device
 
  Loop waiting for events and user input:
    If device attached:
        Get and Print various device statuses on request via user input
    Exit upon specific user input
 
  Close Device
  Delete Device
 
</source>
</font>
</div>
 
<br><br>
Then, to add your own functionality, you might make the following changes, denoted by *****.  You can of course add or change code anywhere, but the two locations below will get you started:
 
<div style="background-color: #f3f3f3; border-color: #1c9edb; border-width:1px; border-style: dashed;">
<font size="3">
<source lang=text>
 
  // --- Event Functions ---
 
  Create any Language-Specific Functions (error handling, etc)
 
  Create General Attach, Detach, and Error Handling Functions
    On attach: Initialize hardware (antennas, etc)
    On detach: Reset any state variables (attached boolean, etc)
 
  Create Hardware-Specific Functions
    // ****** Add your own handling code for these data change events ******
    On data input change: Notify using basic output (screen message, turn on LED, etc)
 
  // --- Main Code ---
 
  Create Device Software Object
  Attach Event Functions created above to Device
  Open Device
 
  // ****** Change the look of this loop for your GUI ******
  Loop waiting for events and user input:
    If device attached:
        Get and Print various device statuses on request via user input
    Exit upon specific user input
 
  Close Device
  Delete Device
 
</source>
</font>
</div>
 
=== Linear Code ===
 
Linear code
 
<div style="background-color: #f3f3f3; border-color: #1c9edb; border-width:1px; border-style: dashed;">
<font size="3">
<source lang=text>
 
  Create Device Software Object
  Open Device
  Wait for Device Attachment
  Initialize any hardware (antennas, etc)
 
  Loop waiting for requests from user input:
    Get and Print various device statuses on request by input
    Exit upon specific user input
 
  Close Device
  Delete Device
 
</source>
</font>
</div>

Latest revision as of 20:57, 28 February 2019