Raspberry Vanilla IPMT

This commit is contained in:
2025-07-22 08:43:20 +07:00
commit 4247fc915d
6460 changed files with 146446 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := APKMirror
LOCAL_SRC_FILES := apkmirror_1.4.2.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
# LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_OPTIONAL_USES_LIBRARIES := androidx.window.extensions androidx.window.sidecar android.ext.adservices
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := APKPure
LOCAL_SRC_FILES := APKPure_v3.19.73.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
# LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_OPTIONAL_USES_LIBRARIES := org.apache.http.legacy androidx.window.extensions androidx.window.sidecar
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := AuroraStore
LOCAL_SRC_FILES := aurora-store-4-4-4.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
# LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_OPTIONAL_USES_LIBRARIES := androidx.window.extensions androidx.window.sidecar
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

Binary file not shown.

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := B4ABridge
LOCAL_SRC_FILES := B4ABridge.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
#LOCAL_PRIVILEGED_MODULE = true
#LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

Binary file not shown.

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := EthernetConfigurator
LOCAL_SRC_FILES := app-release.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
# LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
#LOCAL_OPTIONAL_USES_LIBRARIES := androidx.window.extensions androidx.window.sidecar
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

Binary file not shown.

View File

@@ -0,0 +1,16 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE := KernelSU
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := platform
#LOCAL_CERTIFICATE := PRESIGNED
#LOCAL_PRIVILEGED_MODULE := true
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/custom/KernelSU
LOCAL_SRC_FILES := KernelSU_v0.9.4_11838-release.apk
include $(BUILD_PREBUILT)

Binary file not shown.

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := Notepad
LOCAL_SRC_FILES := Notepad.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
#LOCAL_PRIVILEGED_MODULE = true
# LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_OPTIONAL_USES_LIBRARIES := androidx.window.extensions androidx.window.sidecar
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

Binary file not shown.

View File

@@ -0,0 +1,16 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := main.c data.c ipconfig.c
LOCAL_CFLAGS += -Wall -Wno-unused-parameter -Wextra
LOCAL_SHARED_LIBRARIES := \
libcutils \
liblog \
libandroidfw \
libutils \
libbinder \
libjsoncpp
LOCAL_MODULE := ipconfigstore
include $(BUILD_EXECUTABLE)

View File

