Skip to content

File syn_usb_midi.c

FileList > drivers > syn_usb_midi.c

Go to the source code of this file

Zero-Heap USB 2.0 MIDI Class Device Driver Implementation.

  • #include "syn_usb_midi.h"
  • #include <string.h>

Public Functions

Type Name
SYN_Status syn_usb_midi_init (SYN_USB_MIDI * midi)
Initialize USB MIDI Class Instance.
SYN_Status syn_usb_midi_parse_packet (const uint8_t raw_bytes, SYN_USB_MIDI_Packet * packet)
Parse a 4-byte raw USB MIDI packet into structured event packet.
SYN_Status syn_usb_midi_register (SYN_USB_Device * dev, SYN_USB_MIDI * midi)
Register USB MIDI class driver with USB device core.
SYN_Status syn_usb_midi_send_cc (SYN_USB_MIDI * midi, uint8_t channel, uint8_t controller, uint8_t value)
Encode and queue a Control Change (CC) MIDI message.
SYN_Status syn_usb_midi_send_note_off (SYN_USB_MIDI * midi, uint8_t channel, uint8_t note, uint8_t velocity)
Encode and queue a Note Off MIDI message.
SYN_Status syn_usb_midi_send_note_on (SYN_USB_MIDI * midi, uint8_t channel, uint8_t note, uint8_t velocity)
Encode and queue a Note On MIDI message.
SYN_Status syn_usb_midi_send_pitch_bend (SYN_USB_MIDI * midi, uint8_t channel, int16_t value)
Encode and queue a Pitch Bend MIDI message.

Public Static Functions

Type Name
SYN_Status queue_midi_packet (SYN_USB_MIDI * midi, uint8_t cin, uint8_t status, uint8_t param1, uint8_t param2)
Queue a 4-byte USB MIDI Event Packet into TX buffer.
SYN_Status usb_midi_configured_handler (void * ctx, uint8_t config)
Configured callback for USB MIDI class interface activation.
void usb_midi_data_in_handler (void * ctx, uint8_t ep)
Data IN handler callback for USB MIDI IN endpoint completion.
void usb_midi_data_out_handler (void * ctx, uint8_t ep, const uint8_t * data, uint16_t len)
Data OUT handler callback for USB MIDI OUT endpoint data.
SYN_Status usb_midi_setup_handler (void * ctx, const SYN_USB_SetupPacket * pkt, uint8_t * resp, uint16_t * rlen)
Setup handler callback for USB MIDI class setup requests.

Public Functions Documentation

function syn_usb_midi_init

Initialize USB MIDI Class Instance.

SYN_Status syn_usb_midi_init (
    SYN_USB_MIDI * midi
) 

Parameters:

  • midi Pointer to USB MIDI instance.

Returns:

SYN_OK on success, SYN_INVALID_PARAM if NULL.


function syn_usb_midi_parse_packet

Parse a 4-byte raw USB MIDI packet into structured event packet.

SYN_Status syn_usb_midi_parse_packet (
    const uint8_t raw_bytes,
    SYN_USB_MIDI_Packet * packet
) 

Parameters:

  • raw_bytes 4-byte raw buffer.
  • packet Output structured packet pointer.

Returns:

SYN_OK on success, SYN_INVALID_PARAM if NULL.


function syn_usb_midi_register

Register USB MIDI class driver with USB device core.

SYN_Status syn_usb_midi_register (
    SYN_USB_Device * dev,
    SYN_USB_MIDI * midi
) 

Parameters:

  • dev Pointer to USB device core context.
  • midi Pointer to USB MIDI instance.

Returns:

SYN_OK on success, SYN_INVALID_PARAM if NULL.


function syn_usb_midi_send_cc

Encode and queue a Control Change (CC) MIDI message.

SYN_Status syn_usb_midi_send_cc (
    SYN_USB_MIDI * midi,
    uint8_t channel,
    uint8_t controller,
    uint8_t value
) 

Parameters:

  • midi Pointer to USB MIDI instance.
  • channel MIDI Channel (0..15).
  • controller Controller Number (0..127).
  • value Controller Value (0..127).

