ืืืึธืก ืืื ืืึทื ืืึธ ?
ืขืก ืืื ืึท ืกืืกืืขื ืคึฟืึทืจ ืึธื ืคืืจืื ื ืคืึทืจืฉืืื ืืึทืื ืืืึทืจื ืืื ืืืืืืืืืจื.
ืืึทื ืืึธ ืฉืืืฆื ืืขืจืืืืึทื 4 ืคึผืืึทืืคืึธืจืืก: ืืื ืืงืก, Windows NT, Solaris ืืื HP-UX.
ืืึธ ืืืจ ืืืขืื ืืึทืฉืจืืึทืื ืืจืืขืื ืืื ืืื ืืงืก (Ubuntu 18.04)
ืืืึธืก ืืื ืขืก ืคึฟืึทืจ?
ืกืืืคึผืืึทืคืืื ืึทืจืืขื ืืื ืคืึทืจืฉืืื ืืืกืจืืื ืืื ืืืืืืืืืจื.
- ืืืจ ืืึธื ื ืื ืืึทืจืคึฟื ืฆื ืืจืึทืืื ืืืขืื ืืื ืฆื ืงืจืึธื ืืึทืื ืืื ืื ืืึทืืึทืืืืก, ืขืก ืืื ืฉืืื ืืขืืื ืคึฟืึทืจ ืืืจ.
- ืขืก ืืื ื ืึธืจ ื ืืืืืง ืฆื ืืึทืฉืจืืึทืื ืื ืืขืงืึทื ืืืึทื ืคึฟืึทืจ ืคึผืึธืืืื ื ืกืขื ืกืึธืจืก.
- ืจืืืืกืื ืึทืืข ืืืื ืงืึธื ืฆื ืืืื ื ืึธืจืืึทื.
ืืื ืฆื ืืึทืงืืืขื
ืงืืืขืืขืจ ืื ืกืืึทืืืจืื ื ืื ืกืืจืึทืงืฉืึทื ื TangoBox ืืืื ืืืืืจื ืืืืฃ ืืืื ืื
ืืื ืงืขื ื ืืฉื ืงืึทืืขืจ ืขืก ืคึฟืื ืื ืืงืืจ ืงืึธื ืืื ืืขืืืืื ื ืึท ืคืึทืจืืืง ืืืื ืคืื TangoBox 9.3 ืฆื ืึทืจืืขืื.
ืื ืื ืกืืจืึทืงืฉืึทื ื ืืึทืฉืจืืึทืื ืืื ืฆื ืื ืกืืึทืืืจื ืคึฟืื ืคึผืึทืงืึทืืืฉืึทื.
ืคืื ืืืืก ืืืฉืืืื ืขืก?
- JIVE - ืืขืืืืื ื ืฆื ืืขื ืืื ืจืขืืึทืืืจื ืื ืืึทื ืืึธ ืืึทืืึทืืืืก.
- ืคึผืึธืืึธ - ืงืึธื ืืขื ืขืจืึทืืึธืจ ืคึฟืึทืจ ืืึทื ืืึธ ืืืื ืกืขืจืืืขืจืก.
- ืึทืกืืึธืจ - ืคึผืจืึธืืจืึทื ืคืึทืจืืืึทืืืขืจ ืคึฟืึทืจ ืื ืืึทื ืืึธ ืกืืกืืขื.
ืืืจ ืืืขืื ืืืื ืืื ืืขืจืขืกืืจื ืืืืื ืืื ืื ืขืจืฉืืขืจ ืฆืืืื ืงืึทืืคึผืึธืื ืึทื ืฅ.
ืฉืืืฆื ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทืื
- C
- C ++
- ื'ืืื
- ืืืฉืึทืืืึทืกืงืจืืคึผื
- ืคึผืืืืึธื
- ืืึทืืืึทื
- ืืึทืืืืืขืื
ืืื ืืขืืจืืขื ืืื ืขืก ืืื ืคึผืืืืึธื & C ++. ืืึธ C ++ ืืืขื ืืืื ืืขืืืืื ื ืืื ืึท ืืืึทืฉืคึผืื.
ืืืฆื ืืึธืื ืืื ืื ืืืื ืฆื ืึท ืืึทืฉืจืืึทืืื ื ืคืื ืืื ืฆื ืคืึทืจืืื ืื ืื ืืืื ืฆื ืืึทื ืืึธ ืืื ืืื ืฆื ืึทืจืืขืื ืืื ืืื. ืืขืจ ืึธืคึผืฆืึธื ืืืขื ืืืื ืืขื ืืืขื ืืื ืึท ืืืึทืฉืคึผืื ืืคึผืก ื ืขืึธ-6ื-0-001:
ืืื ืืืจ ืงืขื ืขื ืืขื ืืื ืื ืืืื, ืืืจ ืคืึทืจืืื ืื ืื ืืจืขื ืฆื ืื ืคึผืืกื ืืืจื UART CP2102. ืืืขื ืงืึธื ื ืขืงืืขื ืฆื ืึท ืคึผืืกื, ืื ืืืื ืืื ืืจืืืก /dev/ttyUSB[0-N], ืืืืฉืึทืืืึทืื /dev/ttyUSB0.
ืคึผืึธืืึธ
ืืืฆื ืืึธืื ืก ืงืึทืืขืจ ืคึผืึธืืึธ, ืืื ืืืฉืขื ืขืจืืื ืกืงืขืืขื ืงืึธื ืคึฟืึทืจ ืืจืืขืื ืืื ืืื ืืืขืจ ืืจืขื.
pogo
ืืื ืืื ืฉืืื ืืืฉืืคื ืืขื ืงืึธื, ืืึธืื ืืื ืื ืืึทืื ืขืก ืืืืืขืจ ืืขืงืข-> ื ืืึท.
ืืืจ ืืึทืงืืืขื ืื ืคืืืืขื ืืข:
ืืื ืืืขืจ ืืืื (ืืื ืืขืจ ืฆืืงืื ืคึฟื, ืืืจื ืืืื, ืืืจ ืืืื ืขื ืื ืืืืืืืืืจื ืืืื) ืืื ืืืืืืง ืืื ืืื ืฆืืืื ืงืึธื ืืจืึธื ืงืึทืืึทื ืื: ืคืขืกืืฉืืขืื & ืืึทืฆืขืื.
ืขืก ืืืื ืืืื ืึธื ืืขืคืืื ืืื ืื ื ืืืืืง ืึทืืจืืืืืฅ:
ืืืื ืคืึทืจืืึธื - ืคืขืืืงืืึทื ืืืึทืืืขืก ืืืึธืก ืืืจ ืึทืจืืืขืจืคืืจื ืฆื ืื ืืืื ืฆื ืื ืืฉืึทืืืื ืขืก ืคึฟืึทืจ ืื ืืคึผืก ืืจืขื, ืืืจ ืืึทืจืคึฟื ืฆื ืึทืจืืืขืจืคืืจื ืื ื ืึธืืขื ืคืื ืื ืืจืขื ืืื ืื ืกืืกืืขื com="/dev/ttyUSB0" ืืื ืงืึทื ืคึผืึธืจื ืืืืงืืึทื ืืึทืืืจืึทื = 9600
ืงืึทืืึทื ืื - ืงืึทืืึทื ืื ืฆื ืงืึธื ืืจืึธืืืจื ืืื ืืืขืจ ืืืื ืืื ืงืขื ืขื ืืืื ืึทืจืืืืขื ืื ืืื ืึท ืฆืืจืืงืงืืืขื ืืืขืจื.
- ืฉืืึทื - ืงืขืจื ืื ืงืจืึทื ื ืฉืืึทื, ืคืื ืืืขืจืืงืข
- STATUS - ืงืขืจื ืืขื ืงืจืึทื ื ืกืืึทืืืก, ืืึธืก ืืื ืืขืจ ืืขืจืืึทื ื ืคืื ืื ืฉืืจืืงื ืฉืืึทื
- GPSArray - ืงืขืจื ืืื ืืคึผืก ืฉืืจืืงื ืืื ืื ืคืึธืจืขื DevVarCharArray
ืืืืึทืืขืจ, ืฉืืขืื ืื ืืืื ืึทืืจืืืืืฅ ืืืึธืก ืงืขื ืขื ืืืื ืืืืขื ืขื / ืืขืฉืจืืื ืฆื / ืคึฟืื ืขืก.
ืกืงืึทืืึทืจ ืึทืืจืืืืืฅ - ืคึผืฉืื ืึทืืจืืืืืฅ (ืฉืืจืืงื, ืฉืืจืืงื, ืืึทื ื, ืืื"ื ื)
ืกืคึผืขืงืืจืื ืึทืืจืืืืืฅ - ืืืื-ืืืืขื ืฉืึทื ืึทื ืขืจืืื
ืืืื ืึทืืจืืืืืฅ - ืฆืืืื-ืืืืขื ืฉืึทื ืึทื ืขืจืืื
ืืืขืจืืงืข - ืื ืฉืืึทื ืืื ืืืึธืก ืืื ืืืขืจ ืืืื ืืื ืืืื.
- OPEN โ ืื ืืืื ืืื ืึธืคื.
- ื ืึธืขื ื - ืื ืืืื ืืื ืคืืจืืืื.
- FAILT - ืืขืืช.
- ON - ืืึทืงืืืขื ืืึทืื ืคืื ืื ืืืื.
- ืึทืืืขืง - ืงืืื ืืึทืื ืคืื ืื ืืืื.
ืืืึทืฉืคึผืื ืคืื ืึทืืื ื ืึท ืึทืืจืืืืื gps_string:
ืคึผืึธืืืื ื ืฆืืึทื ืฆืืื ืืื MS, ืืื ืึธืคื ืื gps_string ืืืขืจื ืืืขื ืืืื ืืขืจืืืึทื ืืืงื. ืืืื ืื ืืขืจืืืึทื ืืืงื ืฆืืื ืืื ื ืืฉื ืกืคึผืขืกืืคืืขื, ืื ืึทืืจืืืืื ืืืขื ืืืื ืืขืจืืืึทื ืืืงื ืืืืื ืืืืฃ ืืขืื.
ืืขืฉืขื:
ืืืฆื ืืืจ ืืึทืจืคึฟื ืฆื ืืืฉืขื ืขืจืืื ืื ืงืึธื ืืขืงืข-> ืืืฉืขื ืขืจืืื
ืืืจื ืคืขืืืงืืึทื, ืื Makefile ืืื ื ืืฉื ืืืฉืขื ืขืจืืืืึทื ืืขืจ ืขืจืฉืืขืจ ืืึธื ืืืจ ืืึทืจืคึฟื ืฆื ืงืึธื ืืจืึธืืืจื ืื ืงืขืกืื ืฆื ืฉืึทืคึฟื ืขืก. ืืึธืก ืืื ืืขืืื ืึทืืื ืึทื ืื ืขื ืืขืจืื ืืขื ืืขืืืื ืฆื ืขืก ืืขื ืขื ื ืืฉื ืืืืกืืขืืขืงื ืืขืฉืึทืก ืึท ื ืืึทืข ืืืจ. ื ืึธื ืืืฉืืคื ืขืก ืึทืืึธื ืืื ืงืึทื ืคืืืืขืจื ืขืก ืคึฟืึทืจ ืืืื ืคึผืจืืืขืงื (ืจืขืืืกืืจืืจื ืืึทืืืื ื ืฉืืืกืืขื, ื ืึธื ืืขืงืขืก), ืืืจ ืงืขื ืขื ืคืึทืจืืขืกื ืืืขืื ืืื.
ืืืฆื ืืึธืื ืก ืืึทื ืืืืฃ ืฆื ืคึผืจืึธืืจืึทืืืื ื. ืคึผืึธืืึธ ืืื ืืืฉืขื ืขืจืืืืึทื ืื ืคืืืืขื ืืข ืคึฟืึทืจ ืืื ืื:
ืืืจ ืืืขืื ืืืื ืืื ืืขืจืขืกืืจื ืืื NEO6M.cpp & NEO6M.h. ืืึธืืืจ ื ืขืืขื ืึท ืืืึทืฉืคึผืื ืคืื ืึท ืงืืึทืก ืงืึทื ืกืืจืึทืงืืขืจ:
NEO6M::NEO6M(Tango::DeviceClass *cl, string &s)
: TANGO_BASE_CLASS(cl, s.c_str())
{
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
init_device();
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
}
ืืืึธืก ืืื ืืึธืจื ืืื ืืืึธืก ืืื ืืืืืืืง ืืึธ? ืื init_device () ืคึฟืื ืงืฆืืข ืึทืืึทืงืืืฅ ืืึผืจืื ืคึฟืึทืจ ืืื ืืืขืจ ืึทืืจืืืืืฅ: gps_string & gps_array, ืึธืืขืจ ืขืก ืืื ื ืืฉื ืืืืืืืง. ืื ืืขืจืกื ืืืืืืืง ืืึทื ืืึธ, ืืืก ืืขื ืขื ืื ืืึทืืขืจืงืื ืืขื:
/*----- PROTECTED REGION ID(NEO6M::constructor_1) ENABLED START -----*/
.......
/*----- PROTECTED REGION END -----*/ // NEO6M::constructor_1
ืึทืืฅ ืืืึธืก ืืื ืืื ืืขื ืืึทืืขืจืงืื ื ืืืึธืง ืืืขื ื ืืฉื ืืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื ืคึผืึธืืึธ ืืขืฉืึทืก ืกืึทืืกืึทืงืืืึทื ื ืงืึธื ืจืืืืฉืขื ืขืจืืืฉืึทื ื ืจืืง ืืืืขืง!. ืึทืืฅ ืืืึธืก ืืื ื ืืฉื ืืื ืืืึทืงืก ืืืขื ืืืื! ืืึธืก ืืขื ืขื ืื ืขืจืืขืจ ืืื ืืืจ ืงืขื ืขื ืคึผืจืึธืืจืึทื ืืื ืืึทืื ืืื ืืืขืจ ืืืืืขื ืข ืจืขืืืงืฆืืข.
ืืืฆื ืืืึธืก ืืขื ืขื ืื ืืืืคึผื ืคืึทื ืืงืฉืึทื ื ืื ืงืืึทืก ืึผืืื? NEO6M:
void always_executed_hook();
void read_attr_hardware(vector<long> &attr_list);
void read_gps_string(Tango::Attribute &attr);
void read_gps_array(Tango::Attribute &attr);
ืืืขื ืืืจ ืืืืื ืฆื ืืืืขื ืขื ืื ืึทืืจืืืืื ืืืขืจื gps_string, ืื ืคืึทื ืืงืฉืึทื ื ืืืขื ืืืื ืืขืจืืคื ืืื ืื ืคืืืืขื ืืข ืกืืจ: ืฉืืขื ืืืง_ืขืงืกืึทืงืืืืึทื_ืงืจืืง, read_attr_hardware ะธ read_gps_string. Read_gps_string ืืืขื ืคึผืืึธืืืืจื gps_string ืืื ืื ืืืขืจื.
void NEO6M::read_gps_string(Tango::Attribute &attr)
{
DEBUG_STREAM << "NEO6M::read_gps_string(Tango::Attribute &attr) entering... " << endl;
/*----- PROTECTED REGION ID(NEO6M::read_gps_string) ENABLED START -----*/
// Set the attribute value
*this->attr_gps_string_read = Tango::string_dup(this->gps.c_str());
attr.set_value(attr_gps_string_read);
/*----- PROTECTED REGION END -----*/ // NEO6M::read_gps_string
}
ืืึทืืืื ื
ืืืื ืฆื ืื ืืงืืจ ืืขืงืข ืืื:
make
ืืขืจ ืคึผืจืึธืืจืึทื ืืืขื ืืืื ืงืึทืืคึผืืืื ืืื ืื ~/DeviceServers ืืขืงืข.
tango-cs@tangobox:~/DeviceServers$ ls
NEO6M
JIVE
jive
ืขืก ืืขื ืขื ืฉืืื ืขืืืขืืข ืืขืืืืกืขืก ืืื ืื ืืึทืืึทืืืืก, ืืึธืื ืืื ืื ืืืฆื ืืึทืื ืืื ืืืขืจ ืจืขืืึทืืืจื-> ืฉืึทืคึฟื ืกืขืจืืืืจืขืจ
ืืืฆื ืืึธืื ืืื ืื ืคึผืจืืืืจื ืฆื ืคืึทืจืืื ืื ืฆื ืืื:
ืืึธืจื ืืฉื ืืืขื ืึทืจืืขืื, ืขืจืฉืืขืจ ืืืจ ืืึทืจืคึฟื ืฆื ืืืืคื ืืื ืืืขืจ ืคึผืจืึธืืจืึทื:
sudo ./NEO6M neo6m -v2
ืืื ืงืขื ื ืึธืจ ืคืึทืจืืื ืื ืฆื ืื ืงืึธืืคึผืึธืจื ืืื ืจืขืื ืืืึธืจืฆืโ ื . v - ืืึธืืื ื ืืืจืื.
ืืืฆื ืืืจ ืงืขื ืขื ืคืึทืจืืื ืื:
ืงืืืขื ื
ืคืื ืงืืจืก, ืงืืงื ืืื ืืืืืขืจ ืืื ืืื ืืื ืืจืึทืคืืงืก, ืึธืืขืจ ืืืจ ืืึทืจืคึฟื ืขืคึผืขืก ืืขืจ ื ืืฆืืง. ืืึธืืืจ ืฉืจืืึทืื ืึท ืงืืืขื ื ืืืึธืก ืืืขื ืคืึทืจืืื ืื ืฆื ืืื ืืืขืจ ืืืื ืืื ื ืขืืขื ืจืืืื ืื ืคืื ืขืก.
#include <tango.h>
using namespace Tango;
int main(int argc, char **argv) {
try {
//
// create a connection to a TANGO device
//
DeviceProxy *device = new DeviceProxy("NEO6M/neo6m/1");
//
// Ping the device
//
device->ping();
//
// Execute a command on the device and extract the reply as a string
//
vector<Tango::DevUChar> gps_array;
DeviceData cmd_reply;
cmd_reply = device->command_inout("GPSArray");
cmd_reply >> gps_array;
for (int i = 0; i < gps_array.size(); i++) {
printf("%c", gps_array[i]);
}
puts("");
//
// Read a device attribute (string data type)
//
string spr;
DeviceAttribute att_reply;
att_reply = device->read_attribute("gps_string");
att_reply >> spr;
cout << spr << endl;
vector<Tango::DevUChar> spr2;
DeviceAttribute att_reply2;
att_reply2 = device->read_attribute("gps_array");
att_reply2.extract_read(spr2);
for (int i = 0; i < spr2.size(); i++) {
printf("%c", spr2[i]);
}
puts("");
} catch (DevFailed &e) {
Except::print_exception(e);
exit(-1);
}
}
ืืื ืฆื ืงืึธืืคึผืืืฆืืจื:
g++ gps.cpp -I/usr/local/include/tango -I/usr/local/include -I/usr/local/include -std=c++0x -Dlinux -L/usr/local/lib -ltango -lomniDynamic4 -lCOS4 -lomniORB4 -lomnithread -llog4tango -lzmq -ldl -lpthread -lstdc++
ืืขืจ ืจืขืืืืืึทื:
tango-cs@tangobox:~/workspace/c$ ./a.out
$GPRMC,,V,,,,,,,,,,N*53
$GPRMC,,V,,,,,,,,,,N*53
$GPRMC,,V,,,,,,,,,,N*53
ืืืจ ืืึทืงืืืขื ืื ืจืขืืืืืึทื ืืื ืึท ืืึทืคึฟืขื ืฆืืจืืงืงืืืขื, ืืขื ืืืขื ืื ืึทืืจืืืืืฅ ืคืื ืึท ืฉืืจืืงื ืืื ืึท ืืขื ืืข ืคืื โโืืืชืืืช.
ืจืขืคึฟืขืจืขื ืฆื
ืืื ืืขืฉืจืืื ืืขื ืึทืจืืืงื ืคึฟืึทืจ ืืื, ืืืืึทื ื ืึธื ืึท ืืฉืขืช ืืื ืึธื ืืืืื ืฆื ืคืึทืจืืขืกื ืืื ืืื ืืืึธืก ืฆื ืืึธื.
ืืื ืง ืืืจ ืคึฟืึทืจ ืืืืขืจ ืืคืืขืจืงืืึทืืงืืึทื.
ืืงืืจ: www.habr.com