@@ -0,0 +1,383 @@
#define _GNU_SOURCE
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "data.h"
uint16_t convertBigEndianUInt16(uint16_t value)
{
union { uint16_t value; unsigned char data[2]; } aux = { 0x4142 };
if (aux.data[0] == 0x41)
{
return value;
}
aux.data[0] = (value >> 8) & 0xff;
aux.data[1] = value & 0xff;
return aux.value;
}
uint32_t convertBigEndianUInt32(uint32_t value)
{
union { uint32_t value; unsigned char data[4]; } aux = { 0x41424344 };
if (aux.data[0] == 0x41)
{
return value;
}
aux.data[0] = (value >> 24) & 0xff;
aux.data[1] = (value >> 16) & 0xff;
aux.data[2] = (value >> 8) & 0xff;
aux.data[3] = value & 0xff;
return aux.value;
}
bool readPackedLink(FILE *stream, struct IPConfigLink *link)
{
char **address = &link->address;
uint32_t *prefix = &link->prefix;
if (!readPackedString(stream, address))
{
return false;
}
if (!readPackedUInt32(stream, prefix))
{
return false;
}
return true;
}
bool readPackedRoute(FILE *stream, struct IPConfigRoute *route)
{
char **destinationAddress = &route->destination.address;
uint32_t *destinationPrefix = &route->destination.prefix;
char **nextHop = &route->nextHop;
uint32_t haveDestination = 0;
uint32_t haveNextHop = 0;
if (!readPackedUInt32(stream, &haveDestination))
{
return false;
}
if (haveDestination)
{
if (!readPackedString(stream, destinationAddress))
{
return false;
}
if (!readPackedUInt32(stream, destinationPrefix))
{
return false;
}
}
if (!readPackedUInt32(stream, &haveNextHop))
{
return false;
}
if (haveNextHop)
{
if (!readPackedString(stream, nextHop))
{
return false;
}
}
return true;
}
bool readPackedString(FILE *stream, char **string)
{
uint16_t length = 0;
if (!readPackedUInt16(stream, &length))
{
return false;
}
while (length == 0)
{
if (fseek(stream, sizeof(uint16_t), SEEK_CUR) == -1)
{
return false;
}
if (!readPackedUInt16(stream, &length))
{
return false;
}
}
*string = calloc(1, length + 1);
if (!*string)
{
return false;
}
if (fread(*string, length, 1, stream) != 1)
{
if (!feof(stream))
{
free(*string);
return false;
}
}
return true;
}
bool readPackedUInt16(FILE *stream, uint16_t *value)
{
uint16_t buffer = 0;
if (fread(&buffer, sizeof buffer, 1, stream) != 1)
{
return false;
}
*value = convertBigEndianUInt16(buffer);
return true;
}
bool readPackedUInt32(FILE *stream, uint32_t *value)
{
uint32_t buffer = 0;
if (fread(&buffer, sizeof buffer, 1, stream) != 1)
{
return false;
}
*value = convertBigEndianUInt32(buffer);
return true;
}
bool writePackedRoute(struct IPConfigRoute *route, FILE *stream)
{
struct IPConfigLink *destination = &route->destination;
if (destination->address && destination->prefix)
{
if (!writePackedUInt32(1, stream))
{
return false;
}
if (!writePackedString(destination->address, stream))
{
return false;
}
if (!writePackedUInt32(destination->prefix, stream))
{
return false;
}
}
else
{
if (!writePackedUInt32(0, stream))
{
return false;
}
}
if (route->nextHop)
{
if (!writePackedUInt32(1, stream))
{
return false;
}
if (!writePackedString(route->nextHop, stream))
{
return false;
}
}
else
{
if (!writePackedUInt32(0, stream))
{
return false;
}
}
return true;
}
bool writePackedLink(struct IPConfigLink *link, FILE *stream)
{
if (!writePackedString(link->address, stream))
{
return false;
}
if (!writePackedUInt32(link->prefix, stream))
{
return false;
}
return true;
}
bool writePackedString(char *string, FILE *stream)
{
size_t stringLength = strlen(string);
if (!writePackedUInt16(stringLength, stream))
{
return false;
}
return fwrite(string, stringLength, 1, stream) == 1;
}
bool writePackedUInt16(uint16_t value, FILE *stream)
{
uint16_t buffer = convertBigEndianUInt16(value);
return fwrite(&buffer, sizeof buffer, 1, stream) == 1;
}
bool writePackedUInt32(uint32_t value, FILE *stream)
{
uint32_t buffer = convertBigEndianUInt32(value);
return fwrite(&buffer, sizeof buffer, 1, stream) == 1;
}
bool readUnpackedLine(FILE *stream, char **line)
{
char *cursor = NULL;
*line = calloc(1, BUFSIZ);
if (!*line)
{
return false;
}
cursor = *line;
while (cursor - *line < BUFSIZ)
{
int character = fgetc(stream);
if (character == EOF || character == '\n')
{
break;
}
*cursor++ = character;
}
return true;
}
bool parseUnpackedPair(char *line, char **key, char **value)
{
char *next = index(line, ':');
if (!next)
{
return false;
}
*key = strndup(line, next - line);
if (!*key)
{
return false;
}
while (*++next && isspace(*next));
*value = strdup(next);
if (!*value)
{
free(*key);
return false;
}
return true;
}
bool parseUnpackedRoute(char *string, struct IPConfigRoute *route)
{
char *next = index(string, ' ');
if (next)
{
*next = 0;
if (!parseUnpackedLink(string, &route->destination))
{
return false;
}
string = ++next;
}
route->nextHop = strdup(string);
if (!route->nextHop)
{
return false;
}
return true;
}
bool parseUnpackedLink(char *string, struct IPConfigLink *link)
{
char *next = index(string, '/');
if (!next)
{
return false;
}
link->address = strndup(string, next - string);
if (!link->address)
{
return false;
}
if (!parseUnpackedUInt32(++next, &link->prefix))
{
free(link->address);
return false;
}
return true;
}
bool parseUnpackedUInt32(char *string, uint32_t *integer)
{
char *terminator = NULL;
unsigned long value = strtoul(string, &terminator, 10);
if (*terminator)
{
return false;
}
*integer = value % UINT32_MAX;
return true;
}

