Skip to content

Commit dbbdcdd

Browse files
Merge branch 'ZigEmbeddedGroup:main' into main
2 parents 66aba99 + 157b58f commit dbbdcdd

43 files changed

Lines changed: 3308 additions & 2647 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/lint.yml

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,27 @@ jobs:
274274
// Dismiss all existing bot reviews and resolve their conversations
275275
for (const review of botReviews) {
276276
if (review.state !== 'DISMISSED') {
277+
// Resolve threads first
277278
await resolveReviewThreads(review.id);
278-
await github.rest.pulls.dismissReview({
279-
owner: context.repo.owner,
280-
repo: context.repo.repo,
281-
pull_number: context.issue.number,
282-
review_id: review.id,
283-
message: 'All lint issues have been resolved'
284-
});
285-
console.log(`Dismissed review ${review.id} and resolved conversations`);
279+
280+
// Only dismiss reviews that can be dismissed (APPROVED or CHANGES_REQUESTED)
281+
// COMMENTED reviews cannot be dismissed via the API
282+
if (review.state === 'APPROVED' || review.state === 'CHANGES_REQUESTED') {
283+
try {
284+
await github.rest.pulls.dismissReview({
285+
owner: context.repo.owner,
286+
repo: context.repo.repo,
287+
pull_number: context.issue.number,
288+
review_id: review.id,
289+
message: 'All lint issues have been resolved'
290+
});
291+
console.log(`Dismissed ${review.state} review ${review.id} and resolved conversations`);
292+
} catch (error) {
293+
console.log(`Could not dismiss review ${review.id}: ${error.message}`);
294+
}
295+
} else {
296+
console.log(`Skipped dismissing ${review.state} review ${review.id} (only threads resolved)`);
297+
}
286298
}
287299
}
288300
@@ -310,15 +322,27 @@ jobs:
310322
// Dismiss ALL existing bot reviews and resolve their conversations
311323
for (const review of botReviews) {
312324
if (review.state !== 'DISMISSED') {
325+
// Resolve threads first
313326
await resolveReviewThreads(review.id);
314-
await github.rest.pulls.dismissReview({
315-
owner: context.repo.owner,
316-
repo: context.repo.repo,
317-
pull_number: context.issue.number,
318-
review_id: review.id,
319-
message: 'Updating with new lint results'
320-
});
321-
console.log(`Dismissed review ${review.id} and resolved conversations`);
327+
328+
// Only dismiss reviews that can be dismissed (APPROVED or CHANGES_REQUESTED)
329+
// COMMENTED reviews cannot be dismissed via the API
330+
if (review.state === 'APPROVED' || review.state === 'CHANGES_REQUESTED') {
331+
try {
332+
await github.rest.pulls.dismissReview({
333+
owner: context.repo.owner,
334+
repo: context.repo.repo,
335+
pull_number: context.issue.number,
336+
review_id: review.id,
337+
message: 'Updating with new lint results'
338+
});
339+
console.log(`Dismissed ${review.state} review ${review.id} and resolved conversations`);
340+
} catch (error) {
341+
console.log(`Could not dismiss review ${review.id}: ${error.message}`);
342+
}
343+
} else {
344+
console.log(`Skipped dismissing ${review.state} review ${review.id} (only threads resolved)`);
345+
}
322346
}
323347
}
324348

