diff options
| author | TeroK <tero.k@granitedevices.fi> | 2014-01-16 14:28:27 -0800 |
|---|---|---|
| committer | TeroK <tero.k@granitedevices.fi> | 2014-01-16 14:28:27 -0800 |
| commit | 2ad7a9271d4336a988b78caf13252da3e0ff0f5a (patch) | |
| tree | afb06ccbb3966332e381f36fa5dd9d296b091e80 /sm485.h | |
| parent | 575c3105208ed61dd34769f7917533417899e998 (diff) | |
| download | SimpleMotionV2-2ad7a9271d4336a988b78caf13252da3e0ff0f5a.tar.gz SimpleMotionV2-2ad7a9271d4336a988b78caf13252da3e0ff0f5a.zip | |
first release
Diffstat (limited to 'sm485.h')
| -rw-r--r-- | sm485.h | 71 |
1 files changed, 71 insertions, 0 deletions
@@ -0,0 +1,71 @@ +//VSD SM485 bus definitions + +#ifndef SM485_H +#define SM485_H + +//SERIAL COMMANDS +#define SM485_CRCINIT 0x0 +#define SM485_BUFSIZE 128 +#define SM485_RSBUFSIZE 128 +#define SM485_CMDBUFSIZE 4096 + +//cmd number must be 0-31 + +#define SM485_VERSION 90 +#define SM485_VERSION_COMPAT 85 + +#define SM485_MAX_PAYLOAD_BYTES 120 + +//00xb +#define SMCMD_MASK_0_PARAMS 0 +//01xb, 2 bytes as payload +#define SMCMD_MASK_2_PARAMS 2 +//10xb +#define SMCMD_MASK_N_PARAMS 4 +//11xb +#define SMCMD_MASK_RESERVED 6 +//xx1b +#define SMCMD_MASK_RETURN 1 +//110b +#define SMCMD_MASK_PARAMS_BITS 6 + + +#define SMCMD_ID(cmdnumber, flags) (((cmdnumber)<<3)|flags) + +//format 5, u8 bytesfollowing,u8 toaddr,cmddata,u16 crc +//return, 6, u8 bytesfollowing,u8 fromaddr, returndata,u16 crc +#define SMCMD_INSTANT_CMD SMCMD_ID(4,SMCMD_MASK_N_PARAMS) +#define SMCMD_INSTANT_CMD_RET SMCMD_ID(4,SMCMD_MASK_N_PARAMS|SMCMD_MASK_RETURN) + +//format ID, u8 bytesfollowing,u8 toaddr,cmddata,u16 crc +//return, ID, u8 bytesfollowing,u8 fromaddr,returndata,u16 crc +#define SMCMD_BUFFERED_CMD SMCMD_ID(6,SMCMD_MASK_N_PARAMS) +#define SMCMD_BUFFERED_CMD_RET SMCMD_ID(6,SMCMD_MASK_N_PARAMS|SMCMD_MASK_RETURN) + +//read return data from buffered cmds. repeat this command before SMCMD_BUFFERED_CMD until N!=120 from download +#define SMCMD_BUFFERED_RETURN_DATA SMCMD_ID(7,SMCMD_MASK_0_PARAMS) +#define SMCMD_BUFFERED_RETURN_DATA_RET SMCMD_ID(7,SMCMD_MASK_N_PARAMS|SMCMD_MASK_RETURN) + +//cmd 20,u8 toaddr, u8 crc +//ret 21, u8=2, u8 fromaddr, u16 clock,u16 crc, muut clientit lukee t?n +//oldret 21, u8 fromaddr, u16 clock,u16 crc, muut clientit lukee t?n +#define SMCMD_GET_CLOCK SMCMD_ID(10,SMCMD_MASK_0_PARAMS) +#define SMCMD_GET_CLOCK_RET SMCMD_ID(10,SMCMD_MASK_2_PARAMS|SMCMD_MASK_RETURN) + +#ifdef PROCESS_IMAGE_SUPPORT + +//PROCESS_IMAGE communication not supported by SM V2.0.0. placeholders here + +//upload process data to bus devices. each device knows it's data offset in payload +//(set by SMREGISTER_PDATA_IN_OFFSET, which is 0xffff if not accepting anything) +#define SMCMD_PROCESS_IMAGE SMCMD_ID(5,SMCMD_MASK_N_PARAMS) + +//retrun of feedback process data is the tricky part +//the device that has process data address of 0 answers first including SMCMD header (3bytes) and then its own return process data +//SMREGISTER_PDATA_OUT_OFFSET is location of device's return processdata +#define SMCMD_PROCESS_IMAGE_RET SMCMD_ID(5,SMCMD_MASK_N_PARAMS|SMCMD_MASK_RETURN) + +#endif + + +#endif |
