Changeset 117 for branches/cwiidpy
- Timestamp:
- 05/22/07 16:57:41 (2 years ago)
- Files:
-
- branches/cwiidpy/Makefile (modified) (1 diff)
- branches/cwiidpy/Wiimote.c (modified) (21 diffs)
- branches/cwiidpy/cwiidmodule.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/cwiidpy/Makefile
r114 r117 8 8 9 9 LDLIBS += -lcwiid 10 CFLAGS = -fpic -W all -g -I/usr/include/python2.410 CFLAGS = -fpic -W -Wall -g -I/usr/include/python2.4 11 11 LDFLAGS = -shared -fpic 12 12 branches/cwiidpy/Wiimote.c
r114 r117 20 20 * 21 21 * ChangeLog: 22 * 2007-05-22 L. Donnie Smith <cwiid@abstrakraft.org> 23 * * changed disconnect to close 24 * * replaced command with attributes for rpt_mode, rumble, led, 25 * added request_status method 26 * * fixed memory leak in get_mesg 27 * * added function names to argument parsing errors 28 * 22 29 * 2007-05-15 L. Donnie Smith <cwiid@abstrakraft.org> 23 30 * * revised message types … … 44 51 static void Wiimote_dealloc(Wiimote *self); 45 52 static int Wiimote_init(Wiimote *self, PyObject *args, PyObject *kwds); 46 static PyObject *Wiimote_ disconnect(Wiimote *self);47 static PyObject * 48 Wiimote_enable(Wiimote *self, PyObject *args, PyObject *kwds);53 static PyObject *Wiimote_close(Wiimote *self); 54 55 static PyObject *Wiimote_enable(Wiimote *self, PyObject *args, PyObject *kwds); 49 56 static PyObject * 50 57 Wiimote_disable(Wiimote *self, PyObject *args, PyObject *kwds); 51 static PyObject * 52 Wiimote_set_mesg_callback(Wiimote *self, PyObject *args, PyObject *kwds); 58 59 static int 60 Wiimote_set_mesg_callback(Wiimote *self, PyObject *args, void *closure); 53 61 static PyObject *Wiimote_get_mesg(Wiimote *self); 54 62 static PyObject *Wiimote_get_state(Wiimote *self, void *closure); 55 static PyObject * 56 Wiimote_command(Wiimote *self, PyObject *args, PyObject *kwds); 63 64 static PyObject *Wiimote_request_status(Wiimote *self); 65 static int Wiimote_set_led(Wiimote *self, PyObject *PyLed, void *closure); 66 static int 67 Wiimote_set_rumble(Wiimote *self, PyObject *PyRumble, void *closure); 68 static int 69 Wiimote_set_rpt_mode(Wiimote *self, PyObject *PyRptMode, void *closure); 70 57 71 static PyObject *Wiimote_read(Wiimote *self, PyObject *args, PyObject *kwds); 58 72 static PyObject *Wiimote_write(Wiimote *self, PyObject *args, PyObject *kwds); … … 65 79 static PyMethodDef Wiimote_Methods[] = 66 80 { 67 {" disconnect", (PyCFunction)Wiimote_disconnect, METH_NOARGS,68 " disconnect wiimote"},81 {"close", (PyCFunction)Wiimote_close, METH_NOARGS, 82 "close wiimote connection"}, 69 83 {"enable", (PyCFunction)Wiimote_enable, METH_VARARGS | METH_KEYWORDS, 70 84 "enable flags on wiimote"}, … … 75 89 {"get_mesg", (PyCFunction)Wiimote_get_mesg, METH_NOARGS, 76 90 "blocking call to get messages"}, 77 {" command", (PyCFunction)Wiimote_command, METH_VARARGS | METH_KEYWORDS,78 " send wiimote command"},91 {"request_status", (PyCFunction)Wiimote_request_status, METH_NOARGS, 92 "request status message"}, 79 93 {"read", (PyCFunction)Wiimote_read, METH_VARARGS | METH_KEYWORDS, 80 94 "read from wiimote"}, 81 95 {"write", (PyCFunction)Wiimote_write, METH_VARARGS | METH_KEYWORDS, 82 96 "write to wiimote"}, 83 {NULL, NULL }97 {NULL, NULL, 0, NULL} 84 98 }; 85 99 86 100 static PyGetSetDef Wiimote_GetSet[] = { 87 101 {"state", (getter)Wiimote_get_state, NULL, "Wiimote state", NULL}, 88 {NULL} 102 {"mesg_callback", NULL, (setter)Wiimote_set_mesg_callback, 103 "Wiimote message callback", NULL}, 104 {"led", NULL, (setter)Wiimote_set_led, "Wiimote led state", NULL}, 105 {"rumble", NULL, (setter)Wiimote_set_rumble, "Wiimote rumble state", NULL}, 106 {"rpt_mode", NULL, (setter)Wiimote_set_rpt_mode, "Wiimote report mode", 107 NULL}, 108 {NULL, NULL, NULL, NULL, NULL} 89 109 }; 90 110 … … 150 170 { 151 171 if (self->wiimote) { 152 cwiid_ disconnect(self->wiimote);172 cwiid_close(self->wiimote); 153 173 } 154 174 Py_XDECREF(self->callback); … … 162 182 163 183 /* Set up wiimote */ 164 if(!(wiimote = cwiid_ connect(&bdaddr, flags))) {165 PyErr_SetString(PyExc_IOError, "Could not connect towiimote");184 if(!(wiimote = cwiid_open(&bdaddr, flags))) { 185 PyErr_SetString(PyExc_IOError, "Could not open wiimote"); 166 186 return -1; 167 187 } … … 176 196 static int Wiimote_init(Wiimote* self, PyObject* args, PyObject *kwds) 177 197 { 178 static char *kwlist[] = { "flags", NULL};198 static char *kwlist[] = {"flags", NULL}; 179 199 int flags = 0; 180 200 181 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i", kwlist, &flags)) { 201 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:cwiid.Wiimote.init", 202 kwlist, &flags)) { 182 203 return -1; 183 204 } … … 190 211 } 191 212 192 static PyObject *Wiimote_ disconnect(Wiimote *self)193 { 194 if (cwiid_ disconnect(self->wiimote)) {195 PyErr_SetString(PyExc_IOError, "Wiimote disconnecterror");213 static PyObject *Wiimote_close(Wiimote *self) 214 { 215 if (cwiid_close(self->wiimote)) { 216 PyErr_SetString(PyExc_IOError, "Wiimote close error"); 196 217 self->wiimote = NULL; 197 218 return NULL; … … 204 225 static PyObject *Wiimote_enable(Wiimote *self, PyObject *args, PyObject *kwds) 205 226 { 206 static char *kwlist[] = { "flags", NULL};227 static char *kwlist[] = {"flags", NULL}; 207 228 int flags; 208 229 209 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &flags)) { 230 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i:cwiid.Wiimote.enable", 231 kwlist, &flags)) { 210 232 return NULL; 211 233 } … … 221 243 static PyObject *Wiimote_disable(Wiimote *self, PyObject *args, PyObject *kwds) 222 244 { 223 static char *kwlist[] = { "flags", NULL};245 static char *kwlist[] = {"flags", NULL}; 224 246 int flags; 225 247 226 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &flags)) { 248 if (!PyArg_ParseTupleAndKeywords(args, kwds, "i:cwiid.Wiimote.disable", 249 kwlist, &flags)) { 227 250 return NULL; 228 251 } … … 236 259 } 237 260 238 static PyObject * 239 Wiimote_set_mesg_callback(Wiimote *self, PyObject *args, PyObject *kwds) 240 { 241 static char *kwlist[] = { "callback", NULL }; 242 PyObject *NewCallback, *OldCallback; 243 244 if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, &NewCallback)) { 245 return NULL; 246 } 261 static int 262 Wiimote_set_mesg_callback(Wiimote *self, PyObject *NewCallback, 263 void *closure) 264 { 265 PyObject *OldCallback; 266 247 267 if (!PyCallable_Check(NewCallback)) { 248 268 PyErr_SetString(PyExc_TypeError, "callback must be callable!"); … … 253 273 if (cwiid_set_mesg_callback(self->wiimote, callbackBridge)) { 254 274 PyErr_SetString(PyExc_IOError, "set callback error"); 255 return NULL;275 return -1; 256 276 } 257 277 } … … 259 279 if (cwiid_set_mesg_callback(self->wiimote, NULL)) { 260 280 PyErr_SetString(PyExc_IOError, "set callback error"); 261 return NULL;281 return -1; 262 282 } 263 283 } … … 267 287 self->callback = NewCallback; 268 288 269 Py_RETURN_NONE;289 return 0; 270 290 } 271 291 … … 275 295 int mesg_count; 276 296 struct timespec t; 297 PyObject *PyMesg; 277 298 278 299 if (cwiid_get_mesg(self->wiimote, &mesg_count, &mesg, &t)) { … … 286 307 } 287 308 288 return processMesgs(mesg_count, mesg); 309 PyMesg = processMesgs(mesg_count, mesg); 310 311 free(mesg); 312 313 return PyMesg; 289 314 } 290 315 … … 456 481 } 457 482 458 static PyObject *Wiimote_command(Wiimote *self, PyObject *args, PyObject *kwds) 483 static PyObject *Wiimote_request_status(Wiimote *self) 484 { 485 if (cwiid_request_status(self->wiimote)) { 486 PyErr_SetString(PyExc_IOError, "Wiimote request status error"); 487 return NULL; 488 } 489 490 Py_RETURN_NONE; 491 } 492 493 static int Wiimote_set_led(Wiimote *self, PyObject *PyLed, void *closure) 494 { 495 long led; 496 497 if (((led = PyInt_AsLong(PyLed)) == -1) && PyErr_Occurred()) { 498 return -1; 499 } 500 501 if (cwiid_set_led(self->wiimote, (uint8_t)led)) { 502 PyErr_SetString(PyExc_IOError, "Wiimote set led error"); 503 return -1; 504 } 505 506 return 0; 507 } 508 509 static int 510 Wiimote_set_rumble(Wiimote *self, PyObject *PyRumble, void *closure) 511 { 512 long rumble; 513 514 if (((rumble = PyInt_AsLong(PyRumble)) == -1) && PyErr_Occurred()) { 515 return -1; 516 } 517 518 if (cwiid_set_rumble(self->wiimote, (uint8_t)rumble)) { 519 PyErr_SetString(PyExc_IOError, "Wiimote set rumble error"); 520 return -1; 521 } 522 523 return 0; 524 } 525 526 static int 527 Wiimote_set_rpt_mode(Wiimote *self, PyObject *PyRptMode, void *closure) 528 { 529 long rpt_mode; 530 531 if (((rpt_mode = PyInt_AsLong(PyRptMode)) == -1) && PyErr_Occurred()) { 532 return -1; 533 } 534 535 if (cwiid_set_rpt_mode(self->wiimote, (uint8_t)rpt_mode)) { 536 PyErr_SetString(PyExc_IOError, "Wiimote set rpt_mode error"); 537 return -1; 538 } 539 540 return 0; 541 } 542 543 /* static PyObject *Wiimote_command(Wiimote *self, PyObject *args, PyObject *kwds) 459 544 { 460 545 static char *kwlist[] = { "command", "flags", NULL }; … … 470 555 Py_RETURN_NONE; 471 556 } 557 */ 472 558 473 559 static PyObject *Wiimote_read(Wiimote *self, PyObject *args, PyObject *kwds) … … 480 566 PyObject *pyRetBuf; 481 567 482 if (!PyArg_ParseTupleAndKeywords(args, kwds, "BII ", kwlist, &flags,483 &offset, &len)) {568 if (!PyArg_ParseTupleAndKeywords(args, kwds, "BII:cwiid.Wiimote.read", 569 kwlist, &flags, &offset, &len)) { 484 570 return NULL; 485 571 } … … 509 595 int len; 510 596 511 if (!PyArg_ParseTupleAndKeywords(args, kwds, "BIt# ", kwlist, &flags,512 &offset, &buf, &len)) {597 if (!PyArg_ParseTupleAndKeywords(args, kwds, "BIt#:cwiid.Wiimote.write", 598 kwlist, &flags, &offset, &buf, &len)) { 513 599 return NULL; 514 600 } … … 526 612 union cwiid_mesg mesg[], struct timespec *t) 527 613 { 528 PyObject *argTuple; 529 PyObject *pyself; 530 /* PyObject *pyCallback; */ 614 PyObject *ArgTuple; 615 PyObject *PySelf; 531 616 PyGILState_STATE gstate; 532 617 533 618 gstate = PyGILState_Ensure(); 534 619 535 argTuple = processMesgs(mesg_count, mesg);620 ArgTuple = processMesgs(mesg_count, mesg); 536 621 537 622 /* Put id and the list of messages as the arguments to the callback */ 538 pyself = (PyObject *) cwiid_get_data(wiimote);539 PyObject_CallFunction(((Wiimote *) pyself)->callback, "(O)",argTuple);540 541 Py_XDECREF( argTuple);623 PySelf = (PyObject *) cwiid_get_data(wiimote); 624 PyObject_CallFunction(((Wiimote *)PySelf)->callback, "(O)", ArgTuple); 625 626 Py_XDECREF(ArgTuple); 542 627 PyGILState_Release(gstate); 543 628 } branches/cwiidpy/cwiidmodule.c
r114 r117 20 20 * 21 21 * ChangeLog: 22 * 2007-05-22 L. Donnie Smith <cwiid@abstrakraft.org> 23 * * clarified variable names 24 * 22 25 * 2007-05-14 L. Donnie Smith <cwiid@abstrakraft.org> 23 26 * * moved Wiimote class to separate files … … 71 74 PyMODINIT_FUNC initcwiid(void); 72 75 73 /* CWiidconstants, enumerations */74 #define C ONST_MACRO(a) {#a, CWIID_##a}76 /* constants, enumerations */ 77 #define CWIID_CONST_MACRO(a) {#a, CWIID_##a} 75 78 static struct { 76 79 char *name; 77 80 int value; 78 81 } cwiid_constants[] = { 79 C ONST_MACRO(FLAG_MESG_IFC),80 C ONST_MACRO(FLAG_CONTINUOUS),81 C ONST_MACRO(FLAG_REPEAT_BTN),82 C ONST_MACRO(FLAG_NONBLOCK),83 C ONST_MACRO(RPT_STATUS),84 C ONST_MACRO(RPT_BTN),85 C ONST_MACRO(RPT_ACC),86 C ONST_MACRO(RPT_IR),87 C ONST_MACRO(RPT_NUNCHUK),88 C ONST_MACRO(RPT_CLASSIC),89 C ONST_MACRO(RPT_EXT),90 C ONST_MACRO(LED1_ON),91 C ONST_MACRO(LED2_ON),92 C ONST_MACRO(LED3_ON),93 C ONST_MACRO(LED4_ON),94 C ONST_MACRO(BTN_2),95 C ONST_MACRO(BTN_1),96 C ONST_MACRO(BTN_B),97 C ONST_MACRO(BTN_A),98 C ONST_MACRO(BTN_MINUS),99 C ONST_MACRO(BTN_HOME),100 C ONST_MACRO(BTN_LEFT),101 C ONST_MACRO(BTN_RIGHT),102 C ONST_MACRO(BTN_DOWN),103 C ONST_MACRO(BTN_UP),104 C ONST_MACRO(BTN_PLUS),105 C ONST_MACRO(NUNCHUK_BTN_Z),106 C ONST_MACRO(NUNCHUK_BTN_C),107 C ONST_MACRO(CLASSIC_BTN_UP),108 C ONST_MACRO(CLASSIC_BTN_LEFT),109 C ONST_MACRO(CLASSIC_BTN_ZR),110 C ONST_MACRO(CLASSIC_BTN_X),111 C ONST_MACRO(CLASSIC_BTN_A),112 C ONST_MACRO(CLASSIC_BTN_Y),113 C ONST_MACRO(CLASSIC_BTN_B),114 C ONST_MACRO(CLASSIC_BTN_ZL),115 C ONST_MACRO(CLASSIC_BTN_R),116 C ONST_MACRO(CLASSIC_BTN_PLUS),117 C ONST_MACRO(CLASSIC_BTN_HOME),118 C ONST_MACRO(CLASSIC_BTN_MINUS),119 C ONST_MACRO(CLASSIC_BTN_L),120 C ONST_MACRO(CLASSIC_BTN_DOWN),121 C ONST_MACRO(CLASSIC_BTN_RIGHT),122 C ONST_MACRO(RW_EEPROM),123 C ONST_MACRO(RW_REG),124 C ONST_MACRO(RW_DECODE),125 C ONST_MACRO(MAX_READ_LEN),126 C ONST_MACRO(X),127 C ONST_MACRO(Y),128 C ONST_MACRO(Z),129 C ONST_MACRO(IR_SRC_COUNT),130 C ONST_MACRO(IR_X_MAX),131 C ONST_MACRO(IR_Y_MAX),132 C ONST_MACRO(BATTERY_MAX),133 C ONST_MACRO(CLASSIC_L_STICK_MAX),134 C ONST_MACRO(CLASSIC_R_STICK_MAX),135 C ONST_MACRO(CLASSIC_LR_MAX),136 C ONST_MACRO(CMD_STATUS),137 C ONST_MACRO(CMD_LED),138 C ONST_MACRO(CMD_RUMBLE),139 C ONST_MACRO(CMD_RPT_MODE),140 C ONST_MACRO(MESG_STATUS),141 C ONST_MACRO(MESG_BTN),142 C ONST_MACRO(MESG_ACC),143 C ONST_MACRO(MESG_IR),144 C ONST_MACRO(MESG_NUNCHUK),145 C ONST_MACRO(MESG_CLASSIC),146 C ONST_MACRO(MESG_ERROR),147 C ONST_MACRO(MESG_UNKNOWN),148 C ONST_MACRO(EXT_NONE),149 C ONST_MACRO(EXT_NUNCHUK),150 C ONST_MACRO(EXT_CLASSIC),151 C ONST_MACRO(EXT_UNKNOWN),152 C ONST_MACRO(ERROR_DISCONNECT),153 C ONST_MACRO(ERROR_COMM),82 CWIID_CONST_MACRO(FLAG_MESG_IFC), 83 CWIID_CONST_MACRO(FLAG_CONTINUOUS), 84 CWIID_CONST_MACRO(FLAG_REPEAT_BTN), 85 CWIID_CONST_MACRO(FLAG_NONBLOCK), 86 CWIID_CONST_MACRO(RPT_STATUS), 87 CWIID_CONST_MACRO(RPT_BTN), 88 CWIID_CONST_MACRO(RPT_ACC), 89 CWIID_CONST_MACRO(RPT_IR), 90 CWIID_CONST_MACRO(RPT_NUNCHUK), 91 CWIID_CONST_MACRO(RPT_CLASSIC), 92 CWIID_CONST_MACRO(RPT_EXT), 93 CWIID_CONST_MACRO(LED1_ON), 94 CWIID_CONST_MACRO(LED2_ON), 95 CWIID_CONST_MACRO(LED3_ON), 96 CWIID_CONST_MACRO(LED4_ON), 97 CWIID_CONST_MACRO(BTN_2), 98 CWIID_CONST_MACRO(BTN_1), 99 CWIID_CONST_MACRO(BTN_B), 100 CWIID_CONST_MACRO(BTN_A), 101 CWIID_CONST_MACRO(BTN_MINUS), 102 CWIID_CONST_MACRO(BTN_HOME), 103 CWIID_CONST_MACRO(BTN_LEFT), 104 CWIID_CONST_MACRO(BTN_RIGHT), 105 CWIID_CONST_MACRO(BTN_DOWN), 106 CWIID_CONST_MACRO(BTN_UP), 107 CWIID_CONST_MACRO(BTN_PLUS), 108 CWIID_CONST_MACRO(NUNCHUK_BTN_Z), 109 CWIID_CONST_MACRO(NUNCHUK_BTN_C), 110 CWIID_CONST_MACRO(CLASSIC_BTN_UP), 111 CWIID_CONST_MACRO(CLASSIC_BTN_LEFT), 112 CWIID_CONST_MACRO(CLASSIC_BTN_ZR), 113 CWIID_CONST_MACRO(CLASSIC_BTN_X), 114 CWIID_CONST_MACRO(CLASSIC_BTN_A), 115 CWIID_CONST_MACRO(CLASSIC_BTN_Y), 116 CWIID_CONST_MACRO(CLASSIC_BTN_B), 117 CWIID_CONST_MACRO(CLASSIC_BTN_ZL), 118 CWIID_CONST_MACRO(CLASSIC_BTN_R), 119 CWIID_CONST_MACRO(CLASSIC_BTN_PLUS), 120 CWIID_CONST_MACRO(CLASSIC_BTN_HOME), 121 CWIID_CONST_MACRO(CLASSIC_BTN_MINUS), 122 CWIID_CONST_MACRO(CLASSIC_BTN_L), 123 CWIID_CONST_MACRO(CLASSIC_BTN_DOWN), 124 CWIID_CONST_MACRO(CLASSIC_BTN_RIGHT), 125 CWIID_CONST_MACRO(RW_EEPROM), 126 CWIID_CONST_MACRO(RW_REG), 127 CWIID_CONST_MACRO(RW_DECODE), 128 CWIID_CONST_MACRO(MAX_READ_LEN), 129 CWIID_CONST_MACRO(X), 130 CWIID_CONST_MACRO(Y), 131 CWIID_CONST_MACRO(Z), 132 CWIID_CONST_MACRO(IR_SRC_COUNT), 133 CWIID_CONST_MACRO(IR_X_MAX), 134 CWIID_CONST_MACRO(IR_Y_MAX), 135 CWIID_CONST_MACRO(BATTERY_MAX), 136 CWIID_CONST_MACRO(CLASSIC_L_STICK_MAX), 137 CWIID_CONST_MACRO(CLASSIC_R_STICK_MAX), 138 CWIID_CONST_MACRO(CLASSIC_LR_MAX), 139 CWIID_CONST_MACRO(CMD_STATUS), 140 CWIID_CONST_MACRO(CMD_LED), 141 CWIID_CONST_MACRO(CMD_RUMBLE), 142 CWIID_CONST_MACRO(CMD_RPT_MODE), 143 CWIID_CONST_MACRO(MESG_STATUS), 144 CWIID_CONST_MACRO(MESG_BTN), 145 CWIID_CONST_MACRO(MESG_ACC), 146 CWIID_CONST_MACRO(MESG_IR), 147 CWIID_CONST_MACRO(MESG_NUNCHUK), 148 CWIID_CONST_MACRO(MESG_CLASSIC), 149 CWIID_CONST_MACRO(MESG_ERROR), 150 CWIID_CONST_MACRO(MESG_UNKNOWN), 151 CWIID_CONST_MACRO(EXT_NONE), 152 CWIID_CONST_MACRO(EXT_NUNCHUK), 153 CWIID_CONST_MACRO(EXT_CLASSIC), 154 CWIID_CONST_MACRO(EXT_UNKNOWN), 155 CWIID_CONST_MACRO(ERROR_DISCONNECT), 156 CWIID_CONST_MACRO(ERROR_COMM), 154 157 {NULL, 0} 155 158 }; 156 159 157 160 /* Associates cwiid functions with python ones */ 158 static PyMethodDef modMethods[] =161 static PyMethodDef Module_Methods[] = 159 162 { 160 {NULL, NULL }163 {NULL, NULL, 0, NULL} 161 164 }; 162 165 163 166 PyMODINIT_FUNC initcwiid(void) 164 167 { 165 PyObject * m;168 PyObject *Module; 166 169 int i; 167 170 … … 172 175 } 173 176 174 if (!( m = Py_InitModule3("cwiid", modMethods,175 " Module for accessing the wiimote through cwiid"))) {177 if (!(Module = Py_InitModule3("cwiid", Module_Methods, 178 "CWiid Wiimote Interface"))) { 176 179 return; 177 180 } 178 181 179 182 Py_INCREF(&Wiimote_Type); 180 PyModule_AddObject( m, "Wiimote", (PyObject*)&Wiimote_Type);183 PyModule_AddObject(Module, "Wiimote", (PyObject*)&Wiimote_Type); 181 184 182 185 for (i = 0; cwiid_constants[i].name; i++) { 183 186 /* No way to report errors from here, so just ignore them and hope 184 187 * for segfault */ 185 PyModule_AddIntConstant(m, cwiid_constants[i].name, cwiid_constants[i].value); 188 PyModule_AddIntConstant(Module, cwiid_constants[i].name, 189 cwiid_constants[i].value); 186 190 } 187 191 } 188
