From 9c2cd6ba71f8a4dea9613232cf75edf0bc3d3016 Mon Sep 17 00:00:00 2001 From: Goten Xiao Date: Wed, 21 May 2008 08:12:10 +0100 Subject: [PATCH] setled implemented Range checking on several functions minor cleanups --- PyX52.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 13 deletions(-) diff --git a/PyX52.c b/PyX52.c index ad045a7..a6f7526 100644 --- a/PyX52.c +++ b/PyX52.c @@ -21,9 +21,9 @@ static int PyX52_X52_init(PyX52_X52_object *); static void PyX52_X52_dealloc(PyX52_X52_object *); static PyObject *PyX52_X52_gettype(PyX52_X52_object *); -static PyObject *PyX52_X52_settext(PyX52_X52_object *, PyObject *); +static PyObject *PyX52_X52_settext(PyX52_X52_object *, PyObject *, PyObject *); static PyObject *PyX52_X52_setbri(PyX52_X52_object *, PyObject *, PyObject *); -static PyObject *PyX52_X52_setled(PyX52_X52_object *, PyObject *); +static PyObject *PyX52_X52_setled(PyX52_X52_object *, PyObject *, PyObject *); static PyObject *PyX52_X52_settime(PyX52_X52_object *, PyObject *, PyObject *); static PyObject *PyX52_X52_setoffs(PyX52_X52_object *, PyObject *, PyObject *); static PyObject *PyX52_X52_setsecond(PyX52_X52_object *, PyObject *, PyObject *); @@ -78,7 +78,7 @@ PyX52_X52_gettype(PyX52_X52_object *self) } static PyObject * -PyX52_X52_settext(PyX52_X52_object *self, PyObject *args) +PyX52_X52_settext(PyX52_X52_object *self, PyObject *args, PyObject *kws) { if (x52_gettype(self->handle) == DEV_YOKE) { @@ -95,20 +95,37 @@ PyX52_X52_settext(PyX52_X52_object *self, PyObject *args) static PyObject * PyX52_X52_setbri(PyX52_X52_object *self, PyObject *args, PyObject *kws) { - if (x52_gettype(self->handle) == DEV_YOKE) { PyErr_SetString(PyExc_RuntimeError, "Cannot call setbri on this device."); return NULL; } - int bri = 0; int mode = 0; + int bri = 0; static char *kwlist[] = {"mode", "bri", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kws, "ii", kwlist, &mode, &bri)) return NULL; + if (mode != 0 && mode != 1) + { + PyErr_SetString(PyExc_AttributeError, "Invalid mode."); + return NULL; + } + + if (mode == 0 && x52_gettype(self->handle) != DEV_X52PRO) + { + PyErr_SetString(PyExc_AttributeError, "Cannot set LED brightness on this device."); + return NULL; + } + + if (bri < 0 || bri > 127) + { + PyErr_SetString(PyExc_AttributeError, "Invalid brightness value."); + return NULL; + } + if (x52_setbri(self->handle, mode, bri) != 0) { PyErr_SetString(PyExc_RuntimeError, "Could not set brightness."); @@ -120,16 +137,42 @@ PyX52_X52_setbri(PyX52_X52_object *self, PyObject *args, PyObject *kws) } static PyObject * -PyX52_X52_setled(PyX52_X52_object *self, PyObject *args) +PyX52_X52_setled(PyX52_X52_object *self, PyObject *args, PyObject *kws) { - if (x52_gettype(self->handle) != DEV_X52PRO) { PyErr_SetString(PyExc_RuntimeError, "Cannot call setled on this device."); return NULL; } - int ok = PyArg_ParseTuple(args, ""); + /* + * TODO: Allow passing of a dict with LEDs/states + * TODO: Allow abstraction to button colour (i.e. PyX52.X52.buttons["coolie"].orange()) + */ + int led = 0; + int state = 0; + + static char *kwlist[] = {"led", "state", NULL}; + if (!PyArg_ParseTupleAndKeywords(args, kws, "ii", kwlist, &led, &state)) + return NULL; + + if (state != 0 && state != 1) + { + PyErr_SetString(PyExc_AttributeError, "Invalid LED state."); + return NULL; + } + + if (led < X52PRO_LED_FIRE || led > X52PRO_LED_IGREEN) + { + PyErr_SetString(PyExc_AttributeError, "Invalid LED ID."); + return NULL; + } + + if (!x52_setled(self->handle, led, state)) + { + PyErr_SetString(PyExc_RuntimeError, "Could not set LED status."); + return NULL; + } Py_INCREF(Py_None); return Py_None; @@ -142,7 +185,7 @@ PyX52_X52_settime(PyX52_X52_object *self, PyObject *args, PyObject *kws) struct tm *ltime = NULL; time_t t = time(NULL); - ltime = localtime(&t); + ltime = gmtime(&t); int hour = ltime->tm_hour; int minute = ltime->tm_min; @@ -166,7 +209,9 @@ PyX52_X52_settime(PyX52_X52_object *self, PyObject *args, PyObject *kws) static PyObject * PyX52_X52_setoffs(PyX52_X52_object *self, PyObject *args, PyObject *kws) { - + /* + * TODO: default to local timezones + */ if (x52_gettype(self->handle) == DEV_YOKE) { PyErr_SetString(PyExc_RuntimeError, "Cannot call setoffs on this device."); @@ -187,7 +232,6 @@ PyX52_X52_setoffs(PyX52_X52_object *self, PyObject *args, PyObject *kws) static PyObject * PyX52_X52_setsecond(PyX52_X52_object *self, PyObject *args, PyObject *kws) { - if (x52_gettype(self->handle) != DEV_YOKE) { PyErr_SetString(PyExc_RuntimeError, "Cannot call setsecond on this device."); @@ -196,7 +240,7 @@ PyX52_X52_setsecond(PyX52_X52_object *self, PyObject *args, PyObject *kws) struct tm *ltime; time_t t = time(NULL); - localtime_r(&t, ltime); + gmtime_r(&t, ltime); int second = ltime->tm_sec; @@ -223,7 +267,7 @@ PyX52_X52_setdate(PyX52_X52_object *self, PyObject *args, PyObject *kws) struct tm *ltime; time_t *t; time(t); - ltime = localtime(t); + ltime = gmtime(t); int year = ltime->tm_year - 100; int month = ltime->tm_mon + 1; -- 2.11.4.GIT