Compartir a través de


Función SerCx2CustomReceiveCreate (sercx.h)

El método SerCx2CustomReceiveCreate crea un objeto de recepción personalizado, que la versión 2 de la extensión del marco de trabajo serie (SerCx2) usa para leer los datos recibidos del controlador serie mediante un mecanismo de transferencia de datos personalizado.

Sintaxis

NTSTATUS SerCx2CustomReceiveCreate(
  [in]  WDFDEVICE                     Device,
  [in]  PSERCX2_CUSTOM_RECEIVE_CONFIG CustomReceiveConfig,
  [in]  PWDF_OBJECT_ATTRIBUTES        Attributes,
  [out] SERCX2CUSTOMRECEIVE           *CustomReceive
);

Parámetros

[in] Device

Un controlador WDFDEVICE para el objeto de dispositivo de marco que representa el controlador serie. El controlador del controlador serie creó este objeto en su función de devolución de llamada EvtDriverDeviceAdd . Para obtener más información, vea SerCx2InitializeDevice.

[in] CustomReceiveConfig

Puntero a una estructura de SERCX2_CUSTOM_RECEIVE_CONFIG . Antes de llamar a este método, el autor de la llamada debe llamar a la función SERCX2_CUSTOM_RECEIVE_CONFIG_INIT para inicializar la estructura. Esta estructura contiene punteros a un conjunto de rutinas de devolución de llamada de eventos implementadas por el controlador de controlador serie. SerCx2 llama a estas funciones para realizar transacciones de recepción personalizadas.

[in] Attributes

Puntero a una estructura de WDF_OBJECT_ATTRIBUTES que describe los atributos que se van a asignar al nuevo objeto de recepción personalizado. Antes de llamar a este método, el autor de la llamada debe llamar a la función WDF_OBJECT_ATTRIBUTES_INIT para inicializar la estructura. Este parámetro es opcional y se puede especificar como WDF_NO_OBJECT_ATTRIBUTES si el controlador del controlador serie no necesita asignar atributos al objeto . Para obtener más información, vea la sección Comentarios.

[out] CustomReceive

Puntero a una ubicación en la que este método escribe un identificador de SERCX2CUSTOMRECEIVE en el objeto de recepción personalizado recién creado. SerCx2 y el controlador de controlador serie usan este identificador en llamadas posteriores para hacer referencia a este objeto.

Valor devuelto

Este método devuelve STATUS_SUCCESS si la llamada se realiza correctamente. Entre los posibles valores devueltos de error se incluyen los siguientes códigos de estado.

Código devuelto Descripción
STATUS_INVALID_DEVICE_REQUEST
Ya existe un objeto de recepción personalizada de una llamada a SerCx2CustomReceiveCreate anterior; o existe un objeto system-DMA-receive de una llamada a SerCx2CustomReceiveCreate anterior; o existe un objeto system-DMA-transmit a partir de una llamada anterior a SerCx2CustomTransmitCreate ; o SerCx2PioReceiveCreate aún no se ha llamado a para crear un objeto PIO-receive.
STATUS_INVALID_PARAMETER
Un valor de parámetro no es válido.
STATUS_INFO_LENGTH_MISMATCH
El valortamaño de configuración-> no es igual a sizeof(SERCX2_CUSTOM_RECEIVE_CONFIG).
STATUS_INSUFFICIENT_RESOURCES
Hay recursos insuficientes disponibles para crear el objeto de recepción personalizada.

Comentarios

El controlador de controlador de serie llama a este método para crear un objeto de recepción personalizado. SerCx2 usa este objeto para realizar transacciones de recepción personalizadas, que son transacciones que usan un mecanismo de transferencia de datos personalizado para leer los datos recibidos por el controlador serie.

Un controlador de controlador serie debe llamar correctamente a los métodos SerCx2InitializeDevice y SerCx2PioReceiveCreate antes de llamar a SerCx2CustomReceiveCreate.

Antes de llamar a SerCx2CustomReceiveCreate, el controlador de controlador serie debe llamar a la función SERCX2_CUSTOM_RECEIVE_CONFIG_INIT para inicializar la estructura de SERCX2_CUSTOM_RECEIVE_CONFIG a la que apunta CustomReceiveConfig. Esta función establece los siguientes miembros de la estructura en cero:

  • Alineación
  • MinimumTransactionLength
  • MaximumTransactionLength
  • MinimumTransferUnit
  • Exclusivo
Si es necesario, el controlador de controlador serie puede establecer cualquiera de estos miembros en valores distintos de cero después de que se devuelva la función de inicialización. Sin embargo, para mayor comodidad, SerCx2CustomReceiveCreate usa los siguientes valores predeterminados si estos miembros son cero:
  • Si Alignment es cero, SerCx2 establece el valor de alineación de datos en uno, lo que significa que el búfer de lectura puede iniciarse en un límite de bytes arbitrario en la memoria.
  • Si MinimumTransactionLength es cero, SerCx2 establece la longitud mínima de la transacción en un byte.
  • Si MaximumTransactionLength es cero, SerCx2 establece la longitud máxima de la transacción en ((ULONG)-1).
  • Si MinimumTransferUnit es cero, SerCx2 establece la unidad de transferencia mínima en un byte.
  • Si Exclusive es cero (FALSE), el modo exclusivo está deshabilitado.
Si el controlador de llamada establece Exclusive en TRUE, los miembros MinimumTransferUnit, Alignment y MinimumTransactionLength deben ser cero. Para obtener más información, consulte SERCX2_CUSTOM_RECEIVE_CONFIG.

Como opción, un controlador de controlador de serie puede usar el parámetro Attributes para crear un contexto para el objeto de recepción personalizada y proporcionar punteros a las funciones EvtCleanupCallback y EvtDestroyCallback a las que se llama para preparar el objeto para su eliminación. Para obtener más información, consulte WDF_OBJECT_ATTRIBUTES.

Si el parámetro Attributes apunta a una estructura de WDF_OBJECT_ATTRIBUTES , el autor de la llamada no debe sobrescribir los valores que escribe la función de inicialización WDF_OBJECT_ATTRIBUTES_INIT en los miembros ParentObject, ExecutionLevel y SynchronizationScope de esta estructura.

Para obtener más información sobre cómo crear objetos de recepción personalizados, vea SERCX2CUSTOMRECEIVE. Para obtener más información sobre las transacciones de recepción personalizadas, vea SerCx2 Custom-Receive Transactions.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 8.1.
Plataforma de destino Universal
Encabezado sercx.h
IRQL PASSIVE_LEVEL

Consulte también

EvtCleanupCallback

EvtDestroyCallback

EvtDriverDeviceAdd

SERCX2CUSTOMRECEIVE

SERCX2_CUSTOM_RECEIVE_CONFIG

SERCX2_CUSTOM_RECEIVE_CONFIG_INIT

SerCx2InitializeDevice

SerCx2PioReceiveCreate

WDF_OBJECT_ATTRIBUTES

WDF_OBJECT_ATTRIBUTES_INIT