<?xml version="1.0"?>
<?xml-stylesheet href="docbook.xsl" type="text/xsl" ?>
<book xmlns="http://docbook.org/ns/docbook" version="5.0">
  <info>
    <title>Access Control Service Specification</title>
    <titleabbrev>AccessControl</titleabbrev>
    <releaseinfo>21.06</releaseinfo>
    <author>
      <orgname>ONVIF™</orgname>
      <uri>www.onvif.org</uri>
    </author>
    <pubdate>June 2021</pubdate>
    <mediaobject>
      <imageobject>
        <imagedata fileref="media/logo.png" contentwidth="60mm"/>
      </imageobject>
    </mediaobject>
    <copyright>
      <year>2008-2020</year>
      <holder>ONVIF™ All rights reserved.</holder>
    </copyright>
    <legalnotice>
      <para>Recipients of this document may copy, distribute, publish, or display this document so
        long as this copyright notice, license and disclaimer are retained with all copies of the
        document. No license is granted to modify this document.</para>
      <para>THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR
        AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
        LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
        NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE;
        OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS,
        TRADEMARKS OR OTHER RIGHTS.</para>
      <para>IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY
        DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR
        RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION,
        MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2)
        SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR
        DISTRIBUTION OF THIS DOCUMENT.  THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT
        APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR
        RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF
        THE CORPORATION.</para>
    </legalnotice>
    <revhistory>
      <revision>
        <revnumber>1.0</revnumber>
        <date>Apr-2013</date>
        <author>
          <personname>Yuri Timenkov</personname>
        </author>
        <revremark>Initial version</revremark>
      </revision>
      <revision>
        <revnumber>1.0.1</revnumber>
        <date>Aug-2013</date>
        <author>
          <personname>Hans Busch</personname>
        </author>
        <revremark>Change Request 1053</revremark>
      </revision>
      <revision>
        <revnumber>1.0.2</revnumber>
        <date>Dec-2013</date>
        <author>
          <personname>Michio Hirai</personname>
        </author>
        <revremark>Change Request 1234</revremark>
      </revision>
      <revision>
        <revnumber>1.0.3</revnumber>
        <date>Jun-2014</date>
        <author>
          <personname>Michio Hirai</personname>
        </author>
        <revremark>Change Request 1363, 1367, 1355, 1357, 1364, 1366, 1347, 1348, 1365</revremark>
      </revision>
      <revision>
        <revnumber>1.1</revnumber>
        <date>Jun-2017</date>
        <author>
          <personname>Patrik Björling Rygert</personname>
        </author>
        <revremark>Change Request 1803</revremark>
      </revision>
      <revision>
        <revnumber>17.12</revnumber>
        <date>Dec-2017</date>
        <author>
          <personname>Hiroyuki Sano</personname>
        </author>
        <revremark>Change Request 2170, 2171</revremark>
      </revision>
      <revision>
        <revnumber>18.06</revnumber>
        <date>Jun-2018</date>
        <author>
          <personname>Patrik Björling Rygert</personname>
        </author>
        <revremark>Change Request 2300 Added support for client-supplied tokens Added full
          management support for access points Added full management support for areas Added support
          for authentication behavior</revremark>
      </revision>
      <revision>
        <revnumber>19.12</revnumber>
        <date>Dec-2019</date>
        <author>
          <personname>Hiroyuki Sano</personname>
        </author>
        <revremark>Change Request 2474, 2481, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2632,
          2633, 2634</revremark>
      </revision>
      <revision>
        <revnumber>20.06</revnumber>
        <date>Jun-2020</date>
        <author>
          <personname>Patrik Björling Rygert</personname>
        </author>
        <revremark>Added support for feedback indication at access point</revremark>
      </revision>
      <revision>
        <revnumber>21.06</revnumber>
        <date>Jun-2021</date>
        <author>
          <personname>Johan Adolfsson</personname>
        </author>
        <revremark>Added Use case examples appendix</revremark>
      </revision>
    </revhistory>
  </info>
  <preface>
    <title>Contributors </title>
    <informaltable>
      <tgroup cols="2">
        <colspec colname="c1" colwidth="54*" />
        <colspec colname="c2" colwidth="46*" />
        <tbody valign="top">
          <row>
            <entry align="left" valign="bottom">
              <para>ASSA ABLOY</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Patrik Björling Rygert</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>ASSA ABLOY</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Mattias Rengstedt</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Axis Communications AB</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Johan Adolfsson</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Axis Communications AB</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Marcus Johansson</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Axis Communications AB</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Robert Rosengren</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Axis Communications AB</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Derek Wang</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Axis Communications AB</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Emil Selinder</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>AxxonSoft</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Yuri Timenkov</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Bosch</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Mohane Caliaperoumal</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Bosch</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Dirk Schreiber</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Hirsch Electronics/ Identive Group</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Rob Zivney</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Honeywell</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Marine Drive</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Honeywell</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Neelendra Bhandari</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Honeywell</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Uvaraj Thangarajan</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Honeywell</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Vinay Ghule</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>PACOM</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Eugene Scully</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>PACOM</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Steve Barton</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Schneider Electric</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Mike Berube</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Siemens AG</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Klaus Baumgartner</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Siemens AG</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Suresh Raman</para>
            </entry>
          </row>
          <row>
            <entry align="left" valign="bottom">
              <para>Siemens AG</para>
            </entry>
            <entry align="left" valign="bottom">
              <para>Suresh Krishnamurthy</para>
            </entry>
          </row>
        </tbody>
      </tgroup>
    </informaltable>
  </preface>
  <chapter>
    <title>Scope</title>
    <section>
      <title>General</title>
      <para>This specification defines the web service interface for interaction with physical access control systems. This includes discovering components and their logical composition and controlling them.</para>
      <para>Supplementary dedicated services such as low-level door control and schedule management will be defined in separate documents.</para>
      <para>Web service usage and common ONVIF functionality are outside of the scope of this document. Please refer to [ONVIF Core Specification] for more information.</para>
    </section>
    <section>
      <title>Conventions</title>
      <para>The key words “shall”, “shall not”, “should”, “should not”, “may”, “need not”, “can”, “cannot” in this specification are to be interpreted as described in Annex H of [ISO/IEC Directives].</para>
    </section>
    <section>
      <title>Namespaces</title>
      <para>This document references the following namespaces:</para>
      <table>
        <title>Referenced namespaces (with prefix)</title>
        <tgroup cols="2">
          <colspec colname="c1" colwidth="13*" />
          <colspec colname="c2" colwidth="87*" />
          <thead>
            <row>
              <entry>
                <para> Prefix</para>
              </entry>
              <entry>
                <para> Namespace URI</para>
              </entry>
            </row>
          </thead>
          <tbody valign="top">
            <row>
              <entry>
                <para>env</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/2003/05/soap-envelope">http://www.w3.org/2003/05/soap-envelope</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>ter</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/error">http://www.onvif.org/ver10/error</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>xs</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>tt</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/schema">http://www.onvif.org/ver10/schema</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>pt</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/pacs">http://www.onvif.org/ver10/pacs</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>tns1</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/topics">http://www.onvif.org/ver10/topics</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>tmd</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/deviceIO/wsdl">http://www.onvif.org/ver10/deviceIO/wsdl</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>tdc</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/doorcontrol/wsdl">http://www.onvif.org/ver10/doorcontrol/wsdl</link>
                </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>tac</para>
              </entry>
              <entry>
                <para>
                  <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/ver10/accesscontrol/wsdl">http://www.onvif.org/ver10/accesscontrol/wsdl</link>
                </para>
              </entry>
            </row>
          </tbody>
        </tgroup>
      </table>
    </section>
  </chapter>
  <chapter>
    <title>Normative references</title>
    <para>The following documents, in whole or in part, are normatively referenced in this document and are indispensable for its application. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.</para>
    <para role="reference">ONVIF Core Specification </para><para>&lt;<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/specs/core/ONVIF-Core-Specification.pdf"/>&gt;</para>
    <para role="reference">ONVIF PACS Architecture and Design Considerations</para><para> &lt;<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.onvif.org/specs/wp/ONVIF-PACS-Architecture-and-Design-Considerations.pdf"/>&gt;</para>
    <para role="reference">ONVIF Door Control Service Specification</para><para> &lt;<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/specs/srv/door/ONVIF-DoorControl-Service-Spec.pdf"></link>&gt;</para>
    <para role="reference">ONVIF Authentication Behavior Service Specification</para><para> &lt;<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.onvif.org/specs/srv/auth/ONVIF-AuthenticationBehavior-Service-Spec.pdf"/>&gt;</para>
    <para role="reference">ISO/IEC Directives, ISO/IEC Directives Part 2, Principles and rules for the structure and drafting of ISO and IEC documents, Edition 7.0, May 2016</para><para> &lt;<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.iec.ch/members_experts/refdocs/iec/isoiecdir-2%7Bed7.0%7Den.pdf"></link>&gt;</para>
  </chapter>
  <chapter>
    <title>Terms, definitions and abbreviations</title>
    <section>
      <title>Terms and definitions</title>
      <para>For the purposes of this document, the following terms and definitions apply.</para>
      <informaltable>
        <tgroup cols="2">
          <colspec colname="c1" colwidth="22*" />
          <colspec colname="c2" colwidth="78*" />
          <tbody valign="top">
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Access Control Service</emphasis>
                </para>
              </entry>
              <entry>
                <para>A device implementing the ONVIF Access Control Service Specification (this specification).</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Access Control Unit</emphasis>
                </para>
              </entry>
              <entry>
                <para>Part of an access control system that interfaces with readers, locking devices and sensing devices, making a decision to grant or deny access through a portal.</para>
                <para>From an ONVIF perspective, it is a device or system implementing at least the access control service. Often, it is a microprocessor-based circuit board that <phrase>manages access to a secure area. </phrase>The access control unit receives information that it uses to determine <phrase>through which</phrase><phrase>doors</phrase><phrase>and at what times </phrase>credential holders are granted access to secure areas. Based on that information, the access control unit can lock/unlock doors, sound alarms, and communicate status to a host computer.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Access Point</emphasis>
                </para>
              </entry>
              <entry>
                <para>A logical composition of a physical door, reader(s) and/or a request-to-exit device controlling access in one direction.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Access Point Disable</emphasis>
                </para>
              </entry>
              <entry>
                <para>If an access point is disabled, it will not be considered in the decision-making process and no commands will be issued from that access point to the door configured for that access point. When an access point is disabled, the associated reader(s) may or may not be disabled or shut down. Clients may still be able to command the door control unit to control the associated door even though that door is also referenced by a disabled access point.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Area</emphasis>
                </para>
              </entry>
              <entry>
                <para>A protected or controlled area defined by a physical boundary, through which passage is controlled by means of one or more doors.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Client</emphasis>
                </para>
              </entry>
              <entry>
                <para>An ONVIF service requester. A typical ONVIF network system may have multiple clients that handle device configuration and device management operations for numerous devices. A device providing services may also act as a client to other devices.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Credential</emphasis>
                </para>
              </entry>
              <entry>
                <para>A logical object holding related credential identifiers for a credential holder. E.g. if a PIN is associated with a specific credential number, then both of these identifiers are stored in one credential. Note that the PIN is normally not stored in the physical credential.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Credential Holder</emphasis>
                </para>
              </entry>
              <entry>
                <para>A person holding a credential.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Credential Identifier</emphasis>
                </para>
              </entry>
              <entry>
                <para>Information either memorized or held within a physical credential. Could be a credential number, PIN, biometric information, etc., that can be validated in an access point.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Credential Number</emphasis>
                </para>
              </entry>
              <entry>
                <para>A sequence of bytes uniquely identifying a <phrase>physical </phrase>credential at an access point.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Device</emphasis>
                </para>
              </entry>
              <entry>
                <para>An ONVIF service provider implementing one or more ONVIF services. E.g. an access control unit or a door control unit.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Door</emphasis>
                </para>
              </entry>
              <entry>
                <para>A physical door, barrier, turnstile, etc. which can be controlled remotely and restricts access between two areas. A door is usually equipped with an electronic lock and a door monitor.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Door Control Service</emphasis>
                </para>
              </entry>
              <entry>
                <para>A device implementing [<phrase>ONVIF </phrase>Door Control Service Specification].</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Door Control Unit</emphasis>
                </para>
              </entry>
              <entry>
                <para>From an ONVIF perspective, it is a device or system implementing at least the door control service, but not the access control service. Often, it is a microprocessor-based circuit board that manages door locks and/or door monitors for one or more doors.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Door Lock</emphasis>
                </para>
              </entry>
              <entry>
                <para>A device that secures a door to prevent access, except when explicitly allowed by the access control system. Lock types include electromagnetic, electric strike, etc.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Door Monitor</emphasis>
                </para>
              </entry>
              <entry>
                <para>Electrical component used to monitor the open or closed status of a door, or locked/unlocked status of a locking device, or the secure/unsecure status of an electromagnetic lock or armature plate.</para>
                <para>Also known as door contact sensor.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Duress</emphasis>
                </para>
              </entry>
              <entry>
                <para>Forcing a person to provide access to a secure area against that person's wishes.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Peripheral Device</emphasis>
                </para>
              </entry>
              <entry>
                <para>An I/O device physically wired to the access control unit. Some peripheral devices are associated with an access point (e.g. reader or request-to-exit button), and some are associated with a door (e.g. door monitor).</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Physical Credential</emphasis>
                </para>
              </entry>
              <entry>
                <para>Portable device containing a readable unique credential number that can be associated with the credential holder’s data and access rules stored within the electronic access control system. Examples are card, key, fob, smart phone, etc.</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Reader</emphasis>
                </para>
              </entry>
              <entry>
                <para>Device for the input of credentials. Examples include card readers, biometric readers, etc. </para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">Request-to-Exit Device</emphasis>
                </para>
              </entry>
              <entry>
                <para>A peripheral device associated with an access point used to initiate free exit.</para>
              </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
    </section>
    <section>
      <title>Abbreviations</title>
      <informaltable>
        <tgroup cols="2">
          <colspec colname="c1" colwidth="22*" />
          <colspec colname="c2" colwidth="78*" />
          <tbody valign="top">
            <row>
              <entry>
                <para>
                  <emphasis role="bold">ACMS</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Access Control Management System</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">BMS</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Building Management System</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">HTTP</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Hypertext Transfer Protocol</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">PACS</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Physical Access Control System</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">PSIM</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Physical Security Information Management</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">REX</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Request-to-Exit</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">TLS</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Transport Layer Security</para>
              </entry>
            </row>
            <row>
              <entry>
                <para>
                  <emphasis role="bold">VMS</emphasis>
                </para>
              </entry>
              <entry valign="middle">
                <para>Video Management System</para>
              </entry>
            </row>
          </tbody>
        </tgroup>
      </informaltable>
    </section>
  </chapter>
  <chapter>
    <title>Overview</title>
    <para>Physical access control is all about who (credential holders) can access what (areas), when (schedules) and how (security levels). </para>
    <para>Access points represent the sides of a door, and are the points of access that you need to pass to get to a protected area. An access point is typically equipped with a reader or a request-to-exit device controlling access from one area to another area.</para>
    <para>An access point may also be associated with an authentication profile that defines how (i.e. which security level) to get access to an area and when (defined by a schedule). A typical example is an access point that requires a card during day time and a card plus PIN code during night time.</para>
    <para>Every access point offers different capabilities, such as support for duress or what security levels are supported.</para>
    <para>The access control service offers commands to manage the access points and areas, to retrieve status information and to control access point instances.</para>
    <para>The following picture shows the main data structures involved in the access control service:</para>
    <figure>
      <title>Main data structures in the access control service</title>
      <mediaobject>
        <imageobject>
          <imagedata fileref="media/AccessControl/image2.svg" contentwidth="159.97mm" contentdepth="48.65mm" />
        </imageobject>
      </mediaobject>
    </figure>
  </chapter>
  <chapter>
    <title>Access control</title>
    <section>
      <title>Service capabilities</title>
      <section>
        <title>General</title>
        <para>A device shall provide service capabilities in two ways:</para>
        <itemizedlist>
          <listitem>
            <para>With the GetServices method of Device service when IncludeCapability is true. Please refer to [ONVIF Core Specification] for more details.</para>
          </listitem>
          <listitem>
            <para>With the GetServiceCapabilities method.</para>
          </listitem>
        </itemizedlist>
      </section>
      <section>
        <title>Data structures</title>
        <section>
          <title>ServiceCapabilities</title>
          <para>The service capabilities reflect optional functionality of a service. The information is static and does not change during device operation. The following capabilities are available:</para>
          <variablelist>
            <varlistentry>
              <term> MaxLimit </term>
              <listitem><para>The maximum number of entries returned by a single Get&lt;Entity&gt;List or
                Get&lt;Entity&gt; request. The device shall never return more than this number of
                entities in a single response.</para></listitem>
            </varlistentry>
            <varlistentry>
              <term> MaxAccessPoints </term>
              <listitem><para>Indicates the maximum number of access points supported by the device.</para></listitem>
            </varlistentry>
            <varlistentry>
              <term> MaxAreas </term>
              <listitem><para>Indicates the maximum number of areas supported by the device.</para></listitem>
            </varlistentry>
            <varlistentry>
              <term> ClientSuppliedTokenSupported </term>
              <listitem><para>Indicates that the client is allowed to supply the token when creating access
                points and areas. To enable the use of the commands SetAccessPoint and SetArea, the
                value must be set to true.</para></listitem>
            </varlistentry>
            <varlistentry>
              <term> AccessPointManagementSupported </term>
              <listitem><para>Indicates that the client can perform CRUD operations (create, read, update and
                delete) on access points. To enable the use of the commands GetAccessPoints,
                GetAccessPointList, CreateAccessPoint, ModifyAccessPoint, DeleteAccessPoint,
                SetAccessPointAuthenticationProfile and DeleteAccessPointAuthenticationProfile, the
                value must be set to true.</para></listitem>
            </varlistentry>
            <varlistentry>
              <term> AreaManagementSupported </term>
              <listitem><para>Indicates that the client can perform CRUD operations (create, read, update and
                delete) on areas. To enable the use of the commands GetAreas, GetAreaList,
                CreateArea, ModifyArea and DeleteArea, the value must be set to true.</para></listitem>
            </varlistentry>
          </variablelist>
        </section>
      </section>
      <section>
        <title>GetServiceCapabilities</title>
        <para>This operation returns the capabilities of the access control service.</para>
        <para>A device which provides the access control service shall implement this method.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="text">This message is empty</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">Capabilities [tac:Serviceapabilities]</para>
              <para role="text">Set of indicators for function groups as described above.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="text">None</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">PRE_AUTH</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
    <section>
      <title>Access point information</title>
      <section>
        <title>Data structures</title>
        <section>
          <title>AccessPointInfo</title>
          <para>The AccessPointInfo structure contains basic information about an access point instance. An access point defines an entity a credential can be granted or denied access to. The AccessPointInfo structure provides basic information on how access is controlled in one direction for a door (from which area to which area).</para>
          <para>Multiple access points may cover the same door. A typical case is one access point for entry and another for exit, both referencing the same door. </para>
          <para>The device shall provide the following fields for each access point instance:</para>
          <itemizedlist>
            <listitem>
              <para> token </para>
              <para>A service-unique identifier of the access point.</para>
            </listitem>
            <listitem>
              <para> Name </para>
              <para>A user readable name. It shall be up to 64 characters.</para>
            </listitem>
            <listitem>
              <para> Entity </para>
              <para>Reference to the entity used to control access; the entity type may be specified
                by the optional EntityType field explained below but is typically a door.</para>
            </listitem>
            <listitem>
              <para> Capabilities </para>
              <para>The capabilities for the access point.</para>
            </listitem>
          </itemizedlist>
          <para>To provide more information, <phrase>the</phrase> device may include the following
            optional fields:</para>
          <itemizedlist>
            <listitem>
              <para> Description </para>
              <para>Optional user readable description for the access point. It shall be up to 1024
                characters.</para>
            </listitem>
            <listitem>
              <para> AreaFrom </para>
              <para>Optional reference to the area from which access is requested.</para>
            </listitem>
            <listitem>
              <para> AreaTo </para>
              <para>Optional reference to the area to which access is requested.</para>
            </listitem>
            <listitem>
              <para> EntityType </para>
              <para>Optional entity type; if missing, a Door type as defined by [ONVIF Door Control
                Service Specification] should be assumed. This can also be represented by the QName
                value “tdc:Door” – where tdc is the namespace of the door control service: “<link
                  xmlns:xlink="http://www.w3.org/1999/xlink"
                  xlink:href="http://www.onvif.org/ver10/doorcontrol/wsdl"
                  >http://www.onvif.org/ver10/doorcontrol/wsdl</link>”. This field is provided for
                future extensions; it will allow an access point being extended to cover entity
                types other than doors as well.</para>
            </listitem>
          </itemizedlist>
        </section>
        <section>
          <title>AccessPoint</title>
          <para>The AccessPoint structure shall include all properties of the AccessPointInfo structure, and optionally a reference to an authentication profile instance.</para>
          <para>The device may provide the following optional fields for each access point instance:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">AuthenticationProfileToken</emphasis>
              </para>
              <para>A reference to an authentication profile which defines the authentication behavior of the access point.</para>
              <para>During the installation phase of an access control system, the authentication behavior is typically not defined, but the list of supported security levels are (see section <xref linkend="_Ref15300797" />). At a later stage, someone (e.g. a security officer) will define the authentication behavior for the access point by calling the SetAccessPointAuthenticationProfile command (see section <xref linkend="_Ref505688933" />).</para>
            </listitem>
          </itemizedlist>
        </section>
        <section xml:id="_Ref15300797">
          <title>AccessPointCapabilities</title>
          <para xml:id="AccessPointcapabilities">The access point capabilities reflect optional functionality of a particular physical entity. Different access point instances may have a different set of capabilities. This information may change during device operation, e.g. if hardware settings are changed. The following capabilities are available:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">DisableAccessPoint</emphasis>
              </para>
              <para>Indicates whether or not this access point instance supports the EnableAccessPoint and DisableAccessPoint commands.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">Duress</emphasis>
              </para>
              <para>Indicates whether or not this access point instance supports generation of duress events.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">AnonymousAccess</emphasis>
              </para>
              <para>Indicates whether or not this access point has a REX switch or other input that allows anonymous access.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">AccessTaken</emphasis>
              </para>
              <para>Indicates whether or not this access point instance supports generation of AccessTaken and AccessNotTaken events. If AnonymousAccess and AccessTaken are both true, it indicates that the Anonymous versions of AccessTaken and AccessNotTaken are supported.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">ExternalAuthorization</emphasis>
              </para>
              <para>Indicates whether or not this access point instance supports the ExternalAuthorization operation and the generation of Request events. If AnonymousAccess and ExternalAuthorization are both true, it indicates that the Anonymous version is supported as well.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">SupportedSecurityLevels</emphasis>
              </para>
              <para>A list of security level tokens that this access point supports. See [ONVIF Authentication Behavior Service Specification].</para>
              <para>This field is optional, and if omitted, the device cannot support multi-factor authentication for this access point.</para>
              <para>Please note that when an access point is updated, then any previously supported security levels are replaced with the new list.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">SupportedRecognitionTypes</emphasis>
              </para>
              <para>A list of recognition types that the device supports. This field is only relevant for devices that are not aware of security levels (see [ONVIF Authentication Behavior Service Specification]).</para>
              <para>Please note that when an access point is updated, then any previously supported recognition types are replaced with the new list.</para>
              <para>Recognition types starting with the prefix pt: are reserved to define ONVIF-specific types as defined in pt:RecognitionType. For custom defined identifier types, free text can be used.</para>
              </listitem>
              <listitem>
                <para>
                  <emphasis role="bold">IdentifierAccess</emphasis>
                </para>
                <para>Indicates whether or not this access point supports the AccessControl/Request/Identifier event to request external authorization.</para>
                <para>Identifier access requires that ExternalAuthorization is set to true.</para>
                <para>The IdentifierAccess capability is typically enabled for devices that do not have any knowledge of credential tokens. When IdentifierAccess is set to true then the device shall support the identifier events.</para>
              </listitem>
              <listitem>
                <para>
                  <emphasis role="bold">SupportedFeedbackTypes</emphasis>
                </para>
                <para>List of supported feedback types. Feedback types starting with the prefix pt: are reserved to define ONVIF-specific types as defined in tac:FeedbackType. For custom defined feedback types, free text can be used.</para>
              </listitem>
          </itemizedlist>
        </section>
      </section>
      <section>
        <title>GetAccessPointInfo</title>
        <para>This operation requests a list of AccessPointInfo items matching the given tokens.</para>
        <para>The device shall ignore tokens it cannot resolve and shall return an empty list if there are no items matching the specified tokens. The device shall not return a fault in this case.</para>
        <para>If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token - unbounded [pt:ReferenceToken]</para>
              <para role="text">Tokens of AccessPointInfo items to get.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">AccessPointInfo - optional, unbounded [tac:AccessPointInfo]</para>
              <para role="text">List of AccessPointInfo items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgs - ter:TooManyItems</para>
              <para role="text">Too many items were requested, see MaxLimit capability.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>GetAccessPointInfoList</title>
        <para>This operation requests a list of all AccessPointInfo items provided by the device.</para>
        <para>A call to this method shall return a StartReference when not all data is returned and more data is available. The reference shall be valid for retrieving the next set of data. Please refer to section <phrase>4.8.3 in [ONVIF PACS Architecture and Design Considerations] </phrase>for more details.</para>
        <para>The number of items returned shall not be greater than the Limit parameter.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Limit - optional [xs:int ]</para>
              <para role="text">Maximum number of entries to return. If Limit is omitted or if the value of Limit is higher than what the device supports, then the device shall return its maximum amount of entries.</para>
              <para role="param">StartReference - optional [xs:string]</para>
              <para role="text">Start returning entries from this start reference. If not specified, entries shall start from the beginning of the dataset.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">NextStartReference - optional [xs:string</para>
              <para role="text">StartReference to use in next call to get the following items. If absent, no more items to get.</para>
              <para role="param">AccessPointInfo - optional, unbounded [tac:AccessPointInfo]</para>
              <para role="text">List of AccessPointInfo items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:InvalidStartReference</para>
              <para role="text">StartReference is invalid or has timed out. The client needs to start fetching from the beginning.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>GetAccessPoints</title>
        <para>This operation <phrase>requests a list of </phrase>AccessPoint items matching the given tokens. </para>
        <para>The device shall ignore tokens it cannot resolve and shall return an empty list if there are no items matching the specified tokens. The device shall not return a fault in this case.</para>
        <para>If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token - unbounded [pt:ReferenceToken]</para>
              <para role="text">Tokens of AccessPoint items to get</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">AccessPoint - optional, unbounded [tac:AccessPoint]</para>
              <para role="text">List of AccessPoint items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgs - ter:TooManyItems</para>
              <para role="text">Too many items were requested, see MaxLimit capability.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>GetAccessPointList</title>
        <para>This operation requests a list of all AccessPoint items provided by the device. </para>
        <para>A call to this method shall return a StartReference when not all data is returned and more data is available. The reference shall be valid for retrieving the next set of data. Please refer to section 4.8.3 in [ONVIF PACS Architecture and Design Considerations] for more details.</para>
        <para>The number of items returned shall not be greater than the Limit parameter.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Limit - optional [xs:int]</para>
              <para role="text">Maximum number of entries to return. If Limit is omitted or if the value of Limit is higher than what the device supports, then the device shall return its maximum amount of entries.</para>
              <para role="param">StartReference - optional [xs:string]</para>
              <para role="text">Start returning entries from this start reference. If not specified, entries shall start from the beginning of the dataset</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">NextStartReference - optional [xs:string]</para>
              <para role="text">StartReference to use in next call to get the following items. If absent, no more items to get.</para>
              <para role="param">AccessPoint optional, unbounded [tac:AccessPoint]</para>
              <para role="text">List of access point items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:InvalidStartReference</para>
              <para role="text">StartReference is invalid or has timed out. The client needs to start fetching from the beginning.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>CreateAccessPoint</title>
        <para>This operation creates the specified access point in the device. </para>
        <para>The token field of the AccessPoint structure shall be empty and the device shall allocate a token for the access point. The allocated token shall be returned in the response. </para>
        <para>If the client sends any value in the token field, the device shall return InvalidArgVal as a generic fault code.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">AccessPoint [tac:AccessPoint]</para>
              <para role="text">AccessPoint item to create</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of created AccessPoint item</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:MaxAccessPoints</para>
              <para role="text">There is not enough space to add new AccessPoint, see the MaxAccessPoints capability</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>SetAccessPoint</title>
        <para>This method is used to synchronize an access point in a client with the device.</para>
        <para>If an access point with the specified token does not exist in the device, the access point is created. If an access point with the specified token exists, then the access point is modified.</para>
        <para>A call to this method takes an AccessPoint structure as input parameter. The token field of the AccessPoint structure shall not be empty.</para>
        <para>A device that signals support for the ClientSuppliedTokenSupported capability shall implement this command. </para>
        <para>If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">AccessPoint [tac:AccessPoint]</para>
              <para role="text">AccessPoint item to create or modify</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:ClientSuppliedTokenSupported</para>
              <para role="text">The device does not support that the client supplies the token</para>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:MaxAccessPoints</para>
              <para role="text">There is not enough space to add new AccessPoint, see the MaxAccessPoints capability</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>ModifyAccessPoint</title>
        <para>This operation modifies the specified access point.</para>
        <para>The token of the access point to modify is specified in the token field of the AccessPoint structure and shall not be empty. All other fields in the structure shall overwrite the fields in the specified access point.</para>
        <para>If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">AccessPoint [tac:AccessPoint]</para>
              <para role="text">AccessPoint item to modify</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal   ter:NotFound</para>
              <para role="text">Access point token is not found.</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>DeleteAccessPoint</title>
        <para>This operation deletes the specified access point. </para>
        <para>If it is associated with one or more entities some devices may not be able to delete the access point, and consequently a ReferenceInUse fault shall be generated.</para>
        <para>If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of AccessPoint item to delete.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:NotFound</para>
              <para role="text">Access point token is not found.</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceInUse</para>
              <para role="text">Failed to delete, Access point token is in use</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section xml:id="_Ref505688933">
        <title>SetAccessPointAuthenticationProfile</title>
        <para>This operation defines the authentication behavior for an access point.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of the AccessPoint</para>
              <para role="param">AuthenticationProfileToken [pt:ReferenceToken]</para>
              <para role="text">Token of the AuthenticationProfile</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:NotFound</para>
              <para role="text">The specified token is not found.</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
              <para role="param">env:Sender - ter:CapabilityViolated - ter:SupportedSecurityLevels</para>
              <para role="text">The referred authentication profile contains security levels that are not supported by this access point.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">ACTUATE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>DeleteAccessPointAuthenticationProfile</title>
        <para>This operation reverts the authentication behavior for an access point to its default behavior.</para>
        <para>A device that signals support for the AccessPointManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of the AccessPoint</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:NotFound</para>
              <para role="text">The specified token is not found.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">ACTUATE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
    <section>
      <title>Area Information</title>
      <section>
        <title>Data structures</title>
        <section>
          <title>AreaInfo</title>
          <para>The AreaInfo structure contains basic information about an area instance. </para>
          <para>The device shall provide the following fields for each area instance:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">token</emphasis>
              </para>
              <para>A service-unique identifier of the area.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">Name</emphasis>
              </para>
              <para>User readable name. It shall be up to 64 characters.</para>
            </listitem>
          </itemizedlist>
          <para>To provide more information, <phrase>the</phrase> device may include the following optional fields:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">Description</emphasis>
              </para>
              <para>User readable description for the area. It shall be up to 1024 characters.</para>
            </listitem>
          </itemizedlist>
        </section>
        <section>
          <title>Area</title>
          <para>The Area structure shall include all properties of the AreaInfo structure.</para>
          <para>Please note that this structure is a placeholder for future attributes.</para>
        </section>
      </section>
      <section>
        <title>GetAreaInfo</title>
        <para>This operation requests a list of AreaInfo items matching the given tokens.</para>
        <para>The device shall ignore tokens it cannot resolve and shall return an empty list if there are no items matching the specified tokens. The device shall not return a fault in this case.</para>
        <para>If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token - unbounded [pt:ReferenceToken]</para>
              <para role="text">Tokens of AreaInfo items to get.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">AreaInfo - optional, unbounded [tac:AreaInfo]</para>
              <para role="text">List of AreaInfo items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgs - ter:TooManyItems</para>
              <para role="text">Too many items were requested, see MaxLimit capability.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>GetAreaInfoList</title>
        <para>This operation requests a list of all AreaInfo items provided by the device.</para>
        <para>A call to this method shall return a StartReference when not all data is returned and more data is available. The reference shall be valid for retrieving the next set of data. Please refer to section <phrase>4.8.3 in [ONVIF PACS Architecture and Design Considerations] </phrase>for more details.</para>
        <para>The number of items returned shall not be greater than the Limit parameter.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Limit - optional [xs:int]</para>
              <para role="text">Maximum number of entries to return. If Limit is omitted or if the value of Limit is higher than what the device supports, then the device shall return its maximum amount of entries.</para>
              <para role="param">StartReference - optional [xs:string]</para>
              <para role="text">Start returning entries from this start reference. If not specified, entries shall start from the beginning of the dataset</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">NextStartReference - optional [xs:string]</para>
              <para role="text">StartReference to use in next call to get the following items. If absent, no more items to get.</para>
              <para role="param">AreaInfo optional, unbounded [tac:AreaInfo]</para>
              <para role="text">List of area info items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:InvalidStartReference</para>
              <para role="text">StartReference is invalid or has timed out. Client needs to start fetching from the beginning.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>GetAreas</title>
        <para>This operation <phrase>requests a list of </phrase>Area items matching the given tokens. </para>
        <para>The device shall ignore tokens it cannot resolve and shall return an empty list if there are no items matching the specified tokens. The device shall not return a fault in this case.</para>
        <para>If the number of requested items is greater than MaxLimit, a TooManyItems fault shall be returned.</para>
        <para>A device that signals support for the AreaManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token - unbounded [pt:ReferenceToken]</para>
              <para role="text">Tokens of Area items to get</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">Area - optional, unbounded [tac:Area]</para>
              <para role="text">List of Area items.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgs - ter:TooManyItems</para>
              <para role="text">Too many items were requested, see MaxLimit capability.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>GetAreaList</title>
        <para>This operation requests a list of all Area items provided by the device. </para>
        <para>A call to this method shall return a StartReference when not all data is returned and more data is available. The reference shall be valid for retrieving the next set of data. Please refer to section 4.8.3 in [ONVIF PACS Architecture and Design Considerations] for more details.</para>
        <para>The number of items returned shall not be greater than the Limit parameter.</para>
        <para>A device that signals support for the AreaManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Limit - optional [xs:int]</para>
              <para role="text">Maximum number of entries to return. If Limit is omitted or if the value of Limit is higher than what the device supports, then the device shall return its maximum amount of entries.</para>
              <para role="param">StartReference - optional [xs:string]</para>
              <para role="text">Start returning entries from this start reference. If not specified, entries shall start from the beginning of the dataset</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">NextStartReference - optional [xs:string]</para>
              <para role="text">StartReference to use in next call to get the following items. If absent, no more items to get.</para>
              <para role="param">Area optional, unbounded [tac:Area]</para>
              <para role="text">List of areas.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:InvalidStartReference</para>
              <para role="text">StartReference is invalid or has timed out. Client needs to start fetching from the beginning.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>CreateArea</title>
        <para>This operation creates the specified area in the device. </para>
        <para>The token field of the Area structure shall be empty and the device shall allocate a token for the area. The allocated token shall be returned in the response. </para>
        <para>If the client sends any value in the token field, the device shall return InvalidArgVal as a generic fault code.</para>
        <para>A device that signals support for the AreaManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Area [tac:Area]</para>
              <para role="text">Area item to create</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of created Area item</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:MaxAreas</para>
              <para role="text">There is not enough space to add the new area, see the MaxAreas capability</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>SetArea</title>
        <para>This method is used to synchronize an area in a client with the device.</para>
        <para>If an area with the specified token does not exist in the device, the area is created. If an area with the specified token exists, then the area is modified.</para>
        <para>A call to this method takes an Area structure as input parameter. The token field of the Area structure shall not be empty.</para>
        <para>A device that signals support for the ClientSuppliedTokenSupported capability shall implement this command. </para>
        <para>If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Area [tac:Area]</para>
              <para role="text">Area item to create or modify</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:ClientSuppliedTokenSupported</para>
              <para role="text">The device does not support that the client supplies the token</para>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:MaxAreas</para>
              <para role="text">There is not enough space to add new area, see the MaxAreas capability</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>ModifyArea</title>
        <para>This operation modifies the specified area.</para>
        <para>The token of the area to modify is specified in the token field of the Area structure and shall not be empty. All other fields in the structure shall overwrite the fields in the specified area.</para>
        <para>If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.</para>
        <para>A device that signals support for the AreaManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Area [tac:Area]</para>
              <para role="text">Area item to modify</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:OccupancyControlSupported</para>
              <para role="text">An OccupancyControl structure was passed in the request although occupancy control is not supported by this device.</para>
              <para role="param">env:Receiver - ter:CapabilityViolated - ter:AntipassbackSupported</para>
              <para role="text">An Antipassback structure was passed in the request although anti-passback is not supported by this device.</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:NotFound</para>
              <para role="text">Area token is not found.</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceNotFound</para>
              <para role="text">A referred entity token is not found (some devices may not validate referred entities).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>DeleteArea</title>
        <para>This operation deletes the specified area. </para>
        <para>If it is associated with one or more entities some devices may not be able to delete the area, and consequently a ReferenceInUse fault shall be generated.</para>
        <para>If no token was specified in the request, the device shall return InvalidArgs as a generic fault code.</para>
        <para>A device that signals support for the AreaManagementSupported capability shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of Area item to delete.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:NotFound</para>
              <para role="text">Area token is not found.</para>
              <para role="param">env:Sender - ter:InvalidArgVal - ter:ReferenceInUse</para>
              <para role="text">Failed to delete, the area token is in use</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">WRITE_SYSTEM</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
    <section>
      <title>Access point status</title>
      <section>
        <title>General</title>
        <para>The state of the access point is determined by a number of operations that can be performed on it depending on its capabilities (please refer to access point capabilities in section 5.2).</para>
      </section>
      <section>
        <title>Data structures</title>
        <section>
          <title>AccessPointState</title>
          <para>The AccessPointState contains state information for an access point. A device shall provide the following fields for each access point instance:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">Enabled</emphasis>
              </para>
              <para>Indicates that the access point is enabled. By default this field value shall be True, if the DisableAccessPoint capabilities is not supported.</para>
            </listitem>
          </itemizedlist>
        </section>
      </section>
      <section>
        <title>GetAccessPointState</title>
        <para>This operation requests the AccessPointState for the access point instance specified by the token.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of AccessPoint instance to get AccessPointState for.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="param">AccessPointState [tac:AccessPointState]</para>
              <para role="text">AccessPointState item.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender  ter:InvalidArgVal   ter:NotFound</para>
              <para role="text">AccessPoint is not found</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">READ_SYSTEM_SENSITIVE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
    <section>
      <title>Access control commands</title>
      <section>
        <title>General</title>
        <para>The service control commands contain operations that allow modifying access point states and controlling access points.</para>
      </section>
      <section>
        <title>Data structures</title>
        <section>
          <title>Enumeration: Decision</title>
          <para>The Decision enumeration represents a choice of two available options for an access request:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">Granted</emphasis>
              </para>
              <para>The decision is to grant access.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">Denied</emphasis>
              </para>
              <para>The decision is to deny access.</para>
            </listitem>
          </itemizedlist>
        </section>
        <section>
          <title>Enumeration: FeedbackType</title>
          <para>Non-normative enumeration that describes the ONVIF defined feedback types. These types are used in string fields where extendibility is desired. Strings starting with the prefix pt: are reserved to define ONVIF-specific types. For custom defined feedback types, free text can be used. </para>
          <para>The following types are defined by ONVIF:</para>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">pt:Disabled</emphasis>
              </para>
              <para>Indication that the access point is disabled.</para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:Idle</emphasis>
              </para>
              <para>Indication of normal idle state<phrase>.</phrase></para>
            </listitem>
          </itemizedlist>
          <itemizedlist>
            <listitem>
              <para>
                <emphasis role="bold">pt:DoorLocked</emphasis>
              </para>
              <para>Indication that the door is locked<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:DoorUnlocked</emphasis>
              </para>
              <para>Indication that the door is unlocked<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:DoorOpenTooLong</emphasis>
              </para>
              <para>Indication that the door has been held open too long<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:DoorPreAlarmWarning</emphasis>
              </para>
              <para>Indication that the door must be closed to avoid an alarm<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:RequireIdentifier</emphasis>
              </para>
              <para>Indication that at least one more identifier is required to grant access<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:TextMessage</emphasis>
              </para>
              <para>Display the provided text message<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:Processing</emphasis>
              </para>
              <para>Indication that processing is in progress<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:RetryIdentifier</emphasis>
              </para>
              <para>Indication that the credential holder needs to retry providing the identifier. This could be due to card read failure, face detection problem etc<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:AccessGranted</emphasis>
              </para>
              <para>Indication that access is granted<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:AccessDenied</emphasis>
              </para>
              <para>Indication that access is denied<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:Ok</emphasis>
              </para>
              <para>Generic ok indication<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:Fault</emphasis>
              </para>
              <para>Generic fault indication<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:Warning</emphasis>
              </para>
              <para>Generic warning indication<phrase>.</phrase></para>
            </listitem>
            <listitem>
              <para>
                <emphasis role="bold">pt:Alarm</emphasis>
              </para>
              <para>Generic alarm indication<phrase>.</phrase></para>
            </listitem>
          </itemizedlist>
        </section>
      </section>
      <section>
        <title>EnableAccessPoint</title>
        <para>This operation allows enabling an access point.</para>
        <para>A device that signals support for DisableAccessPoint capability for a particular access point instance shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of the AccessPoint instance to enable.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender  ter:InvalidArgVal   ter:NotFound</para>
              <para role="text">The specified token is not found.</para>
              <para role="param">env:Receiver  ter:ActionNotSupported   ter:NotSupported</para>
              <para role="text">The operation is not supported.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">ACTUATE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>DisableAccessPoint</title>
        <para>This operation allows disabling an access point.</para>
        <para>A device that signals support for the DisableAccessPoint capability for a particular access point instance shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">Token [pt:ReferenceToken]</para>
              <para role="text">Token of the AccessPoint instance to disable.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender  ter:InvalidArgVal   ter:NotFound</para>
              <para role="text">The specified token is not found.</para>
              <para role="param">env:Receiver  ter:ActionNotSupported   ter:NotSupported</para>
              <para role="text">The operation is not supported.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">ACTUATE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>ExternalAuthorization</title>
        <para>This operation allows to deny or grant decision at an access point instance.</para>
        <para>A device that signals support for ExternalAuthorization capability for a particular access point instance shall implement this method.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">AccessPointToken [pt:ReferenceToken]</para>
              <para role="text">Token of the AccessPoint instance.</para>
              <para role="param">CredentialToken - optional [pt:ReferenceToken]</para>
              <para role="text">Optional token of the Credential involved.</para>
              <para role="param">Reason - optional [xs:string]</para>
              <para role="text">Optional reason for decision.</para>
              <para role="param">Decision [tac:Decision]</para>
              <para role="text">Decision - Granted or Denied (extendable).</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender  ter:InvalidArgVal   ter:NotFound</para>
              <para role="text">AccessPoint is not found.</para>
              <para role="param">env:Receiver  ter:ActionNotSupported   ter:NotSupported</para>
              <para role="text">The operation is not supported.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">ACTUATE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
      <section>
        <title>Feedback</title>
        <para>This operation controls how the specified access point should indicate feedback.</para>
        <para>A client can instruct the access point about the door status or that one or more identifiers are needed to grant access, etc. It is typically used in conjunction with the AccessControl/Request/Identifier event and the ExternalAuthorization operation to indicate progress and required recognition methods.</para>
        <para>The supported feedback types are indicated in the SupportedFeedbackTypes field in the access point capabilities.</para>
        <para>In cases where multiple combinations of recognition methods are possible, the RecognitionType field can contain multiple values. E.g. for the security level "Card+PIN or Card+Fingerprint", the feedback command for requesting the second recognition method would contain both pt:PIN and pt:Fingerprint in the RecognitionType field.</para>
        <para>If the device supports at least one feedback type the device shall implement this command.</para>
        <variablelist role="op">
          <varlistentry>
            <term>request</term>
            <listitem>
              <para role="param">AccessPointToken [pt:ReferenceToken]</para>
              <para role="text">Token of the access point to control.</para>
              <para role="param">FeedbackType [pt:string]</para>
              <para role="text">The feedback type to use. Feedback types starting with the prefix pt: are reserved to define ONVIF-specific types as defined in tac:FeedbackType.
                For custom defined feedback types, free text can be used. If feedbacktype is set to pt:RequireIdentifier, the RecognitionType field shall provide the required type(s).
                If the feedback type is not supported, it shall be ignored.</para>
              <para role="param">RecognitionType - optional, unbounded [xs:string]</para>
              <para role="text">Optional list of recognition types requested by a client to get closer to making a decision. Used if FeedbackType is set to pt:RequireIdentifier. If a recognition type is not supported, it shall be ignored.</para>
              <para role="param">TextMessage - optional [xs:string]</para>
              <para role="text">Optional textual feedback message. If not supported by the access point it shall be ignored.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>response</term>
            <listitem>
              <para role="text">This is an empty message.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>faults</term>
            <listitem>
              <para role="param">env:Sender  ter:InvalidArgVal   ter:NotFound</para>
              <para role="text">AccessPoint is not found.</para>
            </listitem>
          </varlistentry>
          <varlistentry>
            <term>access class</term>
            <listitem>
              <para role="access">ACTUATE</para>
            </listitem>
          </varlistentry>
        </variablelist>
      </section>
    </section>
  </chapter>
  <chapter>
    <title>Notification topics</title>
    <section>
      <title>General</title>
      <para>This section defines notification topics specific to the access control service.</para>
    </section>
    <section>
      <title>Event overview</title>
      <section>
        <title>General</title>
        <para>The access control service specifies events to be used for access transactions, for example an access request is made and an access is granted or denied, when duress is detected, and when an important configuration has been changed.</para>
        <para>The main topics for access transaction events are:</para>
        <itemizedlist>
          <listitem>
            <para>tns1:AccessControl/AccessGranted/ - when access is granted.</para>
          </listitem>
          <listitem>
            <para>tns1:AccessControl/AccessTaken/ - when access is taken after being granted.</para>
          </listitem>
          <listitem>
            <para>tns1:AccessControl/AccessNotTaken/ - when access is not taken after being granted.</para>
          </listitem>
          <listitem>
            <para>tns1:AccessControl/Denied/ - when access is denied.</para>
          </listitem>
          <listitem>
            <para>tns1:AccessControl/Duress - when duress is detected.</para>
          </listitem>
          <listitem>
            <para>tns1:AccessControl/Request/ - when external authorization is requested or has timed out.</para>
          </listitem>
        </itemizedlist>
        <para>The main topic for status updates is:</para>
        <itemizedlist>
          <listitem>
            <para>tns1:AccessPoint/State/ - for status updates.</para>
          </listitem>
        </itemizedlist>
        <para>The main topics for configuration change notifications are:</para>
        <itemizedlist>
          <listitem>
            <para>tns1:Configuration/AccessPoint - when access point configuration has been changed.</para>
          </listitem>
          <listitem>
            <para>tns1:Configuration/Area - when area configuration has been changed.</para>
          </listitem>
        </itemizedlist>
        <para>Note that the term “main topic” here means that a client may subscribe to e.g. tns1:AccessControl/AccessGranted, but the actual event sent (and thus received) may be the main topic itself or any subtopic of the main topic (such as tns1:AccessControl/AccessGranted/Credential). New subtopics may be defined in the future.</para>
      </section>
    </section>
    <section>
      <title>Access granted</title>
      <section>
        <title>General</title>
        <para>Whenever a positive access decision is made, i.e., access is granted, the device shall provide a corresponding event message as per the following sub-sections.</para>
        <para>The event shall be sent immediately once the decision is made regardless of whether access was taken or not.</para>
      </section>
      <section xml:id="tns1_AccessControl_AccessGranted_Anonymo">
        <title>Anonymous</title>
        <para>Whenever access is granted for an anonymous user at an access point, a device that signals AnonymousAccess capability for a particular access point instance shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/AccessGranted/Anonymous</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
	<tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
	<tt:SimpleItemDescription Name="External" Type="xs:boolean"/>
  </tt:Data>
