Pull to refresh

Comments 6

UFO just landed and posted this here
Самсунг, так же как и Тесла, не понимает, что делает. Испортили даже офигенные крутилки. Остаётся только надеяться, что это так и остенется концептом.
1:27 — она крутит крутилку. Что не так-то?
Крутилка — это штука, которой можно было бы воспользоваться или не глядя, или глядя мельком (нацелить руку). Они же не просто так туда экран вставили, они снабдили их динамическими функциями! Теперь надо внимательно посмотреть на все, и найти ту, которая сделает то, что нужно. Или ещё веселее — не найти! Тогда придётся лазить по меню на сенсорном экране.
Хотя, вообще уже то, что они там на экране показывают еду, о многом говорит :)
Три программируемые крутилки сверху. Внизу под правой рукой ещё что-то есть.
Не всё так уж и плохо.
Через SocketCAN можно сделать намного интереснее вещи, чем простой дамп.
В сравнительно новом кернеле есть can.h, там например есть уже определение структуры CAN-пакетов, таким образом можно напрямую брать необходимые данные. Заодно там можно включить фильтр пакетов, чтобы через интерфейс приходили только интересные пользователю.

Вот к примеру как открыть сокет (его после этого можно держать открытым, пока не сдохнет) и узнать пробег грузовика, который поддерживает стандарт FMS:

struct sockaddr_can _canaddr;
struct ifreq ifr;

// открываем
int _handle = socket(PF_CAN, SOCK_RAW, CAN_RAW);
can_err_mask_t _errmask = CAN_ERR_MASK; // принимаем все ошибки
setsockopt(_handle, SOL_CAN_RAW, CAN_RAW_ERR_FILTER, &_errmask, sizeof(_errmask));
_canaddr.can_family = AF_CAN;
snprintf(ifr.ifr_name, "can0", sizeof(ifr.ifr_name));
ioctl(_handle, SIOCGIFINDEX, &ifr);
_canaddr.can_ifindex = ifr.ifr_ifindex;
bind(_handle, reinterpret_cast<struct sockaddr*>(&_canaddr), sizeof(_canaddr));

// и читаем
struct can_frame frame;

if ( recvfrom(_handle, &frame, sizeof(frame), 0, reinterpret_cast<struct sockaddr*>(&_canaddr), &len) > 0 )
{
    if (frame.can_id & 0x00FFFF00 == 0x00fec100)
        double _totalDistance = ( can.data[0] + can.data[1] * 256.0 + can.data[2] * pow(256.0, 2) + can.data[3] * pow(256.0, 3) ) * (5.0 / 1000.0);
}
Sign up to leave a comment.