Merged i2c-helper in Main

This commit is contained in:
AlexanderHD27
2025-01-12 00:16:00 +01:00
parent f4792de050
commit b5c7e5b4c1
396 changed files with 182143 additions and 14 deletions

View File

@@ -0,0 +1,100 @@
#include "ci/base.hpp"
#include "pinConfig.hpp"
#include "protocol.hpp"
#include "pico/stdlib.h"
#include "hardware/watchdog.h"
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
GobotRPC_CI::GobotRPC_CI(I_GobotRPC_CI_Hardware *hardware, UBaseType_t core, QueueHandle_t ciInstructionQueue, QueueHandle_t ciInstructionReverseQueue) {
this->ciInstructionQueue = ciInstructionQueue;
this->ciInstructionReverseQueue = ciInstructionReverseQueue;
this->hardware = hardware;
this->hardware->registerCB_RxData(GobotRPC_CI_rxData_cb, this);
this->cb_TxPacket = NULL;
this->cb_TxPacket_args = NULL;
this->cb_SetAddressMap = NULL;
this->cb_SetAddressMap_args = NULL;
xTaskCreateAffinitySet(GobotRPC_CI_heartBeatTaskFn, "Heartbeat Task", 2048, this, 2, core, &this->heartBeatTaskHandle);
xTaskCreateAffinitySet(GobotRPC_CI_txCIInstructionTaskFn, "Tx CI Instruction Task", 2048, this, 3, core, &this->txCIInstructionTaskHandle);
}
// Rx Side
void GobotRPC_CI_rxData_cb(void * args, char *data, size_t len) {
GobotRPC_CI *gobotRPC = (GobotRPC_CI *)args;
gobotRPC->onRxData(data, len);
}
void GobotRPC_CI::onRxData(char *data, size_t len) {
GobotRPC_CI_CMD cmd = (GobotRPC_CI_CMD)data[0];
switch (cmd) {
case TX_CI_PACKET:
if(this->cb_TxPacket != NULL) {
uint32_t addr = (data[2] << 24) | (data[3] << 16) | (data[4] << 8) | data[5];
this->cb_TxPacket(this->cb_TxPacket_args, data+6, len-6, addr);
}
break;
case RESET_CI_PACKET:
//softwareReset();
break;
case SET_ADDR_PORT_MAP: {
if(this->cb_SetAddressMap != NULL) {
uint32_t addr = (data[2] << 24) | (data[3] << 16) | (data[4] << 8) | data[5];
uint8_t port = data[6];
this->cb_SetAddressMap(cb_SetAddressMap_args, addr, port);
}
break;
}
default:
break;
}
}
void GobotRPC_CI::registerCB_TxPacket(callback_TxPacket cb, void *args) {
this->cb_TxPacket = cb;
this->cb_TxPacket_args = args;
}
void GobotRPC_CI::registerCB_SetAddress(callback_SetAddress cb, void *args) {
this->cb_SetAddressMap = cb;
this->cb_SetAddressMap_args = args;
}
void GobotRPC_CI::send_RxPacket(char *data, size_t len, uint32_t addr) {
data[0] = RX_CI_PACKET;
data[1] = len + CI_RX_PACKAGE_DATA_OFFSET;
data[2] = (addr >> 24) & 0xff;
data[3] = (addr >> 16) & 0xff;
data[4] = (addr >> 8) & 0xff;
data[5] = addr & 0xff;
this->hardware->send(data, len+6);
}
// Heartbeat Task
void GobotRPC_CI_heartBeatTaskFn(void *args) {
GobotRPC_CI *gobotRPC = (GobotRPC_CI *)args;
gobotRPC->heartBeartTaskFn();
}
void GobotRPC_CI::heartBeartTaskFn() {
char heartBeatPacket[] = {HEARTBEAT, 0x02};
while(1) {
this->hardware->send(heartBeatPacket, 2);
vTaskDelay(GOBOTRPC_HEARTBEAT_INTERVAL / portTICK_PERIOD_MS);
}
}