drivers/build.zig.zon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.{
22
.name = .mz_drivers,
33
.fingerprint = 0x576453eedc5af46e,
4+
.minimum_zig_version = "0.15.1",
45
.version = "0.0.1",
56
.paths = .{
67
"build.zig",

drivers/framework.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ pub const wireless = struct {
7777
pub const Cyw43_Bus = cyw43_bus.Cyw43_Bus;
7878
pub const Cyw43_Runner = cyw43_runner.Cyw43_Runner;
7979
// pub const sx1278 = @import("wireless/sx1278.zig");
80+
81+
pub const Cyw43439 = @import("wireless/cyw43439.zig");
8082
};
8183

8284
pub const time = struct {

drivers/wireless/cyw43439.zig

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
const std = @import("std");
2+
const mem = std.mem;
3+
const assert = std.debug.assert;
4+
5+
const Bus = @import("cyw43439/bus.zig");
6+
const WiFi = @import("cyw43439/wifi.zig");
7+
8+
const log = std.log.scoped(.cyw43);
9+
10+
const Self = @This();
11+
12+
bus: Bus = undefined,
13+
wifi: WiFi = undefined,
14+
mac: [6]u8 = @splat(0),
15+
16+
pub fn init(
17+
self: *Self,
18+
spi: Bus.Spi,
19+
sleep_ms: *const fn (delay: u32) void,
20+
) !void {
21+
self.bus = .{ .spi = spi, .sleep_ms = sleep_ms };
22+
try self.bus.init();
23+
24+
self.wifi = .{ .bus = &self.bus };
25+
try self.wifi.init();
26+
27+
self.mac = try self.read_mac();
28+
}
29+
30+
pub fn join(self: *Self, ssid: []const u8, pwd: []const u8, opt: WiFi.JoinOptions) !void {
31+
try self.wifi.join(ssid, pwd, opt);
32+
}
33+
34+
fn show_clm_ver(self: *Self) !void {
35+
var data: [128]u8 = @splat(0);
36+
const n = try self.wifi.get_var("clmver", &data);
37+
var iter = mem.splitScalar(u8, data[0..n], 0x0a);
38+
log.debug("clmver:", .{});
39+
while (iter.next()) |line| {
40+
if (line.len == 0 or line[0] == 0x00) continue;
41+
log.debug(" {s}", .{line});
42+
}
43+
}
44+
45+
fn read_mac(self: *Self) ![6]u8 {
46+
var mac: [6]u8 = @splat(0);
47+
const n = try self.wifi.get_var("cur_etheraddr", &mac);
48+
if (n != mac.len) {
49+
log.err("read_mac unexpected read bytes: {}", .{n});
50+
return error.ReadMacFailed;
51+
}
52+
return mac;
53+
}
54+
55+
pub fn recv_zc(ptr: *anyopaque, bytes: []u8) anyerror!?struct { usize, usize } {
56+
const self: *Self = @ptrCast(@alignCast(ptr));
57+
return self.wifi.recv_zc(bytes);
58+
}
59+
60+
pub fn send_zc(ptr: *anyopaque, bytes: []u8) anyerror!void {
61+
const self: *Self = @ptrCast(@alignCast(ptr));
62+
try self.wifi.send_zc(bytes);
63+
}
64+
65+
pub fn ready(ptr: *anyopaque) bool {
66+
const self: *Self = @ptrCast(@alignCast(ptr));
67+
return self.wifi.has_credit();
68+
}
69+
70+
pub fn gpio(self: *Self, pin: u2) Pin {
71+
assert(pin < 3);
72+
self.wifi.gpio_enable(pin);
73+
return .{
74+
.pin = pin,
75+
.wifi = &self.wifi,
76+
};
77+
}
78+
79+
pub const Pin = struct {
80+
pin: u2,
81+
wifi: *WiFi,
82+
83+
pub fn get(self: *Pin) bool {
84+
return self.wifi.gpio_get(self.pin);
85+
}
86+
87+
pub fn put(self: *Pin, value: u1) void {
88+
self.wifi.gpio_set(self.pin, value);
89+
}
90+
91+
pub fn toggle(self: *Pin) void {
92+
self.wifi.gpio_toggle(self.pin);
93+
}
94+
};
95+
96+
// References:
97+
// https://github.com/embassy-rs/embassy/blob/abb1d8286e2415686150e2e315ca1c380659c3c3/cyw43/src/consts.rs
98+
// https://github.com/jbentham/picowi/blob/main/lib/picowi_regs.h
99+
// https://github.com/georgerobotics/cyw43-driver/blob/dd7568229f3bf7a37737b9e1ef250c26efe75b23/src/cyw43_ll.c#L126

0 commit comments

Comments
 (0)