pebble/tests/fakes/fake_events.c
2025-01-27 11:38:16 -08:00

91 lines
2.1 KiB
C

/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "fake_events.h"
#include "kernel/pbl_malloc.h"
#include "freertos_types.h"
#include "projdefs.h"
static PebbleEvent s_last_pebble_event;
static uint32_t s_fake_event_count = 0;
static FakeEventCallback s_fake_event_cb = NULL;
WEAK void **fake_event_get_buffer(PebbleEvent *event) {
switch (event->type) {
case PEBBLE_BLE_GATT_CLIENT_EVENT:
if (event->bluetooth.le.gatt_client.subtype == PebbleBLEGATTClientEventTypeServiceChange) {
return (void **)(&event->bluetooth.le.gatt_client_service.info);
}
break;
default:
break; // Nothing to do!
}
return NULL;
}
void event_put(PebbleEvent* event) {
fake_event_clear_last();
s_last_pebble_event = *event;
++s_fake_event_count;
if (s_fake_event_cb) {
s_fake_event_cb(event);
}
}
bool event_put_isr(PebbleEvent* event) {
return false;
}
QueueHandle_t event_kernel_to_kernel_event_queue(void) {
return (NULL);
}
BaseType_t event_queue_cleanup_and_reset(QueueHandle_t queue) {
return pdPASS;
}
void fake_event_init(void) {
fake_event_reset_count();
fake_event_clear_last();
}
PebbleEvent fake_event_get_last(void) {
return s_last_pebble_event;
}
void fake_event_clear_last(void) {
void **buf = fake_event_get_buffer(&s_last_pebble_event);
if (buf && *buf) {
kernel_free(*buf);
*buf = NULL;
}
s_last_pebble_event = (PebbleEvent) {};
}
void fake_event_reset_count(void) {
s_fake_event_count = 0;
}
uint32_t fake_event_get_count(void) {
return s_fake_event_count;
}
void fake_event_set_callback(FakeEventCallback cb) {
s_fake_event_cb = cb;
}