View File

@@ -0,0 +1,31 @@
#ifndef IPCONFIG_DATA_H
#define IPCONFIG_DATA_H
#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include "ipconfig.h"
uint16_t convertBigEndianUInt16(uint16_t value);
uint32_t convertBigEndianUInt32(uint32_t value);
bool readPackedRoute(FILE *stream, struct IPConfigRoute *route);
bool readPackedLink(FILE *stream, struct IPConfigLink *link);
bool readPackedString(FILE *stream, char **string);
bool readPackedUInt16(FILE *stream, uint16_t *value);
bool readPackedUInt32(FILE *stream, uint32_t *value);
bool writePackedRoute(struct IPConfigRoute *route, FILE *stream);
bool writePackedLink(struct IPConfigLink *link, FILE *stream);
bool writePackedString(char *string, FILE *stream);
bool writePackedUInt16(uint16_t value, FILE *stream);
bool writePackedUInt32(uint32_t value, FILE *stream);
bool readUnpackedLine(FILE *stream, char **line);
bool parseUnpackedPair(char *line, char **key, char **value);
bool parseUnpackedRoute(char *string, struct IPConfigRoute *route);
bool parseUnpackedLink(char *string, struct IPConfigLink *link);
bool parseUnpackedUInt32(char *string, uint32_t *integer);
#endif

View File

@@ -0,0 +1,14 @@
#ifndef IPCONFIG_ERROR_H
#define IPCONFIG_ERROR_H
#include <string.h>
#include <stdio.h>
#include <errno.h>
#define printError(message) \
fprintf(stderr, "%s: %s\n", __func__, message)
#define printLibraryError(message) \
fprintf(stderr, "%s: %s: %s\n", __func__, message, strerror(errno))
#endif

View File

