TYPES#

Modules#

_MULTICHAN_SOURCE_NODE_ID_

_MULTICHAN_DEST_NODE_ID_

MULTICHAN_DEST_NODE_ID_8bit

_RECEIVE_OPTIONS_TYPE_EX_

ZAF_TRANSPORT_TX_BUFFER

ccc_pair_t

agi_profile_t

transmission_result_t

_cc_handler_input_t

_cc_handler_output_t

CC_handler_map_t

CC_handler_map_v2_t

CC_handler_map_v3_t

CC_handler_map_v4_t

zaf_cc_config_t

zaf_cc_config_entry_v1_t

zaf_cc_list_t

Enumerations#

enum
E_CMD_HANDLER_RETURN_CODE_FAIL
E_CMD_HANDLER_RETURN_CODE_HANDLED
E_CMD_HANDLER_RETURN_CODE_WORKING
E_CMD_HANDLER_RETURN_CODE_NOT_SUPPORTED
E_CMD_HANDLER_RETURN_CODE_NO_CHANGE
}
enum
RECEIVED_FRAME_STATUS_NO_SUPPORT = 0x00
RECEIVED_FRAME_STATUS_WORKING = 0x01
RECEIVED_FRAME_STATUS_FAIL = 0x02
RECEIVED_FRAME_STATUS_CANCEL = 0x03
RECEIVED_FRAME_STATUS_CC_NOT_FOUND = 0x04
RECEIVED_FRAME_STATUS_SUCCESS = 0xFF
}

Status on incoming frame.

enum
JOB_STATUS_SUCCESS = 0
JOB_STATUS_BUSY
JOB_STATUS_NO_DESTINATIONS
}

Callback status used on framework API for request/response-job.

enum
TRANSMISSION_RESULT_NOT_FINISHED
TRANSMISSION_RESULT_FINISHED
TRANSMISSION_RESULT_UNKNOWN
}

Indicates whether all transmissions are done.

Typedefs#

Properties of the received frame.

typedef ccc_pair_t

For backwards compatibility.

For backwards compatibility.

For backwards compatibility.

For backwards compatibility.

typedef void(*
cc_handler_v1_t)(RECEIVE_OPTIONS_TYPE_EX *, ZW_APPLICATION_TX_BUFFER *, uint8_t)
cc_handler_v2_t)(RECEIVE_OPTIONS_TYPE_EX *, ZW_APPLICATION_TX_BUFFER *, uint8_t, ZW_APPLICATION_TX_BUFFER *, uint8_t *)
cc_handler_v3_t)(cc_handler_input_t *, cc_handler_output_t *)
typedef void(*
basic_set_mapper_t)(ZW_APPLICATION_TX_BUFFER *p_frame)

Basic Set mapper function type.

typedef void(*
basic_get_mapper_t)(uint8_t endpoint, uint8_t *p_current_value, uint8_t *p_target_value, uint8_t *p_duration)

Basic Get mapper function type.

