KT24-1110_65E-HA-651B/include_lib/system/apple_dock/iAP2.h

172 lines
4.8 KiB
C
Raw Permalink Normal View History

2024-11-10 10:44:17 +00:00
#ifndef _IAP2_H_
#define _IAP2_H_
#include "generic/typedef.h"
#define iAP2_LINK_PACKET_HEADER_LEN 9
#define iAP2_MESSAGE_LEN 6
#define iAP2_MESSAGE_PARAMETERS_LEN 4
#define MAX_PACKET_PAYLOAD 0x65525L //means 65535
#define IAP2_START_OF_PACKET 0xFF5AL
#define START_OF_MESSAGE 0x4040L
#define PACKET_TOTAL_LEN(X) (iAP2_LINK_PACKET_HEADER_LEN+sizeof(X)+0x1)
#define MESSAGE_TOTAL_LEN(X) (sizeof(X))
///IAP2 HID Usage ID
#define IAP2_HID_PLAY 0xB0
#define IAP2_HID_PAUSE 0xB1
#define IAP2_HID_NEXT 0xB5
#define IAP2_HID_PRE 0xB6
#define IAP2_HID_SHUFFLE 0xB9
#define IAP2_HID_REPEAT 0xBC
#define IAP2_HID_PP 0xCD
#define IAP2_HID_MUTE 0xE2
#define IAP2_HID_VOLUP 0xE9
#define IAP2_HID_VOLDOWN 0xEA
///APPLE HID Control bit
#define APPLE_HID_VOLUP BIT(0)
#define APPLE_HID_VOLDOWN BIT(1)
#define APPLE_HID_PP BIT(2)
// #define APPLE_HID_SHUFFLE BIT(2)
#define APPLE_HID_REPEAT BIT(3)
#define APPLE_HID_NEXT BIT(4)
#define APPLE_HID_PRE BIT(5)
#define APPLE_HID_PLAY BIT(6)
#define APPLE_HID_PAUSE BIT(7)
//Name--can alter
#define IAP2_ACCESSORY_NAME 'D','o','c','k',' ','s','p','e','a','k','e','r','\0'
#define IAP2_ACCESSORY_NAME_LEN sizeof("Dock speaker")
//ModelIdentifier(模式描述符)--can alter
#define IAP2_ACCESSORY_MODEL_IDENTIFIER 'I','P','D','L','I','1','3','\0'
#define IAP2_ACCESSORY_MODEL_IDENTIFIER_LEN sizeof("IPDLI13")
//Manufacturer(制造商)--can alter
#define IAP2_ACCESSORY_MANUFACTURER 'I',' ','w','a','n','t',' ','i','t','\0'
#define IAP2_ACCESSORY_MANUFACTURER_LEN sizeof("I want it")
//SerialNumber(序列号)--can alter
#define IAP2_ACCESSORY_SERIALNUMBER 'i','A','P',' ','I','n','t','e','r','f','a','c','e','\0'
#define IAP2_ACCESSORY_SERIALNUMBER_LEN sizeof("iAP Interface")
//FirmwareVersion(固件版本)--can alter
#define IAP2_ACCESSORY_FIRMWARE_VER '1','.','0','.','0','\0'
#define IAP2_ACCESSORY_FIRMWARE_VER_LEN sizeof("1.0.0")
//HardwareVersion(硬件版本)--can alter
#define IAP2_ACCESSORY_HARDWARE_VER '1','.','0','.','0','\0'
#define IAP2_ACCESSORY_HARDWARE_VER_LEN sizeof("1.0.0")
//CurrentLanguage--can not alter
#define IAP2_CUR_LANGUAGE 'e','n','\0'
#define IAP2_CUR_LANGUAGE_LEN sizeof("en")
//SupportedLanguage--can not alter
#define IAP2_SUP_LANGUAGE 'e','n','\0'
#define IAP2_SUP_LANGUAGE_LEN sizeof("en")
//USB device transport Component
#define IAP2_TRANSPORT_NAME 'i','A','P','2','H','\0'
#define IAP2_TRANSPORT_NAME_LEN sizeof("iAP2H")
//iAP2HIDComponent
#define IAP2_HID_IDENTIFIER 1
#define IAP2_HID_NAME 'R','e','m','o','t','e','\0'
#define IAP2_HID_NAME_LEN sizeof("Remote")
///variable
typedef enum {
iAP2_SLP = 3,
iAP2_RST,
iAP2_EAK,
iAP2_ACK,
iAP2_SYN,
} iAP2_CONTROL_BYTE;
typedef enum {
//Header
STARTOFPACKET = 0,
PACKETLENGTH = 2,
CONTROLBYTE = 4,
PACKETSEQUENCENUMBER,
PACKETACKNUMBER,
SESSIONIDENTIFIER,
HEADERCHECKSUM,
//Payload
LINKVERSION,
MAXNUMOFOUTSTANDINGPKTS,
MAXPKTLENGTH = 11,
RETRANSMISSIONTIMEOUT = 13,
CUMULATIVEASKTIMEOUT = 15,
MAXNUMOFRETRANSMISSIONS = 17,
MAXCUMULATIVEACK,
STARTOFMESSAGE = 9,
MESSAGELENGTH = 11,
MESSAGEID = 13,
} iAP2_PKT_INDEX;
typedef enum {
CONTROL_SESSION = 0,
FILE_TRANSFER_SESSION,
EXTERNAL_ACCESSORY_SESSION,
} iAP2_SESSION_TYPE;
typedef union _U16_U8 {
u16 wWord;
u8 bByte[2];
} U16_U8;
typedef struct _iAP2_LINK_PACKET_HEADER {
U16_U8 sStartofPacket;
U16_U8 sPacketLength;
u8 bControlByte;
u8 bPacketSequenceNum;
u8 bPacketAckNum;
u8 bSessionIdentifier;
u8 bHeaderChecksum;
} iAP2_LINK_PACKET_HEADER;
typedef struct _iAP2_SESSION {
u8 bSessionIdentifier;
u8 bSessionType;
u8 bSessionVersion;
} iAP2_SESSION;
typedef struct _iAP2_LINK_PACKET_PAYLOAD {
u8 bLinkVersion; //both device & accessory must agree on !!!
u8 bMaxNumofOutstandingPkts;
U16_U8 sMaxPktLength;
U16_U8 sRetransmissionTimeout; //both device & accessory must agree on !!!
U16_U8 sCumulativeAckTimeout; //both device & accessory must agree on !!!
u8 bMaxNumofRetransmissions; //both device & accessory must agree on !!!
u8 bMaxCumulativeAck; //both device & accessory must agree on !!!
} iAP2_LINK_PACKET_PAYLOAD;
typedef struct _iAP2_MESSAGE {
U16_U8 sStartofMessage;
U16_U8 sMessageLength;
U16_U8 sMessageID;
} iAP2_MESSAGE;
typedef struct _iAP2_MESSAGE_PARAMETERS {
u16 wParameterLength;
u16 wParameterId;
} iAP2_MESSAGE_PARAMETERS;
///inside call
///outside call
bool iAP2_link(void);
void iap2_hid_key(u16 key);
#endif /* _IAP2_H_ */