1.1 --- a/pkg/landfall-examples/hw_info/hw_info.c Sat May 04 22:52:55 2024 +0200
1.2 +++ b/pkg/landfall-examples/hw_info/hw_info.c Sat May 04 22:53:28 2024 +0200
1.3 @@ -1009,6 +1009,42 @@
1.4 printf("\n");
1.5 }
1.6
1.7 +static void i2c_set(void)
1.8 +{
1.9 + void *channel;
1.10 + int num;
1.11 + uint8_t buffer[32];
1.12 + unsigned int address, reg, value;
1.13 +
1.14 + channel = get_channel(num_i2c_channels, i2c_channels, &num);
1.15 +
1.16 + if (channel == NULL)
1.17 + return;
1.18 +
1.19 + if (!read_encoded_number("Address", "%2x", &address))
1.20 + return;
1.21 +
1.22 + if (address >= 0x80)
1.23 + {
1.24 + printf("Address must be less than 80.\n");
1.25 + return;
1.26 + }
1.27 +
1.28 + if (!read_encoded_number("Register", "%2x", ®))
1.29 + return;
1.30 +
1.31 + if (!read_encoded_number("Value", "%2x", &value))
1.32 + return;
1.33 +
1.34 + buffer[0] = (uint8_t) (reg & 0xff);
1.35 + buffer[1] = (uint8_t) (value & 0xff);
1.36 +
1.37 + i2c_set_target(channel, address);
1.38 +
1.39 + if (!_i2c_write(channel, buffer, 2, 1, i2c_irqs[num], 1000000))
1.40 + printf("Register write failed.\n");
1.41 +}
1.42 +
1.43 static void i2c_scan(void)
1.44 {
1.45 void *channel;
1.46 @@ -1820,10 +1856,12 @@
1.47 new_i2c_channel(i2c);
1.48 else if (!strcmp(token, "g") || !strcmp(token, "get"))
1.49 i2c_get();
1.50 - else if (!strcmp(token, "s") || !strcmp(token, "scan"))
1.51 + else if (!strcmp(token, "S") || !strcmp(token, "scan"))
1.52 i2c_scan();
1.53 + else if (!strcmp(token, "s") || !strcmp(token, "set"))
1.54 + i2c_set();
1.55 else
1.56 - printf("i2c channel | get | list | scan\n");
1.57 + printf("i2c channel | get | list | scan | set\n");
1.58 }
1.59 else
1.60 list_i2c_channels();