#include <uds/uds.h>
#include <check.h>
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
extern bool can_frame_was_sent;
extern void setup();
extern bool last_response_was_received;
extern DiagnosticResponse last_response_received;
extern DiagnosticShims SHIMS;
extern uint16_t last_can_frame_sent_arb_id;
extern uint8_t last_can_payload_sent[8];
extern uint8_t last_can_payload_size;
void response_received_handler(const DiagnosticResponse* response) {
last_response_was_received = true;
last_response_received = *response;
}
START_TEST (test_receive_wrong_arb_id)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_POWERTRAIN_DIAGNOSTIC_REQUEST
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(last_response_was_received);
const uint8_t can_data[] = {0x2, request.mode + 0x40, 0x23};
diagnostic_receive_can_frame(&SHIMS, &handle, request.arbitration_id,
can_data, sizeof(can_data));
fail_if(last_response_was_received);
}
END_TEST
START_TEST (test_send_diag_request_with_payload)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_POWERTRAIN_DIAGNOSTIC_REQUEST,
payload: {0x12, 0x34},
payload_length: 2,
no_frame_padding: true
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(handle.completed);
// TODO it'd be better to check the ISO-TP message instead of the CAN frame,
// but we don't have a good way to do that
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_sent[1], request.mode);
ck_assert_int_eq(last_can_payload_size, 4);
ck_assert_int_eq(last_can_payload_sent[2], request.payload[0]);
ck_assert_int_eq(last_can_payload_sent[3], request.payload[1]);
}
END_TEST
START_TEST (test_send_functional_request)
{
DiagnosticRequest request = {
arbitration_id: OBD2_FUNCTIONAL_BROADCAST_ID,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST,
no_frame_padding: true
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(handle.completed);
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_sent[1], request.mode);
ck_assert_int_eq(last_can_payload_size, 2);
fail_if(last_response_was_received);
const uint8_t can_data[] = {0x2, request.mode + 0x40, 0x23};
for(uint16_t filter = OBD2_FUNCTIONAL_RESPONSE_START; filter <
OBD2_FUNCTIONAL_RESPONSE_START + OBD2_FUNCTIONAL_RESPONSE_COUNT;
filter++) {
DiagnosticResponse response = diagnostic_receive_can_frame(&SHIMS,
&handle, filter, can_data, sizeof(can_data));
fail_unless(response.success);
fail_unless(response.completed);
fail_unless(handle.completed);
ck_assert(last_response_received.success);
ck_assert_int_eq(last_response_received.arbitration_id,
filter);
ck_assert_int_eq(last_response_received.mode, request.mode);
fail_if(last_response_received.has_pid);
ck_assert_int_eq(last_response_received.payload_length, 1);
ck_assert_int_eq(last_response_received.payload[0], can_data[2]);
}
}
END_TEST
START_TEST (test_sent_message_no_padding)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST,
no_frame_padding: true
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(handle.completed);
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_size, 2);
}
END_TEST
START_TEST (test_sent_message_is_padded_by_default)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(handle.completed);
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_size, 8);
}
END_TEST
START_TEST (test_sent_message_is_padded)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST,
no_frame_padding: false
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(handle.completed);
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_size, 8);
}
END_TEST
START_TEST (test_send_diag_request)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST,
no_frame_padding: true
};
DiagnosticRequestHandle handle = diagnostic_request(&SHIMS, &request,
response_received_handler);
fail_if(handle.completed);
fail_unless(can_frame_was_sent);
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_sent[1], request.mode);
ck_assert_int_eq(last_can_payload_size, 2);
fail_if(last_response_was_received);
const uint8_t can_data[] = {0x2, request.mode + 0x40, 0x23};
DiagnosticResponse response = diagnostic_receive_can_frame(&SHIMS, &handle,
request.arbitration_id + 0x8, can_data, sizeof(can_data));
fail_unless(response.success);
fail_unless(response.completed);
fail_unless(handle.completed);
ck_assert(last_response_received.success);
ck_assert_int_eq(last_response_received.arbitration_id,
request.arbitration_id + 0x8);
ck_assert_int_eq(last_response_received.mode, request.mode);
fail_if(last_response_received.has_pid);
ck_assert_int_eq(last_response_received.payload_length, 1);
ck_assert_int_eq(last_response_received.payload[0], can_data[2]);
}
END_TEST
START_TEST (test_generate_then_send_request)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST,
no_frame_padding: true
};
DiagnosticRequestHandle handle = generate_diagnostic_request(&SHIMS,
&request, response_received_handler);
fail_if(handle.completed);
fail_if(can_frame_was_sent);
start_diagnostic_request(&SHIMS, &handle);
fail_unless(can_frame_was_sent);
ck_assert_int_eq(last_can_frame_sent_arb_id, request.arbitration_id);
ck_assert_int_eq(last_can_payload_sent[1], request.mode);
ck_assert_int_eq(last_can_payload_size, 2);
fail_if(last_response_was_received);
const uint8_t can_data[] = {0x2, request.mode + 0x40, 0x23};
DiagnosticResponse response = diagnostic_receive_can_frame(&SHIMS, &handle,
request.arbitration_id + 0x8, can_data, sizeof(can_data));
fail_unless(response.success);
fail_unless(response.completed);
fail_unless(handle.completed);
ck_assert(last_response_received.success);
ck_assert_int_eq(last_response_received.arbitration_id,
request.arbitration_id + 0x8);
ck_assert_int_eq(last_response_received.mode, request.mode);
fail_if(last_response_received.has_pid);
ck_assert_int_eq(last_response_received.payload_length, 1);
ck_assert_int_eq(last_response_received.payload[0], can_data[2]);
}
END_TEST
START_TEST (test_generate_diag_request)
{
DiagnosticRequest request = {
arbitration_id: 0x100,
mode: OBD2_MODE_EMISSIONS_DTC_REQUEST,
no_frame_padding: true
};
DiagnosticRequestHandle handle = generate_diagnostic_request(&SHIMS,
&request, response_received_handler);
fail_if(handle.completed);
fail_if(can_frame
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
uds-c-master.rar (62个子文件)
uds-c-master
.travis.yml 161B
.gitmodules 187B
SourceInsight
UDS-C.si4project
cache
parse
.._src_uds_extras.h.sisc 11KB
.._tests_common.c.sisc 5KB
.._src_uds_uds.c.sisc 40KB
.._src_uds_extras.c.sisc 7KB
.._tests_test_core.c.sisc 18KB
.._src_uds_uds_types.h.sisc 13KB
.._src_uds_uds.h.sisc 18KB
UDS-C.siproj_settings.xml 537B
README.mkd 7KB
deps
isotp-c
.travis.yml 174B
.gitmodules 92B
README.mkd 5KB
deps
bitfield-c
tests
test_receive.c 7KB
common.c 3KB
test_send.c 3KB
test_core.c 2KB
LICENSE 1KB
src
isotp
send.c 3KB
isotp.h 1KB
receive.c 6KB
send.h 3KB
isotp_types.h 5KB
isotp.c 1KB
receive.h 3KB
.gitignore 36B
runtests.sh 289B
Makefile 2KB
CHANGELOG.mkd 186B
bitfield-c
.travis.yml 140B
README.mkd 3KB
tests
read_tests.c 2KB
bitfield_tests.c 4KB
8byte_tests.c 8KB
write_tests.c 3KB
LICENSE 1KB
src
canutil
write.c 2KB
read.h 3KB
write.h 2KB
read.c 1KB
bitfield
8byte.c 2KB
bitfield.h 8KB
8byte.h 3KB
bitarray.c 5KB
bitfield.c 2KB
.gitignore 29B
runtests.sh 289B
Makefile 2KB
CHANGELOG.mkd 54B
tests
common.c 1KB
test_core.c 16KB
LICENSE 1KB
src
uds
extras.h 2KB
uds_types.h 7KB
uds.h 7KB
uds.c 14KB
extras.c 1KB
.gitignore 29B
runtests.sh 289B
Makefile 2KB
CHANGELOG.mkd 58B
共 62 条
- 1
资源评论
- lifengheart2023-05-11跟你想象的不是一个东西
guchujie
- 粉丝: 2
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功