@@ -0,0 +1,530 @@
#define _DEFAULT_SOURCE
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include "data.h"
#include "ipconfig.h"
#include "error.h"
#define calculateElementCount(array) (sizeof array / sizeof *array)
static const uint32_t IPConfigFileMinimumVersion = 1;
static const uint32_t IPConfigFileMaximumVersion = 3;
static char *IPConfigTerminatorKey = "eos";
static struct IPConfigAttributeKey IPConfigVersion1AttributeKeys[] =
{
{"id", IntegerIPConfigAttributeType},
{"ipAssignment", StringIPConfigAttributeType},
{"linkAddress", LinkIPConfigAttributeType},
{"gateway", StringIPConfigAttributeType},
{"dns", StringIPConfigAttributeType},
{"proxySettings", StringIPConfigAttributeType},
{"proxyHost", StringIPConfigAttributeType},
{"proxyPort", IntegerIPConfigAttributeType},
{"proxyPac", StringIPConfigAttributeType},
{"exclusionList", StringIPConfigAttributeType},
{"eos", TerminalIPConfigAttributeType}
};
static size_t IPConfigVersion1AttributeKeyCount =
calculateElementCount(IPConfigVersion1AttributeKeys);
static struct IPConfigAttributeKey IPConfigVersion2AttributeKeys[] =
{
{"id", IntegerIPConfigAttributeType},
{"ipAssignment", StringIPConfigAttributeType},
{"linkAddress", LinkIPConfigAttributeType},
{"gateway", RouteIPConfigAttributeType},
{"dns", StringIPConfigAttributeType},
{"proxySettings", StringIPConfigAttributeType},
{"proxyHost", StringIPConfigAttributeType},
{"proxyPort", IntegerIPConfigAttributeType},
{"proxyPac", StringIPConfigAttributeType},
{"exclusionList", StringIPConfigAttributeType},
{"eos", TerminalIPConfigAttributeType}
};
static size_t IPConfigVersion2AttributeKeyCount =
calculateElementCount(IPConfigVersion2AttributeKeys);
static struct IPConfigAttributeKey IPConfigVersion3AttributeKeys[] =
{
{"id", StringIPConfigAttributeType},
{"ipAssignment", StringIPConfigAttributeType},
{"linkAddress", LinkIPConfigAttributeType},
{"gateway", RouteIPConfigAttributeType},
{"dns", StringIPConfigAttributeType},
{"proxySettings", StringIPConfigAttributeType},
{"proxyHost", StringIPConfigAttributeType},
{"proxyPort", IntegerIPConfigAttributeType},
{"proxyPac", StringIPConfigAttributeType},
{"exclusionList", StringIPConfigAttributeType},
{"eos", TerminalIPConfigAttributeType}
};
static size_t IPConfigVersion3AttributeKeyCount =
calculateElementCount(IPConfigVersion3AttributeKeys);
static enum IPConfigAttributeType getAttributeType(uint32_t version, char *key)
{
size_t keyLength = strlen(key);
struct IPConfigAttributeKey *keys = NULL;
size_t count = 0;
switch (version)
{
case 1:
keys = IPConfigVersion1AttributeKeys;
count = IPConfigVersion1AttributeKeyCount;
break;
case 2:
keys = IPConfigVersion2AttributeKeys;
count = IPConfigVersion2AttributeKeyCount;
break;
case 3:
keys = IPConfigVersion3AttributeKeys;
count = IPConfigVersion3AttributeKeyCount;
break;
default:
break;
};
for (size_t index = 0; index < count; index++)
{
char *candidate = keys[index].key;
size_t maximumLength = strlen(candidate);
if (keyLength > maximumLength)
{
maximumLength = keyLength;
}
if (!strncmp(candidate, key, maximumLength))
{
return keys[index].type;
}
}
return InvalidIPConfigAttributeType;
}
static void appendAttribute(struct IPConfigAttribute *attribute,
struct IPConfig *config)
{
if (!config->attributes)
{
config->attributes = attribute;
}
else
{
struct IPConfigAttribute *previous = config->attributes;
while (previous->next)
{
previous = previous->next;
}
previous->next = attribute;
}
}
bool readPackedIPConfig(FILE *stream, struct IPConfig *config)
{
if (!readPackedUInt32(stream, &config->version))
{
printError("failed to read file version");
return NULL;
}
if (config->version < IPConfigFileMinimumVersion ||
config->version > IPConfigFileMaximumVersion)
{
printError("unrecognized file version");
return NULL;
}
while (!feof(stream))
{
struct IPConfigAttribute *attribute = NULL;
attribute = calloc(1, sizeof(struct IPConfigAttribute));
if (!attribute)
{
printLibraryError("calloc");
deinitializeIPConfig(config);
return NULL;
}
appendAttribute(attribute, config);
if (!readPackedString(stream, &attribute->key))
{
printError("failed to read attribute key");
deinitializeIPConfig(config);
return NULL;
}
attribute->type = getAttributeType(config->version,
attribute->key);
if (attribute->type == InvalidIPConfigAttributeType)
{
printError("unrecognized attribute key");
deinitializeIPConfig(config);
return NULL;
}
else if (attribute->type == TerminalIPConfigAttributeType)
{
break;
}
else if (attribute->type == IntegerIPConfigAttributeType)
{
uint32_t *integer = &attribute->value.integer;
if (!readPackedUInt32(stream, integer))
{
printError("failed to read integer");
deinitializeIPConfig(config);
return NULL;
}
}
else if (attribute->type == StringIPConfigAttributeType)
{
char **string = &attribute->value.string;
if (!readPackedString(stream, string))
{
printError("failed to read string");
deinitializeIPConfig(config);
return NULL;
}
}
else if (attribute->type == LinkIPConfigAttributeType)
{
if (!readPackedLink(stream, &attribute->value.link))
{
printError("failed to read link");
deinitializeIPConfig(config);
return NULL;
}
}
else if (attribute->type == RouteIPConfigAttributeType)
{
if (!readPackedRoute(stream, &attribute->value.route))
{
printError("failed to read route");
deinitializeIPConfig(config);
return NULL;
}
}
}
return config;
}
void deinitializeIPConfig(struct IPConfig *config)
{
struct IPConfigAttribute *next = NULL;
struct IPConfigAttribute *attribute = config->attributes;
while (attribute)
{
union IPConfigValue *value = &attribute->value;
if (attribute->type == StringIPConfigAttributeType)
{
free(value->string);
}
else if (attribute->type == LinkIPConfigAttributeType)
{
free(value->link.address);
}
else if (attribute->type == RouteIPConfigAttributeType)
{
if (value->route.destination.address)
{
free(value->route.destination.address);
}
if (value->route.nextHop)
{
free(value->route.nextHop);
}
}
next = attribute->next;
free(attribute->key);
free(attribute);
attribute = next;
}
}
bool writePackedIPConfig(struct IPConfig *config, FILE *stream)
{
bool terminated = false;
struct IPConfigAttribute *attribute = config->attributes;
if (!writePackedUInt32(config->version, stream))
{
printError("failed to write file version");
return false;
}
while (attribute)
{
union IPConfigValue *value = &attribute->value;
if (!writePackedString(attribute->key, stream))
{
printError("failed to write key");
return false;
}
if (attribute->type == TerminalIPConfigAttributeType)
{
terminated = true;
break;
}
else if (attribute->type == IntegerIPConfigAttributeType)
{
if (!writePackedUInt32(value->integer, stream))
{
printError("failed to write integer");
return false;
}
}
else if (attribute->type == StringIPConfigAttributeType)
{
if (!writePackedString(value->string, stream))
{
printError("failed to write string");
return false;
}
}
else if (attribute->type == LinkIPConfigAttributeType)
{
if (!writePackedLink(&value->link, stream))
{
printError("failed to write link");
return false;
}
}
else if (attribute->type == RouteIPConfigAttributeType)
{
if (!writePackedRoute(&value->route, stream))
{
printError("failed to write route");
return false;
}
}
attribute = attribute->next;
}
if (!terminated)
{
if (!writePackedString(IPConfigTerminatorKey, stream))
{
printError("failed to write terminator");
return false;
}
}
return true;
}
bool writeUnpackedIPConfig(struct IPConfig *config, FILE *stream)
{
struct IPConfigAttribute *attribute = config->attributes;
while (attribute)
{
if (attribute->type == IntegerIPConfigAttributeType)
{
fprintf(stream, "%s: %" PRIu32 "\n",
attribute->key,
attribute->value.integer);
}
else if (attribute->type == StringIPConfigAttributeType)
{
fprintf(stream, "%s: %s\n",
attribute->key,
attribute->value.string);
}
else if (attribute->type == LinkIPConfigAttributeType)
{
struct IPConfigLink *link = &attribute->value.link;
fprintf(stream, "%s: %s/%" PRIu32 "\n",
attribute->key,
link->address,
link->prefix);
}
else if (attribute->type == RouteIPConfigAttributeType)
{
struct IPConfigRoute *route = &attribute->value.route;
struct IPConfigLink *destination = &route->destination;
if (destination->address && destination->prefix)
{
fprintf(stream, "%s: %s/%" PRIu32 " %s\n",
attribute->key,
destination->address,
destination->prefix,
route->nextHop);
}
else
{
fprintf(stream, "%s: %s\n",
attribute->key,
route->nextHop);
}
}
attribute = attribute->next;
}
return true;
}
bool readUnpackedIPConfig(FILE *stream, struct IPConfig *config)
{
if (config->version < IPConfigFileMinimumVersion ||
config->version > IPConfigFileMaximumVersion)
{
printError("unrecognized file version");
return false;
}
while (!feof(stream))
{
char *line = NULL;
char *value = NULL;
struct IPConfigAttribute *attribute = NULL;
attribute = calloc(1, sizeof(struct IPConfigAttribute));
if (!attribute)
{
printLibraryError("calloc");
deinitializeIPConfig(config);
return false;
}
appendAttribute(attribute, config);
if (!readUnpackedLine(stream, &line))
{
printError("failed to read line");
deinitializeIPConfig(config);
return false;
}
if (strlen(line) == 0)
{
free(line);
if (feof(stream))
{
attribute->key = strdup(IPConfigTerminatorKey);
break;
}
continue;
}
if (!parseUnpackedPair(line, &attribute->key, &value))
{
printError("failed to read pair");
deinitializeIPConfig(config);
free(line);
return false;
}
free(line);
attribute->type = getAttributeType(config->version,
attribute->key);
if (!attribute->type)
{
printError("unrecognized attribute type");
deinitializeIPConfig(config);
free(value);
return false;
}
else if (attribute->type == IntegerIPConfigAttributeType)
{
uint32_t *integer = &attribute->value.integer;
if (!parseUnpackedUInt32(value, integer))
{
printError("failed to read integer");
deinitializeIPConfig(config);
free(value);
return false;
}
free(value);
}
else if (attribute->type == StringIPConfigAttributeType)
{
attribute->value.string = value;
}
else if (attribute->type == LinkIPConfigAttributeType)
{
if (!parseUnpackedLink(value, &attribute->value.link))
{
printError("failed to read link");
deinitializeIPConfig(config);
free(value);
return false;
}
free(value);
}
else if (attribute->type == RouteIPConfigAttributeType)
{
struct IPConfigRoute *route = &attribute->value.route;
if (!parseUnpackedRoute(value, route))
{
printError("failed to read route");
deinitializeIPConfig(config);
free(value);
return false;
}
free(value);
}
}
return true;
}

