
ProTech-Online.com
This is a Linux C++ code example of accessing the Titan AIM104 Relay8/IN8 Board.
#include <iostream>
#include <sstream>
#include <string>
#include <fcntl.h>
#include <arcom/libaim104.h>
#include <time.h>
#include <sys/time.h>
#define usleep(x) usleep((int)((x)
* 1000000))
using namespace std;
class vgpio {
public:
vgpio();
~vgpio();
int AIM104;
struct timespec tstart, tstop;
struct timespec ptstart, ptstop;
int tseconds;
int ptseconds;
bool doorsensors(bool,bool,bool,bool);
bool doorsensor(int);
bool tanksensor(string);
void CardReaderOn();
void popdoor(string);
void popdoors(bool,bool,bool,bool);
};
vgpio::vgpio() {
AIM104
= open("/dev/arcom/aim104/relay8/0",
O_RDWR);
aim104_relay8_set_all(AIM104, 0x00);
clock_gettime(CLOCK_REALTIME,
&tstart);
cout << "AIM104 relays enabled: " <<
aim104_relay8_enable_relays(AIM104, 1) << endl;
}
vgpio::~vgpio()
{
close(AIM104);
}
bool vgpio::doorsensors(bool cage1_enabled, bool cage2_enabled, bool cage3_enabled, bool cage4_enabled){
if(cage1_enabled &&
!doorsensor(1)){
clock_gettime(CLOCK_REALTIME,
&tstart);
return false;
}
if(cage2_enabled &&
!doorsensor(2)){
clock_gettime(CLOCK_REALTIME,
&tstart);
return false;
}
if(cage3_enabled &&
!doorsensor(3)){
clock_gettime(CLOCK_REALTIME,
&tstart);
return false;
}
if(cage4_enabled &&
!doorsensor(4)){
clock_gettime(CLOCK_REALTIME,
&tstart);
return false;
}
clock_gettime(CLOCK_REALTIME,
&tstop);
tseconds = tstop.tv_sec - tstart.tv_sec;
if(tseconds <= 2){
return false;
}
return true;
}
bool vgpio::tanksensor(string cage){
bool on;
int t;
int sensors_status;
sensors_status = aim104_relay8_inputs(AIM104);
if (cage == "1"){
t = sensors_status & 1;
on = (t > 0) ? false : true;
}
if (cage == "2"){
t = sensors_status & 4;
on = (t > 0) ? false : true;
}
if (cage == "3"){
t = sensors_status & 16;
on = (t > 0) ? false : true;
}
if (cage == "4"){
t = sensors_status & 64;
on = (t > 0) ? false : true;
}
return on;
}
void vgpio::popdoor(string cage){
if (cage == "1"){
cout << "pop cage1" << endl;
aim104_relay8_set_all(AIM104, 0x81);
clock_gettime(CLOCK_REALTIME,
&ptstart);
ptseconds = 0;
while(ptseconds < 6){
clock_gettime(CLOCK_REALTIME,
&ptstop);
ptseconds = ptstop.tv_sec - ptstart.tv_sec;
if(!doorsensor(1))
break;
}
aim104_relay8_set_all(AIM104, 0x80);
}
if (cage == "2"){
cout << "pop cage2" << endl;
aim104_relay8_set_all(AIM104, 0x82);
clock_gettime(CLOCK_REALTIME, &ptstart);
ptseconds = 0;
while(ptseconds < 6){
clock_gettime(CLOCK_REALTIME,
&ptstop);
ptseconds = ptstop.tv_sec - ptstart.tv_sec;
if(!doorsensor(2))
break;
}
aim104_relay8_set_all(AIM104, 0x80);
}
if (cage == "3"){
cout << "pop cage3" << endl;
aim104_relay8_set_all(AIM104, 0x84);
clock_gettime(CLOCK_REALTIME, &ptstart);
ptseconds = 0;
while(ptseconds < 6){
clock_gettime(CLOCK_REALTIME,
&ptstop);
ptseconds = ptstop.tv_sec - ptstart.tv_sec;
if(!doorsensor(3))
break;
}
aim104_relay8_set_all(AIM104, 0x80);
}
if (cage == "4"){
cout << "pop cage4" << endl;
aim104_relay8_set_all(AIM104, 0x88);
clock_gettime(CLOCK_REALTIME, &ptstart);
ptseconds = 0;
while(ptseconds < 6){
clock_gettime(CLOCK_REALTIME,
&ptstop);
ptseconds = ptstop.tv_sec - ptstart.tv_sec;
if(!doorsensor(4))
break;
}
aim104_relay8_set_all(AIM104, 0x80);
}
}
void vgpio::CardReaderOn(){
cout << "turning card reader on" << endl;
aim104_relay8_set_all(AIM104, 0x80);
}
void vgpio::popdoors(bool cage1_enabled, bool cage2_enabled, bool cage3_enabled, bool cage4_enabled){
cout << "pop all enabled doors" << endl;
if(cage1_enabled){
popdoor("1");
usleep(2);
}
if(cage2_enabled){
popdoor("2");
usleep(2);
}
if(cage3_enabled){
popdoor("3");
usleep(2);
}
if(cage4_enabled){
popdoor("4");
usleep(2);
}
}
bool vgpio::doorsensor(int cage){
bool on;
int c;
int sensors_status;
sensors_status = aim104_relay8_inputs(AIM104);
switch(cage){
case 1:
c = sensors_status & 2;
on = (c > 0) ? false : true;
break;
case 2:
c = sensors_status & 8;
on = (c > 0) ? false : true;
break;
case 3:
c = sensors_status & 32;
on = (c > 0) ? false : true;
break;
case 4:
c = sensors_status & 128;
on = (c > 0) ? false : true;
break;
default:
on = false;
break;
}
return on;
}
Copyright © 2013 ProTechs-Online.com; All rights reserved.