typedef void(*
typedef void(*
typedef uint8_t(*
lifeline_report_get_t)(cc_group_t *p_cc_pair)

A lifeline report function must take an array of CC pairs as input and return the number of CC pairs being added to the array.

Defines a type for the latest available CC handle type.

typedef void(*
ZAF_TX_Callback_t)(transmission_result_t *pTxResult)
typedef void(*
ZW_TX_Callback_t)(uint8_t txStatus, TX_STATUS_TYPE *extendedTxStatus)

Callback function triggered after completed transmission.

typedef void(*
ZW_TX_Multi_Callback_t)(uint8_t txStatus)

Callback function triggered after ZW_SendDataMulti_Bridge completed transmission.

typedef void(*

Generic Callback function type.

Eases the upgrade to future versions of the CC config struct.

Variables#

This is the first of the registered app handlers.

This marks the end of the handlers.

Macros#

#define
HANDLER_SECTION "zw_cc_handlers_v3"
#define
cc_handlers_start __start_zw_cc_handlers_v3
#define
cc_handlers_stop __stop_zw_cc_handlers_v3
#define
REGISTER_CC_V5 (cc, version, handler, basic_set_mapper, basic_get_mapper, lifeline_report_cb, flags, init_cb, reset_cb)

Registers a given command class with version, handler, etc.

#define
REGISTER_CC_V4 (cc, version, handler, basic_set_mapper, basic_get_mapper, lifeline_report_cb, flags, init_cb, reset_cb)

Registers a given command class with version, handler, etc.

#define
REGISTER_CC_V3 (cc, version, handler, basic_set_mapper, basic_get_mapper, lifeline_report_cb, flags)

Registers a given command class with version, handler, etc.

#define
REGISTER_CC_V2 (cc, version, handler)

Registers a given command class with version, handler, etc.

#define
REGISTER_CC (cc, version, handler)

Registers a given command class with version, handler, etc.

#define
ZAF_CC_CONFIG_SECTION "zw_zaf_cc_config"
#define
ZAF_CC_REGISTER_CONFIG (cc, config, index)

Registers a given command class configuration.

Enumeration Documentation#

e_cmd_handler_return_code_t#

e_cmd_handler_return_code_t
Enumerator
E_CMD_HANDLER_RETURN_CODE_FAIL

Not accepted or accepted but failed to execute. Command class returns FAIL.

E_CMD_HANDLER_RETURN_CODE_HANDLED

Accepted and executed by the command handler. Command class returns SUCCESS.

E_CMD_HANDLER_RETURN_CODE_WORKING

Accepted but is not fully executed. Command class returns WORKING.

E_CMD_HANDLER_RETURN_CODE_NOT_SUPPORTED

Command handler does not support this command. Command class returns NO_SUPPORT.

E_CMD_HANDLER_RETURN_CODE_NO_CHANGE

Accepted but device was already in final state, so no change was made. Command class returns SUCCESS.


Definition at line 90 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

received_frame_status_t#

received_frame_status_t

Status on incoming frame.

Use same values as cc_supervision_status_t

Enumerator
RECEIVED_FRAME_STATUS_NO_SUPPORT

Frame not supported.

RECEIVED_FRAME_STATUS_WORKING

Frame received successfully and timed change started.

RECEIVED_FRAME_STATUS_FAIL

Could not handle incoming frame.

RECEIVED_FRAME_STATUS_CANCEL

Don't care about status. CC or App will send the report.

RECEIVED_FRAME_STATUS_CC_NOT_FOUND

CC handler was not found in CC handler map.

RECEIVED_FRAME_STATUS_SUCCESS

Frame received successfully.


Definition at line 102 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

zaf_job_status_t#

zaf_job_status_t

Callback status used on framework API for request/response-job.

Enumerator
JOB_STATUS_SUCCESS

Job has been started.

JOB_STATUS_BUSY

Job couldn't start.

JOB_STATUS_NO_DESTINATIONS

Job couldn't start because there is no destinations.


Definition at line 144 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

TRANSMISSION_RESULT_FINISH_STATUS#

TRANSMISSION_RESULT_FINISH_STATUS

Indicates whether all transmissions are done.

Used by TRANSMISSION_RESULT.

Enumerator
TRANSMISSION_RESULT_NOT_FINISHED

Still transmitting.

TRANSMISSION_RESULT_FINISHED

Done transmitting to all nodes.

TRANSMISSION_RESULT_UNKNOWN

Reserved for callbacks from the stack as the stack supplies no valid value for the finish field.


Definition at line 160 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

Typedef Documentation#

MULTICHAN_SOURCE_NODE_ID#

typedef struct _MULTICHAN_SOURCE_NODE_ID_ MULTICHAN_SOURCE_NODE_ID

Definition at line 33 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

MULTICHAN_DEST_NODE_ID#

typedef struct _MULTICHAN_DEST_NODE_ID_ MULTICHAN_DEST_NODE_ID

Definition at line 44 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

RECEIVE_OPTIONS_TYPE_EX#

typedef struct _RECEIVE_OPTIONS_TYPE_EX_ RECEIVE_OPTIONS_TYPE_EX

Properties of the received frame.

Used mostly by command classes to prepare response to a command.


Definition at line 75 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_group_t#

typedef ccc_pair_t cc_group_t

For backwards compatibility.


Definition at line 124 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

CMD_CLASS_GRP#

typedef cc_group_t CMD_CLASS_GRP

Definition at line 125 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

AGI_PROFILE#

typedef agi_profile_t AGI_PROFILE

For backwards compatibility.


Definition at line 139 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

job_status_t#

typedef zaf_job_status_t job_status_t

For backwards compatibility.


Definition at line 154 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

JOB_STATUS#

typedef job_status_t JOB_STATUS

Definition at line 155 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

TRANSMISSION_RESULT#

typedef transmission_result_t TRANSMISSION_RESULT

For backwards compatibility.


Definition at line 186 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handler_t#

typedef void(* cc_handler_t) (void) )(void)

Definition at line 188 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handler_v1_t#

typedef received_frame_status_t(* cc_handler_v1_t) (RECEIVE_OPTIONS_TYPE_EX *, ZW_APPLICATION_TX_BUFFER *, uint8_t) )(RECEIVE_OPTIONS_TYPE_EX *, ZW_APPLICATION_TX_BUFFER *, uint8_t)

Definition at line 189 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handler_v2_t#

typedef received_frame_status_t(* cc_handler_v2_t) (RECEIVE_OPTIONS_TYPE_EX *, ZW_APPLICATION_TX_BUFFER *, uint8_t, ZW_APPLICATION_TX_BUFFER *, uint8_t *) )(RECEIVE_OPTIONS_TYPE_EX *, ZW_APPLICATION_TX_BUFFER *, uint8_t, ZW_APPLICATION_TX_BUFFER *, uint8_t *)