View File

@@ -0,0 +1,64 @@
#ifndef IPCONFIG_H
#define IPCONFIG_H
#include <stdbool.h>
#include <inttypes.h>
enum IPConfigAttributeType
{
InvalidIPConfigAttributeType = -1,
TerminalIPConfigAttributeType = 0,
IntegerIPConfigAttributeType = 1,
StringIPConfigAttributeType = 2,
LinkIPConfigAttributeType = 3,
RouteIPConfigAttributeType = 4
};
struct IPConfigAttributeKey
{
char *key;
enum IPConfigAttributeType type;
};
struct IPConfigLink
{
char *address;
uint32_t prefix;
};
struct IPConfigRoute
{
struct IPConfigLink destination;
char *nextHop;
};
union IPConfigValue
{
uint32_t integer;
char *string;
struct IPConfigLink link;
struct IPConfigRoute route;
};
struct IPConfigAttribute
{
enum IPConfigAttributeType type;
char *key;
union IPConfigValue value;
struct IPConfigAttribute *next;
};
struct IPConfig
{
uint32_t version;
struct IPConfigAttribute *attributes;
};
bool readPackedIPConfig(FILE *stream, struct IPConfig *config);
bool readUnpackedIPConfig(FILE *stream, struct IPConfig *config);
bool writePackedIPConfig(struct IPConfig *config, FILE *stream);
bool writeUnpackedIPConfig(struct IPConfig *config, FILE *stream);
void deinitializeIPConfig(struct IPConfig *config);
#endif

