Skip to content

Commit 116d433

Browse files
Initial release
1 parent 87b3a77 commit 116d433

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

147 files changed

+16553
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,5 @@ dmypy.json
127127

128128
# Pyre type checker
129129
.pyre/
130+
131+
/lib

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "smpt"]
2+
path = smpt
3+
url = https://github.com/ScienceMode/ScienceMode4_c_library

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,30 @@
11
# ScienceMode4_python_wrapper
22
Python wrapper for the ScienceMode 4 protocol
3+
4+
## Introduction
5+
6+
sciencemode_cffi is a python wrapper for the sciencemode library.
7+
8+
This python library was tested on Windows 64bit together with Anaconda Python.
9+
10+
This library is using [cffi](https://cffi.readthedocs.io/).
11+
12+
## Preparation
13+
Unzip the correct version of the smpt library and copy the lib into the lib directory.
14+
On Windows, build artifacts from [ScienceMode4_c_library](https://github.com/ScienceMode/ScienceMode4_c_library) can be used.
15+
16+
## How to build for Windows
17+
Mingw 5.3 from Qt needs to be installed in `C:\Qt\Tools\mingw530_32`. Visual studio compiler needs also be installed.
18+
19+
20+
## Building the wheel
21+
Create a wheel with
22+
```
23+
python setup.py bdist_wheel --universal
24+
```
25+
## Installing the wheel
26+
You may correct the filename, check that the python version is matching the version in the filename.
27+
E.g. for python 3.9, the following version is valid:
28+
```
29+
pip install dist/sciencemode4_cffi-1.0.0-cp39-cp39-win_amd64.whl
30+
```

examples/p24_example1.py

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
from sciencemode import sciencemode
2+
import time
3+
4+
5+
ack = sciencemode.ffi.new("Smpt_ack*")
6+
device = sciencemode.ffi.new("Smpt_device*")
7+
extended_version_ack = sciencemode.ffi.new("Smpt_get_extended_version_ack*")
8+
9+
com = sciencemode.ffi.new("char[]", b"COM3")
10+
11+
ret = sciencemode.smpt_check_serial_port(com)
12+
print("Port check is {}", ret)
13+
14+
ret = sciencemode.smpt_open_serial_port(device,com)
15+
print("smpt_open_serial_port: {}", ret)
16+
17+
packet_number = sciencemode.smpt_packet_number_generator_next(device)
18+
print("next packet_number {}", packet_number)
19+
20+
ret = sciencemode.smpt_send_get_extended_version(device, packet_number)
21+
print("smpt_send_get_extended_version: {}", ret)
22+
23+
ret = False
24+
25+
while ( not sciencemode.smpt_new_packet_received(device)):
26+
time.sleep(1)
27+
28+
sciencemode.smpt_last_ack(device, ack);
29+
print("command number {}, packet_number {}", ack.command_number, ack.packet_number)
30+
31+
ret = sciencemode.smpt_get_get_extended_version_ack(device, extended_version_ack)
32+
print("smpt_get_get_extended_version_ack: {}", ret)
33+
print("fw_hash {} ",extended_version_ack.fw_hash)
34+
35+
36+
ll_init = sciencemode.ffi.new("Smpt_ll_init*")
37+
ll_init.high_voltage_level = sciencemode.Smpt_High_Voltage_Default
38+
ll_init.packet_number = sciencemode.smpt_packet_number_generator_next(device)
39+
ret = sciencemode.smpt_send_ll_init(device, ll_init)
40+
print("smpt_send_ll_init: {}", ret)
41+
time.sleep(1)
42+
43+
packet_number = sciencemode.smpt_packet_number_generator_next(device)
44+
print("next packet_number {}", packet_number)
45+
46+
47+
ll_config = sciencemode.ffi.new("Smpt_ll_channel_config*")
48+
49+
ll_config.enable_stimulation = True
50+
ll_config.channel = sciencemode.Smpt_Channel_Red
51+
ll_config.connector = sciencemode.Smpt_Connector_Yellow
52+
ll_config.number_of_points = 3
53+
ll_config.points[0].time = 100
54+
ll_config.points[0].current = 20
55+
ll_config.points[1].time = 100
56+
ll_config.points[1].current = 20
57+
ll_config.points[2].time = 100
58+
ll_config.points[2].current = -20
59+
60+
61+
for i in range(3):
62+
ll_config.packet_number = sciencemode.smpt_packet_number_generator_next(device)
63+
ret = sciencemode.smpt_send_ll_channel_config(device, ll_config)
64+
print("smpt_send_ll_channel_config: {}", ret)
65+
time.sleep(1)
66+
67+
packet_number = sciencemode.smpt_packet_number_generator_next(device)
68+
ret = sciencemode.smpt_send_ll_stop(device, packet_number)
69+
print("smpt_send_ll_stop: {}", ret)
70+
71+
ml_init = sciencemode.ffi.new("Smpt_ml_init*")
72+
ml_init.packet_number = sciencemode.smpt_packet_number_generator_next(device)
73+
ret = sciencemode.smpt_send_ml_init(device, ml_init)
74+
print("smpt_send_ml_init: {}", ret)
75+
time.sleep(1)
76+
77+
ml_update = sciencemode.ffi.new("Smpt_ml_update*")
78+
ml_update.packet_number = sciencemode.smpt_packet_number_generator_next(device)
79+
for i in range(8):
80+
ml_update.enable_channel[i] = True
81+
ml_update.channel_config[i].period = 20
82+
ml_update.channel_config[i].number_of_points = 3
83+
ml_update.channel_config[i].points[0].time = 100
84+
ml_update.channel_config[i].points[0].current = 20
85+
ml_update.channel_config[i].points[1].time = 100
86+
ml_update.channel_config[i].points[1].current = 20
87+
ml_update.channel_config[i].points[2].time = 100
88+
ml_update.channel_config[i].points[2].current = -20
89+
90+
ret = sciencemode.smpt_send_ml_update(device, ml_update)
91+
print("smpt_send_ml_update: {}", ret)
92+
93+
ml_get_current_data = sciencemode.ffi.new("Smpt_ml_get_current_data*")
94+
95+
96+
for i in range(10):
97+
ml_get_current_data.data_selection = sciencemode.Smpt_Ml_Data_Channels
98+
ml_get_current_data.packet_number = sciencemode.smpt_packet_number_generator_next(device)
99+
ret = sciencemode.smpt_send_ml_get_current_data(device, ml_get_current_data)
100+
print("smpt_send_ml_get_current_data: {}", ret)
101+
time.sleep(1)
102+
103+
104+
packet_number = sciencemode.smpt_packet_number_generator_next(device)
105+
ret = sciencemode.smpt_send_ml_stop(device, packet_number)
106+
print("smpt_send_ml_stop: {}", ret)
107+
108+
109+
ret = sciencemode.smpt_close_serial_port(device)
110+
print("smpt_close_serial_port: {}", ret)

libgcc_s_dw2-1.dll

118 KB
Binary file not shown.

libstdc++-6.dll

1.47 MB
Binary file not shown.

libwinpthread-1.dll

77.5 KB
Binary file not shown.

0 commit comments

Comments
 (0)