/*! * Initialisation du module * */ void CRaspiGPIO::init(CApplication *application) { CModule::init(application); setGUI(&m_ihm); // indique à la classe de base l'IHM // Gère les actions sur clic droit sur le panel graphique du module m_ihm.setContextMenuPolicy(Qt::CustomContextMenu); connect(&m_ihm, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onRightClicGUI(QPoint))); // Restore la taille de la fenêtre QVariant val; val = m_application->m_eeprom->read(getName(), "geometry", QRect(50, 50, 150, 150)); m_ihm.setGeometry(val.toRect()); // Restore le fait que la fenêtre est visible ou non val = m_application->m_eeprom->read(getName(), "visible", QVariant(true)); if (val.toBool()) { m_ihm.show(); } else { m_ihm.hide(); } // Restore le niveau d'affichage val = m_application->m_eeprom->read(getName(), "niveau_trace", QVariant(MSG_TOUS)); setNiveauTrace(val.toUInt()); // Restore la couleur de fond val = m_application->m_eeprom->read(getName(), "background_color", QVariant(DEFAULT_MODULE_COLOR)); setBackgroundColor(val.value<QColor>()); wiringPiSetupGpio(); // Utilise la numérotation de pin BCM for (unsigned int i=0; i<MAX_GPIO_COUNT; i++) { // Recherche dans le fichier EEPROM une configuration de type "gpio_<i>=input pull down" // gpio_17 = input QString eeprom_config_name = "gpio_" + QString::number(i); val = m_application->m_eeprom->read(getName(), eeprom_config_name, QVariant()); if (val != QVariant()) { // le paramètre a été trouvé -> le GPIO est utilisé et doit être configuré configPinMode(i, val.toString()); } // Initialise la liste des GPIO dans la liste déroulante de configuration // on part des contrôles affichés sur l'interface et on récupère les numéros // Rensigne dans la liste déroulante des GPIO tous les numéros possibles de GPIO QLabel *lbl = m_ihm.findChild<QLabel*>(PREFIX_MODE_GPIO + QString::number(i)); // "mode_GPIO_<i>" c'est le nom de tous les labels des GPIO sur l'IHM pour indiquer si c'est une entrée / sortie / ... if (lbl) { m_ihm.ui.configChoixGPIO->addItem("GPIO " + QString::number(i)); } // connexion signal/slot avec toutes les checkbox qui permettent d'écrire sur le port // on repert toutes les checkbox par leur nom "write_GPIO_<i>" QCheckBox *checkbox = m_ihm.findChild<QCheckBox*>(PREFIX_CHECKBOX_WRITE + QString::number(i)); if (checkbox) { connect(checkbox, SIGNAL(clicked(bool)), this, SLOT(onWritePinChange(bool))); } } // Renseigne dans la liste déroulante des configurations possibles QStringList list_modes; list_modes << "" << "Input" << "Input pull down" << "Input pull up" << "Output" << "PWM Output"; m_ihm.ui.configChoixMode->addItems(list_modes); connect(m_ihm.ui.configChoixGPIO, SIGNAL(activated(int)), this, SLOT(onChoixConfigGPIO())); connect(m_ihm.ui.configChoixMode, SIGNAL(activated(QString)), this, SLOT(onChoixConfigMode(QString))); connect(&m_timer_read, SIGNAL(timeout()), this, SLOT(readAllInputs())); m_timer_read.start(100); }
// _____________________________________________________________________ void CRaspiGPIO::onChoixConfigMode(QString mode) { unsigned int gpio_num = m_ihm.ui.configChoixGPIO->currentText().remove("gpio", Qt::CaseInsensitive).toInt(); configPinMode(gpio_num, mode); }
BOOL setMode(BYTE pin,BYTE mode){ ClearPinState(pin); println_I("Pin :");p_int_I(pin);print_I(" is mode: ");printMode(mode,INFO_PRINT); //BYTE pwm,dir; if (mode == NO_CHANGE){ return TRUE; } switch (mode){ case HIGH_IMPEDANCE: ClearPinState(pin); // Return here so as not to save this state to the eeprom return TRUE; case IS_UART_TX: case IS_UART_RX: if(pin == 17 || pin == 16){ configPinMode(16,IS_UART_TX,OUTPUT,ON); configPinMode(17,IS_UART_RX,INPUT,ON); InitUART(); return TRUE; } break; case IS_SPI_MOSI: case IS_SPI_MISO: case IS_SPI_SCK: if(pin == 0 || pin == 1||pin == 2 ){ configPinMode(0,IS_SPI_SCK,INPUT,ON); configPinMode(1,IS_SPI_MISO,INPUT,ON); configPinMode(2,IS_SPI_MOSI,INPUT,ON); return TRUE; } break; case IS_ANALOG_IN: configPinMode(pin,mode,INPUT,OFF); if(InitADC(pin)){ return TRUE; } break; case IS_PWM: if(InitPWM(pin)){ return TRUE; } return FALSE; case IS_DC_MOTOR_VEL: case IS_DC_MOTOR_DIR: if(InitDCMotor(pin)){ return TRUE; } return FALSE; case IS_SERVO: InitServo(pin); configPinMode(pin,mode,OUTPUT,OFF); return TRUE; case IS_DO: configPinMode(pin,mode,OUTPUT,OFF); return TRUE; case IS_DI: case IS_PPM_IN: case IS_COUNTER_OUTPUT_INT: case IS_COUNTER_OUTPUT_DIR: case IS_COUNTER_OUTPUT_HOME: case IS_COUNTER_INPUT_INT: case IS_COUNTER_INPUT_DIR: case IS_COUNTER_INPUT_HOME: configPinMode(pin,mode,INPUT,ON); return TRUE; default: configPinMode(pin,mode,INPUT,ON); return TRUE; } return FALSE; }