View File

@@ -0,0 +1,71 @@
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include "ipconfig.h"
#include "error.h"
static void usage(FILE *stream)
{
fprintf(stream, "usage: ipconfigstore OPTION\n");
fprintf(stream, "\n");
fprintf(stream, "Options:\n");
fprintf(stream, " -p VERSION Pack IP configuration\n");
fprintf(stream, " -u Unpack IP configuration\n");
fprintf(stream, "\n");
}
int main(int argc, char *argv[])
{
int option = 0;
struct IPConfig config = {0};
option = getopt(argc, argv, "hp:u");
if (option == 'h')
{
usage(stdout);
return EXIT_SUCCESS;
}
else if (option == 'p')
{
config.version = *optarg - 0x30;
if (!readUnpackedIPConfig(stdin, &config))
{
return EXIT_FAILURE;
}
if (!writePackedIPConfig(&config, stdout))
{
return EXIT_FAILURE;
}
deinitializeIPConfig(&config);
}
else if (option == 'u')
{
if (!readPackedIPConfig(stdin, &config))
{
return EXIT_FAILURE;
}
if (!writeUnpackedIPConfig(&config, stdout))
{
return EXIT_FAILURE;
}
deinitializeIPConfig(&config);
}
else
{
usage(stderr);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}

17
android13/vendor/brcm/microg/Android.mk vendored Normal file
View File

@@ -0,0 +1,17 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := microg
LOCAL_SRC_FILES := microg.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE = true
# LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_OPTIONAL_USES_LIBRARIES := androidx.window.extensions androidx.window.sidecar
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

BIN
android13/vendor/brcm/microg/microg.apk vendored Normal file

Binary file not shown.

7
android13/vendor/brcm/rpi4/Android.bp vendored Normal file
View File

@@ -0,0 +1,7 @@
// Automatically generated file. DO NOT MODIFY
//
// This file is generated by device/brcm/rpi4/setup-makefiles.sh
soong_namespace {
}

9
android13/vendor/brcm/rpi4/Android.mk vendored Normal file
View File

@@ -0,0 +1,9 @@
# Automatically generated file. DO NOT MODIFY
#
# This file is generated by device/brcm/rpi4/setup-makefiles.sh
LOCAL_PATH := $(call my-dir)
ifeq ($(TARGET_DEVICE),rpi4)
endif

View File

@@ -0,0 +1,4 @@
# Automatically generated file. DO NOT MODIFY
#
# This file is generated by device/brcm/rpi4/setup-makefiles.sh

View File

@@ -0,0 +1,31 @@
Copyright (c) 2006, Broadcom Corporation.
Copyright (c) 2015, Raspberry Pi (Trading) Ltd
All rights reserved.
Redistribution. Redistribution and use in binary form, without
modification, are permitted provided that the following conditions are
met:
* This software may only be used for the purposes of developing for,
running or using a Raspberry Pi device, or authorised derivative
device manufactured via the element14 Raspberry Pi Customization Service
* Redistributions must reproduce the above copyright notice and the
following disclaimer in the documentation and/or other materials
provided with the distribution.
* Neither the name of Broadcom Corporation nor the names of its suppliers
may be used to endorse or promote products derived from this software
without specific prior written permission.
DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,98 @@
# Cloned from bcm94345wlpagb_p2xx.txt
NVRAMRev=$Rev: 498373 $
sromrev=11
vendid=0x14e4
devid=0x43ab
manfid=0x2d0
prodid=0x06e4
#macaddr=00:90:4c:c5:12:38
macaddr=b8:27:eb:74:f2:6c
nocrc=1
boardtype=0x6e4
boardrev=0x1304
#XTAL 37.4MHz
xtalfreq=37400
btc_mode=1
#------------------------------------------------------
#boardflags: 5GHz eTR switch by default
# 2.4GHz eTR switch by default
# bit1 for btcoex
boardflags=0x00480201
boardflags2=0x40800000
boardflags3=0x44200100
phycal_tempdelta=15
rxchain=1
txchain=1
aa2g=1
aa5g=1
tssipos5g=1
tssipos2g=1
femctrl=0
AvVmid_c0=1,165,2,100,2,100,2,100,2,100
pa2ga0=-129,6525,-718
pa2ga1=-149,4408,-601
pa5ga0=-185,6836,-815,-186,6838,-815,-184,6859,-815,-184,6882,-818
pa5ga1=-202,4285,-574,-201,4312,-578,-196,4391,-586,-201,4294,-575
itrsw=1
pdoffsetcckma0=2
pdoffset2gperchan=0,-2,1,0,1,0,1,1,1,0,0,-1,-1,0
pdoffset2g40ma0=16
pdoffset40ma0=0x8888
pdoffset80ma0=0x8888
extpagain5g=2
extpagain2g=2
tworangetssi2g=1
tworangetssi5g=1
# LTECX flags
# WCI2
ltecxmux=0
ltecxpadnum=0x0504
ltecxfnsel=0x22
ltecxgcigpio=0x32
maxp2ga0=80
ofdmlrbw202gpo=0x0022
dot11agofdmhrbw202gpo=0x4442
mcsbw202gpo=0x98444422
mcsbw402gpo=0x98444422
maxp5ga0=82,82,82,82
mcsbw205glpo=0xb9555000
mcsbw205gmpo=0xb9555000
mcsbw205ghpo=0xb9555000
mcsbw405glpo=0xb9555000
mcsbw405gmpo=0xb9555000
mcsbw405ghpo=0xb9555000
mcsbw805glpo=0xb9555000
mcsbw805gmpo=0xb9555000
mcsbw805ghpo=0xb9555000
swctrlmap_2g=0x00000000,0x00000000,0x00000000,0x010000,0x3ff
swctrlmap_5g=0x00100010,0x00200020,0x00200020,0x010000,0x3fe
swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x3
swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x3
vcodivmode=1
deadman_to=481500000
ed_thresh2g=-54
ed_thresh5g=-54
eu_edthresh2g=-54
eu_edthresh5g=-54
ldo1=4
rawtempsense=0x1ff
cckPwrIdxCorr=3
cckTssiDelay=150
ofdmTssiDelay=150
txpwr2gAdcScale=1
txpwr5gAdcScale=1
dot11b_opts=0x3aa85
cbfilttype=1
fdsslevel_ch11=6
# Improved Bluetooth coexistence parameters from Cypress
btc_mode=1
btc_params8=0x4e20
btc_params1=0x7530
btc_params50=0x972c

View File

@@ -0,0 +1,97 @@
# Cloned from bcm94345wlpagb_p2xx.txt
NVRAMRev=$Rev: 498373 $
sromrev=11
vendid=0x14e4
devid=0x43ab
manfid=0x2d0
prodid=0x06e4
#macaddr=00:90:4c:c5:12:38
macaddr=b8:27:eb:74:f2:6c
nocrc=1
boardtype=0x6e4
boardrev=0x1304
#XTAL 37.4MHz
xtalfreq=37400
btc_mode=1
#------------------------------------------------------
#boardflags: 5GHz eTR switch by default
# 2.4GHz eTR switch by default
# bit1 for btcoex
boardflags=0x00480201
boardflags2=0x40800000
boardflags3=0x44200100
phycal_tempdelta=15
rxchain=1
txchain=1
aa2g=1
aa5g=1
tssipos5g=1
tssipos2g=1
femctrl=0
AvVmid_c0=0,157,1,126,1,126,1,126,1,126
pa2ga0=-170,5896,-680
pa2ga1=-156,4032,-547
pa5ga0=-150,5547,-628,-150,5583,-640,-158,5608,-649,-160,5757,-673
pa5ga1=-109,3831,-519,-88,3821,-512,-125,3731,-528,-103,3829,-516
itrsw=1
pdoffsetcckma0=2
pdoffset2gperchan=0,-2,1,0,1,0,1,1,1,0,0,-1,-1,0
pdoffset2g40ma0=16
pdoffset40ma0=0x8888
pdoffset80ma0=0x8888
extpagain5g=2
extpagain2g=2
tworangetssi2g=1
tworangetssi5g=1
# LTECX flags
# WCI2
ltecxmux=0
ltecxpadnum=0x0504
ltecxfnsel=0x22
ltecxgcigpio=0x32
maxp2ga0=80
ofdmlrbw202gpo=0x0022
dot11agofdmhrbw202gpo=0x4442
mcsbw202gpo=0x98444422
mcsbw402gpo=0x98444422
maxp5ga0=82,82,82,82
mcsbw205glpo=0xb9555000
mcsbw205gmpo=0xb9555000
mcsbw205ghpo=0xb9555000
mcsbw405glpo=0xb9555000
mcsbw405gmpo=0xb9555000
mcsbw405ghpo=0xb9555000
mcsbw805glpo=0xb9555000
mcsbw805gmpo=0xb9555000
mcsbw805ghpo=0xb9555000
swctrlmap_2g=0x00000000,0x00000000,0x00000000,0x010000,0x3ff
swctrlmap_5g=0x00100010,0x00200020,0x00200020,0x010000,0x3fe
swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x3
swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x3
vcodivmode=1
deadman_to=481500000
ed_thresh2g=-54
ed_thresh5g=-54
eu_edthresh2g=-54
eu_edthresh5g=-54
ldo1=4
rawtempsense=0x1ff
cckPwrIdxCorr=3
cckTssiDelay=150
ofdmTssiDelay=150
txpwr2gAdcScale=1
txpwr5gAdcScale=1
dot11b_opts=0x3aa85
cbfilttype=1
fdsslevel_ch11=6
# Improved Bluetooth coexistence parameters from Cypress
btc_mode=1
btc_params8=0x4e20
btc_params1=0x7530

View File

@@ -0,0 +1,6 @@
# Automatically generated file. DO NOT MODIFY
#
# This file is generated by device/brcm/rpi4/setup-makefiles.sh
PRODUCT_SOONG_NAMESPACES += \
vendor/brcm/rpi4

View File

@@ -0,0 +1,18 @@
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := spotify
LOCAL_SRC_FILES := spotify.apk
LOCAL_MODULE_CLASS := APPS
#LOCAL_CERTIFICATE := PRESIGNED
LOCAL_CERTIFICATE := platform
#LOCAL_PRIVILEGED_MODULE = true
#LOCAL_MODULE_PATH := $(TARGET_OUT_DATA)
#LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_APPS)
# LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3
LOCAL_OPTIONAL_USES_LIBRARIES := org.apache.http.legacy androidx.window.extensions androidx.window.sidecar
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
include $(BUILD_PREBUILT)

Binary file not shown.