</tt:MessageDescription>
]]></programlisting>
        <para xml:id="tns1_AccessControl_AccessGranted_Credent">If the command was triggered as a result of the ExternalAuthorization command, the data element External shall be set to true, otherwise the element is optional.</para>
      </section>
      <section>
        <title>Credential</title>
        <para>Whenever a valid credential has passed all the necessary checks and a credential holder is granted access to the access point, but not yet accessed it (entered or exited), the device shall provide the following event data:</para>
        <para>Topic: tns1:AccessControl/AccessGranted/Credential</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="External" Type="xs:boolean"/>
    <tt:SimpleItemDescription Name="CredentialToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="CredentialHolderName" Type="xs:string"/>
    <tt:SimpleItemDescription Name="SecurityLevelToken" Type="xs:string"/>
    <tt:SimpleItemDescription Name="ExemptedAccess" Type="xs:boolean"/>
  </tt:Data>
</tt:MessageDescription>
]]></programlisting>
        <para>If the command was triggered as a result of the ExternalAuthorization command, the data element External shall be set to true, otherwise the element is optional.</para>
        <para>The data elements CredentialHolderName, SecurityLevelToken and ExemptedAccess are optional.</para>
      </section>
      <section>
        <title>Identifier</title>
        <para>Whenever a credential identifier is granted access, but the credential token is not known (e.g. when whitelisted), the device shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/AccessGranted/Identifier</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="IdentifierType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="FormatType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="IdentifierValue" Type="xs:hexBinary"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The content of the identifier type string must be one of the ONVIF-specific types defined in pt:RecognitionType (except pt:REX) or a vendor-specific type.</para>
        <para>The content of the format type string must be one of the BACnet formats referred to in the Credential Specification (e.g. WIEGAND26) or a vendor-specific format.</para>
        <para>The content of the identifier value must contain the credential number, PIN or any other value identifying the credential that has been granted access.</para>
      </section>
    </section>
    <section>
      <title>Access taken</title>
      <section>
        <title>General</title>
        <para>A device that signals support for AccessTaken capability for a particular access point instance shall provide a corresponding event to notify clients whenever an authorized person takes access.</para>
      </section>
      <section>
        <title>Anonymous</title>
        <para>A device that signals support for AnonymousAccess<emphasis role="bold"></emphasis>capability for a particular access point instance shall provide the following event<phrase>: </phrase></para>
        <para>Topic: tns1:AccessControl/AccessTaken/Anonymous</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
      </section>
      <section>
        <title>Credential</title>
        <para>When the device detects that access is taken and the credential can be identified (credential token is known), it shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/AccessTaken/Credential</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="CredentialToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="CredentialHolderName" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The data element CredentialHolderName is optional.</para>
      </section>
      <section>
        <title>Identifier</title>
        <para>When the device detects that access is taken, and the credential identifier is known but the credential token is not known, it shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/AccessTaken/Identifier</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="IdentifierType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="FormatType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="IdentifierValue" Type="xs:hexBinary"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The content of the identifier type string must be one of the ONVIF-specific types defined in pt:RecognitionType (except pt:REX) or a vendor-specific type.</para>
        <para>The content of the format type string must be one of the BACnet formats referred to in the Credential Specification (e.g. WIEGAND26) or a vendor-specific format.</para>
        <para>The content of the identifier value must contain the credential number, PIN or any other value identifying the credential that has taken access.</para>
      </section>
    </section>
    <section>
      <title>Access not taken</title>
      <section>
        <title>General</title>
        <para>A device that signals support for AccessTaken capability for a particular access point instance shall provide a corresponding event to notify clients whenever a person was authorized but did not take access in time.</para>
      </section>
      <section>
        <title>Anonymous</title>
        <para>A device that signals support for AnonymousAccess<emphasis role="bold"></emphasis>capability for a particular access point instance shall provide the following event<phrase>: </phrase></para>
        <para>Topic: tns1:AccessControl/AccessNotTaken/Anonymous</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
	<tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
      </section>
      <section>
        <title>Credential</title>
        <para>When the device detects that access is not taken and the credential can be identified (credential token is known), it shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/AccessNotTaken/Credential</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="CredentialToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="CredentialHolderName" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The data element CredentialHolderName is optional.</para>
      </section>
      <section>
        <title>Identifier</title>
        <para>When the device detects that access is not taken, and the credential identifier is known but the credential token is not known, it shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/AccessNotTaken/Identifier</para>
        <para>&lt;tt:MessageDescription IsProperty="false"&gt;</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="IdentifierType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="FormatType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="IdentifierValue" Type="xs:hexBinary"/>
  </tt:Data>]]></programlisting>
        <para>The content of the identifier type string must be one of the ONVIF-specific types defined in pt:RecognitionType (except pt:REX) or a vendor-specific type.</para>
        <para>The content of the format type string must be one of the BACnet formats referred to in the Credential Specification (e.g. WIEGAND26) or a vendor-specific format.</para>
        <para>The content of the identifier value must contain the credential number, PIN or any other value identifying the credential that has not taken access.</para>
      </section>
    </section>
    <section>
      <title>Access denied</title>
      <section>
        <title>General</title>
        <para>The device shall provide one of the events as per the following sub-sections whenever a person is denied access. The following applies to all subsections:</para>
        <para>Even if there are multiple reasons for denial, a device shall only send one reason and how the device chooses the reason in this case is outside the scope of this standard. The denial reason shall be present in the parameter Reason.</para>
        <para>If the denial reason is due to the credential being disabled (CredentialNotEnabled, CredentialNotActive or CredentialExpired) more detailed information about the reason of disabling the credential can be found in the credential itself.</para>
        <para>The following strings shall be used for the reason field:</para>
        <itemizedlist>
          <listitem>
            <para>
              <emphasis role="bold">CredentialNotEnabled</emphasis>
            </para>
            <para>The device shall provide this reason whenever a valid credential is not enabled or has been disabled, e.g. due to credential being lost etc., to prevent unauthorized entry.</para>
          </listitem>
          <listitem>
            <para>
              <emphasis role="bold">CredentialNotActive</emphasis>
            </para>
            <para>The device shall provide this reason whenever a valid credential is presented though it is not active yet, e.g. the credential was presented before the start date.</para>
          </listitem>
          <listitem>
            <para>
              <emphasis role="bold">CredentialExpired</emphasis>
            </para>
            <para>The device shall provide this reason whenever a valid credential was presented after its expiry date.</para>
          </listitem>
          <listitem>
            <para>
              <emphasis role="bold">InvalidPIN</emphasis>
            </para>
            <para>The device shall provide this reason whenever an entered PIN code does not match the credential.</para>
          </listitem>
          <listitem>
            <para>
              <emphasis role="bold">NotPermittedAtThisTime</emphasis>
            </para>
            <para>The device shall provide this reason whenever a valid credential is denied access to the requested access point because the credential is not permitted at the moment.</para>
          </listitem>
          <listitem>
            <para>
              <emphasis role="bold">Unauthorized</emphasis>
            </para>
            <para>The device shall provide this reason whenever the presented credential is not authorized.</para>
          </listitem>
          <listitem>
            <para>
              <emphasis role="bold">Other</emphasis>
            </para>
            <para>The device shall provide this reason whenever the request is denied and no other specific event matches it or is supported by the service.</para>
          </listitem>
        </itemizedlist>
        <para>More values may be defined by either future revisions of this specification  or as vendor specific extensions. To allow for this, a client shall treat unknown strings as “Other”.</para>
        <para>While the Reason strings originally defined by this standard do not use a QName style syntax, extensions to the Reason values will always use a QName style syntax. The prefix “pt” is reserved for use by ONVIF, i.e. "pt:&lt;reason&gt;". Vendor specific extensions should choose a suitable prefix.</para>
        <para>Current extensions are:</para>
        <itemizedlist>
          <listitem>
            <para>
              <emphasis role="bold">pt:InvalidIdentifierValue</emphasis>
            </para>
            <para>The device shall provide this reason whenever an entered second recognition method (such as a fingerprint or a second credential identifier), does not match the initial credential identifier.</para>
          </listitem>
        </itemizedlist>
      </section>
      <section>
        <title>Anonymous</title>
        <para>The device that signals support for the AnonymousAccess<emphasis role="bold"></emphasis>capability for a particular access point instance shall provide the following event when access is denied and credential information is not provided<phrase>: </phrase></para>
        <para>Topic: tns1:AccessControl/Denied/Anonymous</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="External" Type="xs:boolean"/>
    <tt:SimpleItemDescription Name="Reason" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>If the command was triggered as a result of the ExternalAuthorization command, the data element External shall be set to true, otherwise the element is optional.</para>
      </section>
      <section>
        <title>Credential</title>
        <para>When the device denies access and the credential can be identified (credential token is known), it shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/Denied/Credential</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="External" Type="xs:boolean"/>
    <tt:SimpleItemDescription Name="CredentialToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="CredentialHolderName" Type="xs:string"/>
    <tt:SimpleItemDescription Name="SecurityLevelToken" Type="xs:string"/>
    <tt:SimpleItemDescription Name="Reason" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>If the command was triggered as a result of the ExternalAuthorization command, the data element External shall be set to true, otherwise the element is optional.</para>
        <para>The data element CredentialHolderName and SecurityLevelToken are optional.</para>
      </section>
      <section>
        <title>Identifier</title>
        <para>Whenever a credential identifier is denied access, but the credential token is not known (e.g. when blacklisted), the device shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/Denied/Identifier</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="IdentifierType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="FormatType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="IdentifierValue" Type="xs:hexBinary"/>
    <tt:SimpleItemDescription Name="Reason" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The content of the identifier type string must be one of the ONVIF-specific types defined in pt:RecognitionType (except pt:REX) or a vendor-specific type.</para>
        <para>The content of the format type string must be one of the BACnet formats referred to in the Credential Specification (e.g. WIEGAND26) or a vendor-specific format.</para>
        <para>The content of the identifier value must contain the credential number, PIN or any other value identifying the credential that was denied access.</para>
      </section>
      <section>
        <title>CredentialNotFound</title>
        <para>Under some circumstances a device may not be able to resolve authentication data to a credential token.</para>
        <para>Whenever there is no credential matching the request stored in the device, the device shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/Denied/CredentialNotFound</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="IdentifierType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="FormatType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="IdentifierValue" Type="xs:hexBinary"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The content of the identifier type string must be one of the ONVIF-specific types defined in pt:RecognitionType (except pt:REX) or a vendor-specific type.</para>
        <para>The content of the format type string must be one of the BACnet formats referred to in the Credential Specification (e.g. WIEGAND26) or a vendor-specific format. This field is optional.</para>
        <para>The content of the identifier value must contain the credential number, PIN or any other value identifying the credential that could not be found.</para>
        <section>
          <title>Card</title>
          <para>Please note that the use of this event is provided for backward compatibility reasons. See also CredentialNotFound.</para>
          <para>Whenever there is no credential matching the request stored in the device, the device shall provide the following event:</para>
          <para>Topic: tns1:AccessControl/Denied/CredentialNotFound/Card</para>
          <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="Card" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
          <para>The content of the Card string is vendor specific. It may contain the complete identification string of the card, part of this information or remain empty.</para>
        </section>
      </section>
    </section>
    <section>
      <title>Duress</title>
      <para>A device that signals support for the Duress capability for a particular access point instance shall provide the following event whenever a condition of duress is detected.</para>
      <para>Topic: tns1:AccessControl/Duress</para>
      <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="CredentialToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="CredentialHolderName" Type="xs:string"/>
    <tt:SimpleItemDescription Name="Reason" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
      <para>The data parameters CredentialToken and CredentialHolderName are optional and may be omitted for anonymous access.</para>
    </section>
    <section>
      <title>External authorization</title>
      <section>
        <title>General</title>
        <para>A device that signals support for ExternalAuthorization capability for a particular access point instance shall provide applicable events defined in this section whenever it requests external authorization. These notification messages shall be used in conjunction with corresponding access control service operations which provide feedback to the device.</para>
      </section>
      <section>
        <title>Anonymous</title>
        <para> Whenever a device that signals AnonymousAccess capability for particular access point
          instance requests an external agent to authorize a person when credential information is
          not available, e.g. when a REX button has been pressed and operator's confirmation is
          needed, it shall provide the following event:</para>
        <para>Topic: tns1:AccessControl/Request/Anonymous</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
      </section>
      <section>
        <title>Credential</title>
        <para>Whenever the device requests an external authorization, and the credential token is known, the device shall send the following event:</para>
        <para>Topic: tns1:AccessControl/Request/Credential</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="CredentialToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="CredentialHolderName" Type="xs:string"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>CredentialHolderName is optional and may be omitted or an empty string if it cannot be resolved.</para>
      </section>
      <section>
        <title>Identifier</title>
        <para>If the IdentifierAccess capability is set to true for the access point, then whenever the device requests an external authorization, and the credential identifier is known but the credential token is not known, the device shall send the following event:</para>
        <para>Topic: tns1:AccessControl/Request/Identifier</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="IdentifierType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="FormatType" Type="xs:string"/>
    <tt:SimpleItemDescription Name="IdentifierValue" Type="xs:hexBinary"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
        <para>The content of the identifier type string must be one of the ONVIF-specific types defined in pt:RecognitionType (except pt:REX) or a vendor-specific type.</para>
        <para>The content of the format type string must be one of the BACnet formats referred to in the Credential Specification (e.g. WIEGAND26) or a vendor-specific format.</para>
        <para>The content of the identifier value must contain the credential number, PIN or any other value identifying the credential that is requesting access.</para>
      </section>
      <section>
        <title>Timeout</title>
        <para>A<phrase> device </phrase>shall provide the following event, whenever an external authorization request times out:</para>
        <para>Topic: tns1:AccessControl/Request/Timeout</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
      </section>
      <section>
        <title>Example</title>
        <para>A client that implements support for external authorization typically listens to the AccessControl/Request/&lt;subtopic&gt; events. When any of these events arrive, they are evaluated. If access is granted or denied, the ExternalAuthorization command is called on the device.</para>
      </section>
    </section>
    <section>
      <title>Status changes</title>
      <section>
        <title>General</title>
        <para>The device shall provide the status change events to inform subscribed clients when PACS entity status is changed. The device shall use the topics defined in this section associated with the respective message description.</para>
      </section>
      <section>
        <title>Access point</title>
        <para>The device that signals support for the DisableAccessPoint capability for a particular access point instance shall provide the following event whenever the state, enabled or disabled, of this access point is changed:</para>
        <para>Topic: tns1:AccessPoint/State/Enabled</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="true">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="State" Type="xs:boolean"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
      </section>
      <section>
        <title>Security level</title>
        <para>If more than one security level is supported by the device (see SupportedSecurityLevels capability), then the device shall be capable of generating the following event whenever the active security level has changed for an access point.</para>
        <para>Topic: tns1:AccessPoint/State/SecurityLevel</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="true">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
  <tt:Data>
    <tt:SimpleItemDescription Name="AuthenticationProfileToken" Type="pt:ReferenceToken"/>
    <tt:SimpleItemDescription Name="ActiveSecurityLevelToken" Type="pt:ReferenceToken"/>
  </tt:Data>
