nrf-client.zig (1400B)
1 const std = @import("std"); 2 const shared = @import("shared"); 3 const pi = @import("pi"); 4 5 const nrf = pi.devices.nrf; 6 const clock = pi.devices.clock; 7 const uart = pi.devices.mini_uart; 8 9 fn wait_for_ans(client_dev: *nrf.Device) !u8 { 10 var buffer: [4]u8 = undefined; 11 12 while (true) { 13 const bytes_collected = client_dev.receive(&buffer) catch |err| { 14 if (err == nrf.Error.NotReady) continue; 15 return err; 16 }; 17 if (bytes_collected == 4) break; 18 if (bytes_collected > 0) { 19 uart.print("read: {d}\n", .{bytes_collected}); 20 } 21 22 clock.delay_ms(1); 23 } 24 25 return buffer[3]; 26 } 27 28 // Server: 29 // CS - 8 30 // CE - 6 31 // 32 // Client: 33 // CS - 7 34 // CE - 5 35 pub fn main() !void { 36 uart.print("creating client\n", .{}); 37 38 const client_addr = 0xE5E5E5E5E5; 39 40 var client_dev: nrf.Device = try .init(.{ 41 .spi_config = .{ 42 .chip_select = .@"1", 43 .pins = .Lower, 44 }, 45 .ce_pin = 5, 46 .int_pin = 22, 47 .payload_size = 4, 48 }); 49 uart.print("initialized client\n", .{}); 50 51 try client_dev.set_rx_addr(0, client_addr); 52 client_dev.connect(); 53 54 while (true) { 55 const b = try wait_for_ans(&client_dev); 56 57 uart.print("got byte: {c}\n", .{b}); 58 59 clock.delay_ms(10); 60 61 if (b == '\r') break; 62 } 63 64 uart.print("done!\n", .{}); 65 uart.flush(); 66 }