This commit is contained in:
jfmartel 2025-02-19 18:23:12 -05:00
parent b15e0a8de3
commit 989b66940d
23 changed files with 7457 additions and 7261 deletions

8
.gitignore vendored
View File

@ -11,3 +11,11 @@
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/Terminal.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/WiFiCtrl.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/BootloaderInterface.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/BootloaderInterface.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/BootloaderProtocol.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/main.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/NetworkProtocol.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/Syslog.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/Terminal.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/WiFiCtrl.o
/AudioConsole.X/build/ChaletDuinoV2_795F512H_/production/Source/WiFiCtrl.o.d

View File

@ -8,3 +8,94 @@
#include <stdio.h>
void AudioConsoleIFExecuteMasterCommand(int SenderID, int Command, unsigned char *Data, int DataSize)
{
switch(Command)
{
case AV_RECEIVER_INTERFACE_ACK:
{
break;
}
case AV_RECEIVER_INTERFACE_GENERAL_STATUS_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_MAIN_POWER_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_ZONE2_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_MAIN_ZONE_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_SPEAKERS_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SELECT_SCENE_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_ZONE2_INPUT_RESPONSE:
{
break;
}
case AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_RESPONSE:
{
break;
}
case ETH_NETWK_DEVICE_INFO_REQUEST:
{
char data[2];
data[0] = ID_AVRECEIVER_CONSOLE_INTERFACE;
data[1] = MY_DEVICE_ADDRESS;
int PayloadSize;
unsigned char *response = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_ETHERNET_VIRTUAL,ETH_NETWK_DEVICE_INFO_RESPONSE, data,2,0, &PayloadSize);
SendAudioInterfaceData((char*)response,PayloadSize);
break;
}
case ETH_NETWK_SET_DEVICE_INFO_ACK:
{
// LTENetworInterfaceExecSM(LTE_NWI_MASTER_CONNECTED_EVENT);
break;
}
case ETH_NETWK_CONNECTION_REFUSED:
{
break;
}
case AV_RECEIVER_INTERFACE_GENERAL_STATUS_REQUEST:
case AV_RECEIVER_INTERFACE_SET_MAIN_POWER_REQUEST:
case AV_RECEIVER_INTERFACE_SET_ZONE2_REQUEST:
case AV_RECEIVER_INTERFACE_SET_MAIN_ZONE_REQUEST:
case AV_RECEIVER_INTERFACE_SET_SPEAKERS_REQUEST:
case AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_REQUEST:
case AV_RECEIVER_INTERFACE_SELECT_SCENE_REQUEST:
case AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST:
case AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST:
case AV_RECEIVER_INTERFACE_SET_ZONE2_INPUT_REQUEST:
case AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_REQUEST:
default:
{
}
}
}

View File

@ -15,11 +15,10 @@ enum eAudioConsoleIFConnectionStates
AUDIO_CONSOLE_IF_CONNECTED
};
int InitAudioConsoleInterface(void);
int AudioConsoleIFConnectToMasterCtrl(void);
int AudioConsoleInterfaceInit(void);
void TickAudioConsoleInterface(void);
void AudioConsoleInterfaceSM(int Event);
void NewAudioConsoleIFMsgReceived(char* Message);
void AudioConsoleIFExecuteMasterCommand(int SenderID, int Command, unsigned char *Data, int DataSize);
//bool SendFrame(unsigned char DestDevice,unsigned char DestAddress, unsigned char SenderDevice, unsigned char Cmd, unsigned char *Data,unsigned int Size,unsigned char Flags);

View File

