Skip to content

Commit

Permalink
feat(android): function getAvaiablePorts support android
Browse files Browse the repository at this point in the history
  • Loading branch information
itas109 committed Feb 1, 2025
1 parent 4ce4038 commit 69b6468
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 28 deletions.
4 changes: 2 additions & 2 deletions examples/CommAndroid/app/src/main/cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,5 @@ set(CMAKE_SWIG_FLAGS -package ${JAVA_GEN_PACKAGE})
# swig -java -c++ -outdir generate -I../../include -package com.itas109.cserialport.jni cserialport.i
swig_add_library(${PROJECT_NAME} LANGUAGE java SOURCES cserialport.i ${CSerialPortSourceFiles})

# find_library( log-lib log )
# target_link_libraries( ${PROJECT_NAME} ${log-lib} )
find_library( log-lib log )
target_link_libraries( ${PROJECT_NAME} ${log-lib} )
22 changes: 20 additions & 2 deletions include/CSerialPort/ilog.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@

#include "iutils.hpp"

#if defined(__ANDROID__)
#include <android/log.h>
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, "CSerialPort", __VA_ARGS__)
#endif

#ifdef _WIN32
#ifndef __func__
#define __func__ __FUNCTION__
Expand Down Expand Up @@ -104,6 +109,9 @@ class ILog
char logMessage[2048];
itas109::IUtils::strFormat(logMessage, 2048, "%s [%s] %s - %s\n", currentTime, levelStr, function, formatMessage);
m_logFile << logMessage;
#if defined(__ANDROID__)
LOGI("%s", logMessage);
#endif
m_logFile.flush();
printf("%s", logMessage);
}
Expand All @@ -117,10 +125,20 @@ class ILog
itas109::IUtils::strncpy(fileName, prefix, 40);
getCurrentDate(fileName + itas109::IUtils::strlen(prefix));
itas109::IUtils::strncat(fileName, ".log", 45);
m_logFile.open(fileName, std::ios::out | std::ios::app);
char filePath[256];
#if defined(__ANDROID__)
std::ifstream cmdlineFile("/proc/self/cmdline");
std::string packageName;
std::getline(cmdlineFile, packageName);
itas109::IUtils::strFormat(filePath, 256, "/data/data/%s/%s", packageName.c_str(), fileName);
LOGI("log file path: %s", filePath);
#else
itas109::IUtils::strFormat(filePath, 256, "%s", fileName);
#endif
m_logFile.open(filePath, std::ios::out | std::ios::app);
if (!m_logFile.is_open())
{
fprintf(stderr, "could not open file %s\n", fileName);
fprintf(stderr, "could not open file %s\n", filePath);
}
}

Expand Down
47 changes: 26 additions & 21 deletions include/CSerialPort/iutils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@
#define MACRO_TO_STRING(x) STRINGIFY(x)

// get cpu cores headers
#if defined(_WIN32)
#if defined(__APPLE__)
#include <sys/sysctl.h> // sysctlbyname
#elif defined(__ANDROID__)
#include <unistd.h> // sysconf
#include <sys/system_properties.h> // __system_property_get
#elif defined(_WIN32)
#include <windows.h> // GetSystemInfo
#include <tchar.h> // _T

Expand All @@ -28,12 +33,9 @@

#elif defined(__linux__)
#include <unistd.h> // sysconf
#elif defined(__APPLE__)
#include <sys/sysctl.h> // sysctlbyname
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
#include <sys/sysctl.h> // sysctlbyname
#elif defined(__ANDROID__)
#include <unistd.h> // sysconf

#elif defined(__unix__)
#include <unistd.h> // sysconf
#else
Expand Down Expand Up @@ -337,14 +339,14 @@ class IUtils
return NULL;
}

#if defined(_WIN32)
#if defined(__APPLE__)
strncpy(osName, "macOS", len);
#elif defined(__ANDROID__)
strncpy(osName, "Android", len);
#elif defined(_WIN32)
strncpy(osName, "Windows", len);
#elif defined(__linux__)
strncpy(osName, "Linux", len);
#elif defined(__APPLE__)
strncpy(osName, "MacOS", len);
#elif defined(__ANDROID__)
strncpy(osName, "Android", len);
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
strncpy(osName, "BSD", len);
#elif defined(__unix__)
Expand All @@ -362,7 +364,14 @@ class IUtils
return NULL;
}

#if defined(_WIN32)
#if defined(__APPLE__)
strncpy(productName, "macOS", len);
#elif defined(__ANDROID__)
char version[15];
__system_property_get("ro.build.version.release", version);
strncpy(productName, "Android ", len);
strncat(productName, version, 15);
#elif defined(_WIN32)
int majorVersion = 0;
int minorVersion = 0;
HKEY hKey;
Expand Down Expand Up @@ -446,10 +455,6 @@ class IUtils
}

strncpy(productName, prettyName, len);
#elif defined(__APPLE__)
strncpy(productName, "MacOS", len);
#elif defined(__ANDROID__)
strncpy(productName, "Android", len);
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
strncpy(productName, "BSD", len);
#elif defined(__unix__)
Expand All @@ -464,17 +469,17 @@ class IUtils
{
int numOfProcessors = 0;

#if defined(_WIN32)
#if defined(__APPLE__)
size_t size = sizeof(numOfProcessors);
sysctlbyname("hw.ncpu", &numOfProcessors, &size, NULL, 0);
#elif defined(__ANDROID__)
numOfProcessors = sysconf(_SC_NPROCESSORS_ONLN);
#elif defined(_WIN32)
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
numOfProcessors = sysInfo.dwNumberOfProcessors;
#elif defined(__linux__)
numOfProcessors = sysconf(_SC_NPROCESSORS_ONLN);
#elif defined(__APPLE__)
size_t size = sizeof(numOfProcessors);
sysctlbyname("hw.ncpu", &numOfProcessors, &size, NULL, 0);
#elif defined(__ANDROID__)
numOfProcessors = sysconf(_SC_NPROCESSORS_ONLN);
#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__)
size_t size = sizeof(numOfProcessors);
sysctlbyname("hw.ncpu", &numOfProcessors, &size, NULL, 0);
Expand Down
12 changes: 9 additions & 3 deletions src/SerialPortInfoUnixBase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@
#include <unistd.h> // readlink close

#ifdef I_OS_ANDROID
#include <libgen.h> //basename(POSIX)
// #include <libgen.h> //basename(POSIX)
const char *basename(const char *path) // basename(GNU)
{
const char *p = strrchr(path, '/');
return p ? p + 1 : path;
}
#endif
#include <string.h> //basename(GNU) memset strcmp

Expand Down Expand Up @@ -43,7 +48,7 @@ void getDriver(const char *tty, char *driverName)
{
// /sys/class/tty/ttyUSB0/device/driver
char driverDir[256] = {0};
itas109::IUtils::strFormat(driverDir, 256, "%s/driver", deviceDir);
itas109::IUtils::strFormat(driverDir, 256, "%s/driver", (const char *)deviceDir); // android need const char*

char buffer[256] = {0};
// VCs, ptys, etc don't have /sys/class/tty/<tty>/device/driver
Expand Down Expand Up @@ -171,7 +176,8 @@ void getTtyPortInfoListLinux(std::vector<const char *> &ttyComList, std::vector<
}

#ifdef I_OS_ANDROID
static int _versionsort(const struct dirent **a, const struct dirent **b) {
static int _versionsort(const struct dirent **a, const struct dirent **b)
{
return strcmp((*a)->d_name, (*b)->d_name);
}
#endif
Expand Down

0 comments on commit 69b6468

Please sign in to comment.