71f672b98a
Test: manual Change-Id: Ic181008427e6e81106d867cc3a70deef8c591841
183 lines
5.1 KiB
C
183 lines
5.1 KiB
C
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef ANDROID_MEDIA_MIDI_H_
|
|
#define ANDROID_MEDIA_MIDI_H_
|
|
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <sys/types.h>
|
|
|
|
#include <utils/Errors.h>
|
|
|
|
using android::status_t;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct AMIDI_Device;
|
|
struct AMIDI_InputPort;
|
|
struct AMIDI_OutputPort;
|
|
|
|
#define AMIDI_INVALID_HANDLE NULL
|
|
|
|
enum {
|
|
AMIDI_OPCODE_DATA = 1,
|
|
AMIDI_OPCODE_FLUSH = 2,
|
|
AMIDI_PACKET_SIZE = 1024, /* !!! Currently MidiPortImpl.MAX_PACKET_SIZE !!! */
|
|
AMIDI_PACKET_OVERHEAD = 9,
|
|
AMIDI_BUFFER_SIZE = AMIDI_PACKET_SIZE - AMIDI_PACKET_OVERHEAD
|
|
/* !!! TBD, currently MidiPortImpl.MAX_PACKET_DATA_SIZE !!! */
|
|
};
|
|
|
|
typedef struct {
|
|
uint32_t opcode;
|
|
uint8_t buffer[AMIDI_BUFFER_SIZE];
|
|
size_t len;
|
|
int64_t timestamp;
|
|
} AMIDI_Message;
|
|
|
|
enum {
|
|
AMIDI_DEVICE_TYPE_USB = 1,
|
|
AMIDI_DEVICE_TYPE_VIRTUAL = 2,
|
|
AMIDI_DEVICE_TYPE_BLUETOOTH = 3
|
|
};
|
|
|
|
typedef struct {
|
|
int32_t type;
|
|
int32_t uid;
|
|
int32_t isPrivate;
|
|
int32_t inputPortCount;
|
|
int32_t outputPortCount;
|
|
} AMIDI_DeviceInfo;
|
|
|
|
/*
|
|
* Device API
|
|
*/
|
|
/*
|
|
* Retrieves information for the native MIDI device.
|
|
*
|
|
* device The Native API token for the device.
|
|
* deviceInfoPtr Receives the associated device info.
|
|
*
|
|
* Returns OK or a (negative) error code.
|
|
*/
|
|
status_t AMIDI_getDeviceInfo(AMIDI_Device *device, AMIDI_DeviceInfo *deviceInfoPtr);
|
|
|
|
/*
|
|
* API for receiving data from the Output port of a device.
|
|
*/
|
|
/*
|
|
* Opens the output port.
|
|
*
|
|
* device Identifies the device.
|
|
* portNumber Specifies the zero-based port index on the device to open.
|
|
* outputPortPtr Receives the native API port identifier of the opened port.
|
|
*
|
|
* Returns OK, or a (negative) error code.
|
|
*/
|
|
status_t AMIDI_openOutputPort(AMIDI_Device *device, int portNumber,
|
|
AMIDI_OutputPort **outputPortPtr);
|
|
|
|
/*
|
|
* Receives any pending MIDI messages (up to the specified maximum number of messages).
|
|
*
|
|
* outputPort Identifies the port to receive messages from.
|
|
* messages Points to an array (size maxMessages) to receive the MIDI messages.
|
|
* maxMessages The number of messages allocated in the messages array.
|
|
*
|
|
* Returns the number of messages received, or a (negative) error code.
|
|
*/
|
|
ssize_t AMIDI_receive(AMIDI_OutputPort *outputPort, AMIDI_Message *messages, ssize_t maxMessages);
|
|
|
|
/*
|
|
* Closes the output port.
|
|
*
|
|
* outputPort The native API port identifier of the port.
|
|
*
|
|
* Returns OK, or a (negative) error code.
|
|
*/
|
|
status_t AMIDI_closeOutputPort(AMIDI_OutputPort *outputPort);
|
|
|
|
/*
|
|
* API for sending data to the Input port of a device.
|
|
*/
|
|
/*
|
|
* Opens the input port.
|
|
*
|
|
* device Identifies the device.
|
|
* portNumber Specifies the zero-based port index on the device to open.
|
|
* inputPortPtr Receives the native API port identifier of the opened port.
|
|
*
|
|
* Returns OK, or a (negative) error code.
|
|
*/
|
|
status_t AMIDI_openInputPort(AMIDI_Device *device, int portNumber, AMIDI_InputPort **inputPortPtr);
|
|
|
|
/*
|
|
* Returns the maximum number of bytes that can be received in a single MIDI message.
|
|
*/
|
|
ssize_t AMIDI_getMaxMessageSizeInBytes(AMIDI_InputPort *inputPort);
|
|
|
|
/*
|
|
* Sends data to the specified input port.
|
|
*
|
|
* inputPort The native API identifier of the port to send data to.
|
|
* buffer Points to the array of bytes containing the data to send.
|
|
* numBytes Specifies the number of bytes to write.
|
|
*
|
|
* Returns The number of bytes sent or a (negative) error code.
|
|
*/
|
|
ssize_t AMIDI_send(AMIDI_InputPort *inputPort, uint8_t *buffer, ssize_t numBytes);
|
|
|
|
/*
|
|
* Sends data to the specified input port with a timestamp.
|
|
*
|
|
* inputPort The native API identifier of the port to send data to.
|
|
* buffer Points to the array of bytes containing the data to send.
|
|
* numBytes Specifies the number of bytes to write.
|
|
* timestamp The time stamp to associate with the sent data.
|
|
*
|
|
* Returns The number of bytes sent or a (negative) error code.
|
|
*/
|
|
ssize_t AMIDI_sendWithTimestamp(AMIDI_InputPort *inputPort, uint8_t *buffer,
|
|
ssize_t numBytes, int64_t timestamp);
|
|
|
|
/*
|
|
* Sends a message with a 'MIDI flush command code' to the specified port.
|
|
*
|
|
* inputPort The native API identifier of the port to send the flush message to.
|
|
*
|
|
* Returns OK, or a (negative) error code.
|
|
*/
|
|
status_t AMIDI_flush(AMIDI_InputPort *inputPort);
|
|
|
|
/*
|
|
* Closes the input port.
|
|
*
|
|
* inputPort The native API port identifier of the port.
|
|
*
|
|
*
|
|
* Returns OK, or a (negative) error code.
|
|
*/
|
|
status_t AMIDI_closeInputPort(AMIDI_InputPort *inputPort);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ANDROID_MEDIA_MIDI_H_ */
|