</tt:MessageDescription>]]></programlisting>
      </section>
    </section>
    <section>
      <title>Configuration changes</title>
      <section>
        <title>General</title>
        <para>Whenever configuration data has been changed, added or removed the device shall provide these events to inform subscribed clients.</para>
      </section>
      <section>
        <title>Access Point</title>
        <para>Whenever important configuration data for an access point is changed or an access point is added, the device shall provide the following event:</para>
        <para>Topic: tns1:Configuration/AccessPoint/Changed</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
        <para>Whenever an access point is removed, the device shall provide the following event:</para>
        <para>Topic: tns1: Configuration/AccessPoint/Removed</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AccessPointToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
      </section>
      <section>
        <title>Area</title>
        <para>Whenever configuration data for an area is changed or an area is added, the device shall provide the following event:</para>
        <para>Topic: tns1:Configuration/Area/Changed</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AreaToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
        <para>Whenever an area is removed, the device shall provide the following event:</para>
        <para>Topic: tns1: Configuration/Area/Removed</para>
        <programlisting><![CDATA[<tt:MessageDescription IsProperty="false">
  <tt:Source>
    <tt:SimpleItemDescription Name="AreaToken" Type="pt:ReferenceToken"/>
  </tt:Source>
</tt:MessageDescription>]]></programlisting>
      </section>
    </section>
  </chapter>
   <appendix role="examples">
    <title>Use case examples</title>
    <para>The following picture shows a scenario with multiple devices with different roles/profiles:</para>
    <figure>
      <title>Use of AccessDoor, Feedback and ExternalAuthorization</title>
      <mediaobject>
        <imageobject>
          <imagedata fileref="media/AccessControl/flow.svg" contentwidth="160mm"/>
        </imageobject>
      </mediaobject>
    </figure>
  </appendix>
  <appendix role="revhistory">
    <title>Revision History</title>
    <para />
  </appendix>
</book>
