-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEvilFirmwareAPI.h
More file actions
148 lines (125 loc) · 3.84 KB
/
Copy pathEvilFirmwareAPI.h
File metadata and controls
148 lines (125 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
Evil Firmware Fleet Management API Library
Provides REST API and BLE endpoints for device management, monitoring,
and remote control. Compatible with ESP32-based Evil devices.
Features:
- REST API for device status, control, and payload execution
- BLE GATT service for direct device communication
- Firmware version tracking
- Battery and connectivity monitoring
- Command execution interface
- Sensor data reporting
*/
#ifndef EVIL_FIRMWARE_API_H
#define EVIL_FIRMWARE_API_H
#include <Arduino.h>
#include <ArduinoJson.h>
// API Version
#define EVIL_API_VERSION "1.0.0"
#define EVIL_DEVICE_TYPE "UNKNOWN" // Override in device firmware
// BLE UUIDs for fleet management
#define EVIL_BLE_SERVICE_UUID "6e400001-b5a3-f393-e0a9-e50e24dcca9e"
#define EVIL_BLE_RX_CHAR_UUID "6e400002-b5a3-f393-e0a9-e50e24dcca9e"
#define EVIL_BLE_TX_CHAR_UUID "6e400003-b5a3-f393-e0a9-e50e24dcca9e"
// API Endpoints
#define API_ENDPOINT_STATUS "/api/status"
#define API_ENDPOINT_BATTERY "/api/battery"
#define API_ENDPOINT_SENSORS "/api/sensors"
#define API_ENDPOINT_PAYLOAD "/api/payload"
#define API_ENDPOINT_COMMAND "/api/command"
#define API_ENDPOINT_FIRMWARE "/api/firmware"
#define API_ENDPOINT_LOGS "/api/logs"
// Device status structure
typedef struct {
String device_id;
String device_type;
String firmware_version;
String api_version;
bool wifi_connected;
String wifi_ssid;
int8_t wifi_rssi;
uint32_t uptime_ms;
float battery_voltage;
int battery_percent;
float cpu_temp;
uint32_t free_heap;
uint32_t total_heap;
} DeviceStatus;
// Sensor data structure
typedef struct {
float temperature;
float humidity;
float pressure;
double latitude;
double longitude;
float gps_accuracy;
bool gps_valid;
} SensorData;
// Command structure
typedef struct {
String command_id;
String command_type;
String target;
String parameters;
uint32_t timestamp;
} Command;
class EvilFirmwareAPI {
private:
String device_id;
String device_type;
String firmware_version;
DeviceStatus current_status;
SensorData sensor_data;
public:
EvilFirmwareAPI();
// Initialization
void begin(String id, String type, String version);
// Status management
void updateStatus();
DeviceStatus getStatus();
// JSON serialization
String statusToJSON();
String sensorsToJSON();
String batteryToJSON();
// Sensor data
void setSensorData(SensorData data);
SensorData getSensorData();
// Payload/Command execution interface (to be implemented by device)
virtual void executePayload(String payload_name, String parameters) {}
virtual void executeCommand(Command cmd) {}
// Utility functions
uint32_t getUptime();
float getBatteryVoltage();
int getBatteryPercent();
String getDeviceID();
String getFirmwareVersion();
};
// Helper function to create status JSON response
inline DynamicJsonDocument createStatusResponse(EvilFirmwareAPI* api) {
DynamicJsonDocument doc(512);
DeviceStatus status = api->getStatus();
doc["status"] = "ok";
doc["device_id"] = status.device_id;
doc["device_type"] = status.device_type;
doc["firmware_version"] = status.firmware_version;
doc["api_version"] = status.api_version;
doc["wifi_connected"] = status.wifi_connected;
doc["wifi_ssid"] = status.wifi_ssid;
doc["wifi_rssi"] = status.wifi_rssi;
doc["uptime_ms"] = status.uptime_ms;
doc["battery_voltage"] = status.battery_voltage;
doc["battery_percent"] = status.battery_percent;
doc["cpu_temp"] = status.cpu_temp;
doc["free_heap"] = status.free_heap;
doc["total_heap"] = status.total_heap;
return doc;
}
// Helper function to create command response
inline DynamicJsonDocument createCommandResponse(bool success, String message) {
DynamicJsonDocument doc(256);
doc["success"] = success;
doc["message"] = message;
doc["timestamp"] = millis();
return doc;
}
#endif // EVIL_FIRMWARE_API_H