Definition at line 190 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handler_input_t#

typedef struct _cc_handler_input_t cc_handler_input_t

Definition at line 201 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handler_output_t#

typedef struct _cc_handler_output_t cc_handler_output_t

Definition at line 207 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handler_v3_t#

typedef received_frame_status_t(* cc_handler_v3_t) (cc_handler_input_t *, cc_handler_output_t *) )(cc_handler_input_t *, cc_handler_output_t *)

Definition at line 209 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

basic_set_mapper_t#

typedef void(* basic_set_mapper_t) (ZW_APPLICATION_TX_BUFFER *p_frame) )(ZW_APPLICATION_TX_BUFFER *p_frame)

Basic Set mapper function type.

Parameters
[out]p_frame

The frame that must have command class and command replaced by the command class that defines the Basic Set mapping function.

Use this type when defining a function for Basic Set mapping.


Definition at line 220 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

basic_get_mapper_t#

typedef void(* basic_get_mapper_t) (uint8_t endpoint, uint8_t *p_current_value, uint8_t *p_target_value, uint8_t *p_duration) )(uint8_t endpoint, uint8_t *p_current_value, uint8_t *p_target_value, uint8_t *p_duration)

Basic Get mapper function type.

Parameters
[in]endpoint

The endpoint that received the Basic Get command.

[out]p_current_value

Pointer to variable where the current value can be written.

[out]p_target_value

Pointer to variable where the target value can be written.

[out]p_duration

Pointer to variable where the duration can be written.

Use this type when defining a function for Basic Get mapping.


Definition at line 231 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_init_function_t#

typedef void(* cc_init_function_t) (void) )(void)

Definition at line 233 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_reset_function_t#

typedef void(* cc_reset_function_t) (void) )(void)

Definition at line 234 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

lifeline_report_get_t#

typedef uint8_t(* lifeline_report_get_t) (cc_group_t *p_cc_pair) )(cc_group_t *p_cc_pair)

A lifeline report function must take an array of CC pairs as input and return the number of CC pairs being added to the array.


Definition at line 240 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

CC_handler_map_latest_t#

typedef CC_handler_map_v4_t CC_handler_map_latest_t

Defines a type for the latest available CC handle type.

Users of the CC handle must use this type to avoid changes caused by a future handle version.


Definition at line 304 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

ZAF_TX_Callback_t#

typedef void(* ZAF_TX_Callback_t) (transmission_result_t *pTxResult) )(transmission_result_t *pTxResult)

Definition at line 306 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

ZW_TX_Callback_t#

typedef void(* ZW_TX_Callback_t) (uint8_t txStatus, TX_STATUS_TYPE *extendedTxStatus) )(uint8_t txStatus, TX_STATUS_TYPE *extendedTxStatus)

Callback function triggered after completed transmission.

Parameters
N/AtxStatus

Transmit complete codes

N/AextendedTxStatus

Extended Tx Status


Definition at line 313 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

ZW_TX_Multi_Callback_t#

typedef void(* ZW_TX_Multi_Callback_t) (uint8_t txStatus) )(uint8_t txStatus)

Callback function triggered after ZW_SendDataMulti_Bridge completed transmission.

Parameters
N/AtxStatus

Transmit complete codes


Definition at line 319 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

ZW_Void_Callback_t#

typedef void(* ZW_Void_Callback_t) (void) )(void)

Generic Callback function type.


Definition at line 324 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

zaf_cc_config_entry_latest_t#

typedef zaf_cc_config_entry_v1_t zaf_cc_config_entry_latest_t

Eases the upgrade to future versions of the CC config struct.


Definition at line 490 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

Variable Documentation#

__start_zw_cc_handlers_v3#

const CC_handler_map_latest_t __start_zw_cc_handlers_v3

This is the first of the registered app handlers.


Definition at line 335 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

__stop_zw_cc_handlers_v3#

const CC_handler_map_latest_t __stop_zw_cc_handlers_v3

This marks the end of the handlers.

The element after the last element. This means that this element is not valid.


Definition at line 342 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

Macro Definition Documentation#

HANDLER_SECTION#