Returns:

SYN_OK on success, SYN_INVALID_PARAM if invalid.


function syn_usb_midi_send_note_off

Encode and queue a Note Off MIDI message.

SYN_Status syn_usb_midi_send_note_off (
    SYN_USB_MIDI * midi,
    uint8_t channel,
    uint8_t note,
    uint8_t velocity
) 

Parameters:

  • midi Pointer to USB MIDI instance.
  • channel MIDI Channel (0..15).
  • note MIDI Note Number (0..127).
  • velocity Release Velocity (0..127).

Returns:

SYN_OK on success, SYN_INVALID_PARAM if invalid.


function syn_usb_midi_send_note_on

Encode and queue a Note On MIDI message.

SYN_Status syn_usb_midi_send_note_on (
    SYN_USB_MIDI * midi,
    uint8_t channel,
    uint8_t note,
    uint8_t velocity
) 

Parameters:

  • midi Pointer to USB MIDI instance.
  • channel MIDI Channel (0..15).
  • note MIDI Note Number (0..127).
  • velocity Note Velocity (0..127).

Returns:

SYN_OK on success, SYN_INVALID_PARAM if invalid.


function syn_usb_midi_send_pitch_bend

Encode and queue a Pitch Bend MIDI message.

SYN_Status syn_usb_midi_send_pitch_bend (
    SYN_USB_MIDI * midi,
    uint8_t channel,
    int16_t value
) 

Parameters:

  • midi Pointer to USB MIDI instance.
  • channel MIDI Channel (0..15).
  • value Pitch Bend value (-8192..+8191, center 0).

Returns:

SYN_OK on success, SYN_INVALID_PARAM if invalid.


Public Static Functions Documentation

function queue_midi_packet

Queue a 4-byte USB MIDI Event Packet into TX buffer.

static SYN_Status queue_midi_packet (
    SYN_USB_MIDI * midi,
    uint8_t cin,
    uint8_t status,
    uint8_t param1,
    uint8_t param2
) 

Parameters:

  • midi Pointer to USB MIDI instance.
  • cin Code Index Number (4 bits).
  • status MIDI status byte.
  • param1 MIDI parameter 1 byte.
  • param2 MIDI parameter 2 byte.

Returns:

SYN_OK on success, SYN_INVALID_PARAM or SYN_ERROR on overflow.


function usb_midi_configured_handler

Configured callback for USB MIDI class interface activation.

static SYN_Status usb_midi_configured_handler (
    void * ctx,
    uint8_t config
) 

Parameters:

  • ctx Class driver context (SYN_USB_MIDI pointer).
  • config Configuration index.

Returns:

SYN_OK on success.


function usb_midi_data_in_handler

Data IN handler callback for USB MIDI IN endpoint completion.

static void usb_midi_data_in_handler (
    void * ctx,
    uint8_t ep
) 

Parameters:

  • ctx Class driver context (SYN_USB_MIDI pointer).
  • ep Endpoint address.

function usb_midi_data_out_handler

Data OUT handler callback for USB MIDI OUT endpoint data.

static void usb_midi_data_out_handler (
    void * ctx,
    uint8_t ep,
    const uint8_t * data,
    uint16_t len
) 

Parameters:

  • ctx Class driver context (SYN_USB_MIDI pointer).
  • ep Endpoint address.
  • data Received payload bytes.
  • len Byte length of received payload.

function usb_midi_setup_handler

Setup handler callback for USB MIDI class setup requests.

static SYN_Status usb_midi_setup_handler (
    void * ctx,
    const SYN_USB_SetupPacket * pkt,
    uint8_t * resp,
    uint16_t * rlen
) 

Parameters:

  • ctx Class driver context (SYN_USB_MIDI pointer).
  • pkt Setup packet pointer.
  • resp Response payload buffer.
  • rlen Output response payload byte length pointer.

Returns:

SYN_OK on success.



The documentation for this class was generated from the following file src/syntropic/drivers/syn_usb_midi.c