rpr220: add C driver and examples; FTI; C++ wraps C

Signed-off-by: Jon Trulson <jtrulson@ics.com>
This commit is contained in:
Jon Trulson
2016-10-14 13:53:00 -06:00
parent 78904ef2b8
commit 770e43c627
9 changed files with 549 additions and 104 deletions

View File

@@ -1,6 +1,6 @@
/*
* Author: Jon Trulson <jtrulson@ics.com>
* Copyright (c) 2015 Intel Corporation.
* Copyright (c) 2015-2016 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
@@ -31,54 +31,38 @@
using namespace upm;
using namespace std;
RPR220::RPR220(int pin)
RPR220::RPR220(int pin) :
m_rpr220(rpr220_init(pin))
{
m_isrInstalled = false;
if ( !(m_gpio = mraa_gpio_init(pin)) )
{
throw std::invalid_argument(std::string(__FUNCTION__) +
": mraa_gpio_init() failed, invalid pin?");
return;
}
mraa_gpio_dir(m_gpio, MRAA_GPIO_IN);
if (!m_rpr220)
throw std::runtime_error(std::string(__FUNCTION__) +
": rpr220_init() failed");
}
RPR220::~RPR220()
{
if (m_isrInstalled)
uninstallISR();
mraa_gpio_close(m_gpio);
rpr220_close(m_rpr220);
}
bool RPR220::blackDetected()
{
return (mraa_gpio_read(m_gpio) ? true : false);
return rpr220_black_detected(m_rpr220);
}
#ifdef JAVACALLBACK
void RPR220::installISR(jobject runnable)
{
installISR(mraa_java_isr_callback, runnable);
installISR(mraa_java_isr_callback, runnable);
}
#endif
void RPR220::installISR(void (*isr)(void *), void *arg)
{
if (m_isrInstalled)
uninstallISR();
// install our interrupt handler
mraa_gpio_isr(m_gpio, MRAA_GPIO_EDGE_RISING,
isr, arg);
m_isrInstalled = true;
rpr220_install_isr(m_rpr220, isr, arg);
}
void RPR220::uninstallISR()
{
mraa_gpio_isr_exit(m_gpio);
m_isrInstalled = false;
rpr220_uninstall_isr(m_rpr220);
}