#define HANDLER_SECTION
Value:
"zw_cc_handlers_v3"

Definition at line 331 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handlers_start#

#define cc_handlers_start
Value:
__start_zw_cc_handlers_v3

Definition at line 336 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

cc_handlers_stop#

#define cc_handlers_stop
Value:
__stop_zw_cc_handlers_v3

Definition at line 343 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

REGISTER_CC_V5#

#define REGISTER_CC_V5
Value:
static const CC_handler_map_latest_t thisHandler##cc __attribute__((aligned(4), __used__, __section__( HANDLER_SECTION ))) = {3,cc,version,(cc_handler_t)handler,basic_set_mapper,basic_get_mapper,lifeline_report_cb,flags,init_cb,reset_cb}; \
void * dummy##cc

Registers a given command class with version, handler, etc.

Every CC must register itself using the latest REGISTER_CC macro. Doing so will enable ZAF to process certain parts without the need for additional handling in the application. One example being the dispatching of command class frames to the correct command class.

Using this macro will make the linker place a variable in a specific linker section which effectively will create an array of registered command classes. ZAF uses this array to look up different information about the supported command classes.

Please see existing command classes for examples of usage.

Remarks


Definition at line 378 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

REGISTER_CC_V4#

#define REGISTER_CC_V4
Value:
static const CC_handler_map_latest_t thisHandler##cc __attribute__((aligned(4), __used__, __section__( HANDLER_SECTION ))) = {2,cc,version,(cc_handler_t)handler,basic_set_mapper,basic_get_mapper,lifeline_report_cb,flags,init_cb,reset_cb}; \
void * dummy##cc

Registers a given command class with version, handler, etc.

Every CC must register itself using the latest REGISTER_CC macro. Doing so will enable ZAF to process certain parts without the need for additional handling in the application. One example being the dispatching of command class frames to the correct command class.

Using this macro will make the linker place a variable in a specific linker section which effectively will create an array of registered command classes. ZAF uses this array to look up different information about the supported command classes.

Please see existing command classes for examples of usage.

Remarks


Definition at line 415 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

REGISTER_CC_V3#

#define REGISTER_CC_V3
Value:
static const CC_handler_map_latest_t thisHandler##cc __attribute__((aligned(4), __used__, __section__( HANDLER_SECTION ))) = {2,cc,version,(cc_handler_t)handler,basic_set_mapper,basic_get_mapper,lifeline_report_cb,flags,NULL,NULL}; \
void * dummy##cc

Registers a given command class with version, handler, etc.

Every CC must register itself using the latest REGISTER_CC macro. Doing so will enable ZAF to process certain parts without the need for additional handling in the application. One example being the dispatching of command class frames to the correct command class.

Using this macro will make the linker place a variable in a specific linker section which effectively will create an array of registered command classes. ZAF uses this array to look up different information about the supported command classes.

Please see existing command classes for examples of usage.

Remarks


Definition at line 449 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

REGISTER_CC_V2#

#define REGISTER_CC_V2
Value:
static const CC_handler_map_latest_t thisHandler##cc __attribute__((aligned(4), __used__, __section__( HANDLER_SECTION ))) = {2,cc,version,(cc_handler_t)handler,NULL,NULL,NULL,0,NULL,NULL}; \
void * dummy##cc

Registers a given command class with version, handler, etc.

Requires a CC handler matching cc_handler_v2_t.


Definition at line 458 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

REGISTER_CC#

#define REGISTER_CC
Value:
static const CC_handler_map_latest_t thisHandler##cc __attribute__((aligned(4), __used__, __section__( HANDLER_SECTION ))) = {1,cc,version,(cc_handler_t)handler,NULL,NULL,NULL,0,NULL,NULL}; \
void * dummy##cc

Registers a given command class with version, handler, etc.

Requires a CC handler matching cc_handler_t.


Definition at line 467 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

ZAF_CC_CONFIG_SECTION#

#define ZAF_CC_CONFIG_SECTION
Value:
"zw_zaf_cc_config"

Definition at line 495 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h

ZAF_CC_REGISTER_CONFIG#

#define ZAF_CC_REGISTER_CONFIG
Value:
static const zaf_cc_config_entry_latest_t cc_config##index##cc __attribute__((aligned(4), __used__, __section__(ZAF_CC_CONFIG_SECTION))) = { cc, (zaf_cc_config_t *) config }; \
void * cc_register_config##index##cc

Registers a given command class configuration.


Definition at line 505 of file /mnt/raid/workspaces/ws.Mh9rMZz8x/overlay/gsdk/protocol/z-wave/ZAF/ApplicationUtilities/ZAF_types.h