From 2cbe251e1b726c2fc5347dffd25cd4f9102012ed Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Tue, 1 Mar 2011 12:12:49 +0800 Subject: added fantom module for python --- FantomModule/FantomModule.cp | 133 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 FantomModule/FantomModule.cp (limited to 'FantomModule/FantomModule.cp') diff --git a/FantomModule/FantomModule.cp b/FantomModule/FantomModule.cp new file mode 100644 index 0000000..60bbe80 --- /dev/null +++ b/FantomModule/FantomModule.cp @@ -0,0 +1,133 @@ +/* + * FantomModule.cp + * FantomModule + * + * Created by tcmac on 01/03/2011. + * Copyright 2011 TC Wan. All rights reserved. + * + * Based on code from Fantom Driver 1.0.2f0 Example + * © Copyright 2006, + * National Instruments Corporation. + * All rights reserved. + * + * Originated: 10 March 2006 + * + */ + +#include +#include +#include "FantomModule.h" +#include "FantomModulePriv.h" + +static PyMethodDef FantomMethods[] = { + {"finddevices", fantom_finddevices, METH_VARARGS, + "Find a NXT Device"}, + {"socket", fantom_socket, METH_VARARGS, + "Create a Socket for a NXT Brick"}, + {"connect", fantom_connect, METH_VARARGS, + "Connect the Socket to a NXT Brick"}, + {"send", fantom_send, METH_VARARGS, + "Send Data via the Socket to a NXT Brick"}, + {"recv", fantom_recv, METH_VARARGS, + "Receive Data via the Socket from a NXT Brick"}, + {"close", fantom_close, METH_VARARGS, + "Close the Socket to a NXT Brick"}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +extern "C" PyMODINIT_FUNC +initspam(void) +{ + (void) Py_InitModule("fantom", FantomMethods); +} + +extern "C" PyObject *fantom_finddevices(PyObject *py_self, PyObject *py_args) +{ + FantomModule *fantomObject; + fantomObject = new FantomModule; + + PyObject *list = fantomObject->finddevices(py_self,py_args); + delete fantomObject; + + return list; +} +extern "C" PyObject *fantom_socket(PyObject *py_self, PyObject *py_args) +{ +} + +extern "C" PyObject *fantom_connect(PyObject *py_self, PyObject *py_args) +{ +} + +extern "C" PyObject *fantom_send(PyObject *py_self, PyObject *py_args) +{ +} + +extern "C" PyObject *fantom_recv(PyObject *py_self, PyObject *py_args) +{ +} + +extern "C" PyObject *fantom_close(PyObject *py_self, PyObject *py_args) +{ +} + +PyObject *FantomModule::finddevices(PyObject *py_self, PyObject *py_args) +{ + const char *proto; + if (!PyArg_ParseTuple(py_args, "s", &proto)) + return NULL; + + ViBoolean useBT; + useBT = strcmp(proto, FANTOM_BT) ? true : false; + +/* + const char *command; + int sts; + + if (!PyArg_ParseTuple(py_args, "s", &command)) + return NULL; + sts = system(command); + return Py_BuildValue("i", sts); +*/ + + // Create an NXT iterator object which is used to find all accessible NXT devices. + nxtIteratorPtr = nFANTOM100::iNXT::createNXTIterator(useBT, FANTOM_BT_TIMEOUTSEC, status); + + // Creating the NXT iterator object could fail, better check status before dereferencing a + // potentially NULL pointer. + if( status.isNotFatal()) + { + ViChar nxtName[FANTOM_NXTNAME_LEN]; + nxtIteratorPtr->getName(nxtName, status); + if( status.isNotFatal()) + { + // FIXME: Append to Python list + } + nxtIteratorPtr->advance(status); + + } + // Destroy the NXT iterator object which we no longer need + nFANTOM100::iNXT::destroyNXTIterator( nxtIteratorPtr ); + +} + +PyObject *FantomModule::socket(PyObject *py_self, PyObject *py_args) +{ + // Create an NXT object for the first NXT that was found. Note that if a NXT is found + // over BT, the computer and the NXT must be paired before an NXT object can be + // created. This can be done programatically using the iNXT::pairBluetooth method. + // nxtPtr = nxtIteratorPtr->getNXT( status ); +} + +void FantomModule::HelloWorld(const char * s) +{ + FantomModulePriv *theObj = new FantomModulePriv; + theObj->HelloWorldPriv(s); + delete theObj; +}; + +void FantomModulePriv::HelloWorldPriv(const char * s) +{ + std::cout << s << std::endl; +}; + -- cgit v1.2.3