#include <conio.h>
#include <iostream>
#include <windows.h>
#include "rdcl/rb8506_pport.h"
enum Pin { pin0, pin1, pin2, pin3, pin4, pin5, pin6, pin7, };
const Pin pinLED = pin0;
const Pin pinSwitch = pin3;
const char* portLED = "PB";
const char* portSwitch = "PB";
const char* lineLED = "PB0";
const char* lineSwitch = "PB3";
const int rack = 0;
const int address = 0x94;
inline int mask( int pin ) { return 1 << pin; }
inline int tstbit( int byte, int pin ) { return ( byte & mask(pin) ) != 0; }
inline int clrbit( int& byte, int pin ) { return byte &= ~mask(pin); }
inline int setbit( int& byte, int pin ) { return byte |= mask(pin); }
inline int xorbit( int& byte, int pin ) { return byte ^= mask(pin); }
static void setPortDirection( Rulbus::RB8506_PiaViaRef port );
static void setLineDirection( Rulbus::RB8506_PiaViaRef port );
static void switchLED_mask ( Rulbus::RB8506_PiaViaRef port );
static void switchLED_line ( Rulbus::RB8506_PiaViaRef port );
int main()
{
std::cout << "Switch a LED on and off, a parallel interface demonstration.";
Rulbus::RB8506_Pia pia( "lamp-control", address, rack );
std::cout << "\nsetting port direction..." ;
setPortDirection( pia );
std::cout << "\nusing port data with bitmasks; press a key to contine...";
switchLED_mask( pia );
std::cout << "\nsetting line direction..." ;
setLineDirection( pia );
std::cout << "\nusing single line functions; press a key to contine...";
switchLED_line( pia );
std::cout << std::endl;
}
static void setPortDirection( Rulbus::RB8506_PiaViaRef port )
{
int dataSwitch = port.getPortDir( portSwitch );
int dataLED = port.getPortDir( portLED );
port.setPortDir( portSwitch, dataSwitch & ~mask(pinSwitch) );
port.setPortDir( portLED , dataLED | mask(pinLED ) );
}
static void switchLED_mask( Rulbus::RB8506_PiaViaRef port )
{
while ( !kbhit() )
{
int dataSwitch = port.getPortData( portSwitch );
int dataLED = port.getPortData( portLED );
if ( tstbit( dataSwitch, pinSwitch ) ) setbit( dataLED, pinLED );
else clrbit( dataLED, pinLED );
port.setPortData( portLED, dataLED );
Sleep( 10 );
}
(void) getch();
}
static void setLineDirection( Rulbus::RB8506_PiaViaRef port )
{
port.setLineDir( lineSwitch, 'i' );
port.setLineDir( lineLED , 'o' );
}
static void switchLED_line( Rulbus::RB8506_PiaViaRef port )
{
while ( !kbhit() )
{
int switchOpen = port.getLineLevel( lineSwitch );
port.setLineLevel( lineLED, switchOpen );
Sleep( 10 );
}
(void) getch();
}