mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-04-09 22:43:11 +02:00
2020-04-13 Fred Gleason <fredg@paravelsystems.com>
* Fixed a bug in the 'Software Authority' driver that caused autodetection of the number of GPIOs in a router to be unreliable. * Removed superfluous code from rdgpimon(1).
This commit is contained in:
parent
f92e8771ce
commit
e737fcbc27
@ -19782,3 +19782,7 @@
|
|||||||
* Fixed a bug in the 'List GPIs' dialog in rdadmin(1) that
|
* Fixed a bug in the 'List GPIs' dialog in rdadmin(1) that
|
||||||
prevented changes in GPI assignments from being propagated
|
prevented changes in GPI assignments from being propagated
|
||||||
to the underlying device.
|
to the underlying device.
|
||||||
|
2020-04-13 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Fixed a bug in the 'Software Authority' driver that caused
|
||||||
|
autodetection of the number of GPIOs in a router to be unreliable.
|
||||||
|
* Removed superfluous code from rdgpimon(1).
|
||||||
|
@ -51,6 +51,7 @@ SoftwareAuthority::SoftwareAuthority(RDMatrix *matrix,QObject *parent)
|
|||||||
swa_gpos=0;
|
swa_gpos=0;
|
||||||
swa_start_cart=matrix->startCart(RDMatrix::Primary);
|
swa_start_cart=matrix->startCart(RDMatrix::Primary);
|
||||||
swa_stop_cart=matrix->stopCart(RDMatrix::Primary);
|
swa_stop_cart=matrix->stopCart(RDMatrix::Primary);
|
||||||
|
swa_is_gpio=false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reconnection Timer
|
// Reconnection Timer
|
||||||
@ -260,6 +261,11 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
// Startup Sequence. Get initial GPIO states and the input and output lists.
|
// Startup Sequence. Get initial GPIO states and the input and output lists.
|
||||||
//
|
//
|
||||||
if(section=="login successful") {
|
if(section=="login successful") {
|
||||||
|
swa_inputs=0;
|
||||||
|
swa_outputs=0;
|
||||||
|
swa_gpis=0;
|
||||||
|
swa_gpos=0;
|
||||||
|
swa_is_gpio=false;
|
||||||
sprintf(buffer,"gpistat %d\x0D\x0A",swa_card); // Request GPI States
|
sprintf(buffer,"gpistat %d\x0D\x0A",swa_card); // Request GPI States
|
||||||
SendCommand(buffer);
|
SendCommand(buffer);
|
||||||
sprintf(buffer,"gpostat %d\x0D\x0A",swa_card); // Request GPO States
|
sprintf(buffer,"gpostat %d\x0D\x0A",swa_card); // Request GPO States
|
||||||
@ -299,8 +305,12 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
// Write Sources Data
|
// Write Sources Data
|
||||||
//
|
//
|
||||||
swa_istate=0;
|
swa_istate=0;
|
||||||
|
if(swa_is_gpio) {
|
||||||
|
swa_gpis=swa_inputs*RD_LIVEWIRE_GPIO_BUNDLE_SIZE;
|
||||||
|
}
|
||||||
sql=QString("update MATRICES set ")+
|
sql=QString("update MATRICES set ")+
|
||||||
QString().sprintf("INPUTS=%d ",swa_inputs)+
|
QString().sprintf("INPUTS=%d,",swa_inputs)+
|
||||||
|
QString().sprintf("GPIS=%d ",swa_gpis)+
|
||||||
"where (STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\")&&"+
|
"where (STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\")&&"+
|
||||||
QString().sprintf("(MATRIX=%d)",swa_matrix);
|
QString().sprintf("(MATRIX=%d)",swa_matrix);
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
@ -345,8 +355,12 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
// Write Destinations Data
|
// Write Destinations Data
|
||||||
//
|
//
|
||||||
swa_istate=0;
|
swa_istate=0;
|
||||||
|
if(swa_is_gpio) {
|
||||||
|
swa_gpos=swa_outputs*RD_LIVEWIRE_GPIO_BUNDLE_SIZE;
|
||||||
|
}
|
||||||
sql=QString("update MATRICES set ")+
|
sql=QString("update MATRICES set ")+
|
||||||
QString().sprintf("OUTPUTS=%d ",swa_outputs)+
|
QString().sprintf("OUTPUTS=%d,",swa_outputs)+
|
||||||
|
QString().sprintf("GPOS=%d ",swa_gpos)+
|
||||||
"where (STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\")&&"+
|
"where (STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\")&&"+
|
||||||
QString().sprintf("(MATRIX=%d)",swa_matrix);
|
QString().sprintf("(MATRIX=%d)",swa_matrix);
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
@ -391,16 +405,6 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
delete q;
|
delete q;
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
delete q;
|
delete q;
|
||||||
|
|
||||||
//
|
|
||||||
// Write GPIO Data
|
|
||||||
//
|
|
||||||
sql=QString("update MATRICES set ")+
|
|
||||||
QString().sprintf("GPIS=%d,GPOS=%d where ",swa_gpis,swa_gpos)+
|
|
||||||
"(STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\")&&"+
|
|
||||||
QString().sprintf("(MATRIX=%d)",swa_matrix);
|
|
||||||
q=new RDSqlQuery(sql);
|
|
||||||
delete q;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,9 +415,6 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
if((f0.size()==4)&&(f0[0].lower()=="gpistat")&&(f0[1].toInt()==swa_card)) {
|
if((f0.size()==4)&&(f0[0].lower()=="gpistat")&&(f0[1].toInt()==swa_card)) {
|
||||||
if(swa_gpi_states[f0[2].toInt()].isEmpty()) {
|
if(swa_gpi_states[f0[2].toInt()].isEmpty()) {
|
||||||
swa_gpi_states[f0[2].toInt()]=f0[3];
|
swa_gpi_states[f0[2].toInt()]=f0[3];
|
||||||
if((RD_LIVEWIRE_GPIO_BUNDLE_SIZE*f0[2].toInt())>swa_gpis) {
|
|
||||||
swa_gpis=RD_LIVEWIRE_GPIO_BUNDLE_SIZE*f0[2].toInt();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for(unsigned i=0;i<RD_LIVEWIRE_GPIO_BUNDLE_SIZE;i++) {
|
for(unsigned i=0;i<RD_LIVEWIRE_GPIO_BUNDLE_SIZE;i++) {
|
||||||
@ -424,13 +425,11 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
}
|
}
|
||||||
swa_gpi_states[f0[2].toInt()]=f0[3];
|
swa_gpi_states[f0[2].toInt()]=f0[3];
|
||||||
}
|
}
|
||||||
|
swa_is_gpio=true;
|
||||||
}
|
}
|
||||||
if((f0.size()==4)&&(f0[0].lower()=="gpostat")&&(f0[1].toInt()==swa_card)) {
|
if((f0.size()==4)&&(f0[0].lower()=="gpostat")&&(f0[1].toInt()==swa_card)) {
|
||||||
if(swa_gpo_states[f0[2].toInt()].isEmpty()) {
|
if(swa_gpo_states[f0[2].toInt()].isEmpty()) {
|
||||||
swa_gpo_states[f0[2].toInt()]=f0[3];
|
swa_gpo_states[f0[2].toInt()]=f0[3];
|
||||||
if((RD_LIVEWIRE_GPIO_BUNDLE_SIZE*f0[2].toInt())>swa_gpos) {
|
|
||||||
swa_gpos=RD_LIVEWIRE_GPIO_BUNDLE_SIZE*f0[2].toInt();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for(unsigned i=0;i<RD_LIVEWIRE_GPIO_BUNDLE_SIZE;i++) {
|
for(unsigned i=0;i<RD_LIVEWIRE_GPIO_BUNDLE_SIZE;i++) {
|
||||||
@ -441,6 +440,7 @@ void SoftwareAuthority::DispatchCommand()
|
|||||||
}
|
}
|
||||||
swa_gpo_states[f0[2].toInt()]=f0[3];
|
swa_gpo_states[f0[2].toInt()]=f0[3];
|
||||||
}
|
}
|
||||||
|
swa_is_gpio=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ class SoftwareAuthority : public Switcher
|
|||||||
unsigned swa_start_cart;
|
unsigned swa_start_cart;
|
||||||
unsigned swa_stop_cart;
|
unsigned swa_stop_cart;
|
||||||
int swa_istate;
|
int swa_istate;
|
||||||
|
bool swa_is_gpio;
|
||||||
RDMatrix::PortType swa_porttype;
|
RDMatrix::PortType swa_porttype;
|
||||||
std::map<int,QString> swa_gpi_states;
|
std::map<int,QString> swa_gpi_states;
|
||||||
std::map<int,QString> swa_gpo_states;
|
std::map<int,QString> swa_gpo_states;
|
||||||
|
@ -298,19 +298,6 @@ void MainWidget::matrixActivatedData(int index)
|
|||||||
new RDMatrix(rda->config()->stationName(),gpi_matrix_box->currentItem());
|
new RDMatrix(rda->config()->stationName(),gpi_matrix_box->currentItem());
|
||||||
UpdateLabelsDown(0);
|
UpdateLabelsDown(0);
|
||||||
gpi_up_button->setDisabled(true);
|
gpi_up_button->setDisabled(true);
|
||||||
switch((RDMatrix::GpioType)gpi_type_box->currentItem()) {
|
|
||||||
case RDMatrix::GpioInput:
|
|
||||||
rda->ripc()->sendGpiStatus(gpi_matrix_box->currentItem());
|
|
||||||
rda->ripc()->sendGpiMask(gpi_matrix_box->currentItem());
|
|
||||||
rda->ripc()->sendGpiCart(gpi_matrix_box->currentItem());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RDMatrix::GpioOutput:
|
|
||||||
rda->ripc()->sendGpoStatus(gpi_matrix_box->currentItem());
|
|
||||||
rda->ripc()->sendGpoMask(gpi_matrix_box->currentItem());
|
|
||||||
rda->ripc()->sendGpoCart(gpi_matrix_box->currentItem());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
RefreshEventsList();
|
RefreshEventsList();
|
||||||
gpi_events_startup_timer->start(1000,true);
|
gpi_events_startup_timer->start(1000,true);
|
||||||
}
|
}
|
||||||
@ -459,6 +446,7 @@ void MainWidget::gpiMaskChangedData(int matrix,int line,bool state)
|
|||||||
|
|
||||||
void MainWidget::gpoMaskChangedData(int matrix,int line,bool state)
|
void MainWidget::gpoMaskChangedData(int matrix,int line,bool state)
|
||||||
{
|
{
|
||||||
|
// printf("gpoMaskChangedData(%d,%d,%d)\n",matrix,line,state);
|
||||||
if(gpi_type_box->currentItem()!=RDMatrix::GpioOutput) {
|
if(gpi_type_box->currentItem()!=RDMatrix::GpioOutput) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -502,6 +490,8 @@ void MainWidget::gpiCartChangedData(int matrix,int line,int off_cartnum,
|
|||||||
void MainWidget::gpoCartChangedData(int matrix,int line,int off_cartnum,
|
void MainWidget::gpoCartChangedData(int matrix,int line,int off_cartnum,
|
||||||
int on_cartnum)
|
int on_cartnum)
|
||||||
{
|
{
|
||||||
|
// printf("gpoCartChangedData(%d,%d,%d,%d)\n",matrix,line,off_cartnum,
|
||||||
|
// on_cartnum);
|
||||||
if(gpi_type_box->currentItem()!=RDMatrix::GpioOutput) {
|
if(gpi_type_box->currentItem()!=RDMatrix::GpioOutput) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -633,9 +623,7 @@ void MainWidget::UpdateLabelsDown(int first_line)
|
|||||||
"order by NUMBER";
|
"order by NUMBER";
|
||||||
q=new RDSqlQuery(sql);
|
q=new RDSqlQuery(sql);
|
||||||
while(q->next()&&(count<(GPIMON_ROWS*GPIMON_COLS))) {
|
while(q->next()&&(count<(GPIMON_ROWS*GPIMON_COLS))) {
|
||||||
gpi_labels[count]->setLine(q->value(0).toInt()-1);
|
|
||||||
gpi_labels[count]->setCart(q->value(1).toUInt(),q->value(2).toUInt());
|
gpi_labels[count]->setCart(q->value(1).toUInt(),q->value(2).toUInt());
|
||||||
gpi_labels[count]->show();
|
|
||||||
if(!first_updated) {
|
if(!first_updated) {
|
||||||
gpi_first_line=q->value(0).toInt();
|
gpi_first_line=q->value(0).toInt();
|
||||||
first_updated=true;
|
first_updated=true;
|
||||||
@ -646,6 +634,22 @@ void MainWidget::UpdateLabelsDown(int first_line)
|
|||||||
gpi_down_button->setEnabled(q->next());
|
gpi_down_button->setEnabled(q->next());
|
||||||
delete q;
|
delete q;
|
||||||
|
|
||||||
|
sql=QString("select ")+
|
||||||
|
tablename+" "+ // 00
|
||||||
|
"from MATRICES where "+
|
||||||
|
"(STATION_NAME=\""+RDEscapeString(rda->station()->name())+"\") && "+
|
||||||
|
QString().sprintf("(MATRIX=%d)",gpi_matrix->matrix());
|
||||||
|
q=new RDSqlQuery(sql);
|
||||||
|
if(q->first()) {
|
||||||
|
for(int i=0;i<(GPIMON_ROWS*GPIMON_COLS);i++) {
|
||||||
|
if((i+first_line)<q->value(0).toInt()) {
|
||||||
|
gpi_labels[i]->setLine(i+first_line);
|
||||||
|
gpi_labels[i]->show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete q;
|
||||||
|
|
||||||
RefreshGpioStates();
|
RefreshGpioStates();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user