sylveos

Toy Operating System
Log | Files | Refs

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 }