User Tools

Site Tools


arduino:wio-canprot-en
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


arduino:wio-canprot-en [2024/06/17 15:03] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== WIOCAN ======
 +[[:english|{{ :hardware.png}}]][[:english|{{ :rocrail-logo-35.png}}]]
 +[[:english|Content]] -> [[:hardware-en#arduino|Arduino]]
 +  * [[:arduino:wio-overview-en|WIO Overview]] | [[:arduino:wio-setup-en|WIO Setup]] | [[:arduino:wioctrl-en|WIO Control]] | [[:arduino:amp-en|User Bitmaps]] | **[[:arduino:wio-en|WIO Firmware]]**
 +  * [[:arduino:wio-rascii-en|WIO RASCII]] | **[[:arduino:wio-canprot-en|WIO CAN Protocol]]**
 +    * [[:arduino:wio-canprot-framing-en|CAN ASCII Framing]]
 + \\
 +=====RCAN Protocol=====
 +**WIOcan**, (WIO-02 WIO-PROG2 WIO-PicoW-CAN), uses extended CAN frames, populated with the Rocrail **RCAN** protocol.\\
 +The used CAN baudrate is 125k, which is fast enough and allows long wires.\\
 +By using all of the 29 ID bits, will allow instructions with zero to eight bytes of data.\\
 +This protocol can be used parallel with other protocols using standard frames and the same baudrate.\\
 +Some CAN interfaces cannot be used for extended frames because the ID will be mangled. Use an other available **[[:cbus-en#sub-library|Interface Type]]**.\\
 +The recommended way to serialise CAN Frames over USB and TCP is **[[:arduino:wio-canprot-framing-en|CAN ASCII Framing]]**.\\
 +
 +====CAN Frame====
 +^  Extended ID  ^^^^^  Count  ^  Data[Count] 
 +| PRIO | TYPE | SID | IC | RID | DLC | DATA |
 +|  3  |  2  |  8  |  8  |  8  |  4  |  (0...8) x 8  |
 +<code>
 +EID 29bit: <PRIO 3bit> <TYPE 2bit> <SID 8bit>  <IC 8bit>   <RID 8bit>
 +             Mask: <0x1C000000><0x03000000><0x00FF0000><0x0000FF00><0x000000FF>
 +</code>
 + \\
 +^ CAN usage ^ Description ^ Range ^ Remark ^
 +| PRIO | ID Priority | 0...7 |
 +| TYPE | Instruction type | 0...3 | cmd, evt, rsp, inf |
 +| SID | Sender ID | 1...255 | 1=Rocrail |
 +| IC | Instruction Code | 0x00...0xFF | Group 0xFn + Opcode 0xnF |
 +| RID | Receiver ID (NodeID) | 0...255 | 0=broadcast |
 +| DLC | Number of following data bytes | 0...8 |
 +| DATA | 8 data bytes | (0...8) x 0...255 |
 +
 + \\
 +===Streaming===
 +An exception on this header is streaming:\\
 +The PRIO and SID are used as 11bit down counter. This allows file sizes of max. 16kB.\\
 +The end of streaming is triggered if the down counter reaches zero.\\
 +The first data packet contains the file name with a max. length of 8 characters incl. extension.\\
 +
 +
 +
 +
 + \\
 +=====0 System=====
 +===CBUS Bootloader===
 +Group GRP_SYS and command zero, Instruction Code 0x00, are not used to avoid CBUS bootloader EID conflicts.\\
 +This could happen in case the SID is 8 and RID is 4 or 5.\\
 +<code>
 +:X00080004N -> Bootloader command
 +:X00080005N -> Bootloader data
 +</code>
 +
 +====0.1 State====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | SYS_STATE | x | 0 |
 +
 +===Response/Event===
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_RSP/TYPE_EVT | x | SYS_STATE | 1 | 1 | State bits |
 +
 +====0.2 SoD====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | SYS_SOD | 0 | 0 |
 +
 +===Response===
 +This packets are the same as spontaneous events.
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_SENSOR | TYPE_EVT | x | INF_PORT | 0 | 6 | Port# | Type | Value | Aspect H | Aspect M | Aspect L |
 +| PRIO_INFO | TYPE_EVT | x | INF_IO | 0 | 1..8 | Port 0-7 | Port 8-15 | Port16-23 | Port 24-31 | Port 32-39 | Port 40-47 | Port 48-55 | Port 56-63 |
 +
 +====0.3 Clock====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_INFO | TYPE_CMD | 1 | SYS_CLOCK | 0 | 8 | Hour | Minute | Brightness | Month | Day of month | Temp.H | Temp.L | Divider |
 +
 +====0.4 EBreak====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | SYS_EBREAK | 0 | 0 |
 +
 +====0.5 Power====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | SYS_POWER | 0 | 1 | On=1 Off=0 |
 +
 +====0.6 Shutdown====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | SYS_SHUTDOWN | x/0 | 1 | x or all=0 |
 +
 +====0.7 Reboot====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | SYS_REBOOT | x | 0 |
 +
 +====0.8 Link====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | SYS_LINK | x | 3 | Source block | Destination block | Options |
 +
 +====0.9 Unlink====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | SYS_UNLINK | x | 2 | Block | Options |
 +
 + \\
 +=====1 Configuration=====
 +====1.0 Query====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_QUERY | x | 0 |
 +
 +===Response===
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_RSP | x | CNF_QUERY | 1 | 8 | Manu-ID | Product-ID | Board type | Options 1 | Options 2 | Options 3 | Version High | Version Low |
 +
 +====1.1 Get====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_GET | x | 1 | CNF_OPTIONS |
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_GET | x | 1 | CNF_PORTGROUP_n |
 +
 +===Response===
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_RSP | x | CNF_GET | 1 | 7 | CNF_OPTIONS | Options 1 | Options2 | Options3 | Pulse length | CAN-ID | Subtype |
 +| PRIO_CONFIG | TYPE_RSP | x | CNF_GET | 1 | 5 | CNF_PORTGROUP_n | nib0 + nib1 | nib2 + nib3  | nib4 + nib5 | nib6 + nib7 |
 +One nible represents a port type, 0...15.\\
 +
 +====1.2 Set====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_SET | x | 7 | CNF_OPTIONS | Options 1 | Options 2 | Options 3 | Pulselength | CAN-ID | Subtype |
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_SET | x | 5 | CNF_PORTGROUP_n | nib0 + nib1 | nib2 + nib3  | nib4 + nib5 | nib6 + nib7 |
 +
 +====1.3 Name====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_NAME | x | 8 | Name characters; Unused data bytes must be set to zero. ||||||||
 +
 +====1.4 ID====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_ID | x | 2 | New ID | Board type |
 +
 +====1.5 Identify====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_IDENTIFY | x | 0 |
 +The RID should blink the onboard LED fast until it receives another identify command.\\
 +
 +====1.6 Get option====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_OPTIONGET | x | 1 | Option# |
 +Option number zero request all option bytes.\\
 +
 +====1.7 Set option====
 +Option number zero: (8 bit values)
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_OPTIONSET | x | 8 | Option# | Options1 | Options2 | Options3 | Options4 | Options5 | Options6 | Options7 |
 +Option number greater then zero: (16 bit value)
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | CNF_OPTIONSET | x | 3 | Option# | Options H | Options L | 
 +
 +
 +
 + \\
 +=====2 Programming=====
 +====2.0 Get CV====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | PRG_GETCV | x | 6 | Address H | Address L | CV H | CV L | Value | Options |
 +
 +====2.1 Set CV====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | PRG_SETCV | x | 6 | Address H | Address L | CV H | CV L | Value | Options |
 +
 +====2.2 Programming Track====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | 1 | PRG_PT | x | 1 | On/Off |
 +
 +
 +
 + \\
 +=====3 Streaming=====
 +====3.0 Text start====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_LOW | TYPE_CMD | 1 | STR_TEXT_START | x | 4 | Display# | downcount | Text length | Type |
 +
 +====3.1 Text packet====
 +The Prio and SID field are used as packet index.\\
 +prio = (downcount & 0x700) >> 8;
 +sid  = downcount & 0xFF;
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| prio | TYPE_CMD | sid | STR_TEXT | x | 8 | text[] | text[] | text[] | text[] | text[] | text[] | text[] | text[] |
 +
 +
 +====3.2 not used====
 +
 +====3.3 File packet====
 +The Prio and SID field are used as packet index.\\
 +prio = (downcount & 0x700) >> 8;
 +sid  = downcount & 0xFF;
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| prio | TYPE_CMD | sid | STR_FILE | x | 8 | text[] | text[] | text[] | text[] | text[] | text[] | text[] | text[] |
 +
 +====3.4 Play====
 +The filename is max. 8 characters in length.
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_LOW| TYPE_CMD | sid | STR_PLAY | x | 8 | filename[] | filename[] | filename[] | filename[] | filename[] | filename[] | filename[] | filename[] |
 +
 +====3.5 List files====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_CONFIG | TYPE_CMD | sid | STR_LIST | x | 0 |
 +The receiver will respond with STR_TEXT_START and n * STR_TEXT.
 +
 + \\
 +
 +=====4 Port=====
 +====4.0 Port====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | PRT_GET | x | 3...4 | Port# | Type | Value | Options |
 +
 +===Response===
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_SENSOR | TYPE_EVT | x | INF_PORT | 0 | 3..6 | Port# | Type | Value | Aspect H | Aspect M | Aspect L |
 +
 +
 +====4.1 Signal====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | PRT_SIGNAL | x | 7 | Port# | Aspects | Aspect | Value H | Value L | Brightness | Dim delay |
 +
 +====4.2 Multiplex====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | PRT_MULTIPLEX | x | 7 | Port# | Aspects | Aspect | Value H | Value L | Brightness | Dim delay |
 +See **[[:arduino:wio-en#charlieplexing_signal_support|Charlieplexing]]**\\
 +
 +
 +====4.3 PWM Pair====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | PRT_PWMPAIR | x | 8 | PWM Port# | Options | Direction + F 0x80 | Velocity | Mass | Min. duty | Max. duty | Kickstart |
 +See **[[:wio:wio-hbridge-en|H-Bridge]]** for more information.\\
 + \\
 +=====5 DCC=====
 +====5.0 Dir-Velocity====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | DCC_DIRV | x | 5 | Address H | Address L | Velocity + direction 0x80 | Fn | Steps |
 +
 +
 +====5.1 Function====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | DCC_FUN | x | 6 | Address H | Address L | Changed F | Value | Group | Fx |
 +
 +====5.3 Accessory====
 +^ Prio ^ Type ^ SID ^ Command ^ RID ^ DLC ^ D0 ^ D1 ^ D2 ^ D3 ^ D4 ^ D5 ^ D6 ^ D7 ^
 +| PRIO_HIGH | TYPE_CMD | 1 | DCC_ACC | x | 6 | Address H | Address L | Port | Gate | Value | Delay |
 +
 +
 + \\
 + \\
 +=====C-Header=====
 +<code c>
 +// Priority
 +#define PRIO_SENSOR  0x00
 +#define PRIO_HIGH    0x01
 +#define PRIO_MEDIUM  0x02
 +#define PRIO_CONFIG  0x03
 +#define PRIO_LOW     0x05
 +#define PRIO_INFO    0x07
 +
 +// Types
 +#define TYPE_CMD 0x00
 +#define TYPE_EVT 0x01
 +#define TYPE_RSP 0x02
 +#define TYPE_ACK 0x03
 +
 +/*
 +IC = GRP | OPC
 +
 +GRP = (IC & 0xF0)
 +OPC = (IC & 0x0F)
 +*/
 +
 +#define GRP_SYS 0x00 // System
 +  #define SYS_NOTUSED   0x00 // See "Bootloader"
 +  #define SYS_STATE     0x01
 +  #define SYS_SOD       0x02
 +  #define SYS_CLOCK     0x03
 +  #define SYS_EBREAK    0x04
 +  #define SYS_POWER     0x05
 +  #define SYS_SHUTDOWN  0x06
 +  #define SYS_REBOOT    0x07
 +  #define SYS_LINK      0x08
 +  #define SYS_UNLINK    0x09
 +
 +#define GRP_CNF 0x10 // Configuration
 +  #define CNF_QUERY     0x10
 +  #define CNF_GET       0x11
 +  #define CNF_SET       0x12
 +  #define CNF_NAME      0x13
 +  #define CNF_ID        0x14
 +  #define CNF_IDENTIFY  0x15
 +  #define CNF_REBOOT    0x1F
 +
 +#define GRP_PRG 0x20 // Programming
 +  #define PRG_GETCV 0x20
 +  #define PRG_SETCV 0x21
 +  #define PRG_PT    0x22
 +
 +#define GRP_STR 0x30 // Streaming
 +  #define STR_TEXT_START 0x30 // datat[0] = display number
 +  #define STR_TEXT       0x31
 +  #define STR_FILE       0x33
 +  #define STR_PLAY       0x34 // data = filename
 +  #define STR_LIST       0x35 // SPIFFS directory listing
 +
 +#define GRP_PRT 0x40 // Port I/O
 +  #define PRT_PORT      0x40
 +  #define PRT_SIGNAL    0x41
 +  #define PRT_MULTIPLEX 0x42
 +  #define PRT_PWMPAIR   0x43
 +
 +#define GRP_DCC 0x50 // DCC Command Station
 +  #define DCC_DIRV     0x50
 +  #define DCC_FUN      0x51
 +  #define DCC_BINSTATE 0x52
 +  #define DCC_ACC      0x53
 +  #define DCC_BIND     0x54
 +
 +#define GRP_INF 0x60 // Unsolicited events like Sensors, RailCom, RFID scanner, ...
 +  #define INF_PORT 0x60
 +  #define INF_RFID 0x61
 +  #define INF_BIDI 0x62
 +  #define INF_ENV  0x63 // temperature, humidity, pressure, light 
 +  #define INF_IO      0x64 // Max. 64 I/O status which is mostly used for SoD.
 +  #define INF_GOODBYE 0x65
 +
 +// type for streaming text
 +#define TEXT_TYPE_TEXT          0
 +#define TEXT_TYPE_SSID          1
 +#define TEXT_TYPE_FILE          2
 +#define TEXT_TYPE_FILE_DEL      3
 +#define TEXT_TYPE_FILE_DOWNLOAD 4
 +#define TEXT_TYPE_BIN           5
 +
 +
 +
 +// Config indexes
 +#define WIO_CNF_OPTIONS     0
 +#define WIO_CNF_PORTGROUP_0 1
 +#define WIO_CNF_PORTGROUP_1 2
 +#define WIO_CNF_PORTGROUP_2 3
 +#define WIO_CNF_PORTGROUP_3 4
 +#define WIO_CNF_REBOOT      0xFF
 +
 +// Prio values
 +#define PRIO_SENSOR  0x00
 +#define PRIO_HIGH    0x01
 +#define PRIO_CONFIG  0x03
 +#define PRIO_LOW     0x05
 +#define PRIO_INFO    0x07
 +
 +// Instruction types
 +#define TYPE_CMD 0x00
 +#define TYPE_EVT 0x01
 +#define TYPE_RSP 0x02
 +#define TYPE_ACK 0x03
 +
 +// EID masks
 +#define MASK_PRIO 0x1C000000 // >> 26
 +#define MASK_MODE 0x03000000 // >> 24
 +#define MASK_SID  0x00FF0000 // >> 16
 +#define MASK_IC   0x0000FF00 // >>  8
 +#define MASK_RID  0x000000FF // >>  0
 +
 +#define SHIFT_PRIO 26
 +#define SHIFT_MODE 24
 +#define SHIFT_SID  16
 +#define SHIFT_IC    8
 +#define SHIFT_RID   0
 +
 +// State bits
 +#define SYS_STATE_POWER 0x01
 +#define SYS_STATE_SC    0x02
 +#define SYS_STATE_PT    0x04
 +#define SYS_STATE_SLAVE 0x08
 +
 +// Port types
 +#define PORTTYPE_DOUT  0
 +#define PORTTYPE_AOUT  1
 +#define PORTTYPE_SERVO 2
 +#define PORTTYPE_PAIR  3
 +#define PORTTYPE_MOTOR 4
 +#define PORTTYPE_DIN   5
 +#define PORTTYPE_ACC   6
 +#define PORTTYPE_LED   7
 +#define PORTTYPE_MULTIPLEX 10
 +
 +#define PORT_STATE_STRAIGHT 0
 +#define PORT_STATE_TURNOUT  1
 +
 +// Config indexes
 +#define CNF_IDX_OPTIONS     0
 +#define CNF_IDX_PORTGROUP_0 1 //  0... 7
 +#define CNF_IDX_PORTGROUP_1 2 //  8...15
 +#define CNF_IDX_PORTGROUP_2 3 // 16...23
 +#define CNF_IDX_PORTGROUP_3 4 // 24...31
 +
 +
 +
 +</code>
  
arduino/wio-canprot-en.txt · Last modified: 2024/06/17 15:03 by 127.0.0.1