Using the Python C Extension API
There are many other functions and types available in Python’s API that we have not covered here. However, what we have already seen should be sufficient for most of the extension modules we will need to create.
Generic Discrete I/O API
Let’s take a look at what an extension written in C for a hypothetical discrete digital I/O card would look like. First off, the device uses a DLL to access the hardware via the PCI bus, so we need to know what API functions the DLL exposes. These are defined in the header file supplied with the DLL. This is a very simple piece of hardware, so just eight basic functions are needed. Here is the hypothetical header file (PDev.h) we’ll be using:
/* PDev.h - API for a simple discrete digital I/O card */ typedef int dev_handle; #define PDEV_OK 1 #define PDEV_ERR 0 /* * Open Device Channel * * Opens a channel to a particular I/O device. The device is specified * by passing its unit number, which is assigned to the device by a * setup utility. dev_handle is an int type. * * Returns: If dev_handle is > 0 then handle is valid * If dev_handle is = 0 then an error has occurred */ dev_handle PDevOpen(int unit_num); /* Close Device Channel * Closes a channel to a particular I/O device. Once a channel is * closed it must be explicitly re-opened by using the PDevOpen API * function. Closing a channel does not reset the DIO configuration. * * Returns: If return is 1 (true) then channel closed OK * If return is = 0 then an error has ...
Get Real World Instrumentation with Python now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.