云海游戏(中国区)有限公司官网

  • example/c/j1939_db.c
    /*
    ** This software is furnished as Redistributable under the 云海游戏 Software Licence
    ** https://www.kvaser.com/canlib-webhelp/page_license_and_copyright.html
    ** Description:
    ** This is a sample console program that uses kvadblib to create and access CAN
    ** databases. It creates a J1939 database file named 'my_J1939_db.dbc' in
    ** the directory where it is invoked.
    ** The program is just intended as an example of how to use kvadblib. It's not
    ** performance optimized in any way. It may, or may not, be useful for you.
    */
    #include <stdio.h>
    // kvadblib requires the following #include.
    #include "kvaDbLib.h"
    // Forward declarations
    void Check(const char* id, KvaDbStatus stat);
    KvaDbHnd createJ1939Db(char *path);
    int main(int argc, char* argv[])
    {
    KvaDbHnd db_handle;
    KvaDbStatus status;
    char* path = "my_J1939_db.dbc";
    db_handle = createJ1939Db(path);
    // Write database to file
    status = kvaDbWriteFile(db_handle, path);
    Check("kvaDbWriteFile", status);
    }
    void Check(const char* id, KvaDbStatus stat)
    {
    if (stat < 0) {
    printf("%s: failed, stat=%d\n", id, (int)stat);
    }
    }
    /* Construct database from scratch with a single J1939 message
    * with necessary J1939 attributes.
    */
    KvaDbHnd createJ1939Db(char* path) {
    KvaDbStatus status;
    KvaDbHnd db_handle;
    KvaDbAttributeDefHnd ProtocolType_attr, VFrameFormat_attr;
    char* VFrameFormat_enum_names[4] = {"StandardCAN", "ExtendedCAN", "reserved", "J1939PG"};
    /* ######################################
    Construct J1939 database
    ###################################### */
    // Open handle to database
    status = kvaDbOpen(&db_handle);
    Check("kvaDbOpen", status);
    // Associate a new database with database handle
    status = kvaDbCreate(db_handle, path, NULL);
    Check("kvaDbCreate", status);
    // Add necessary J1939 attributes to database
    status = kvaDbAddAttributeDefinition(db_handle, &ProtocolType_attr);
    Check("kvaDbAddAttributeDefinition protocolType", status);
    Check("kvaDbSetAttributeDefinitionType protocolType", status);
    status = kvaDbSetAttributeDefinitionName(ProtocolType_attr, "ProtocolType");
    Check("kvaDbSetAttributeDefinitionName protocolType", status);
    Check("kvaDbSetAttributeDefinitionOwner protocolType", status);
    status = kvaDbSetAttributeDefinitionString(ProtocolType_attr, "J1939");
    Check("kvaDbSetAttributeDefinitionString protocolType", status);
    status = kvaDbAddAttributeDefinition(db_handle, &VFrameFormat_attr);
    Check("kvaDbAddAttributeDefinition VFrameFormat", status);
    Check("kvaDbSetAttributeDefinitionType VFrameFormat", status);
    status = kvaDbSetAttributeDefinitionName(VFrameFormat_attr, "VFrameFormat");
    Check("kvaDbSetAttributeDefinitionName VFrameFormat", status);
    Check("kvaDbSetAttributeDefinitionOwner VFrameFormat", status);
    for (int i = 0; i < 4; i++) {
    status = kvaDbAddAttributeDefinitionEnum(VFrameFormat_attr, VFrameFormat_enum_names[i], i);
    Check("kvaDbAddAttributeDefinitionEnum", status);
    }
    /* ######################################
    Define a message with J1939 flag
    ###################################### */
    // Add message to database
    status = kvaDbAddMsg(db_handle, &mh);
    Check("kvaDbAddMsg", status);
    status = kvaDbSetMsgName(mh, "NewTestMsgJ1939");
    Check("kvaDbSetMsgName", status);
    status = kvaDbSetMsgDlc(mh, 8);
    Check("kvaDbSetMsgDlc", status);
    status = kvaDbSetMsgIdEx(mh, 0xCF00401);
    Check("kvaDbSetMsgId", status);
    // Set message flags, note flag argument KVADB_MESSAGE_J1939
    Check("kvaDbSetMsgFlags", status);
    /* ######################################
    Add a signal to the message
    ###################################### */
    // Add signal to message
    status = kvaDbAddSignal(mh, &sh);
    Check("kvaDbAddSignal", status);
    status = kvaDbSetSignalName(sh, "NewTestSignal");
    Check("kvaDbSetSignalName", status);
    status = kvaDbSetSignalComment(sh, "A test signal.");
    Check("kvaDbSetSignalComment", status);
    status = kvaDbSetSignalUnit(sh, "-");
    Check("kvaDbSetSignalUnit", status);
    Check("kvaDbSetSignalEncoding", status);
    Check("kvaDbSetSignalRepresentationType", status);
    status = kvaDbSetSignalValueSize(sh, 0, 8);
    Check("kvaDbSetSignalValueSize", status);
    status = kvaDbSetSignalValueLimits(sh, 0, 255);
    Check("kvaDbSetSignalValueLimits", status);
    return db_handle;
    }
    【网站地图】【sitemap】