From 50fa0966f9c784cebc026889ebdc48bbf5068a1e Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Mon, 29 Feb 2016 19:03:19 +0200 Subject: Added torque mode modifiers & effects definitions --- simplemotion_defs.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index d5f6630..f4c0dc5 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -446,6 +446,25 @@ //anti dither limits #define SMP_ANTIDITHER_MODE 230 +//torque modifiers & effects +/*SMP_TORQUE_NOTCH_FILTER contains 3 values in different bit positions: + * 0-7 (lowest byte), attenuation in 0.1dB steps and value V=1-255 means attenuation of (-V-255)/10 dB gain. if V set 0, use notch filter instead of peaking with "infinite" attenuation. value 255 disables notch filter. + * 8-15, Q factor in 0.1 steps + * 16-30, center frequency in 0.2Hz steps so range is 0-1638.3 Hz. value 0 disables the filter. + * + *Example, peaking filter with gain -12.5dB, center freq 1000Hz and Q=5.5 value is: 0x01F43782 (0x01f4=1000/2, 0x37=5.5*10, 0x82=255-12.5*10) + *Example, peaking filter with gain -11.5dB, center freq 20Hz and Q=3.5 value is: 0x00648c23 = dec 6589475 + * + *Notch filter works in all control modes + */ +#define SMP_TORQUE_NOTCH_FILTER 240 +//define damping effect gain in torque control mode, torque added to setpoint equals -speed*gain with +#define SMP_TORQUE_EFFECT_DAMPING 241 +//define friction effect gain in torque control mode +#define SMP_TORQUE_EFFECT_FRICTION 242 +//define inertia effect gain in torque control mode, torque added to setpoint equals -acceleration*gain +#define SMP_TORQUE_EFFECT_INERTIA 243 + //secondary feedback loop 300-399 //NOT IMPLEMENTED YET -- cgit v1.2.3 From 3efac208723dc1cb8a0cc81c728196bdc3fbd424 Mon Sep 17 00:00:00 2001 From: Tero K Date: Wed, 2 Mar 2016 23:44:00 +0200 Subject: Redefined notch filter parameter meaning --- simplemotion_defs.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index f4c0dc5..9752e4f 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -449,13 +449,12 @@ //torque modifiers & effects /*SMP_TORQUE_NOTCH_FILTER contains 3 values in different bit positions: * 0-7 (lowest byte), attenuation in 0.1dB steps and value V=1-255 means attenuation of (-V-255)/10 dB gain. if V set 0, use notch filter instead of peaking with "infinite" attenuation. value 255 disables notch filter. - * 8-15, Q factor in 0.1 steps - * 16-30, center frequency in 0.2Hz steps so range is 0-1638.3 Hz. value 0 disables the filter. + * 8-15, Q factor in 0.1 steps. Minimum is 0.1, below that filter is disabled. + * 16-29, center frequency in 0.1Hz steps, and 1.1Hz is minimum, so range is 1.1-409.5 Hz. value below or equal 1Hz disables the filter. * - *Example, peaking filter with gain -12.5dB, center freq 1000Hz and Q=5.5 value is: 0x01F43782 (0x01f4=1000/2, 0x37=5.5*10, 0x82=255-12.5*10) *Example, peaking filter with gain -11.5dB, center freq 20Hz and Q=3.5 value is: 0x00648c23 = dec 6589475 * - *Notch filter works in all control modes + *Notch filter works in all control modes and is applied to torque controller setpoint */ #define SMP_TORQUE_NOTCH_FILTER 240 //define damping effect gain in torque control mode, torque added to setpoint equals -speed*gain with -- cgit v1.2.3 From 9894a06151def6720c1f967f5f18fd7111becd82 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Wed, 30 Mar 2016 18:03:28 +0300 Subject: Add EL_MODE_SIMUCUBE for IONI --- simplemotion_defs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index 9752e4f..be8ee95 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -433,6 +433,7 @@ #define EL_MODE_STANDARD 0 #define EL_MODE_IONICUBE 1 #define EL_MODE_IONIZER 2 + #define EL_MODE_SIMUCUBE 3 //primary feedback loop 200-299 -- cgit v1.2.3 From ae182289686ce272ba7f5080b482d8edfd177441 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Thu, 31 Mar 2016 00:16:16 +0300 Subject: Swap EL_MODE 2 and 3 because EL_MODE_IONIZER is not used (at least yet) --- simplemotion_defs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index be8ee95..29e040d 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -432,8 +432,8 @@ #define SMP_ELECTRICAL_MODE 573 #define EL_MODE_STANDARD 0 #define EL_MODE_IONICUBE 1 - #define EL_MODE_IONIZER 2 - #define EL_MODE_SIMUCUBE 3 + #define EL_MODE_SIMUCUBE 2 + #define EL_MODE_IONIZER 3 //primary feedback loop 200-299 -- cgit v1.2.3 From ce55c8a4227539f4d4f57f7acc4aaff1d18c0001 Mon Sep 17 00:00:00 2001 From: Tero K Date: Mon, 18 Apr 2016 15:04:51 +0300 Subject: Added SMP_SERIAL_ENC_BITS definition --- simplemotion_defs.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index 29e040d..f171350 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -435,6 +435,13 @@ #define EL_MODE_SIMUCUBE 2 #define EL_MODE_IONIZER 3 +/*for BiSS encoder + * bits defined as: + * lowest 8 bits: single turn bits, value range 4-24 + * next 8 bits: multi turn bits, value range 0-16 + * rest: reserved for future use (always 0) + */ +#define SMP_SERIAL_ENC_BITS 574 //primary feedback loop 200-299 #define SMP_VEL_I 200 -- cgit v1.2.3 From fa9c9212d7e25e9eacbbfcc4e6a516b4d48ebbb5 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Fri, 28 Oct 2016 15:18:18 +0300 Subject: Added smSetBaudrate() to allow changing bus speed --- busdevice.c | 4 +++- rs232.c | 36 ++++++++++++++++++++++++++++++++++++ simplemotion.c | 21 +++++++++++++++++++++ simplemotion.h | 18 ++++++++++++++++++ simplemotion_private.h | 1 + 5 files changed, 79 insertions(+), 1 deletion(-) diff --git a/busdevice.c b/busdevice.c index 9bf82c8..c82e27b 100644 --- a/busdevice.c +++ b/busdevice.c @@ -10,6 +10,8 @@ //how much bytes available in transmit buffer #define TANSMIT_BUFFER_LENGTH 128 +unsigned long SMBusBaudrate=SM_BAUDRATE; //the next opened port (with smOpenBus) will be opened with the PBS defined here (default 460800 BPS) + typedef struct _SMBusDevice { //common @@ -65,7 +67,7 @@ smbusdevicehandle smBDOpen( const char *devicename ) if(strncmp(devicename,"COM",3) == 0 || strncmp(devicename,"/dev/tty",8) == 0) //use rs232 lib { - BusDevice[handle].comPort=OpenComport( devicename, SM_BAUDRATE ); + BusDevice[handle].comPort=OpenComport( devicename, SMBusBaudrate ); if( BusDevice[handle].comPort == -1 ) { return -1; //failed to open diff --git a/rs232.c b/rs232.c index 1773767..4055e2a 100644 --- a/rs232.c +++ b/rs232.c @@ -93,6 +93,20 @@ int OpenComport(const char * comport_name, int baudrate) break; case 1000000 : baudr = B1000000; break; + case 1115200 : baudr = B1152000; + break; + case 1500000 : baudr = B1500000; + break; + case 2000000 : baudr = B2000000; + break; + case 2500000 : baudr = B2500000; + break; + case 3000000 : baudr = B3000000; + break; + case 3500000 : baudr = B3500000; + break; + case 4000000 : baudr = B4000000; + break; default : printf("invalid baudrate\n"); return(1); break; @@ -254,6 +268,28 @@ int OpenComport(const char * comport_name, int baudrate) break; case 460800 : strcpy(baudr, "baud=460800 data=8 parity=N stop=1"); break; + case 500000 : strcpy(baudr, "baud=500000 data=8 parity=N stop=1"); + break; + case 576000 : strcpy(baudr, "baud=576000 data=8 parity=N stop=1"); + break; + case 921600 : strcpy(baudr, "baud=921600 data=8 parity=N stop=1"); + break; + case 1000000 : strcpy(baudr, "baud=1000000 data=8 parity=N stop=1"); + break; + case 1115200 : strcpy(baudr, "baud=1115200 data=8 parity=N stop=1"); + break; + case 1500000 : strcpy(baudr, "baud=1500000 data=8 parity=N stop=1"); + break; + case 2000000 : strcpy(baudr, "baud=2000000 data=8 parity=N stop=1"); + break; + case 2500000 : strcpy(baudr, "baud=2500000 data=8 parity=N stop=1"); + break; + case 3000000 : strcpy(baudr, "baud=3000000 data=8 parity=N stop=1"); + break; + case 3500000 : strcpy(baudr, "baud=3500000 data=8 parity=N stop=1"); + break; + case 4000000 : strcpy(baudr, "baud=4000000 data=8 parity=N stop=1"); + break; default : printf("invalid baudrate\n"); return(-1); break; diff --git a/simplemotion.c b/simplemotion.c index cea0238..ea773ac 100644 --- a/simplemotion.c +++ b/simplemotion.c @@ -222,6 +222,27 @@ smbus smOpenBus( const char * devicename ) return handle; } +/** Change baudrate of SM communication port. This does not affect already opened ports but the next smOpenBus will be opened at the new speed. + Calling this is optional. By default SM bus and all slave devices operates at 460800 BPS speed. + Parameters: + -bps: bus speed in bits per second. for possible choices, see rs232.c (but note that all speeds are not necessarily supported by SM devices) + Typical usage is: + - first call smSetParameter(handle,0,SMP_BUS_SPEED,N) to change speed of all connected slaves to N PBS + - then close port with smCloseBus + - then call smSetBaudrate(N) + - then open bus again with smOpenBus + + Note that in upcoming SM device firmware versions, bitrate will be reset to default (460800) if device side SM bus watchdog timer has been enabled, and it timeouts. + This allows re-establishing connection at defautl speed if connection breaks up and SM bus watchdog timeout gets exceeded. To identify is device supports this, + read parameter SMP_SM_VERSION. Values above 25 support this feature. Value 25 and below will not reset baudrate. + + Note also that SMP_BUS_SPEED will not be saved in device flash memory - it will reset to default at every reset & power on. + */ +LIB void smSetBaudrate( unsigned long pbs ) +{ + SMBusBaudrate=pbs; +} + /** Close connection to given bus handle number. This frees communication link therefore makes it available for other apps for opening. -return value: a SM_STATUS value, i.e. SM_OK if command succeed */ diff --git a/simplemotion.h b/simplemotion.h index 056c745..913a595 100644 --- a/simplemotion.h +++ b/simplemotion.h @@ -81,6 +81,24 @@ typedef enum _smVerbosityLevel {Off,Low,Mid,High,Trace} smVerbosityLevel; */ LIB smbus smOpenBus( const char * devicename ); +/** Change baudrate of SM communication port. This does not affect already opened ports but the next smOpenBus will be opened at the new speed. + Calling this is optional. By default SM bus and all slave devices operates at 460800 BPS speed. + Parameters: + -bps: bus speed in bits per second. for possible choices, see rs232.c (but note that all speeds are not necessarily supported by SM devices) + Typical usage is: + - first call smSetParameter(handle,0,SMP_BUS_SPEED,N) to change speed of all connected slaves to N PBS + - then close port with smCloseBus + - then call smSetBaudrate(N) + - then open bus again with smOpenBus + + Note that in upcoming SM device firmware versions, bitrate will be reset to default (460800) if device side SM bus watchdog timer has been enabled, and it timeouts. + This allows re-establishing connection at defautl speed if connection breaks up and SM bus watchdog timeout gets exceeded. To identify is device supports this, + read parameter SMP_SM_VERSION. Values above 25 support this feature. Value 25 and below will not reset baudrate. + + Note also that SMP_BUS_SPEED will not be saved in device flash memory - it will reset to default at every reset & power on. + */ +LIB void smSetBaudrate( unsigned long pbs ); + /** Set timeout of how long to wait reply packet from bus. Must be set before smOpenBus and cannot be changed afterwards * max value 5000ms. In unix this is rounded to 100ms (rounding downwards), so 99 or less gives 0ms timeout. * diff --git a/simplemotion_private.h b/simplemotion_private.h index 1c80780..e46dc1c 100644 --- a/simplemotion_private.h +++ b/simplemotion_private.h @@ -30,6 +30,7 @@ #define BUSDEV_FTDI 2 /*not implemented yet: direct FTDI lib support*/ #define SM_BUSDEVICENAME_LEN 64 +extern unsigned long SMBusBaudrate; //the next opened port (with smOpenBus) will be opened with the PBS defined here (default 460800 BPS) //default timeout in ms //Argon drive's worst case response time should be ~20ms with max length packets -- cgit v1.2.3 From d856b15bc75919f73bf8fdf5cd333af4c4f965a7 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Fri, 4 Nov 2016 12:03:07 +0200 Subject: Added new SMP_SYSTEM_CONTROL values and changelog of new SM protocol version 26 --- simplemotion_defs.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index f171350..162c03f 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -20,7 +20,7 @@ /* SMV2 protocol change log: * Version 20: * -V20 was introduced with Argon FW 1.0.0 and present at least until 1.4.0 - * Version 21 (is backwards compatible in syntax but not in setpoint behavior, see details below): + * Version 25 (is backwards compatible in syntax but not in setpoint behavior, see details below): * -V25 was introduced with IONI * -setpoint calculation is different: * now there is only one common setpoint and all ABS and INC commands (buffered & instant) @@ -31,6 +31,10 @@ * this makes it possible to insert any parameter read/write commands in middle of buffered motion. * -implemented watchdog functionality in new param SMP_FAULT_BEHAVIOR * -added param SMP_ADDRESS_OFFSET + * Version 26: + * - fast SM command added (actually is also present in late V25 too, but as unofficial feature) + * - watchdog timout now resets bitrate to default and aborts buffered motion + * */ /* Important when using SMV2 protocol: @@ -344,6 +348,11 @@ #define SMP_SYSTEM_CONTROL_MEASURE_MOTOR_RL 256 //resets position mode FB and setpoint values to 0, and also resets homing status. useful after using in vel or torq mode. #define SMP_SYSTEM_CONTROL_RESET_FB_AND_SETPOINT 512 + //writes various FW version specific values into debug parameters + #define SMP_SYSTEM_CONTROL_GET_SPECIAL_DATA 1024 + //write SM bus SM_CRCINIT constant modifier. special purposes only, don't use if unsure because + //it is one time programmable variable (irreversible operation, can't be ever reset to default by provided methods) + #define SMP_SYSTEM_CONTROL_MODIFY_CRCINIT 262144 //follow error tolerance for position control: #define SMP_POS_FERROR_TRIP 555 -- cgit v1.2.3 From 81d0ce7054c930a80d43884eb1ce97112011a1df Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Thu, 17 Nov 2016 21:53:29 +0200 Subject: Added SMP_VEL_D = 203 --- simplemotion_defs.h | 1 + 1 file changed, 1 insertion(+) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index 162c03f..4a12a03 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -456,6 +456,7 @@ #define SMP_VEL_I 200 #define SMP_POS_P 201 #define SMP_VEL_P 202 +#define SMP_VEL_D 203 #define SMP_VEL_FF 220 #define SMP_ACC_FF 221 #define SMP_POS_FF 222 -- cgit v1.2.3 From f2ff42d175b9df9b3242fcb924d640b72dfb91fb Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Thu, 1 Dec 2016 02:10:37 +0200 Subject: Changed FLAG_LIMIT_SWITCHES_NORMALLY_CLOSED_TYPE to FLAG_LIMIT_SWITCHES_NORMALLY_OPEN_TYPE. Also behavior in firmware will change. Originally it was mistakenly specified in wrong polarity because the default choice with value 0 should be closed_type. --- simplemotion_defs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index 4a12a03..e30b289 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -430,7 +430,7 @@ #define FLAG_INVERTED_HALLS BV(13) #define FLAG_USE_HALLS BV(14) #define FLAG_MECH_BRAKE_DURING_PHASING BV(15) - #define FLAG_LIMIT_SWITCHES_NORMALLY_CLOSED_TYPE BV(16) + #define FLAG_LIMIT_SWITCHES_NORMALLY_OPEN_TYPE BV(16) #define SMP_MOTION_FAULT_THRESHOLD 568 #define SMP_HV_VOLTAGE_HI_LIMIT 569 #define SMP_HV_VOLTAGE_LOW_LIMIT 570 -- cgit v1.2.3 From 1f976e7371a1da4d2b7d3e33587f6c03c33c9eed Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Tue, 20 Dec 2016 13:41:50 +0200 Subject: Added SMP_SYSTEM_CONTROL_CAPTURE_INDEX_POSITION --- simplemotion_defs.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index e30b289..ec3e2f7 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -350,8 +350,10 @@ #define SMP_SYSTEM_CONTROL_RESET_FB_AND_SETPOINT 512 //writes various FW version specific values into debug parameters #define SMP_SYSTEM_CONTROL_GET_SPECIAL_DATA 1024 + //stores encoder index position in SMP_DEBUGPARAM_1. while busy (index not found) SMP_DEBUGPARAM_2 will be 100, after found it is 200. + #define SMP_SYSTEM_CONTROL_CAPTURE_INDEX_POSITION 2048 //write SM bus SM_CRCINIT constant modifier. special purposes only, don't use if unsure because - //it is one time programmable variable (irreversible operation, can't be ever reset to default by provided methods) + //it is one time programmable variable (permanently irreversible operation, can't be ever reset to default by provided methods) #define SMP_SYSTEM_CONTROL_MODIFY_CRCINIT 262144 //follow error tolerance for position control: -- cgit v1.2.3 From 6ce53fb1222a91d3e709e4a604a44a8ca33bc00c Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Thu, 29 Dec 2016 18:36:22 +0200 Subject: Replaced RS232 library by customized code, not tested yet (win or linux) --- SimpleMotionV2.pri | 4 +- busdevice.c | 10 +- pcserialport.c | 209 +++++++++++++++++++++++++ pcserialport.h | 40 +++++ rs232.c | 402 ------------------------------------------------- rs232.h | 81 ---------- simplemotion.c | 5 +- simplemotion_private.h | 4 + 8 files changed, 264 insertions(+), 491 deletions(-) create mode 100644 pcserialport.c create mode 100644 pcserialport.h delete mode 100644 rs232.c delete mode 100644 rs232.h diff --git a/SimpleMotionV2.pri b/SimpleMotionV2.pri index 0885991..29dc8e7 100644 --- a/SimpleMotionV2.pri +++ b/SimpleMotionV2.pri @@ -5,8 +5,8 @@ DEPENDPATH += $$PWD DEFINES += SIMPLEMOTIONV2_LIBRARY -SOURCES += $$PWD/sm_consts.c $$PWD/simplemotion.c $$PWD/busdevice.c $$PWD/rs232.c +SOURCES += $$PWD/sm_consts.c $$PWD/simplemotion.c $$PWD/busdevice.c $$PWD/pcserialport.c HEADERS += $$PWD/simplemotion_private.h\ - $$PWD/rs232.h $$PWD/busdevice.h $$PWD/simplemotion.h $$PWD/sm485.h $$PWD/simplemotion_defs.h + $$PWD/pcserialport.h $$PWD/busdevice.h $$PWD/simplemotion.h $$PWD/sm485.h $$PWD/simplemotion_defs.h diff --git a/busdevice.c b/busdevice.c index c82e27b..c4f89a1 100644 --- a/busdevice.c +++ b/busdevice.c @@ -1,6 +1,6 @@ #include "busdevice.h" -#include "rs232.h" +#include "pcserialport.h" #include #define BD_NONE 0 @@ -67,7 +67,7 @@ smbusdevicehandle smBDOpen( const char *devicename ) if(strncmp(devicename,"COM",3) == 0 || strncmp(devicename,"/dev/tty",8) == 0) //use rs232 lib { - BusDevice[handle].comPort=OpenComport( devicename, SMBusBaudrate ); + BusDevice[handle].comPort=serialPortOpen( devicename, SMBusBaudrate ); if( BusDevice[handle].comPort == -1 ) { return -1; //failed to open @@ -101,7 +101,7 @@ smbool smBDClose( const smbusdevicehandle handle ) if( BusDevice[handle].bdType==BD_RS ) { - CloseComport( BusDevice[handle].comPort ); + serialPortClose( BusDevice[handle].comPort ); BusDevice[handle].opened=smfalse; return smtrue; } @@ -142,7 +142,7 @@ smbool smBDTransmit(const smbusdevicehandle handle) if( BusDevice[handle].bdType==BD_RS ) { - if(SendBuf(BusDevice[handle].comPort,BusDevice[handle].txBuffer, BusDevice[handle].txBufferUsed)==BusDevice[handle].txBufferUsed) + if(serialPortWriteBuffer(BusDevice[handle].comPort,BusDevice[handle].txBuffer, BusDevice[handle].txBufferUsed)==BusDevice[handle].txBufferUsed) { BusDevice[handle].txBufferUsed=0; return smtrue; @@ -166,7 +166,7 @@ smbool smBDRead( const smbusdevicehandle handle, smuint8 *byte ) if( BusDevice[handle].bdType==BD_RS ) { int n; - n=PollComport(BusDevice[handle].comPort, byte, 1); + n=serialPortRead(BusDevice[handle].comPort, byte, 1); if( n!=1 ) return smfalse; else return smtrue; } diff --git a/pcserialport.c b/pcserialport.c new file mode 100644 index 0000000..5abd07e --- /dev/null +++ b/pcserialport.c @@ -0,0 +1,209 @@ +/* + * pcserialport.h + * + * Header for PC serial port access library (win/linux) + * + * Created on: 28.12.2016 + * Author: Tero + * + * Inspired by RS232 library by Teunis van Beelen + */ + + + +#include "pcserialport.h" +#include "simplemotion_private.h" //needed for timeout variable + +#ifdef __linux__ + +#include +#include +#include +#include +#include +#include +#include + +smint32 serialPortOpen(const char * port_device_name, smint32 baudrate_bps) +{ + int port_handle; + int err; + int baudrateEnumValue; + struct termios new_port_settings; + + switch(baudrate_bps) + { + case 9600 : baudrateEnumValue = B9600; break; + case 19200 : baudrateEnumValue = B19200; break; + case 38400 : baudrateEnumValue = B38400; break; + case 57600 : baudrateEnumValue = B57600; break; + case 115200 : baudrateEnumValue = B115200; break; + case 230400 : baudrateEnumValue = B230400; break; + case 460800 : baudrateEnumValue = B460800; break; + case 500000 : baudrateEnumValue = B500000; break; + case 576000 : baudrateEnumValue = B576000; break; + case 921600 : baudrateEnumValue = B921600; break; + case 1000000 : baudrateEnumValue = B1000000; break; + case 1115200 : baudrateEnumValue = B1152000; break; + case 1500000 : baudrateEnumValue = B1500000; break; + case 2000000 : baudrateEnumValue = B2000000; break; + case 2500000 : baudrateEnumValue = B2500000; break; + case 3000000 : baudrateEnumValue = B3000000; break; + case 3500000 : baudrateEnumValue = B3500000; break; + case 4000000 : baudrateEnumValue = B4000000; break; + default : smDebug(-1,Low,"Serial port error: unsupported baudrate\n"); + return(1); + break; + } + + port_handle = open(port_device_name, O_RDWR | O_NOCTTY ); + if(port_handle==-1) + { + smDebug(-1, Low, "Serial port error: port open failed"); + return(port_handle); + } + + memset(&new_port_settings, 0, sizeof(new_port_settings)); //reset struct + + new_port_settings.c_cflag = baudrateEnumValue | CS8 | CLOCAL | CREAD; + new_port_settings.c_iflag = IGNPAR; + new_port_settings.c_oflag = 0; + new_port_settings.c_lflag = 0; + new_port_settings.c_cc[VMIN] = 0; /* non blocking mode */ + new_port_settings.c_cc[VTIME] = readTimeoutMs/100; /* timeout 100 ms steps */ + err = tcsetattr(port_handle, TCSANOW, &new_port_settings); + if(err==-1) + { + close(port_handle); + smDebug(-1, Low, "Serial port error: failed to set port parameters"); + return -1; + } + return port_handle; +} + + +smint32 serialPortRead(smint32 serialport_handle, smuint8 *buf, smint32 size) +{ + smint32 n; + if(size>4096) size = 4096; + n = read(serialport_handle, buf, size); + return n; +} + + +smint32 serialPortWrite(smint32 serialport_handle, unsigned char byte) +{ + smint32 n; + n = write(serialport_handle, &byte, 1); + if(n<0) + return 1; + return 0; +} + + +smint32 serialPortWriteBuffer(smint32 serialport_handle, unsigned char *buf, smint32 size) +{ + return(write(serialport_handle, buf, size)); +} + + +void serialPortClose(smint32 serialport_handle) +{ + close(serialport_handle); +} + +#else //windows: for API, see https://msdn.microsoft.com/en-us/library/ff802693.aspx + +#include +#include + +smint32 serialPortOpen(const char *port_device_name, smint32 baudrate_bps) +{ + char port_def_string[64], port_name[32]; + HANDLE port_handle; + + sprintf(port_def_string,"baud=%d data=8 parity=N stop=1", (int)baudrate_bps); + sprintf(port_name,"\\\\.\\%s",port_device_name); + + port_handle = CreateFileA(port_name,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); + + if(port_handle==INVALID_HANDLE_VALUE) + { + smDebug( -1, Low, "Serial port error: Unable to create serial port handle"); + return -1; + } + + //fill DCB settings struct + DCB dcb; + FillMemory(&dcb, sizeof(dcb), 0); + dcb.DCBlength = sizeof(dcb); + + if(!BuildCommDCBA(port_def_string, &dcb)) + { + smDebug( -1, Low, "Serial port error: Unable to build DCB settings\n"); + CloseHandle(port_handle); + return -1; + } + + if(!SetCommState(port_handle, &dcb)) + { + smDebug( -1, Low, "Serial port error: Unable to set port settings\n"); + CloseHandle(port_handle); + return -1; + } + + //set timeout + COMMTIMEOUTS port_timeouts; + port_timeouts.ReadTotalTimeoutConstant = readTimeoutMs; + port_timeouts.ReadIntervalTimeout = 0; + port_timeouts.ReadTotalTimeoutMultiplier = 0; + port_timeouts.WriteTotalTimeoutMultiplier = 50; + port_timeouts.WriteTotalTimeoutConstant = 50; + + if(!SetCommTimeouts(port_handle, &port_timeouts)) + { + smDebug( -1, Low, "Serial port error: Failed to set port timeout settings\n"); + CloseHandle(port_handle); + return(-1); + } + + return( (smint32)port_handle); +} + + +smint32 serialPortRead(smint32 serialport_handle, unsigned char *buf, smint32 size) +{ + smint32 n; + if(size>4096) + size = 4096; + ReadFile((HANDLE)serialport_handle, buf, size, (LPDWORD)((void *)&n), NULL); + return n; +} + + +smint32 serialPortWriteByte(smint32 serialport_handle, unsigned char byte) +{ + smint32 n; + WriteFile((HANDLE)serialport_handle, &byte, 1, (LPDWORD)((void *)&n), NULL); + if(n<0) + return 1; + return 0; +} + + +smint32 serialPortWriteBuffer(smint32 serialport_handle, unsigned char *buf, smint32 size) +{ + smint32 n; + if(WriteFile((HANDLE)serialport_handle, buf, size, (LPDWORD)((void *)&n), NULL)) + return n; + return -1; +} + + +void serialPortClose(smint32 serialport_number) +{ + CloseHandle((HANDLE)serialport_number); +} + + +#endif//windows diff --git a/pcserialport.h b/pcserialport.h new file mode 100644 index 0000000..832786d --- /dev/null +++ b/pcserialport.h @@ -0,0 +1,40 @@ +/* + * pcserialport.h + * + * Header for PC serial port access library (win/linux) + * + * Created on: 28.12.2016 + * Author: Tero + * + * Inspired by RS232 library by Teunis van Beelen + */ + + +/* Todo: + -Restore port settings at CloseComport + */ + +#ifndef PCSERAILPORT_H +#define PCSERAILPORT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "simplemotion.h" + +//return port handle or -1 if fails +smint32 serialPortOpen(const char *port_device_name, smint32 baudrate_bps); +smint32 serialPortRead(smint32 serialport_handle, unsigned char *buf, smint32 size); +smint32 serialPortWriteByte(smint32 serialport_handle, unsigned char byte); +smint32 serialPortWriteBuffer(smint32 serialport_handle, unsigned char *buf, smint32 size); +void serialPortClose(smint32 serialport_number); + + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/rs232.c b/rs232.c deleted file mode 100644 index 4055e2a..0000000 --- a/rs232.c +++ /dev/null @@ -1,402 +0,0 @@ -/* -*************************************************************************** -* -* Author: Teunis van Beelen -* -* Copyright (C) 2005, 2006, 2007, 2008, 2009 Teunis van Beelen -* -* teuniz@gmail.com -* -*************************************************************************** -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation version 2 of the License. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -* -*************************************************************************** -* -* This version of GPL is at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt -* -*************************************************************************** -*/ - - - -#include "rs232.h" -#include "simplemotion_private.h" - - -#ifdef __linux__ /* Linux */ - - -int OpenComport(const char * comport_name, int baudrate) -{ - int error; - int handle; - int baudr; - struct termios new_port_settings; - - switch(baudrate) - { - case 50 : baudr = B50; - break; - case 75 : baudr = B75; - break; - case 110 : baudr = B110; - break; - case 134 : baudr = B134; - break; - case 150 : baudr = B150; - break; - case 200 : baudr = B200; - break; - case 300 : baudr = B300; - break; - case 600 : baudr = B600; - break; - case 1200 : baudr = B1200; - break; - case 1800 : baudr = B1800; - break; - case 2400 : baudr = B2400; - break; - case 4800 : baudr = B4800; - break; - case 9600 : baudr = B9600; - break; - case 19200 : baudr = B19200; - break; - case 38400 : baudr = B38400; - break; - case 57600 : baudr = B57600; - break; - case 115200 : baudr = B115200; - break; - case 230400 : baudr = B230400; - break; - case 460800 : baudr = B460800; - break; - case 500000 : baudr = B500000; - break; - case 576000 : baudr = B576000; - break; - case 921600 : baudr = B921600; - break; - case 1000000 : baudr = B1000000; - break; - case 1115200 : baudr = B1152000; - break; - case 1500000 : baudr = B1500000; - break; - case 2000000 : baudr = B2000000; - break; - case 2500000 : baudr = B2500000; - break; - case 3000000 : baudr = B3000000; - break; - case 3500000 : baudr = B3500000; - break; - case 4000000 : baudr = B4000000; - break; - default : printf("invalid baudrate\n"); - return(1); - break; - } - - //Cport[comport_number] = open(comports[comport_number], O_RDWR | O_NOCTTY | O_NDELAY); - handle = open(comport_name, O_RDWR | O_NOCTTY ); - if(handle==-1) - { - perror("unable to open comport "); - return(handle); - } - - memset(&new_port_settings, 0, sizeof(new_port_settings)); /* clear the new struct */ - - new_port_settings.c_cflag = baudr | CS8 | CLOCAL | CREAD; - new_port_settings.c_iflag = IGNPAR; - new_port_settings.c_oflag = 0; - new_port_settings.c_lflag = 0; - new_port_settings.c_cc[VMIN] = 0; /* block untill n bytes are received */ - new_port_settings.c_cc[VTIME] = readTimeoutMs/100; /* block untill a timer expires (n * 100 mSec.) */ - error = tcsetattr(handle, TCSANOW, &new_port_settings); - if(error==-1) - { - close(handle); - perror("unable to adjust portsettings "); - return(-1); - } - - return(handle); -} - - -int PollComport(int comport_number, unsigned char *buf, int size) -{ - int n; - - #ifndef __STRICT_ANSI__ /* __STRICT_ANSI__ is defined when the -ansi option is used for gcc */ - if(size>SSIZE_MAX) size = (int)SSIZE_MAX; /* SSIZE_MAX is defined in limits.h */ - #else - if(size>4096) size = 4096; - #endif - - n = read(comport_number, buf, size); - - return(n); -} - - -int SendByte(int comport_number, unsigned char byte) -{ - int n; - - n = write(comport_number, &byte, 1); - if(n<0) return(1); - - return(0); -} - - -int SendBuf(int comport_number, unsigned char *buf, int size) -{ - return(write(comport_number, buf, size)); -} - - -void CloseComport(int comport_number) -{ - close(comport_number); - //feature removed, not restorint old settings : - //tcsetattr(comport_number, TCSANOW, old_port_settings + comport_number); -} - -/* -Constant Description -TIOCM_LE DSR (data set ready/line enable) -TIOCM_DTR DTR (data terminal ready) -TIOCM_RTS RTS (request to send) -TIOCM_ST Secondary TXD (transmit) -TIOCM_SR Secondary RXD (receive) -TIOCM_CTS CTS (clear to send) -TIOCM_CAR DCD (data carrier detect) -TIOCM_CD Synonym for TIOCM_CAR -TIOCM_RNG RNG (ring) -TIOCM_RI Synonym for TIOCM_RNG -TIOCM_DSR DSR (data set ready) -*/ - -int IsCTSEnabled(int comport_number) -{ - int status; - - status = ioctl(comport_number, TIOCMGET, &status); - - if(status&TIOCM_CTS) return(1); - else return(0); -} - - -#else /* windows */ - -#ifdef DEBUG_COMPORT -//for finding problem with windows calls -void print_win32_system_error(char *name) { - // Retrieve, format, and print out a message from the last error. The - // `name' that's passed should be in the form of a present tense noun - // (phrase) such as "opening file". - // - char *ptr = NULL; - FormatMessage( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM, - 0, - GetLastError(), - 0, - (char *)&ptr, - 1024, - NULL); - - fprintf(stderr, "\nError %s: %ls\n", name, ptr); - LocalFree(ptr); -} -#endif - -int OpenComport(const char * comport_name, int baudrate) -{ - - char baudr[64], portname[64]; - HANDLE handle; - - - switch(baudrate) - { - case 110 : strcpy(baudr, "baud=110 data=8 parity=N stop=1"); - break; - case 300 : strcpy(baudr, "baud=300 data=8 parity=N stop=1"); - break; - case 600 : strcpy(baudr, "baud=600 data=8 parity=N stop=1"); - break; - case 1200 : strcpy(baudr, "baud=1200 data=8 parity=N stop=1"); - break; - case 2400 : strcpy(baudr, "baud=2400 data=8 parity=N stop=1"); - break; - case 4800 : strcpy(baudr, "baud=4800 data=8 parity=N stop=1"); - break; - case 9600 : strcpy(baudr, "baud=9600 data=8 parity=N stop=1"); - break; - case 19200 : strcpy(baudr, "baud=19200 data=8 parity=N stop=1"); - break; - case 38400 : strcpy(baudr, "baud=38400 data=8 parity=N stop=1"); - break; - case 57600 : strcpy(baudr, "baud=57600 data=8 parity=N stop=1"); - break; - case 115200 : strcpy(baudr, "baud=115200 data=8 parity=N stop=1"); - break; - case 128000 : strcpy(baudr, "baud=128000 data=8 parity=N stop=1"); - break; - case 256000 : strcpy(baudr, "baud=256000 data=8 parity=N stop=1"); - break; - case 460800 : strcpy(baudr, "baud=460800 data=8 parity=N stop=1"); - break; - case 500000 : strcpy(baudr, "baud=500000 data=8 parity=N stop=1"); - break; - case 576000 : strcpy(baudr, "baud=576000 data=8 parity=N stop=1"); - break; - case 921600 : strcpy(baudr, "baud=921600 data=8 parity=N stop=1"); - break; - case 1000000 : strcpy(baudr, "baud=1000000 data=8 parity=N stop=1"); - break; - case 1115200 : strcpy(baudr, "baud=1115200 data=8 parity=N stop=1"); - break; - case 1500000 : strcpy(baudr, "baud=1500000 data=8 parity=N stop=1"); - break; - case 2000000 : strcpy(baudr, "baud=2000000 data=8 parity=N stop=1"); - break; - case 2500000 : strcpy(baudr, "baud=2500000 data=8 parity=N stop=1"); - break; - case 3000000 : strcpy(baudr, "baud=3000000 data=8 parity=N stop=1"); - break; - case 3500000 : strcpy(baudr, "baud=3500000 data=8 parity=N stop=1"); - break; - case 4000000 : strcpy(baudr, "baud=4000000 data=8 parity=N stop=1"); - break; - default : printf("invalid baudrate\n"); - return(-1); - break; - } - - strcpy(portname,"\\\\.\\"); - strcat(portname,comport_name); - - handle = CreateFileA(portname, - GENERIC_READ|GENERIC_WRITE, - 0, /* no share */ - NULL, /* no security */ - OPEN_EXISTING, - 0, /* no threads */ - NULL); /* no templates */ - - if(handle==INVALID_HANDLE_VALUE) - { - printf("unable to open comport\n"); - return(-1); - } - - DCB port_settings; - memset(&port_settings, 0, sizeof(port_settings)); /* clear the new struct */ - port_settings.DCBlength = sizeof(port_settings); - - if(!BuildCommDCBA(baudr, &port_settings)) - { - printf("unable to set comport dcb settings\n"); - CloseHandle(handle); - return(-1); - } - - if(!SetCommState(handle, &port_settings)) - { - printf("unable to set comport cfg settings\n"); - CloseHandle(handle); - return(-1); - } - - COMMTIMEOUTS Cptimeouts; - - Cptimeouts.ReadIntervalTimeout = 0; - Cptimeouts.ReadTotalTimeoutMultiplier = 0; - Cptimeouts.ReadTotalTimeoutConstant = readTimeoutMs; - Cptimeouts.WriteTotalTimeoutMultiplier = 50; - Cptimeouts.WriteTotalTimeoutConstant = 50; - - - if(!SetCommTimeouts(handle, &Cptimeouts)) - { - printf("unable to set comport time-out settings\n"); - CloseHandle(handle); - return(-1); - } - - return( (int)handle); -} - - -int PollComport(int comport_number, unsigned char *buf, int size) -{ - int n; - - if(size>4096) size = 4096; - - /* added the void pointer cast, otherwise gcc will complain about */ - /* "warning: dereferencing type-punned pointer will break strict aliasing rules" */ - - ReadFile((HANDLE)comport_number, buf, size, (LPDWORD)((void *)&n), NULL); - - return(n); -} - - -int SendByte(int comport_number, unsigned char byte) -{ - int n; - - WriteFile((HANDLE)comport_number, &byte, 1, (LPDWORD)((void *)&n), NULL); - - if(n<0) return(1); - - return(0); -} - - - -int SendBuf(int comport_number, unsigned char *buf, int size) -{ - int n; - - if(WriteFile((HANDLE)comport_number, buf, size, (LPDWORD)((void *)&n), NULL)) - { - return(n); - } - - return(-1); -} - - -void CloseComport(int comport_number) -{ - CloseHandle((HANDLE)comport_number); -} - - - -#endif - diff --git a/rs232.h b/rs232.h deleted file mode 100644 index 7c90fea..0000000 --- a/rs232.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*************************************************************************** -* -* Author: Teunis van Beelen -* -* Copyright (C) 2005, 2006, 2007, 2008, 2009 Teunis van Beelen -* -* teuniz@gmail.com -* -*************************************************************************** -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation version 2 of the License. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -* -*************************************************************************** -* -* This version of GPL is at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt -* -*************************************************************************** -*/ - -/* libraray modified for Simplemotion, major changes: - -OpenComport now returns actual file handle that must be passed to rx/tx functions, or -1 if fails - - Todo: - -Restore port settings at CloseComport - */ - -#ifndef rs232_INCLUDED -#define rs232_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - - - -#ifdef __linux__ - -#include -#include -#include -#include -#include -#include -#include - -#else - -#include - -#endif - -//return port handle or -1 if fails -int OpenComport(const char * comport_name, int baudrate); -int PollComport(int, unsigned char *, int); -int SendByte(int, unsigned char); -int SendBuf(int, unsigned char *, int); -void CloseComport(int); - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif - - diff --git a/simplemotion.c b/simplemotion.c index ea773ac..cdee1d1 100644 --- a/simplemotion.c +++ b/simplemotion.c @@ -92,7 +92,10 @@ void smDebug( smbus handle, smVerbosityLevel verbositylevel, char *format, ...) va_start(fmtargs,format); vsnprintf(buffer,sizeof(buffer)-1,format,fmtargs); va_end(fmtargs); - fprintf(smDebugOut,"%s: %s",smBus[handle].busDeviceName, buffer); + if(handle>=0) + fprintf(smDebugOut,"%s: %s",smBus[handle].busDeviceName, buffer); + else + fprintf(smDebugOut,"SMLib: %s",buffer);//no handle given } } #else diff --git a/simplemotion_private.h b/simplemotion_private.h index e46dc1c..85e54f9 100644 --- a/simplemotion_private.h +++ b/simplemotion_private.h @@ -43,6 +43,10 @@ extern const smuint8 table_crc8[]; extern FILE *smDebugOut; //such as stderr or file handle. if NULL, debug info disbled extern smuint16 readTimeoutMs; +//smDebug: prints debug info to smDebugOut stream. If no handle availab, set it to -1. +//set verbositylevel according to frequency of prints made. +//I.e Low=low frequency, so it gets displayed when global verbosity level is set to at least Low or set it to Trace which gets filtered +//out if global verbisity level is set less than Trace void smDebug( smbus handle, smVerbosityLevel verbositylevel, char *format, ...); SM_STATUS smRawCmd( const char *axisname, smuint8 cmd, smuint16 val, smuint32 *retdata ); -- cgit v1.2.3 From b70a617475efe9af38e6d3debc26ff1555714435 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Fri, 27 Jan 2017 14:09:07 +0200 Subject: Make serial port driver unix compliant, not only linux --- pcserialport.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pcserialport.c b/pcserialport.c index 5abd07e..792f079 100644 --- a/pcserialport.c +++ b/pcserialport.c @@ -14,7 +14,7 @@ #include "pcserialport.h" #include "simplemotion_private.h" //needed for timeout variable -#ifdef __linux__ +#ifdef __unix__ #include #include -- cgit v1.2.3 From dcd4a255d2d0650d054aa4fd38d35fdc71126e02 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Sat, 28 Jan 2017 19:04:37 +0200 Subject: Remove old library test source. Changed version to 0x201000 = 2.1.0 before merging to master. --- simplemotion_private.h | 2 +- smtest.c | 361 ------------------------------------------------- 2 files changed, 1 insertion(+), 362 deletions(-) delete mode 100644 smtest.c diff --git a/simplemotion_private.h b/simplemotion_private.h index 85e54f9..e0f70f3 100644 --- a/simplemotion_private.h +++ b/simplemotion_private.h @@ -19,7 +19,7 @@ #include "busdevice.h" #include -#define SM_VERSION 0x020001 +#define SM_VERSION 0x020100 //max number of simultaneously opened buses. change this and recompiple SMlib if //necessary (to increase channels or reduce to save memory) #define SM_MAX_BUSES 10 diff --git a/smtest.c b/smtest.c deleted file mode 100644 index e021da6..0000000 --- a/smtest.c +++ /dev/null @@ -1,361 +0,0 @@ -#include "simplemotion.h" -#include -#include - -#define ADDR 255 -#include "vsd_cmd.h" - - -//gcc -o testi *.c - -//#include "D:\gd\vsdr\vsdr-stm32\src\simplemotion_defs.h" -#include "/home/tero/shr/svn/granited/firmware_design/eclipseworkspace/vsdr-stm32/src/simplemotion_defs.h" - -smbus h; - smint32 ret; - SM_STATUS stat=0; - - - -void test() -{ - //printf( "stat %d\n", smRawCommand( h, ADDR, 2, 0, &ret ) ); - //printf("ret=%08x\n",ret); - - //printf( "stat %d\n", smRawCommand( h, 2, 2, 0, &ret ) ); - //printf("ret=%08x\n",ret); - - - - //stat|=smAppendSetParamCommandToQueue(h,SMP_DIGITAL_OUT_VALUE_1,151); -// stat|=smAppendSetParamCommandToQueue(h,SMP_INPUT_MULTIPLIER,11); - stat|=smExecuteCommandQueue( h, ADDR ); - stat|=smGetQueuedSetParamReturnValue(h,&ret); - printf("setstat=%d val=%d\n",stat,ret); - - stat=0; - stat|=smAppendGetParamCommandToQueue(h,SMP_BUS_SPEED); - stat|=smAppendGetParamCommandToQueue(h,SMP_SM_VERSION_COMPAT); - stat|=smAppendGetParamCommandToQueue(h,SMP_DIGITAL_OUT_VALUE_1); - stat|=smExecuteCommandQueue( h, ADDR ); - stat|=smGetQueuedGetParamReturnValue(h,&ret); - printf("stat=%d val=%d\n",stat,ret); - stat|=smGetQueuedGetParamReturnValue(h,&ret); - printf("stat=%d val=%d\n",stat,ret); - stat|=smGetQueuedGetParamReturnValue(h,&ret); - printf("stat=%d val=%d\n",stat,ret); - - -/* smAppendSMCommandToQueue( h, SMPCMD_SETPARAMADDR, SMP_RETURN_PARAM_LEN ); - smAppendSMCommandToQueue( h, SMPCMD_24B, SMPRET_32B ); - smAppendSMCommandToQueue( h, SMPCMD_SETPARAMADDR, SMP_RETURN_PARAM_ADDR ); - smAppendSMCommandToQueue( h, SMPCMD_32B, SMP_BUS_SPEED ); - - smAppendSMCommandToQueue( h, SMPCMD_32B,SMP_INPUT_MULTIPLIER ); - smAppendSMCommandToQueue( h, SMPCMD_SETPARAMADDR, SMP_INPUT_MULTIPLIER ); - smAppendSMCommandToQueue( h, SMPCMD_24B, 100 ); -// SMP_INPUT_MULTIPLIER - - - smExecuteCommandQueue( h, ADDR ); - printf("",smGetQueuedSMCommandReturnValue( h )); - printf("",smGetQueuedSMCommandReturnValue( h )); - printf("",smGetQueuedSMCommandReturnValue( h )); - printf("",smGetQueuedSMCommandReturnValue( h )); - printf("",smGetQueuedSMCommandReturnValue( h )); - printf("",smGetQueuedSMCommandReturnValue( h )); - printf("",smGetQueuedSMCommandReturnValue( h )); - // printf("%d\n",smGetQueuedSMCommandReturnValue( h ));*/ - - /* smAppendCommandToQueue( h, CMD_GET_PARAM, RUNTIME_FAULTBITS ); - smAppendCommandToQueue( h, CMD_GET_PARAM, RUNTIME_STATUSBITS ); - smAppendCommandToQueue( h, CMD_GET_PARAM, RUNTIME_FIRMWARE_VERSION ); - smExecuteCommandQueue( h, ADDR ); - printf("%d\n",smGetQueuedCommandReturnValue( h, 0 )); - printf("%d\n",smGetQueuedCommandReturnValue( h, 1 )); - printf("%d\n",smGetQueuedCommandReturnValue( h, 2 )); - */ -} - -void tests(); - -/*BL functions started by writing a value to this param: - * 1:mass erase and reset write pos counter to 0 - * 2:write block - * 3:verify flash (update BOOTLOADER_STAT_FLASH_VERIFIED_OK status) - * 4:start main app - */ -#define SMP_BOOTLOADER_FUNCTION 191 -//upload 16bits of data to buffer. max buffer length 4096 bytes before it must be written with "write block" function -//total uploaded amount must be multiple of 4 bytes before issuing write function -#define SMP_BOOTLOADER_UPLOAD 192 -//bootloaded status -#define SMP_BOOTLOADER_STAT 193 - #define BOOTLOADER_STAT_FLASH_VERIFIED_OK BV(0) -#define SMP_FIRMWARE_VERSION 6010 -#define SMP_BACKWARDS_COMP_VERSION 6012 - -#define SUPPORTED_BL_VERSION_MIN 10000 -#define SUPPORTED_BL_VERSION_MAX 10010 - - -//load app rom from file. args: -//pass pointer to "data". this func will allocate the memory -//return number of 16bit words or -1 if load failed -int loadBLfile( const char *filename, smuint16 **data ) -{ - int bytes; - int i; - FILE *f; - smuint16 *buf; - - //open file - f=fopen(filename,"rb"); - if(f==NULL) - return -1; - - //find file size - fseek(f, 0L, SEEK_END); - bytes = ftell(f); - fseek(f, 0L, SEEK_SET); - printf("size=%d\n",bytes); - //allocate - buf=(smuint16*)malloc((bytes+1)/2);//round upwards - if(buf==NULL) - return -1; - - //load - for(i=0;i=size) - upword=0xeeee; - else - upword=bin[i]; - printf("i=%d\n",i); - - stat|=smAppendSMCommandToQueue( h, SMPCMD_24B, upword ); - i++; - } -// stat|=smAppendSMCommandToQueue( h, SMPCMD_SETPARAMADDR, SMP_BOOTLOADER_FUNCTION ); -// stat|=smAppendSMCommandToQueue( h, SMPCMD_24B, 2);//do write - - stat|=smExecuteCommandQueue( h, ADDR ); - - for(c=0;c=size) - upword=0xeeee; - else - upword=bin[i]; - printf("i=%d\n",i); - - stat|=smAppendSMCommandToQueue( h, SMPCMD_24B, upword ); - i++; - } - stat|=smAppendSMCommandToQueue( h, SMPCMD_SETPARAMADDR, SMP_BOOTLOADER_FUNCTION ); - stat|=smAppendSMCommandToQueue( h, SMPCMD_24B, 2);//do write - - stat|=smExecuteCommandQueue( h, ADDR ); - - for(c=0;c Date: Thu, 2 Feb 2017 15:24:14 +0200 Subject: Fix smDebug calls (swapped bushandle & verbosity level arguments when incorrect) --- simplemotion.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/simplemotion.c b/simplemotion.c index cdee1d1..b9ef9c0 100644 --- a/simplemotion.c +++ b/simplemotion.c @@ -225,25 +225,25 @@ smbus smOpenBus( const char * devicename ) return handle; } -/** Change baudrate of SM communication port. This does not affect already opened ports but the next smOpenBus will be opened at the new speed. - Calling this is optional. By default SM bus and all slave devices operates at 460800 BPS speed. - Parameters: - -bps: bus speed in bits per second. for possible choices, see rs232.c (but note that all speeds are not necessarily supported by SM devices) - Typical usage is: - - first call smSetParameter(handle,0,SMP_BUS_SPEED,N) to change speed of all connected slaves to N PBS - - then close port with smCloseBus - - then call smSetBaudrate(N) - - then open bus again with smOpenBus - - Note that in upcoming SM device firmware versions, bitrate will be reset to default (460800) if device side SM bus watchdog timer has been enabled, and it timeouts. - This allows re-establishing connection at defautl speed if connection breaks up and SM bus watchdog timeout gets exceeded. To identify is device supports this, - read parameter SMP_SM_VERSION. Values above 25 support this feature. Value 25 and below will not reset baudrate. - - Note also that SMP_BUS_SPEED will not be saved in device flash memory - it will reset to default at every reset & power on. - */ +/** Change baudrate of SM communication port. This does not affect already opened ports but the next smOpenBus will be opened at the new speed. + Calling this is optional. By default SM bus and all slave devices operates at 460800 BPS speed. + Parameters: + -bps: bus speed in bits per second. for possible choices, see rs232.c (but note that all speeds are not necessarily supported by SM devices) + Typical usage is: + - first call smSetParameter(handle,0,SMP_BUS_SPEED,N) to change speed of all connected slaves to N PBS + - then close port with smCloseBus + - then call smSetBaudrate(N) + - then open bus again with smOpenBus + + Note that in upcoming SM device firmware versions, bitrate will be reset to default (460800) if device side SM bus watchdog timer has been enabled, and it timeouts. + This allows re-establishing connection at defautl speed if connection breaks up and SM bus watchdog timeout gets exceeded. To identify is device supports this, + read parameter SMP_SM_VERSION. Values above 25 support this feature. Value 25 and below will not reset baudrate. + + Note also that SMP_BUS_SPEED will not be saved in device flash memory - it will reset to default at every reset & power on. + */ LIB void smSetBaudrate( unsigned long pbs ) { - SMBusBaudrate=pbs; + SMBusBaudrate=pbs; } /** Close connection to given bus handle number. This frees communication link therefore makes it available for other apps for opening. @@ -582,7 +582,7 @@ SM_STATUS smGetQueuedSMCommandReturnValue( const smbus bushandle, smint32 *retV if(smBus[bushandle].cmd_recv_queue_bytes>=smBus[bushandle].recv_payloadsize) { - smDebug(Trace,bushandle,"Packet receive error, return data coudn't be parsed\n"); + smDebug(bushandle,Trace, "Packet receive error, return data coudn't be parsed\n"); //return 0 if(retValue!=NULL) *retValue=0;//check every time if retValue is set NULL by caller -> don't store anything to it if its NULL @@ -603,7 +603,7 @@ SM_STATUS smGetQueuedSMCommandReturnValue( const smbus bushandle, smint32 *retV smuint8 *readBuf=(smuint8*)&read; readBuf[1]=rxbyte; readBuf[0]=bufget8bit(smBus[bushandle].recv_rsbuf, smBus[bushandle].cmd_recv_queue_bytes++); - smDebug(Trace,bushandle,"RET16B: %d\n",read.retData); + smDebug(bushandle,Trace,"RET16B: %d\n",read.retData); if(retValue!=NULL) *retValue=read.retData; return recordStatus(bushandle,SM_OK); @@ -616,7 +616,7 @@ SM_STATUS smGetQueuedSMCommandReturnValue( const smbus bushandle, smint32 *retV readBuf[2]=rxbyte; readBuf[1]=bufget8bit(smBus[bushandle].recv_rsbuf, smBus[bushandle].cmd_recv_queue_bytes++); readBuf[0]=bufget8bit(smBus[bushandle].recv_rsbuf, smBus[bushandle].cmd_recv_queue_bytes++); - smDebug(Trace,bushandle,"RET24B: %d\n",read.retData); + smDebug(bushandle,Trace,"RET24B: %d\n",read.retData); if(retValue!=NULL) *retValue=read.retData; return recordStatus(bushandle,SM_OK); @@ -630,7 +630,7 @@ SM_STATUS smGetQueuedSMCommandReturnValue( const smbus bushandle, smint32 *retV readBuf[2]=bufget8bit(smBus[bushandle].recv_rsbuf, smBus[bushandle].cmd_recv_queue_bytes++); readBuf[1]=bufget8bit(smBus[bushandle].recv_rsbuf, smBus[bushandle].cmd_recv_queue_bytes++); readBuf[0]=bufget8bit(smBus[bushandle].recv_rsbuf, smBus[bushandle].cmd_recv_queue_bytes++); - smDebug(Trace,bushandle,"RET32B: %d\n",read.retData); + smDebug(bushandle,Trace,"RET32B: %d\n",read.retData); if(retValue!=NULL) *retValue=read.retData; return recordStatus(bushandle,SM_OK); @@ -641,7 +641,7 @@ SM_STATUS smGetQueuedSMCommandReturnValue( const smbus bushandle, smint32 *retV SMPayloadCommandRet8 read; smuint8 *readBuf=(smuint8*)&read; readBuf[0]=rxbyte; - smDebug(Trace,bushandle,"RET_OTHER: %d\n",read.retData); + smDebug(bushandle,Trace,"RET_OTHER: %d\n",read.retData); if(retValue!=NULL) *retValue=read.retData; return recordStatus(bushandle,SM_OK); -- cgit v1.2.3 From 84e88b1de92b1d4edf3d093ca1a66054d7d85f1e Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Wed, 8 Feb 2017 14:12:19 +0200 Subject: Add SSI encoder definitions --- simplemotion_defs.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index ec3e2f7..2c7a10a 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -446,10 +446,11 @@ #define EL_MODE_SIMUCUBE 2 #define EL_MODE_IONIZER 3 -/*for BiSS encoder - * bits defined as: - * lowest 8 bits: single turn bits, value range 4-24 - * next 8 bits: multi turn bits, value range 0-16 +/*for BiSS/SSI encoder + * bits defined as (from LSB): + * bits 0-7: single turn bits, accepted value range 4-24 + * bits 8-15: multi turn bits, accepted value range 0-16 + * bits 16-17: SSI encoder mode: 00=SSI 01=SPI (SSI with CS) 10=AMS SSI (SSI with CS + with error bit monitoring & parity check) * rest: reserved for future use (always 0) */ #define SMP_SERIAL_ENC_BITS 574 -- cgit v1.2.3 From 7442165d48b012efcfd8301e805f0f17ad172276 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Wed, 8 Feb 2017 19:50:14 +0200 Subject: Changed license to Apache license 2.0 --- LICENSE | 542 ++++++++++++++++++------------------------------- simplemotion.c | 11 - simplemotion.h | 11 - simplemotion_private.h | 10 - 4 files changed, 203 insertions(+), 371 deletions(-) diff --git a/LICENSE b/LICENSE index ea5a3f2..f4f87bd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,339 +1,203 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - SimpleMotion V2 library - Copyright (C) 2013 GraniteDevices - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + \ No newline at end of file diff --git a/simplemotion.c b/simplemotion.c index b9ef9c0..78059ab 100644 --- a/simplemotion.c +++ b/simplemotion.c @@ -1,16 +1,5 @@ //Copyright (c) Granite Devices Oy -/* - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -*/ - #include #include diff --git a/simplemotion.h b/simplemotion.h index 913a595..965512f 100644 --- a/simplemotion.h +++ b/simplemotion.h @@ -1,17 +1,6 @@ //Global SimpleMotion functions & definitions //Copyright (c) Granite Devices Oy -/* - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -*/ - #ifndef SIMPLEMOTION_H #define SIMPLEMOTION_H diff --git a/simplemotion_private.h b/simplemotion_private.h index e0f70f3..94cc8d1 100644 --- a/simplemotion_private.h +++ b/simplemotion_private.h @@ -1,16 +1,6 @@ //Internal functions & definitions, not for library user //Copyright (c) Granite Devices Oy -/* - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. -*/ #ifndef SIMPLEMOTION_PRIVATE_H #define SIMPLEMOTION_PRIVATE_H -- cgit v1.2.3 From 77972a62d6d04b3a8b1ad2def67fef06a48b4da0 Mon Sep 17 00:00:00 2001 From: Tero Kontkanen Date: Mon, 20 Feb 2017 22:06:14 +0200 Subject: Redefined SMP_SERIAL_ENC_BITS specs --- simplemotion_defs.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simplemotion_defs.h b/simplemotion_defs.h index 2c7a10a..f85b40f 100644 --- a/simplemotion_defs.h +++ b/simplemotion_defs.h @@ -450,7 +450,7 @@ * bits defined as (from LSB): * bits 0-7: single turn bits, accepted value range 4-24 * bits 8-15: multi turn bits, accepted value range 0-16 - * bits 16-17: SSI encoder mode: 00=SSI 01=SPI (SSI with CS) 10=AMS SSI (SSI with CS + with error bit monitoring & parity check) + * bits 16-18: serial encoder mode: 000=BiSS, 001=SSI, 010=AMS SSI (SSI+CS+error monitoring), 011=SPI (SSI+CS) 100=GRAY SSI (i.e. SICK TTK70) * rest: reserved for future use (always 0) */ #define SMP_SERIAL_ENC_BITS 574 -- cgit v1.2.3