Skip to content

Commit b8d7942

Browse files
ics.NeoDevice.repr displays name and serial number.
-example output: <ics.NeoDevice neoVI FIRE2 CY1234> Signed-off-by: David Rebbe <drebbe@intrepidcs.com>
1 parent fe87c8a commit b8d7942

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

include/object_neo_device.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,34 @@ static int neo_device_object_setattr(PyObject *o, PyObject *name, PyObject *valu
114114
return PyObject_GenericSetAttr(o, name, value);
115115
}
116116

117+
// Shamelessly copied from base36enc
118+
static PyObject* convert_to_base36(unsigned long value)
119+
{
120+
char base36[37] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
121+
/* log(2**64) / log(36) = 12.38 => max 13 char + '\0' */
122+
char buffer[100];
123+
unsigned int offset = sizeof(buffer);
124+
125+
buffer[--offset] = '\0';
126+
do {
127+
buffer[--offset] = base36[value % 36];
128+
} while (value /= 36);
129+
return Py_BuildValue("s", &buffer[offset]);
130+
}
131+
132+
static PyObject* neo_device_object_tp_repr(PyObject* o)
133+
{
134+
// example output: <ics.NeoDevice neoVI FIRE2 CY1234>
135+
neo_device_object* nd = (neo_device_object*)(o);
136+
// Check range is AA0000-ZZZZZZ
137+
PyObject* sn = NULL;
138+
if (621457920 <= nd->dev.SerialNumber && nd->dev.SerialNumber <= 2176782335)
139+
sn = convert_to_base36(nd->dev.SerialNumber);
140+
else
141+
sn = PyUnicode_FromFormat("%lu", nd->dev.SerialNumber);
142+
return PyUnicode_FromFormat("<" MODULE_NAME "." NEO_DEVICE_OBJECT_NAME " %U %U>", nd->name, sn);
143+
}
144+
117145
extern PyTypeObject neo_device_object_type;
118146

119147
// Copied from tupleobject.h

src/object_neo_device.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ PyTypeObject neo_device_object_type = {
1010
0, /* tp_getattr */
1111
0, /* tp_setattr */
1212
0, /* tp_reserved */
13-
0, /* tp_repr */
13+
neo_device_object_tp_repr, /* tp_repr */
1414
0, /* tp_as_number */
1515
0, /* tp_as_sequence */
1616
0, /* tp_as_mapping */

0 commit comments

Comments
 (0)