Skip to content

Commit dc5efcc

Browse files
add get_firmware_variant() (#225)
1 parent 129ee43 commit dc5efcc

File tree

3 files changed

+66
-5
lines changed

3 files changed

+66
-5
lines changed

include/methods.h

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,11 @@ extern "C"
101101
PyObject* meth_flash_accessory_firmware(PyObject* self, PyObject* args);
102102
PyObject* meth_get_accessory_firmware_version(PyObject* self, PyObject* args);
103103
PyObject* meth_set_safe_boot_mode(PyObject* self, PyObject* args);
104-
PyObject* meth_get_device_name(PyObject* self, PyObject* args); // icsneoGetDeviceName
105-
PyObject* meth_get_imei(PyObject* self, PyObject* args); // icsneoGetIMEI
106-
PyObject* meth_get_component_versions(PyObject* self, PyObject* args); // icsneoGetComponentVersions
104+
PyObject* meth_get_device_name(PyObject* self, PyObject* args); // icsneoGetDeviceName
105+
PyObject* meth_get_imei(PyObject* self, PyObject* args); // icsneoGetIMEI
106+
PyObject* meth_get_component_versions(PyObject* self, PyObject* args); // icsneoGetComponentVersions
107107
PyObject* meth_request_set_neovi_miscio(PyObject* self, PyObject* args); // icsneoRequestSetNeoVIMiscIO
108+
PyObject* meth_get_firmware_variant(PyObject* self, PyObject* args); // icsneoGetFirmwareVariant
108109

109110
#ifdef _cplusplus
110111
}
@@ -2003,6 +2004,21 @@ extern "C"
20032004
"\tNone\n" \
20042005
"\n"
20052006

2007+
#define _DOC_GET_FIRMWARE_VARIANT \
2008+
MODULE_NAME ".get_firmware_variant(device) -> Int\n" \
2009+
"\n" \
2010+
"Gets firmware variant of the device.\n" \
2011+
"\n" \
2012+
"Args:\n" \
2013+
"\tdevice (:class:`" MODULE_NAME ".PyNeoDeviceEx`): :class:`" MODULE_NAME ".PyNeoDeviceEx`\n\n" \
2014+
"\n" \
2015+
"Raises:\n" \
2016+
"\t:class:`" MODULE_NAME ".RuntimeError`\n" \
2017+
"\n" \
2018+
"Returns:\n" \
2019+
"\t(:class:`int`): :class:`int`: variant\n" \
2020+
"\n"
2021+
20062022
extern PyMethodDef IcsMethods[];
20072023

20082024
#endif // _METHODS_H_

src/ics/py_neo_device_ex.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,3 +506,7 @@ def get_component_versions(self, *args, **kwargs):
506506
def request_set_neovi_miscio(self, *args, **kwargs):
507507
"see ics.request_set_neovi_miscio for details on arguments."
508508
return ics.request_set_neovi_miscio(self, *args, **kwargs)
509+
510+
def get_firmware_variant(self, *args, **kwargs):
511+
"see ics.get_firmware_variant for details on arguments."
512+
return ics.get_firmware_variant(self, *args, **kwargs)

src/methods.cpp

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -621,6 +621,12 @@ PyMethodDef IcsMethods[] = {
621621
meth_request_set_neovi_miscio,
622622
METH_VARARGS,
623623
_DOC_REQUEST_SET_NEOVI_MISCIO),
624+
_EZ_ICS_STRUCT_METHOD("get_firmware_variant",
625+
"icsneoGetFirmwareVariant",
626+
"GetFirmwareVariant",
627+
meth_get_firmware_variant,
628+
METH_VARARGS,
629+
_DOC_GET_FIRMWARE_VARIANT),
624630

625631
{ "override_library_name", (PyCFunction)meth_override_library_name, METH_VARARGS, _DOC_OVERRIDE_LIBRARY_NAME },
626632
{ "get_library_path", (PyCFunction)meth_get_library_path, METH_NOARGS, "" },
@@ -5029,8 +5035,8 @@ PyObject* meth_uart_read(PyObject* self, PyObject* args)
50295035
size_t bytesActuallyRead = 0;
50305036
// int _stdcall icsneoUartRead(void* hObject, const EUartPort_t uart, void* bData, const size_t bytesToRead,
50315037
// size_t* bytesActuallyRead, uint8_t* flags)
5032-
ice::Function<int __stdcall(void*, const EUartPort_t, void*, const size_t, size_t*, uint8_t*)>
5033-
icsneoUartRead(lib, "icsneoUartRead");
5038+
ice::Function<int __stdcall(void*, const EUartPort_t, void*, const size_t, size_t*, uint8_t*)> icsneoUartRead(
5039+
lib, "icsneoUartRead");
50345040
auto gil = PyAllowThreads();
50355041
if (!icsneoUartRead(handle, port, buffer, bytesToRead, &bytesActuallyRead, &flags)) {
50365042
gil.restore();
@@ -5611,3 +5617,38 @@ PyObject* meth_request_set_neovi_miscio(PyObject* self, PyObject* args) // icsne
56115617
return set_ics_exception(exception_runtime_error(), (char*)ex.what());
56125618
}
56135619
}
5620+
5621+
PyObject* meth_get_firmware_variant(PyObject* self, PyObject* args) // icsneoGetFirmwareVariant
5622+
{
5623+
(void)self;
5624+
PyObject* obj = NULL;
5625+
if (!PyArg_ParseTuple(args, arg_parse("O:", __FUNCTION__), &obj)) {
5626+
return NULL;
5627+
}
5628+
if (!PyNeoDeviceEx_CheckExact(obj)) {
5629+
return set_ics_exception(exception_runtime_error(), "Argument must be of type " MODULE_NAME ".PyNeoDeviceEx");
5630+
}
5631+
void* handle = NULL;
5632+
if (!PyNeoDeviceEx_GetHandle(obj, &handle)) {
5633+
return NULL;
5634+
}
5635+
try {
5636+
ice::Library* lib = dll_get_library();
5637+
if (!lib) {
5638+
char buffer[512];
5639+
return set_ics_exception(exception_runtime_error(), dll_get_error(buffer));
5640+
}
5641+
// int __stdcall icsneoGetFirmwareVariant(void* hObject, uint32_t* variant)
5642+
ice::Function<int __stdcall(void*, uint32_t*)> icsneoGetFirmwareVariant(lib, "icsneoGetFirmwareVariant");
5643+
auto gil = PyAllowThreads();
5644+
uint32_t variant = 0;
5645+
if (!icsneoGetFirmwareVariant(handle, &variant)) {
5646+
gil.restore();
5647+
return set_ics_exception(exception_runtime_error(), "icsneoGetFirmwareVariant() Failed");
5648+
}
5649+
gil.restore();
5650+
return Py_BuildValue("I", variant);
5651+
} catch (ice::Exception& ex) {
5652+
return set_ics_exception(exception_runtime_error(), (char*)ex.what());
5653+
}
5654+
}

0 commit comments

Comments
 (0)