ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
board_view_provider.c
Go to the documentation of this file.
1
12
13#include <stdint.h>
14#include <unistd.h>
15
16#include "board_view.h"
18
19#ifdef __APPLE__
20
32RA8_INTERNAL static int internal_provider_fd(void* info)
33{
34 return (int)((intptr_t)info - 1);
35}
36
51RA8_INTERNAL static size_t
52internal_provider_read(void* info, void* buffer, off_t position, size_t count)
53{
54 return board_view_read_rgb888_fd(internal_provider_fd(info), position, buffer, count);
55}
56
66RA8_INTERNAL static void internal_provider_release(void* info)
67{
68 (void)close(internal_provider_fd(info));
69}
70
71CGDataProviderRef priv_board_view_provider_create(int snapshot_fd, size_t provider_bytes)
72{
73 if ((snapshot_fd < 0) || (provider_bytes == 0U)) {
74 if (snapshot_fd >= 0) {
75 (void)close(snapshot_fd);
76 }
77 return nullptr;
78 }
79 const CGDataProviderDirectCallbacks callbacks = {
80 .version = 0U,
81 .getBytePointer = nullptr,
82 .releaseBytePointer = nullptr,
83 .getBytesAtPosition = internal_provider_read,
84 .releaseInfo = internal_provider_release,
85 };
86 CGDataProviderRef provider =
87 CGDataProviderCreateDirect((void*)(intptr_t)(snapshot_fd + 1), provider_bytes, &callbacks);
88 if (provider == nullptr) {
89 (void)close(snapshot_fd);
90 }
91 return provider;
92}
93#else
94CGDataProviderRef priv_board_view_provider_create(int snapshot_fd, size_t provider_bytes)
95{
96 (void)provider_bytes;
97 if (snapshot_fd >= 0) {
98 (void)close(snapshot_fd);
99 }
100 return nullptr;
101}
102#endif
Minimal self-contained macOS window for the board emulator.
size_t board_view_read_rgb888_fd(int fd, off_t position, void *buffer, size_t count)
Expand an arbitrary byte range from a sealed RGB565 descriptor.
CGDataProviderRef priv_board_view_provider_create(int snapshot_fd, size_t provider_bytes)
Transfer one sealed RGB565 descriptor into a lazy RGB888 provider.
Internal immutable-fd CoreGraphics provider factory.
void * CGDataProviderRef
Opaque provider handle for non-Apple parse and contract checking.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).