+ AFB_DEBUG("ID WRITE RAW : %d",sf.signals[0]->get_message()->get_id());
+ if(type == socket_type::BCM)
+ {
+ if(sf.signals[0]->get_message()->is_fd())
+ {
+ AFB_DEBUG("CANFD_MAX_DLEN");
+ message->set_flags(CAN_FD_FRAME);
+ message->set_maxdlen(CANFD_MAX_DLEN);
+ }
+ else
+ {
+ AFB_DEBUG("CAN_MAX_DLEN");
+ message->set_maxdlen(CAN_MAX_DLEN);
+ }
+ }
+
+ if((message->get_length()> 0 && (
+ ((type == socket_type::BCM) && (
+ (message->get_length() <= CANFD_MAX_DLEN * MAX_BCM_CAN_FRAMES && message->get_flags() & CAN_FD_FRAME)
+ || (message->get_length() <= CAN_MAX_DLEN * MAX_BCM_CAN_FRAMES && !(message->get_flags() & CAN_FD_FRAME))
+ ))
+ #ifdef USE_FEATURE_J1939
+ || (message->get_length() <= J1939_MAX_DLEN && type == socket_type::J1939)
+ #endif
+ )))
+ {
+ std::vector<uint8_t> data;
+ for (int i = 0 ; i < message->get_length() ; i++)
+ {
+ struct json_object *one_can_data = json_object_array_get_idx(can_data, i);
+ data.push_back((json_object_is_type(one_can_data, json_type_int)) ?
+ (uint8_t)json_object_get_int(one_can_data) : 0);
+ }
+ message->set_data(data);
+ }
+ else
+ {
+ if(type == socket_type::BCM)
+ {
+ afb_req_fail(request, "Invalid", "Frame BCM");
+ }
+ else if(type == socket_type::J1939)
+ {
+ afb_req_fail(request, "Invalid", "Frame J1939");
+ }
+ else
+ {
+ afb_req_fail(request, "Invalid", "Frame");
+ }
+ return;
+ }
+
+ if(! send_message(message, application_t::instance().get_can_bus_manager().get_can_device_name(bus_name),type))