31 for(std::list<AnalogyDevice *>::iterator i = devices.begin(); i != devices.end(); ++i)
40 std::string name = args.front();
42 err = a4l_open(&dsc, name.c_str());
45 ERROR_MSG(
"AnalogyDriver::createDevice : unable to open %s (err=%d).\n", name.c_str(), err);
50 dsc.sbdata = malloc(dsc.sbsize);
51 if (dsc.sbdata == NULL)
54 ERROR_MSG(
"AnalogyDriver: info buffer allocation failed\n");
59 err = a4l_fill_desc(&dsc);
62 ERROR_MSG(
"AnalogyDriver: a4l_fill_desc failed (err=%d)\nPlease run rtxi_load_analogy script in scripts directory.\n", err);
71 for (
int i=0; i < dsc.nb_subd; i++)
73 err = a4l_get_subdinfo(&dsc, i, &sbinfo);
76 ERROR_MSG(
"AnalogyDriver: a4l_get_subd_info failed, wrong subdevice index %i (err=%d)\n",
81 if (((sbinfo->flags & A4L_SUBD_TYPES )== A4L_SUBD_AI) && (idx_ai < 0))
83 else if (((sbinfo->flags & A4L_SUBD_TYPES) == A4L_SUBD_AO) && (idx_ao < 0))
85 else if (((sbinfo->flags & A4L_SUBD_TYPES) == A4L_SUBD_DIO) && (idx_dio < 0))
89 size_t count[5] = { 0, 0, 0, 0, 0,};
90 err = a4l_get_subdinfo(&dsc, idx_ai, &sbinfo);
92 count[0] = sbinfo->nb_chan;
93 err = a4l_get_subdinfo(&dsc, idx_ao, &sbinfo);
95 count[1] = sbinfo->nb_chan;
96 err = a4l_get_subdinfo(&dsc, idx_dio, &sbinfo);
98 count[2] = sbinfo->nb_chan;
100 if(!(count[0]+count[1]+count[2]+count[3]+count[4]))
102 ERROR_MSG(
"AnalogyDriver::createDevice : no Analogy device configured on %s.\n",name.c_str());
108 for(
size_t i=0; i<count[0]; ++i)
110 std::ostringstream name;
111 name <<
"Analog Input " << i;
112 channel[i].
name = name.str();
113 channel[i].description =
"";
114 channel[i].flags = IO::OUTPUT;
116 for(
size_t i=count[0]; i<count[0]+count[1]; ++i)
118 std::ostringstream name;
119 name <<
"Analog Output " << i-count[0];
120 channel[i].name = name.str();
121 channel[i].description =
"";
122 channel[i].flags = IO::INPUT;
124 for(
size_t i=count[0]+count[1]; i<count[0]+count[1]+count[2]; ++i)
126 std::ostringstream name;
127 name <<
"Digital I/O " << i-count[0]-count[1];
128 channel[i].name = name.str();
129 channel[i].description =
"";
130 channel[i].flags = IO::OUTPUT;
132 for(
size_t i=count[0]+count[1]+count[2]; i<count[0]+count[1]+2*count[2]; ++i)
134 std::ostringstream name;
135 name <<
"Digital I/O " << i-count[0]-count[1]-count[2];
136 channel[i].name = name.str();
137 channel[i].description =
"";
138 channel[i].flags = IO::INPUT;
140 for(
size_t i=count[0]+count[1]+2*count[2]; i<count[0]+count[1]+2*count[2]+count[3]; ++i)
142 std::ostringstream name;
143 name <<
"Digital Input " << i-count[0]-count[1]-2*count[2];
144 channel[i].name = name.str();
145 channel[i].description =
"";
146 channel[i].flags = IO::OUTPUT;
148 for(
size_t i=count[0]+count[1]+2*count[2]+count[3]; i<count[0]+count[1]+2*count[2]+count[3]+count[4]; ++i)
150 std::ostringstream name;
151 name <<
"Digital Output " << i-count[0]-count[1]-2*count[2]-count[3];
152 channel[i].name = name.str();
153 channel[i].description =
"";
154 channel[i].flags = IO::INPUT;
158 devices.push_back(dev);
166 for(
size_t i = 0, end = s.
loadInteger(
"Num Devices"); i < end; ++i)
168 std::list<std::string> args;
169 args.push_back(s.
loadString(QString::number(i).toStdString()));
180 for(std::list<AnalogyDevice *>::const_iterator i = devices.begin(),end = devices.end(); i != end; ++i)
182 std::ostringstream str;