Skip to content

Commit

Permalink
Merge pull request #239 from leres/master
Browse files Browse the repository at this point in the history
Add support for 33.333kHz and 83.333kHz single wire can speeds.
  • Loading branch information
dexterbg committed Jul 6, 2019
2 parents c76d873 + 6d4f611 commit 6d9ecb7
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 9 deletions.
28 changes: 19 additions & 9 deletions vehicle/OVMS.V3/components/can/src/can.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ void can_start(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, co
const char* bus = cmd->GetParent()->GetParent()->GetName();
const char* mode = cmd->GetName();
int baud = atoi(argv[0]);
esp_err_t res;

CAN_mode_t smode = CAN_MODE_LISTEN;
if (strcmp(mode, "active")==0) smode = CAN_MODE_ACTIVE;
Expand Down Expand Up @@ -87,27 +88,36 @@ void can_start(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, co

switch (baud)
{
case 33333:
res = sbus->Start(smode,CAN_SPEED_33KBPS,dbcfile);
break;
case 83333:
res = sbus->Start(smode,CAN_SPEED_83KBPS,dbcfile);
break;
case 100000:
sbus->Start(smode,CAN_SPEED_100KBPS,dbcfile);
res = sbus->Start(smode,CAN_SPEED_100KBPS,dbcfile);
break;
case 125000:
sbus->Start(smode,CAN_SPEED_125KBPS,dbcfile);
res = sbus->Start(smode,CAN_SPEED_125KBPS,dbcfile);
break;
case 250000:
sbus->Start(smode,CAN_SPEED_250KBPS,dbcfile);
res = sbus->Start(smode,CAN_SPEED_250KBPS,dbcfile);
break;
case 500000:
sbus->Start(smode,CAN_SPEED_500KBPS,dbcfile);
res = sbus->Start(smode,CAN_SPEED_500KBPS,dbcfile);
break;
case 1000000:
sbus->Start(smode,CAN_SPEED_1000KBPS,dbcfile);
res = sbus->Start(smode,CAN_SPEED_1000KBPS,dbcfile);
break;
default:
writer->puts("Error: Unrecognised speed (100000, 125000, 250000, 500000, 1000000 are accepted)");
writer->puts("Error: Unrecognised speed (33333, 83333, 100000, 125000, 250000, 500000, 1000000 are accepted)");
return;
}
writer->printf("Can bus %s started in mode %s at speed %dbps\n",
if (res == ESP_OK)
writer->printf("Can bus %s started in mode %s at speed %dbps\n",
bus, mode, baud);
else
writer->printf("Failed to start can bus %s\n",bus);
}

void can_stop(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, const char* const* argv)
Expand Down Expand Up @@ -237,7 +247,7 @@ void can_status(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, c
writer->printf("CAN: %s\n",sbus->GetName());
writer->printf("Mode: %s\n",(sbus->m_mode==CAN_MODE_OFF)?"Off":
((sbus->m_mode==CAN_MODE_LISTEN)?"Listen":"Active"));
writer->printf("Speed: %d\n",(sbus->m_speed)*1000);
writer->printf("Speed: %d\n",MAP_CAN_SPEED(sbus->m_speed));
writer->printf("DBC: %s\n",(sbus->GetDBC())?sbus->GetDBC()->GetName().c_str():"none");
writer->printf("Interrupts:%20d\n",sbus->m_status.interrupts);
writer->printf("Rx pkt: %20d\n",sbus->m_status.packets_rx);
Expand Down Expand Up @@ -267,7 +277,7 @@ void can_list(int verbosity, OvmsWriter* writer, OvmsCommand* cmd, int argc, con
sbus->GetName(),
(sbus->m_mode==CAN_MODE_OFF)?"Off":
((sbus->m_mode==CAN_MODE_LISTEN)?"Listen":"Active"),
sbus->m_speed * 1000,
MAP_CAN_SPEED(sbus->m_speed),
(sbus->GetDBC())?sbus->GetDBC()->GetName().c_str():"none");
}
}
Expand Down
6 changes: 6 additions & 0 deletions vehicle/OVMS.V3/components/can/src/can.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,19 @@ typedef enum
// CAN link speed (100kbps -> 1MHz)
typedef enum
{
CAN_SPEED_33KBPS=33, // CAN Node runs at 33.333kBit/s
CAN_SPEED_83KBPS=83, // CAN Node runs at 83.333kBit/s
CAN_SPEED_100KBPS=100, // CAN Node runs at 100kBit/s
CAN_SPEED_125KBPS=125, // CAN Node runs at 125kBit/s
CAN_SPEED_250KBPS=250, // CAN Node runs at 250kBit/s
CAN_SPEED_500KBPS=500, // CAN Node runs at 500kBit/s
CAN_SPEED_1000KBPS=1000 // CAN Node runs at 1000kBit/s
} CAN_speed_t;

/* Map CAN_speed_t to a Bit/s value */
#define MAP_CAN_SPEED(s) \
((s) > CAN_SPEED_83KBPS ? (((int)(s)) * 1000) : ((((int)(s)) * 1000) + 333))

// CAN frame type (standard/extended)
typedef enum
{
Expand Down
11 changes: 11 additions & 0 deletions vehicle/OVMS.V3/components/esp32can/src/esp32can.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,17 @@ esp32can::~esp32can()

esp_err_t esp32can::Start(CAN_mode_t mode, CAN_speed_t speed)
{
switch (speed)
{
case CAN_SPEED_33KBPS:
case CAN_SPEED_83KBPS:
/* XXX not yet */
ESP_LOGW(TAG,"%d not supported",speed);
return ESP_FAIL;
default:
break;
}

canbus::Start(mode, speed);

double __tq; // Time quantum
Expand Down
6 changes: 6 additions & 0 deletions vehicle/OVMS.V3/components/mcp2515/src/mcp2515.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,12 @@ esp_err_t mcp2515::Start(CAN_mode_t mode, CAN_speed_t speed)
uint8_t cnf3 = 0;
switch (m_speed)
{
case CAN_SPEED_33KBPS:
cnf1=0x09; cnf2=0xbe; cnf3=0x07;
break;
case CAN_SPEED_83KBPS:
cnf1=0x03; cnf2=0xbe; cnf3=0x07;
break;
case CAN_SPEED_100KBPS:
cnf1=0x03; cnf2=0xfa; cnf3=0x87;
break;
Expand Down

0 comments on commit 6d9ecb7

Please sign in to comment.