Merge branch 'master' into pico_sdk
This commit is contained in:
@@ -77,7 +77,8 @@ bool PICAN::openDevice() {
|
||||
}
|
||||
fcntl(sock, F_SETFL, fcntl(sock, F_GETFL) | O_NONBLOCK);
|
||||
ifreq ifr;
|
||||
strcpy(ifr.ifr_name, path().dataAscii());
|
||||
piZeroMemory(ifr);
|
||||
strncpy(ifr.ifr_name, path().dataAscii(), sizeof(ifr.ifr_name));
|
||||
piCout << "PICAN try to get interface index...";
|
||||
if (ioctl(sock, SIOCGIFINDEX, &ifr) < 0) {
|
||||
piCoutObj << "Error! while determin the interface ioctl";
|
||||
@@ -128,8 +129,8 @@ ssize_t PICAN::readDevice(void * read_to, ssize_t max_size) {
|
||||
#ifdef PIP_CAN
|
||||
if (sock == -1) return -1;
|
||||
// piCout << "PICAN read";
|
||||
can_frame frame;
|
||||
ssize_t ret = 0;
|
||||
can_frame frame = {};
|
||||
ssize_t ret = 0;
|
||||
if (PRIVATE->event.wait(sock)) ret = ::read(sock, &frame, sizeof(can_frame));
|
||||
if (ret < 0) { /*piCoutObj << "Error while read CAN frame " << ret;*/
|
||||
return -1;
|
||||
|
||||
@@ -373,15 +373,16 @@ PIVector<PIFile::FileInfo> PIDir::entries(const PIRegularExpression & regexp) {
|
||||
closedir(dir);
|
||||
}
|
||||
# else
|
||||
dirent ** list;
|
||||
int cnt = scandir(p.data(),
|
||||
&list,
|
||||
0,
|
||||
dirent ** list = nullptr;
|
||||
int cnt = scandir(p.data(),
|
||||
&list,
|
||||
0,
|
||||
# if defined(MAC_OS) || defined(ANDROID) || defined(BLACKBERRY)
|
||||
alphasort);
|
||||
alphasort);
|
||||
# else
|
||||
versionsort);
|
||||
# endif
|
||||
if (cnt < 0) return ret;
|
||||
for (int i = 0; i < cnt; ++i) {
|
||||
ret << PIFile::fileInfo(dp + PIString(list[i]->d_name));
|
||||
free(list[i]);
|
||||
|
||||
@@ -1207,8 +1207,10 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
||||
strcpy(ir.ifr_name, in.dataAscii());
|
||||
if (ioctl(s, SIOCGIFHWADDR, &ir) == 0) ci.mac = macFromBytes(PIByteArray(ir.ifr_hwaddr.sa_data, 6));
|
||||
if (ioctl(s, SIOCGIFADDR, &ir) >= 0) ci.address = getSockAddr(&ir.ifr_addr);
|
||||
if (ioctl(s, SIOCGIFNETMASK, &ir) >= 0) ci.netmask = getSockAddr(&ir.ifr_addr);
|
||||
ioctl(s, SIOCGIFMTU, &ci.mtu);
|
||||
if (ioctl(s, SIOCGIFNETMASK, &ir) >= 0) ci.netmask = getSockAddr(&ir.ifr_netmask);
|
||||
if (ioctl(s, SIOCGIFMTU, &ir) == 0) {
|
||||
ci.mtu = ir.ifr_mtu;
|
||||
}
|
||||
if (ci.address == "127.0.0.1") ci.flags |= PIEthernet::ifLoopback;
|
||||
il << ci;
|
||||
}
|
||||
@@ -1302,7 +1304,7 @@ PINetworkAddress PIEthernet::interfaceAddress(const PIString & interface_) {
|
||||
# else
|
||||
struct ifreq ifr;
|
||||
piZeroMemory(ifr);
|
||||
strcpy(ifr.ifr_name, interface_.dataAscii());
|
||||
strncpy(ifr.ifr_name, interface_.dataAscii(), sizeof(ifr.ifr_name));
|
||||
int s = ::socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if (s != -1) {
|
||||
ioctl(s, SIOCGIFADDR, &ifr);
|
||||
|
||||
@@ -1291,6 +1291,11 @@ PIVector<PISerial::DeviceInfo> PISerial::availableDevicesInfo(bool test) {
|
||||
if (!rok) {
|
||||
ret.remove(i);
|
||||
--i;
|
||||
#ifdef WINDOWS
|
||||
CloseHandle(hComm);
|
||||
#else
|
||||
::close(fd);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
# ifdef WINDOWS
|
||||
|
||||
@@ -144,6 +144,9 @@ bool PISharedMemory::openDevice() {
|
||||
::close(fd);
|
||||
if (PRIVATE->data == MAP_FAILED) {
|
||||
piCoutObj << "mmap error," << errorString();
|
||||
if (PRIVATE->owner) shm_unlink((const char *)PRIVATE->name.data());
|
||||
PRIVATE->data = nullptr;
|
||||
PRIVATE->owner = false;
|
||||
return false;
|
||||
}
|
||||
// piCoutObj << "opened" << PRIVATE->data;
|
||||
@@ -251,6 +254,7 @@ int PISharedMemory::read(void * read_to, int max_size) {
|
||||
|
||||
|
||||
int PISharedMemory::read(void * read_to, int max_size, int offset) {
|
||||
if (offset < 0 || max_size < 0 || offset > dsize - max_size) return -1;
|
||||
#ifdef WINDOWS
|
||||
if (!PRIVATE->data) return -1;
|
||||
CopyMemory(read_to, &(((char *)(PRIVATE->data))[offset]), max_size);
|
||||
@@ -271,6 +275,7 @@ int PISharedMemory::write(const void * data, int max_size) {
|
||||
|
||||
|
||||
int PISharedMemory::write(const void * data, int max_size, int offset) {
|
||||
if (offset < 0 || max_size < 0 || offset > dsize - max_size) return -1;
|
||||
#ifdef WINDOWS
|
||||
if (!PRIVATE->data) return -1;
|
||||
CopyMemory(&(((char *)(PRIVATE->data))[offset]), data, max_size);
|
||||
|
||||
@@ -106,18 +106,24 @@ bool PISPI::openDevice() {
|
||||
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MODE, &spi_mode);
|
||||
if (ret == -1) {
|
||||
piCoutObj << "can't set spi write mode";
|
||||
::close(PRIVATE->fd);
|
||||
PRIVATE->fd = -1;
|
||||
return false;
|
||||
}
|
||||
// piCoutObj << "set bits" << spi_bits;
|
||||
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_BITS_PER_WORD, &spi_bits);
|
||||
if (ret == -1) {
|
||||
piCoutObj << "can't set bits per word";
|
||||
::close(PRIVATE->fd);
|
||||
PRIVATE->fd = -1;
|
||||
return false;
|
||||
}
|
||||
// piCoutObj << "set speed" << spi_speed;
|
||||
ret = ioctl(PRIVATE->fd, SPI_IOC_WR_MAX_SPEED_HZ, &spi_speed);
|
||||
if (ret == -1) {
|
||||
piCoutObj << "can't set max write speed hz";
|
||||
::close(PRIVATE->fd);
|
||||
PRIVATE->fd = -1;
|
||||
return false;
|
||||
}
|
||||
piCoutObj << "SPI open" << path() << "speed:" << spi_speed / 1000 << "KHz"
|
||||
|
||||
Reference in New Issue
Block a user