@ -29,7 +29,7 @@ unsigned int BootloaderCRC = 0;
unsigned int BtldrComputedCRC = CRC_START_32;
unsigned char *BootloaderRxPtr;
unsigned char BootloaderCommand = 0;
unsigned char BootloaderState = RxHeader1;
unsigned char BootloaderState = BLRxHeader1;
const unsigned char *BootloaderDataStartPtr = &BootloaderBuffer[9];
@ -45,17 +45,17 @@ void BootloaderProtocolStateMachine(unsigned char Data)
{
switch(BootloaderState)
{
case Initialization: //Reset all pointers and data...
case BLInitialization: //Reset all pointers and data...
{
BootloaderDataSize = 0;
BootloaderBufPtr = 0;
BootloaderCommand = 0;
BootloaderCRC = 0;
BootloaderState = RxHeader1;
BootloaderState = BLRxHeader1;
BtldrComputedCRC = CRC_START_32;
break;
}
case RxHeader1: //Wait for data header...
case BLRxHeader1: //Wait for data header...
{
BootloaderHeader <<= 8;
BootloaderHeader += Data; //0xDE
@ -63,7 +63,7 @@ void BootloaderProtocolStateMachine(unsigned char Data)
if(Data == BOOTLOADER_FRAME_HEADER_1)
{
BootloaderState = RxHeader2;
BootloaderState = BLRxHeader2;
}
else
{
@ -71,7 +71,7 @@ void BootloaderProtocolStateMachine(unsigned char Data)
}
break;
}
case RxHeader2: //Wait for data header...
case BLRxHeader2: //Wait for data header...
{
BootloaderHeader <<= 8;
BootloaderHeader += Data; //0xAD
@ -79,7 +79,7 @@ void BootloaderProtocolStateMachine(unsigned char Data)
if(Data == BOOTLOADER_FRAME_HEADER_2)
{
BootloaderState = RxHeader3;
BootloaderState = BLRxHeader3;
}
else
{
@ -87,7 +87,7 @@ void BootloaderProtocolStateMachine(unsigned char Data)
}
break;
}
case RxHeader3: //Wait for data header...
case BLRxHeader3: //Wait for data header...
{
BootloaderHeader <<= 8;
BootloaderHeader += Data; //0xBE
@ -95,7 +95,7 @@ void BootloaderProtocolStateMachine(unsigned char Data)
if(Data == BOOTLOADER_FRAME_HEADER_3)
{
BootloaderState = RxHeader4;
BootloaderState = BLRxHeader4;
}
else
{
@ -103,7 +103,7 @@ void BootloaderProtocolStateMachine(unsigned char Data)
}
break;
}
case RxHeader4: //Wait for data header...
case BLRxHeader4: //Wait for data header...
{
BootloaderHeader <<= 8;
BootloaderHeader += Data; //0xEF
@ -117,44 +117,44 @@ void BootloaderProtocolStateMachine(unsigned char Data)
}
else
{
BootloaderState = RxCmd;
BootloaderState = BLRxCmd;
}
break;
}
case RxCmd:
case BLRxCmd:
{
BootloaderCommand = Data;
BootloaderState = RxPayloadSize1;
BootloaderState = BLRxPayloadSize1;
BtldrComputedCRC = update_crc_32(BtldrComputedCRC,Data);
break;
}
case RxPayloadSize1:
case BLRxPayloadSize1:
{
BootloaderDataSize = Data;
BootloaderState = RxPayloadSize2;
BootloaderState = BLRxPayloadSize2;
BtldrComputedCRC = update_crc_32(BtldrComputedCRC,Data);
break;
}
case RxPayloadSize2:
case BLRxPayloadSize2:
{
BootloaderDataSize <<= 8;
BootloaderDataSize += Data;
BtldrComputedCRC = update_crc_32(BtldrComputedCRC,Data);
BootloaderState = RxPayloadSize3;
BootloaderState = BLRxPayloadSize3;
break;
}
case RxPayloadSize3:
case BLRxPayloadSize3:
{
BootloaderDataSize <<= 8;
BootloaderDataSize += Data;
BtldrComputedCRC = update_crc_32(BtldrComputedCRC,Data);
BootloaderState = RxPayloadSize4;
BootloaderState = BLRxPayloadSize4;
break;
}
case RxPayloadSize4:
case BLRxPayloadSize4:
{
BootloaderDataSize <<= 8;
BootloaderDataSize += Data;
@ -169,15 +169,15 @@ void BootloaderProtocolStateMachine(unsigned char Data)
if(BootloaderDataSize == 0)
{
BootloaderState = RxCRC1;
BootloaderState = BLRxCRC1;
}
else
{
BootloaderState = RxPayload;
BootloaderState = BLRxPayload;
}
break;
}
case RxPayload: //Data size
case BLRxPayload: //Data size
{
*BootloaderRxPtr = Data;
BootloaderRxPtr++;
@ -187,33 +187,33 @@ void BootloaderProtocolStateMachine(unsigned char Data)
if(BootloaderDataCtr == BootloaderDataSize)
{
BootloaderState = RxCRC1;
BootloaderState = BLRxCRC1;
break;
}
break;
}
case RxCRC1: //Data size
case BLRxCRC1: //Data size
{
BootloaderCRC = Data;
BootloaderState = RxCRC2;
BootloaderState = BLRxCRC2;
break;
}
case RxCRC2: //Data size
case BLRxCRC2: //Data size
{
BootloaderCRC <<= 8;
BootloaderCRC += Data;
BootloaderState = RxCRC3;
BootloaderState = BLRxCRC3;
break;
}
case RxCRC3: //Data size
case BLRxCRC3: //Data size
{
BootloaderCRC <<= 8;
BootloaderCRC += Data;
BootloaderState = RxCRC4;
BootloaderState = BLRxCRC4;
break;
}
case RxCRC4: //Data size
case BLRxCRC4: //Data size
{
BootloaderCRC <<= 8;
BootloaderCRC += Data;
@ -257,7 +257,7 @@ void BootloaderProtocolResetStateMachine()
BootloaderBufPtr = 0;
BootloaderCommand = 0;
BootloaderCRC = 0;
BootloaderState = RxHeader1;
BootloaderState = BLRxHeader1;
BootloaderDataCtr = 0;
BtldrComputedCRC = CRC_START_32;
BootloaderRxPtr = &BootloaderBuffer[0];

View File

@ -26,23 +26,23 @@ jean-francois.martel@polymtl.ca
#define BOOTLOADER_FRAME_HEADER_4 0xEF
#define PROTOCOL_INFO_DATA_SIZE 13 //Header + Cmd + Size + CRC = 13 bytes
//State Machine states
enum States
enum BLStates
{
Initialization,
RxHeader1,
RxHeader2,
RxHeader3,
RxHeader4,
RxCmd,
RxPayloadSize1,
RxPayloadSize2,
RxPayloadSize3,
RxPayloadSize4,
RxPayload,
RxCRC1,
RxCRC2,
RxCRC3,
RxCRC4
BLInitialization,
BLRxHeader1,
BLRxHeader2,
BLRxHeader3,
BLRxHeader4,
BLRxCmd,
BLRxPayloadSize1,
BLRxPayloadSize2,
BLRxPayloadSize3,
BLRxPayloadSize4,
BLRxPayload,
BLRxCRC1,
BLRxCRC2,
BLRxCRC3,
BLRxCRC4
};
enum eBootloaderProtocolDataTransferError

View File

@ -27,8 +27,8 @@ static char MyDeviceID = ID_SPRINKLER_DEVICE;
char mFrameData[MAX_MESSAGE_SIZE+10];
ProtocolData_t mLoraProtocolData;
ProtocolData_t mLTEProtocolData;
ProtocolData_t mAudioConsoleIFProtocolData;
ProtocolData_t mMasterCtrlIFData;
void ProtocolInit(int User)
@ -36,14 +36,14 @@ void ProtocolInit(int User)
ProtocolData_t *DataStruct;
switch(User)
{
case NETWORK_PROTOCOL_USER_LORA:
case NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF:
{
DataStruct = &mLoraProtocolData;
DataStruct = &mAudioConsoleIFProtocolData;
break;
}
case NETWORK_PROTOCOL_USER_LTE:
case NETWORK_PROTOCOL_USER_MASTER_CTRL_IF:
{
DataStruct = &mLTEProtocolData;
DataStruct = &mMasterCtrlIFData;
break;
}
default:
@ -214,11 +214,11 @@ void StateMachine(unsigned char Data,ProtocolData_t *ProtocolData )
break;
}
// NewMasterMessageReceived(mRxData);
if(ProtocolData == &mLoraProtocolData)
if(ProtocolData == &mAudioConsoleIFProtocolData)
{
// ExecuteLoraMasterCommand(ProtocolData->Command,ProtocolMsgDataPtr(ProtocolData),ProtocolData->DataSize);
}
else if(ProtocolData == &mLTEProtocolData)
else if(ProtocolData == &mMasterCtrlIFData)
{
// ExecuteLTEMasterCommand(ProtocolData->SenderID, ProtocolData->Command,ProtocolMsgDataPtr(ProtocolData),ProtocolData->DataSize);
}
@ -232,20 +232,28 @@ void StateMachine(unsigned char Data,ProtocolData_t *ProtocolData )
}
}
}
void ProtocolAnalyzeBuffer(unsigned char *Data, int size, int User)
{
int i = 0;
for(i = 0; i < size; i++)
{
ProtocolAnalyzeNewData(Data[i],User);
}
}
void ProtocolAnalyzeNewData(unsigned char Data, int User)
{
ProtocolData_t *DataStruct;
switch(User)
{
case NETWORK_PROTOCOL_USER_LORA:
case NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF:
{
DataStruct = &mLoraProtocolData;
DataStruct = &mAudioConsoleIFProtocolData;
break;
}
case NETWORK_PROTOCOL_USER_LTE:
case NETWORK_PROTOCOL_USER_MASTER_CTRL_IF:
{
DataStruct = &mLTEProtocolData;
DataStruct = &mMasterCtrlIFData;
break;
}
default:

View File

@ -14,7 +14,9 @@ jean-francois.martel@polymtl.ca
#ifndef BOOTLOADERINTERFACE_H
#define BOOTLOADERINTERFACE_H
#define BOOTLOADERINTERFACE_H
#ifndef NETWORKPROTOCOL_H
#define NETWORKPROTOCOL_H
//Protocol buffer specific definitions
#include "ProtocolDefs.h"
@ -26,8 +28,8 @@ jean-francois.martel@polymtl.ca
enum eProtocolUser
{
NETWORK_PROTOCOL_USER_LORA,
NETWORK_PROTOCOL_USER_LTE
NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF,
NETWORK_PROTOCOL_USER_MASTER_CTRL_IF
};
//State Machine states
@ -91,6 +93,7 @@ unsigned char *BmpDataPtr;
void ProtocolInit(int User);
void StateMachine(unsigned char STATE, ProtocolData_t *ProtocolData);
void ProtocolAnalyzeNewData(unsigned char RxByte, int User);
void ProtocolAnalyzeBuffer(unsigned char *Data, int size, int User);
void ResetStateMachine(ProtocolData_t *ProtocolData);
void ProtocolExecCmd(void);
void ProtocolAcknowledge(unsigned char Answer,unsigned char Cmd, unsigned char Data);
@ -99,4 +102,5 @@ unsigned char ProtocolCalcCrc(unsigned char* Buffer,unsigned char size);
unsigned char ProtocolIsReceiving(void);
unsigned char *ProtocolMsgDataPtr(ProtocolData_t *ProtocolData);
#endif
#endif

View File

@ -247,16 +247,26 @@ enum AV_RECEIVER_INTERFACE_CMDS
AV_RECEIVER_INTERFACE_GENERAL_STATUS_RESPONSE,
AV_RECEIVER_INTERFACE_SET_MAIN_POWER_REQUEST,
AV_RECEIVER_INTERFACE_SET_MAIN_POWER_RESPONSE,
AV_RECEIVER_INTERFACE_SET_SPEAKERB_REQUEST,
AV_RECEIVER_INTERFACE_SET_SPEAKERB_RESPONSE,
AV_RECEIVER_INTERFACE_SET_SPEAKERA_REQUEST,
AV_RECEIVER_INTERFACE_SET_SPEAKERA_RESPONSE,
AV_RECEIVER_INTERFACE_SET_ZONE2_REQUEST,
AV_RECEIVER_INTERFACE_SET_ZONE2_RESPONSE,
AV_RECEIVER_INTERFACE_SET_MAIN_ZONE_REQUEST,
AV_RECEIVER_INTERFACE_SET_MAIN_ZONE_RESPONSE,
AV_RECEIVER_INTERFACE_SET_SPEAKERS_REQUEST,
AV_RECEIVER_INTERFACE_SET_SPEAKERS_RESPONSE,
AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_REQUEST,
AV_RECEIVER_INTERFACE_SEND_DIRECT_CMD_RESPONSE,
AV_RECEIVER_INTERFACE_SELECT_SCENE_REQUEST,
AV_RECEIVER_INTERFACE_SELECT_SCENE_RESPONSE,
AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_REQUEST,
AV_RECEIVER_INTERFACE_SET_MAIN_VOLUME_RESPONSE,
AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_REQUEST,
AV_RECEIVER_INTERFACE_SET_ZONE2_VOLUME_RESPONSE,
AV_RECEIVER_INTERFACE_SET_ZONE2_INPUT_REQUEST,
AV_RECEIVER_INTERFACE_SET_ZONE2_INPUT_RESPONSE,
AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_REQUEST,
AV_RECEIVER_INTERFACE_SET_SYNC_Z2_WITH_Z1_RESPONSE,
MAX_AV_RECEIVER_INTERFACE_CMD
};

View File

@ -12,6 +12,7 @@
#include "BootloaderProtocol.h"
#include "SPI_Flash.h"
#include "FlashMapping.h"
#include "NetworkProtocol.h"
/** IP address of host. */
@ -241,13 +242,10 @@ static void socket_cb(SOCKET sock, uint8 u8Msg, void *pvMsg)
}
else if(sock == NetworkSocket)
{
//Fwd data to Network...
recv(NetworkSocket, NetworkRxBuf, sizeof(NetworkRxBuf), 0);
}
else if(sock == BootloaderSocket)
{
//Fwd data to Network...
if(recv(BootloaderSocket, BootloaderRxBuf, sizeof(BootloaderRxBuf), 0) != 0)
{
char toto;
@ -256,6 +254,12 @@ static void socket_cb(SOCKET sock, uint8 u8Msg, void *pvMsg)
BootloaderProtocolProtocolAnalyzeNewData(pstrRecvMsg->pu8Buffer, pstrRecvMsg->s16BufferSize);
}
else if(sock == AudioConsoleIFSocket)
{
recv(AudioConsoleIFSocket, AudioConsoleIFRxBuf, sizeof(AudioConsoleIFRxBuf), 0);
ProtocolAnalyzeBuffer(AudioConsoleIFRxBuf, pstrRecvMsg->s16BufferSize,NETWORK_PROTOCOL_USER_AUDIO_CONSOLE_IF);
}
}
else //Socket must be closed.
{
@ -286,6 +290,12 @@ static void socket_cb(SOCKET sock, uint8 u8Msg, void *pvMsg)
printf("Bootloader client disconnected\n");
BootloaderDeactivateBootloader();
}
else if(sock == AudioConsoleIFSocket)
{
close(AudioConsoleIFSocket);
AudioConsoleIFSocket = -1;
printf("Audio Console Interface with Master Ctrl disconnected\n");
}
}
break;
}
@ -657,6 +667,11 @@ char GetWiFiSate()
return mWiFiState;
}
bool IsWiFiConnected()
{
return mWiFiState == WIFI_CONNECTED_STATE;
}
uint32 GetCurIPAddress()
{
return mCurIPAddress;
@ -886,6 +901,11 @@ int IsBootloaderClientConnected()
int ConnectAudioInterface()
{
if(IsWiFiConnected() == false)
{
return 0;
}
struct sockaddr_in strAddr;
AudioConsoleIFSocket = socket(AF_INET, SOCK_STREAM,0);

View File

@ -79,6 +79,7 @@ int TurnOFFWiFi();
int CloseSockets();
char GetWiFiSate();
uint32 GetCurIPAddress();
bool IsWiFiConnected();
int OpenTerminalServer();
void SendTerminalData(uint8 *data, int size);

View File

@ -13,7 +13,7 @@ build/ChaletDuinoV2_795F512H_/production/Source/WiFiCtrl.o: \
Source/Terminal.h Source/winc3400_142/driver/include/m2m_periph.h \
Source/ProtocolDefs.h Source/BoardCfg.h Source/BoardCfg_ChaletduinoV2.h \
Source/timer.h Source/BootloaderProtocol.h Source/SPI_Flash.h \
Source/FlashMapping.h
Source/FlashMapping.h Source/NetworkProtocol.h
Source/WiFiCtrl.h:
@ -58,3 +58,5 @@ Source/BootloaderProtocol.h:
Source/SPI_Flash.h:
Source/FlashMapping.h:
Source/NetworkProtocol.h:

View File

@ -1,5 +1,5 @@
#
#Tue Feb 18 14:45:13 EST 2025
#Wed Feb 19 17:06:21 EST 2025
ChaletDuinoV2_795F512H_.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
proj.dir=D\:\\Main\\PicDev\\Projets\\AudioConsole\\AudioConsole.X

View File

@ -49,13 +49,10 @@
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/WiFiCtrl.c</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/main.c</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/AudioConsoleInterface.h</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/NetworkProtocol.c</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/AudioConsoleInterface.c</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/winc3400_142/socket/source/socket.c</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/winc3400_142/socket/include/socket.h</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/ProtocolDefs.h</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/Terminal.c</file>
<file>file:/D:/Main/PicDev/Projets/AudioConsole/AudioConsole.X/Source/WiFiCtrl.h</file>
</group>
</open-files>