diff --git a/.ci b/.ci
index 12d76983..20f8e053 160000
--- a/.ci
+++ b/.ci
@@ -1 +1 @@
-Subproject commit 12d769835e1ee88e94b5b0b4bc0cf7068e678064
+Subproject commit 20f8e053931fdef8a9413cc6229286c5d9ed152f
diff --git a/.ci-local/github-actions/post-prepare.py b/.ci-local/github-actions/post-prepare.py
new file mode 100755
index 00000000..01e985b6
--- /dev/null
+++ b/.ci-local/github-actions/post-prepare.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import subprocess
+
+from util import *
+
+def get_submodule_releases():
+ #
+ releases = []
+ for root, dirs, files in os.walk('modules'):
+ for submodule in dirs:
+ if 'motor' in submodule:
+ release_path = "modules/{}/configure/RELEASE".format(submodule)
+ if os.path.exists(release_path):
+ releases.append(release_path)
+ return releases[:]
+
+# Comment out SUPPORT from motor's RELEASE file
+motor_release = "configure/RELEASE"
+update_release_file(motor_release, "SUPPORT", '#')
+print("{}Updated {}{}".format(ANSI_BLUE, motor_release, ANSI_RESET))
+grep_release_file(motor_release, "#SUPPORT")
+
+# Comment out SUPPORT from the driver module RELEASE files
+releases = get_submodule_releases()
+for release in releases:
+ updated = update_release_file(release, "SUPPORT", '#')
+ if updated:
+ print("{}Updated {}{}".format(ANSI_BLUE, release, ANSI_RESET))
+ grep_release_file(release, "#SUPPORT")
diff --git a/.ci-local/github-actions/sanity-check.py b/.ci-local/github-actions/sanity-check.py
new file mode 100644
index 00000000..4e32f6d3
--- /dev/null
+++ b/.ci-local/github-actions/sanity-check.py
@@ -0,0 +1,9 @@
+#!/usr/bin/env python
+
+import os
+import pprint
+
+pprint.pprint(dict(os.environ), width = 1)
+
+#!print("{}", breakmehere)
+
diff --git a/.ci-local/github-actions/util.py b/.ci-local/github-actions/util.py
new file mode 100644
index 00000000..9bca4879
--- /dev/null
+++ b/.ci-local/github-actions/util.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+
+import logging
+import fileinput
+import os
+
+# Setup ANSI Colors
+ANSI_RED = "\033[31;1m"
+ANSI_GREEN = "\033[32;1m"
+ANSI_YELLOW = "\033[33;1m"
+ANSI_BLUE = "\033[34;1m"
+ANSI_MAGENTA = "\033[35;1m"
+ANSI_CYAN = "\033[36;1m"
+ANSI_RESET = "\033[0m"
+ANSI_CLEAR = "\033[0K"
+
+logger = logging.getLogger(__name__)
+
+def create_file(filename):
+ dirname = os.path.dirname(filename)
+ print(dirname)
+ if not os.path.exists(dirname):
+ os.makedirs(dirname, 0o0755)
+ if not os.path.exists(filename):
+ fh = open(filename, 'w')
+ fh.close()
+ else:
+ logger.debug("{} already exists".format(filename))
+
+# Update a definition in a release file that already exists
+# Append a defintion to a release file that already exists
+# Commented out a definition in a release file (location='#')
+def update_release_file(filename, var, location):
+ updated_line = '{0}={1}'.format(var, location.replace('\\', '/'))
+
+ found = False
+ logger.debug("Opening '%s' for adding '%s'", filename, updated_line)
+ for line in fileinput.input(filename, inplace=1):
+ output_line = line.strip()
+ if '{0}='.format(var) in line:
+ logger.debug("Found '%s=' line, replacing", var)
+ found = True
+ if location != '#':
+ output_line = updated_line
+ else:
+ if output_line[0] != '#':
+ output_line = "#{}".format(output_line)
+ logger.debug("Writing line to '%s': '%s'", filename, output_line)
+ print(output_line)
+ fileinput.close()
+
+ if not found and location != '#':
+ fh = open(release_local, "a")
+ logger.debug("Adding new definition: '%s'", updated_line)
+ print(updated_line, file=fh)
+ fh.close()
+
+ return found
+
+def grep_release_file(filename, var):
+ fh = open(filename, 'r')
+ for line in fh:
+ if '{0}='.format(var) in line:
+ print(line)
+ fh.close()
+
diff --git a/.ci-local/modules.set b/.ci-local/modules.set
index 9479f5db..8ccd765f 100644
--- a/.ci-local/modules.set
+++ b/.ci-local/modules.set
@@ -1,7 +1,7 @@
MODULES="sncseq ipac asyn autosave busy"
-SNCSEQ=R2-2-8
+SNCSEQ=R2-2-9
IPAC=master
-ASYN=R4-38
-AUTOSAVE=R5-9
-BUSY=R1-7-1
+ASYN=R4-42
+AUTOSAVE=R5-10-2
+BUSY=R1-7-3
diff --git a/.github/workflows/ci-scripts-build-full.yml b/.github/workflows/ci-scripts-build-full.yml
new file mode 100644
index 00000000..050e780a
--- /dev/null
+++ b/.github/workflows/ci-scripts-build-full.yml
@@ -0,0 +1,195 @@
+# .github/workflows/ci-scripts-build.yml for use with EPICS Base ci-scripts
+# (see: https://github.com/epics-base/ci-scripts)
+
+# This is YAML - indentation levels are crucial
+
+# Set the 'name:' properties to values that work for you (MYMODULE)
+
+name: "GHA full build"
+
+# Only run manually
+on:
+ workflow_dispatch
+
+env:
+ SETUP_PATH: .ci-local:.ci
+ # For the sequencer on Linux/Windows/MacOS
+ APT: re2c
+ CHOCO: re2c
+ BREW: re2c
+
+jobs:
+ build-base:
+ name: ${{ matrix.name }}
+ runs-on: ${{ matrix.os }}
+ # Set environment variables from matrix parameters
+ env:
+ CMP: ${{ matrix.cmp }}
+ BCFG: ${{ matrix.configuration }}
+ BASE: ${{ matrix.base }}
+ WINE: ${{ matrix.wine }}
+ RTEMS: ${{ matrix.rtems }}
+ RTEMS_TARGET: ${{ matrix.rtems_target }}
+ EXTRA: ${{ matrix.extra }}
+ TEST: ${{ matrix.test }}
+ SET: ${{ matrix.set }}
+ strategy:
+ fail-fast: false
+ matrix:
+ # Job names also name artifacts, character limitations apply
+ include:
+ - os: ubuntu-20.04
+ cmp: gcc
+ configuration: default
+ wine: "64"
+ base: "7.0"
+ set: modules
+ name: "Ub-20 gcc-9 + MinGW"
+
+ - os: ubuntu-20.04
+ cmp: gcc
+ configuration: static
+ wine: "64"
+ base: "7.0"
+ set: modules
+ name: "Ub-20 gcc-9 + MinGW, static"
+
+ - os: ubuntu-20.04
+ cmp: gcc
+ configuration: static
+ extra: "CMD_CXXFLAGS=-std=c++11"
+ base: "7.0"
+ set: modules
+ name: "Ub-20 gcc-9 C++11, static"
+
+ - os: ubuntu-20.04
+ cmp: clang
+ configuration: default
+ extra: "CMD_CXXFLAGS=-std=c++11"
+ base: "7.0"
+ set: modules
+ name: "Ub-20 clang-10 C++11"
+
+ ### fails building autosave
+ #!- os: ubuntu-20.04
+ #! cmp: gcc
+ #! configuration: default
+ #! rtems: "4.10"
+ #! base: "7.0"
+ #! set: modules
+ #! name: "Ub-20 gcc-9 + RT-4.10"
+
+ - os: ubuntu-20.04
+ cmp: gcc
+ configuration: default
+ rtems: "4.9"
+ base: "7.0"
+ set: modules
+ name: "Ub-20 gcc-9 + RT-4.9"
+
+ ### fails building asyn
+ #!- os: ubuntu-20.04
+ #! cmp: gcc
+ #! configuration: default
+ #! rtems: "5"
+ #! rtems_target: RTEMS-pc686-qemu
+ #! base: "7.0"
+ #! set: modules
+ #! name: "Ub-20 gcc-9 + RT-5.1 pc686"
+
+ ### fails building autosave
+ #!- os: ubuntu-20.04
+ #! cmp: gcc
+ #! configuration: default
+ #! rtems: "5"
+ #! rtems_target: RTEMS-beatnik
+ #! test: NO
+ #! base: "7.0"
+ #! set: modules
+ #! name: "Ub-20 gcc-9 + RT-5.1 beatnik"
+
+ #!- os: ubuntu-20.04
+ #! cmp: gcc-8
+ #! utoolchain: true
+ #! configuration: default
+ #! base: "7.0"
+ #! set: modules
+ #! name: "Ub-20 gcc-8"
+
+ - os: ubuntu-20.04
+ cmp: clang
+ configuration: default
+ base: "7.0"
+ set: modules
+ name: "Ub-20 clang-10"
+
+ - os: macos-latest
+ cmp: clang
+ configuration: default
+ base: "7.0"
+ set: modules
+ name: "MacOS clang-12"
+
+ - os: windows-2019
+ cmp: gcc
+ configuration: default
+ base: "7.0"
+ set: modules
+ name: "Win2019 MinGW"
+
+ - os: windows-2019
+ cmp: gcc
+ configuration: static
+ base: "7.0"
+ set: modules
+ name: "Win2019 MinGW, static"
+
+ - os: windows-2019
+ cmp: vs2019
+ configuration: default
+ base: "7.0"
+ set: modules
+ name: "Win2019 MSC-19"
+
+ - os: windows-2019
+ cmp: vs2019
+ configuration: static
+ base: "7.0"
+ set: modules
+ name: "Win2019 MSC-19, static"
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: true
+ - name: Automatic core dumper analysis
+ uses: mdavidsaver/ci-core-dumper@master
+ - name: "apt-get install"
+ run: |
+ sudo apt-get update
+ sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb
+ if: runner.os == 'Linux'
+ - name: "apt-get install ${{ matrix.cmp }}"
+ run: |
+ sudo apt-get -y install software-properties-common
+ sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+ sudo apt-get update
+ sudo apt-get -y install ${{ matrix.cmp }}
+ if: matrix.utoolchain
+ - name: Sanity Check
+ run: python .ci-local/github-actions/sanity-check.py
+ - name: Prepare and compile dependencies
+ run: python .ci/cue.py prepare
+ - name: Patch main module
+ run: python .ci-local/github-actions/post-prepare.py
+ - name: Build main module
+ run: python .ci/cue.py build
+ - name: Run main module tests
+ run: python .ci/cue.py test
+ - name: Upload tapfiles Artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: tapfiles ${{ matrix.name }}
+ path: '**/O.*/*.tap'
+ - name: Collect and show test results
+ run: python .ci/cue.py test-results
diff --git a/.github/workflows/ci-scripts-build.yml b/.github/workflows/ci-scripts-build.yml
new file mode 100644
index 00000000..55344899
--- /dev/null
+++ b/.github/workflows/ci-scripts-build.yml
@@ -0,0 +1,104 @@
+# .github/workflows/ci-scripts-build.yml for use with EPICS Base ci-scripts
+# (see: https://github.com/epics-base/ci-scripts)
+
+# This is YAML - indentation levels are crucial
+
+# Set the 'name:' properties to values that work for you (MYMODULE)
+
+name: "GHA build"
+
+# Trigger on pushes to the master branch and PRs
+on:
+ push:
+ paths-ignore:
+ - 'documentation/*'
+ - '**/*.html'
+ - '**/*.md'
+ - '.github/workflows/ci-scripts-build-full.yml'
+ branches:
+ - master
+ pull_request:
+
+env:
+ SETUP_PATH: .ci-local:.ci
+ # For the sequencer on Linux/Windows/MacOS
+ APT: re2c
+ CHOCO: re2c
+ BREW: re2c
+
+jobs:
+ build-base:
+ name: ${{ matrix.name }}
+ runs-on: ${{ matrix.os }}
+ # Set environment variables from matrix parameters
+ env:
+ CMP: ${{ matrix.cmp }}
+ BCFG: ${{ matrix.configuration }}
+ BASE: ${{ matrix.base }}
+ WINE: ${{ matrix.wine }}
+ RTEMS: ${{ matrix.rtems }}
+ RTEMS_TARGET: ${{ matrix.rtems_target }}
+ EXTRA: ${{ matrix.extra }}
+ TEST: ${{ matrix.test }}
+ SET: ${{ matrix.set }}
+ strategy:
+ fail-fast: false
+ matrix:
+ # Job names also name artifacts, character limitations apply
+ include:
+ - os: ubuntu-20.04
+ cmp: gcc
+ configuration: default
+ base: "7.0"
+ set: modules
+ name: "7.0 Ub-20 gcc-9"
+
+ - os: macos-latest
+ cmp: clang
+ configuration: default
+ base: "3.15"
+ set: modules
+ name: "3.15 MacOS clang-12"
+
+ - os: windows-2019
+ cmp: vs2019
+ configuration: static
+ base: "3.15"
+ set: modules
+ name: "3.15 Win VS2019, static"
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: true
+ - name: Automatic core dumper analysis
+ uses: mdavidsaver/ci-core-dumper@master
+ - name: "apt-get install"
+ run: |
+ sudo apt-get update
+ sudo apt-get -y install qemu-system-x86 g++-mingw-w64-x86-64 gdb
+ if: runner.os == 'Linux'
+ - name: "apt-get install ${{ matrix.cmp }}"
+ run: |
+ sudo apt-get -y install software-properties-common
+ sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+ sudo apt-get update
+ sudo apt-get -y install ${{ matrix.cmp }}
+ if: matrix.utoolchain
+ - name: Sanity Check
+ run: python .ci-local/github-actions/sanity-check.py
+ - name: Prepare and compile dependencies
+ run: python .ci/cue.py prepare
+ - name: Patch main module
+ run: python .ci-local/github-actions/post-prepare.py
+ - name: Build main module
+ run: python .ci/cue.py build
+ - name: Run main module tests
+ run: python .ci/cue.py test
+ - name: Upload tapfiles Artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: tapfiles ${{ matrix.name }}
+ path: '**/O.*/*.tap'
+ - name: Collect and show test results
+ run: python .ci/cue.py test-results
diff --git a/.gitignore b/.gitignore
index 1263d689..2d9ca64e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,10 +3,11 @@ O.*
*.swp
*BAK.adl
bin/
-db/
+/db/
dbd/
html/
include/
+/iocsh/
lib/
templates/
cdCommands
diff --git a/README.md b/README.md
index 738cdc1c..741bd684 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
# motor
-[](https://travis-ci.org/epics-modules/motor)
+[](https://github.com/epics-modules/motor/actions/workflows/ci-scripts-build.yml)
+
This module contains motor support for the Experimental Physics and Industrial Control System (EPICS).
diff --git a/docs/RELEASE.md b/docs/RELEASE.md
index 97f6a7ff..5e94d3a3 100644
--- a/docs/RELEASE.md
+++ b/docs/RELEASE.md
@@ -1,5 +1,93 @@
# Motor Releases
+## __R7-3-1 (2023-06-07)__
+R7-3-1 is a release based on the master branch.
+
+### Changes since R7-3
+
+#### Modifications to existing features
+* Commit [5eb994d](https://github.com/epics-modules/motor/commit/5eb994dc5e0f8a809382b300ad13f8c83e7da33b) from [Mark Rivers](https://github.com/MarkRivers): Added readController() functions to asynMotorController
+
+#### Driver submodules (and noteworthy changes)
+
+| Module | Release | Changes |
+| ---------------- | ------- | ------- |
+| **motorAcsMotion** | [R2-2](https://github.com/epics-motor/motorAcsMotion/releases/tag/R2-2) | Improved homing and workaround for vxWorks build error |
+
+## __R7-3 (2023-05-23)__
+R7-3 is a release based on the master branch.
+
+### Changes since R7-2-2
+
+#### New features
+* Commit [c764bd6](https://github.com/epics-modules/motor/commit/c764bd6426c3939bded75df2909b76d148c2f8c9): Added motorAcsMotion as a submodule
+* Pull request [#160](https://github.com/epics-modules/motor/pull/160) from [Torsten Bögershausen](https://github.com/tboegi): Added the Restore Mode (**RSTM**) field
+* Pull request [#163](https://github.com/epics-modules/motor/pull/163): Autosave the RSTM field and allow it to be specified when motor databases are loaded
+* Pull request [#197](https://github.com/epics-modules/motor/pull/197): Added model-2-specific databases to work around MOTOR_REC_{OFFSET,RESOLUTION,DIRECTION} errors at iocInit
+* Pull request [#193](https://github.com/epics-modules/motor/pull/193) from [Jack Harper](https://github.com/rerpha): Added raw limit (**RHLM**, **RLLM**) fields
+* Pull request [#202](https://github.com/epics-modules/motor/pull/202) and [#204](https://github.com/epics-modules/motor/pull/204): Added prop(YES) to fields in motorRecord.dbd that should generate DBE_PROPERTY callbacks
+* Pull request [#122](https://github.com/epics-modules/motor/pull/122) from [Torsten Bögershausen](https://github.com/tboegi): Addded Acceleration (**ACCS**) and Acceleration Used (**ACCU**) fields
+* Pull request [#203](https://github.com/epics-modules/motor/pull/203): Changed the Acceleration Used (ACCU) field from a readback to a control
+
+#### Modifications to existing features
+* Pull request [#180](https://github.com/epics-modules/motor/pull/180) from [Torsten Bögershausen](https://github.com/tboegi): Reset UEIP to 'No' if no encoder is present
+* Pull request [#193](https://github.com/epics-modules/motor/pull/193) from [Jack Harper](https://github.com/rerpha): Soft limits are synced on MRES changes
+
+#### Bug fixes
+* Pull request [#176](https://github.com/epics-modules/motor/pull/176) from [Torsten Bögershausen](https://github.com/tboegi): Added shareLib.h to motordrvCom.h for compatibility with base 7.0.4
+* Pull request [#182](https://github.com/epics-modules/motor/pull/182) from [Freddie Akeroyd](https://github.com/FreddieAkeroyd): Bug fix for negative backlash distance when relative moves are used
+* Pull request [#167](https://github.com/epics-modules/motor/pull/167) from [Torsten Bögershausen](https://github.com/tboegi): devMotorAsyn: remove initEvent in init_record()
+* Commit [c3d6c6e](https://github.com/epics-modules/motor/commit/c3d6c6ee439e4d46fd2d4c2790091f7c76e31120) from [Mark Rivers](https://github.com/MarkRivers): Fixes for DTYP and EGU not displaying correctly in Phoebus
+* Pull request [#206](https://github.com/epics-modules/motor/pull/206) from [Torsten Bögershausen](https://github.com/tboegi): Bug fix for RHLM, RLLM when MRES is negative
+* Pull request [#186](https://github.com/epics-modules/motor/pull/186) from [justincslac](https://github.com/justincslac): Bug fix for .gitignore that caused the Db dir to be ignored on case-insensitive file systems
+* Commit [96509ca](https://github.com/epics-modules/motor/commit/96509caba2ea1995bfeca3a0e8f11e1f273d2e05) from [Keenan Lang](https://github.com/keenanlang): Added basic_asyn_motor_settings.req which allows autosaveBuild to work with basic_asyn_motor.db
+
+#### Documentation
+* Commit [382c832](https://github.com/epics-modules/motor/commit/382c8324e5176ce769a09302bf829beca5a9cbea) from [Mark Rivers](https://github.com/MarkRivers): Added "Model 3 EPICS Motor Driver Support" slides
+* Pull request [#190](https://github.com/epics-modules/motor/pull/190) from [Xiaoqiang Wang](https://github.com/xiaoqiangwang): Corrected field types in motorRecord.html
+
+#### Continuous Integration
+* Configured to build with GitHub Actions using ci-scripts v3.0.1
+
+#### Driver submodules (and noteworthy changes)
+
+All driver modules now use Github Actions for CI builds.
+
+| Module | Release | Changes |
+| ---------------- | ------- | ------- |
+| **motorAcs** | [R1-1-1](https://github.com/epics-motor/motorAcs/releases/tag/R1-1-1) | |
+| **motorAcsMotion** | [R2-1](https://github.com/epics-motor/motorAcsMotion/releases/tag/R2-1) | Added as a motor submodule |
+| **motorAcsTech80** | [R1-0-2](https://github.com/epics-motor/motorAcsTech80/releases/tag/R1-0-2) | |
+| **motorAerotech** | [R1-1-1](https://github.com/epics-motor/motorAerotech/releases/tag/R1-1-1) | Ensemble driver and doCommand.ab bug fixes |
+| **motorAMCI** | [R1-0-2](https://github.com/epics-motor/motorAMCI/releases/tag/R1-0-2) | Replaced printf calls with asynPrint calls in ANG1Driver.cpp |
+| **motorAttocube** | [R1-0-2](https://github.com/epics-motor/motorAttocube/releases/tag/R1-0-2) | |
+| **motorDeltaTau** | [R1-0-2](https://github.com/epics-motor/motorDeltaTau/releases/tag/R1-0-2) | |
+| **motorFaulhaber** | [R1-0-2](https://github.com/epics-motor/motorFaulhaber/releases/tag/R1-0-2) | |
+| **motorHytec** | [R1-0-3](https://github.com/epics-motor/motorHytec/releases/tag/R1-0-3) | |
+| **motorIms** | [R1-0-2](https://github.com/epics-motor/motorIms/releases/tag/R1-0-2) | |
+| **motorKohzu** | [R1-0-2](https://github.com/epics-motor/motorKohzu/releases/tag/R1-0-2) | |
+| **motorMclennan** | [R1-1-1](https://github.com/epics-motor/motorMclennan/releases/tag/R1-1-1) | |
+| **motorMicos** | [R2-1](https://github.com/epics-motor/motorMicos/releases/tag/R2-1) | Added support for the SMC Taurus |
+| **motorMicroMo** | [R1-0-2](https://github.com/epics-motor/motorMicroMo/releases/tag/R1-0-2) | |
+| **motorMicronix** | [R1-1](https://github.com/epics-motor/motorMicronix/releases/tag/R1-1) | |
+| **motorMotorSim** | [R1-2](https://github.com/epics-motor/motorMotorSim/releases/tag/R1-2) | Added motorSim8x.iocsh. Multiple improvements to example IOC. |
+| **motorMXmotor** | [R1-0-2](https://github.com/epics-motor/motorMXmotor/releases/tag/R1-0-2) | |
+| **motorNewFocus** | [R1-2-1](https://github.com/epics-motor/motorNewFocus/releases/tag/R1-2-1) | Improved example newfocus8742 configuration. iocsh files now installed. |
+| **motorNewport** | [R1-2-1](https://github.com/epics-motor/motorNewport/releases/tag/R1-2-1) | Added support for the FCL200. ESP300 driver now supports UEIP=Yes. iocsh files now installed. |
+| **motorNPoint** | [R1-1](https://github.com/epics-motor/motorNPoint/releases/tag/R1-1) | |
+| **motorOms** | [R1-2](https://github.com/epics-motor/motorOms/releases/tag/R1-2) | Enabled non-VxWorks IOCs & epicsMutexTryLock bug fix |
+| **motorOmsAsyn** | [R1-0-3](https://github.com/epics-motor/motorOmsAsyn/releases/tag/R1-0-3) | Type fixes |
+| **motorOriel** | [R1-0-2](https://github.com/epics-motor/motorOriel/releases/tag/R1-0-2) | |
+| **motorParker** | [R1-1-1](https://github.com/epics-motor/motorParker/releases/tag/R1-1-1) | |
+| **motorPhytron** | [R1-2](https://github.com/epics-motor/motorPhytron/releases/tag/R1-2) | Added encoder options. Bug fixes for deceleration and homing to limts. |
+| **motorPI** | [R1-1-1](https://github.com/epics-motor/motorPI/releases/tag/R1-1-1) | Added E-816 example configuration. iocsh files now installed. |
+| **motorPIGCS2** | [R1-2](https://github.com/epics-motor/motorPIGCS2/releases/tag/R1-2) | Added support for E-518 & E-873.3QTU controllers. Added closed loop commands for the E-727. Bug fixes. |
+| **motorPiJena** | [R1-0-2](https://github.com/epics-motor/motorPiJena/releases/tag/R1-0-2) | |
+| **motorScriptMotor** | [R1-2](https://github.com/epics-motor/motorScriptMotor/releases/tag/R1-2) | Added Attocube AMC support |
+| **motorSmarAct** | [R2-0](https://github.com/epics-motor/motorSmarAct/releases/tag/R2-0) | Too many new features to list here; see [motorSmarAct release notes](https://github.com/epics-motor/motorSmarAct/releases/tag/R2-0) |
+| **motorSmartMotor** | [R1-0-2](https://github.com/epics-motor/motorSmartMotor/releases/tag/R1-0-2) | |
+| **motorThorLabs** | [R1-0-2](https://github.com/epics-motor/motorThorLabs/releases/tag/R1-0-2) | Added support for Kinesis KDC101 and KST101 |
+
## __R7-2-2 (2021-02-02)__
R7-2-2 is a release based on the R7-2-1-bugfix branch.
diff --git a/docs/index.html b/docs/index.html
index 2e6515be..9f7bb765 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -50,13 +50,22 @@ the links in the table below: