mirror of
https://github.com/felis/USB_Host_Shield_2.0.git
synced 2024-03-22 11:31:26 +01:00
160 lines
4.7 KiB
C
160 lines
4.7 KiB
C
|
/* Copyright (C) 2021 Aran Vink. All rights reserved.
|
||
|
|
||
|
This software may be distributed and modified under the terms of the GNU
|
||
|
General Public License version 2 (GPL2) as published by the Free Software
|
||
|
Foundation and appearing in the file GPL2.TXT included in the packaging of
|
||
|
this file. Please note that GPL2 Section 2[b] requires that all works based
|
||
|
on this software must also be made publicly available under the terms of
|
||
|
the GPL2 ("Copyleft").
|
||
|
|
||
|
Contact information
|
||
|
-------------------
|
||
|
|
||
|
Aran Vink
|
||
|
e-mail : aranvink@gmail.com
|
||
|
*/
|
||
|
|
||
|
#ifndef _ambxusb_h_
|
||
|
#define _ambxusb_h_
|
||
|
|
||
|
#include "Usb.h"
|
||
|
#include "AMBXEnums.h"
|
||
|
|
||
|
/* AMBX data taken from descriptors */
|
||
|
#define AMBX_EP_MAXPKTSIZE 40 // max size for data via USB
|
||
|
|
||
|
/* Names we give to the 3 AMBX but note only one is actually used (output) */
|
||
|
#define AMBX_CONTROL_PIPE 0
|
||
|
#define AMBX_OUTPUT_PIPE 1
|
||
|
#define AMBX_INPUT_PIPE 2
|
||
|
|
||
|
/* PID and VID of the different devices */
|
||
|
#define AMBX_VID 0x0471 // Philips
|
||
|
#define AMBX_PID 0x083F // AMBX Controller
|
||
|
|
||
|
/* Endpoint addresses */
|
||
|
#define AMBX_ENDPOINT_IN 0x81
|
||
|
#define AMBX_ENDPOINT_OUT 0x02
|
||
|
#define AMBX_ENDPOINT_PNP 0x83
|
||
|
|
||
|
/* Output payload constants */
|
||
|
#define AMBX_PREFIX_COMMAND 0xA1
|
||
|
#define AMBX_SET_COLOR_COMMAND 0x03
|
||
|
|
||
|
/* LEFT/RIGHT lights. Normally placed adjecent to your screen. */
|
||
|
#define AMBX_LIGHT_LEFT 0x0B
|
||
|
#define AMBX_LIGHT_RIGHT 0x1B
|
||
|
|
||
|
/* Wallwasher lights. Normally placed behind your screen. */
|
||
|
#define AMBX_LIGHT_WW_LEFT 0x2B
|
||
|
#define AMBX_LIGHT_WW_CENTER 0x3B
|
||
|
#define AMBX_LIGHT_WW_RIGHT 0x4B
|
||
|
|
||
|
#define AMBX_LIGHT_COMMAND_BUFFER_SIZE 6
|
||
|
|
||
|
|
||
|
#define AMBX_MAX_ENDPOINTS 3
|
||
|
|
||
|
/**
|
||
|
* This class implements support for AMBX
|
||
|
* One can only set the color of the bulbs, no other accesories like rumble pad, fans, etc. are supported
|
||
|
*
|
||
|
*/
|
||
|
class AMBX : public USBDeviceConfig {
|
||
|
public:
|
||
|
/**
|
||
|
* Constructor for the AMBX class.
|
||
|
* @param pUsb Pointer to USB class instance.
|
||
|
*/
|
||
|
AMBX(USB *pUsb);
|
||
|
|
||
|
/** @name USBDeviceConfig implementation */
|
||
|
/**
|
||
|
* Initialize the AMBX Controller.
|
||
|
* @param parent Hub number.
|
||
|
* @param port Port number on the hub.
|
||
|
* @param lowspeed Speed of the device.
|
||
|
* @return 0 on success.
|
||
|
*/
|
||
|
uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
|
||
|
/**
|
||
|
* Release the USB device.
|
||
|
* @return 0 on success.
|
||
|
*/
|
||
|
uint8_t Release();
|
||
|
/**
|
||
|
* Poll the USB Input endpoins and run the state machines.
|
||
|
* @return 0 on success.
|
||
|
*/
|
||
|
uint8_t Poll();
|
||
|
|
||
|
/**
|
||
|
* Get the device address.
|
||
|
* @return The device address.
|
||
|
*/
|
||
|
virtual uint8_t GetAddress() {
|
||
|
return bAddress;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Used by the USB core to check what this driver support.
|
||
|
* @param vid The device's VID.
|
||
|
* @param pid The device's PID.
|
||
|
* @return Returns true if the device's VID and PID matches this driver.
|
||
|
*/
|
||
|
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid) {
|
||
|
return (vid == AMBX_VID && (pid == AMBX_PID));
|
||
|
};
|
||
|
/**@}*/
|
||
|
|
||
|
/**
|
||
|
* Use this to set the Color using RGB values.
|
||
|
* @param r,g,b RGB value.
|
||
|
*/
|
||
|
void setLight(uint8_t ambx_light, uint8_t r, uint8_t g, uint8_t b);
|
||
|
/**
|
||
|
* Use this to set the color using the predefined colors in ::ColorsEnum.
|
||
|
* @param color The desired color.
|
||
|
*/
|
||
|
void setLight(AmbxLightsEnum ambx_light, AmbxColorsEnum color);
|
||
|
|
||
|
/**
|
||
|
* Use this to set the color using the predefined colors in ::ColorsEnum.
|
||
|
* @param color The desired color.
|
||
|
*/
|
||
|
void setAllLights(AmbxColorsEnum color);
|
||
|
|
||
|
/**
|
||
|
* Used to call your own function when the controller is successfully initialized.
|
||
|
* @param funcOnInit Function to call.
|
||
|
*/
|
||
|
void attachOnInit(void (*funcOnInit)(void)) {
|
||
|
pFuncOnInit = funcOnInit;
|
||
|
};
|
||
|
/**@}*/
|
||
|
|
||
|
bool AMBXConnected;
|
||
|
|
||
|
protected:
|
||
|
/** Pointer to USB class instance. */
|
||
|
USB *pUsb;
|
||
|
/** Device address. */
|
||
|
uint8_t bAddress;
|
||
|
/** Endpoint info structure. */
|
||
|
EpInfo epInfo[AMBX_MAX_ENDPOINTS];
|
||
|
|
||
|
private:
|
||
|
/**
|
||
|
* Called when the AMBX controller is successfully initialized.
|
||
|
*/
|
||
|
void onInit();
|
||
|
void (*pFuncOnInit)(void); // Pointer to function called in onInit()
|
||
|
|
||
|
uint8_t writeBuf[AMBX_EP_MAXPKTSIZE]; // General purpose buffer for output data
|
||
|
|
||
|
/* Private commands */
|
||
|
void Light_Command(uint8_t *data, uint16_t nbytes);
|
||
|
};
|
||
|
|
||
|
#endif
|