Skip to content

Commit

Permalink
Make Send Show Packet work more consistently.
Browse files Browse the repository at this point in the history
  • Loading branch information
john0312 committed Aug 18, 2024
1 parent f75fb85 commit f07706e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
26 changes: 22 additions & 4 deletions fw/Core/Hitcon/Logic/IrController.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ IrController::IrController()
send2game_task(800, (callback_t)&IrController::Send2Game, this),
showtext_task(800, (callback_t)&IrController::ShowText, this),
send_lock(true), recv_lock(true), disable_broadcast(false),
received_packet_cnt(0) {}
received_packet_cnt(0), priority_data_len_(0) {}

void IrController::Send2Game(void* arg) {
GamePacket* game = reinterpret_cast<GamePacket*>(arg);
Expand Down Expand Up @@ -103,12 +103,16 @@ void IrController::RoutineTask(void* unused) {
gameLogic.DoRandomData();
}
}

TrySendPriority();
}
}

void IrController::BroadcastIr(void* unused) {
if (disable_broadcast) return;

if (!TrySendPriority()) return;

uint8_t cell_data[kDataSize];
int col = g_fast_random_pool.GetRandom() % hitcon::game::kNumCols;
gameLogic.GetRandomDataForIrTransmission(cell_data, &col);
Expand All @@ -121,7 +125,7 @@ void IrController::BroadcastIr(void* unused) {
},
};
memcpy(irdata.game.data, cell_data, kDataSize);
uint8_t irdata_len = sizeof(irdata) / sizeof(uint8_t);
uint8_t irdata_len = 12;
irLogic.SendPacket(reinterpret_cast<uint8_t*>(&irdata), irdata_len);

send_lock = true;
Expand All @@ -134,8 +138,22 @@ void IrController::SendShowPacket(char* msg) {
};
size_t length = strlen(msg);
memcpy(irdata.show.message, msg, length);
uint8_t irdata_len = sizeof(irdata) / sizeof(uint8_t);
irLogic.SendPacket(reinterpret_cast<uint8_t*>(&irdata), irdata_len);
memcpy(&priority_data_, &irdata, sizeof(irdata));
priority_data_len_ = sizeof(priority_data_) / sizeof(uint8_t);
;
TrySendPriority();
}

bool IrController::TrySendPriority() {
if (priority_data_len_ == 0) return true;

uint8_t irdata_len = sizeof(priority_data_) / sizeof(uint8_t);
bool ret = irLogic.SendPacket(reinterpret_cast<uint8_t*>(&priority_data_),
irdata_len);
if (ret) {
priority_data_len_ = 0;
}
return false;
}

} // namespace ir
Expand Down
5 changes: 5 additions & 0 deletions fw/Core/Hitcon/Logic/IrController.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ class IrController {
hitcon::service::sched::Task showtext_task;
hitcon::service::sched::Task broadcast_task;

IrData priority_data_;
size_t priority_data_len_;

// Called every 1s.
void RoutineTask(void* unused);

Expand All @@ -74,6 +77,8 @@ class IrController {

void BroadcastIr(void* unused);
void SendShowPacket(char* msg);

bool TrySendPriority();
};

extern IrController irController;
Expand Down

0 comments on commit f07706e

Please sign in to comment.