Begin supporting current gear in Python cluster
This commit is contained in:
parent
d650417b9d
commit
8a6f6b7b6b
3 changed files with 39 additions and 10 deletions
|
@ -43,11 +43,14 @@ static int ev_handler(struct can_frame *frame, void *ctx) {
|
||||||
return hexagram_can_if_write(can_if, frame);
|
return hexagram_can_if_write(can_if, frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
static hexagram_schedule_slot table[4] = {
|
#define SCHEDULE_SLOT_COUNT 5
|
||||||
|
|
||||||
|
static hexagram_schedule_slot table[SCHEDULE_SLOT_COUNT] = {
|
||||||
{ 16670, { .can_id = 0x280, .can_dlc = 8 }, ev_handler },
|
{ 16670, { .can_id = 0x280, .can_dlc = 8 }, ev_handler },
|
||||||
{ 16670, { .can_id = 0x288, .can_dlc = 8 }, ev_handler },
|
{ 16670, { .can_id = 0x288, .can_dlc = 8 }, ev_handler },
|
||||||
{ 16670, { .can_id = 0x320, .can_dlc = 8 }, ev_handler },
|
{ 16670, { .can_id = 0x320, .can_dlc = 8 }, ev_handler },
|
||||||
{ 16670, { .can_id = 0x5a0, .can_dlc = 8 }, ev_handler }
|
{ 16670, { .can_id = 0x540, .can_dlc = 8 }, ev_handler },
|
||||||
|
{ 16670, { .can_id = 0x5a0, .can_dlc = 8 }, ev_handler },
|
||||||
};
|
};
|
||||||
|
|
||||||
static void table_update(hexagram_schedule_slot *table,
|
static void table_update(hexagram_schedule_slot *table,
|
||||||
|
@ -62,13 +65,17 @@ static void table_update(hexagram_schedule_slot *table,
|
||||||
table[0].frame.data[3] = (engine_rpm & 0xff00) >> 8;
|
table[0].frame.data[3] = (engine_rpm & 0xff00) >> 8;
|
||||||
table[0].frame.data[2] = engine_rpm & 0x00ff;
|
table[0].frame.data[2] = engine_rpm & 0x00ff;
|
||||||
|
|
||||||
|
/* Current gear */
|
||||||
|
printf("Current gear: %x\n", packet->race.gear);
|
||||||
|
table[3].frame.data[7] = 0xc | (packet->race.gear + 2) << 4;
|
||||||
|
|
||||||
/* Vehicle speed */
|
/* Vehicle speed */
|
||||||
table[3].frame.data[1] = (speed_rps & 0xff00) >> 8;
|
table[4].frame.data[1] = (speed_rps & 0xff00) >> 8;
|
||||||
table[3].frame.data[2] = speed_rps & 0x00ff;
|
table[4].frame.data[2] = speed_rps & 0x00ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
int hexagram_main_dash2can(int argc, char **argv) {
|
int hexagram_main_dash2can(int argc, char **argv) {
|
||||||
size_t i, count = 4;
|
size_t i;
|
||||||
int sock;
|
int sock;
|
||||||
|
|
||||||
struct sockaddr_in sockaddr;
|
struct sockaddr_in sockaddr;
|
||||||
|
@ -102,7 +109,7 @@ int hexagram_main_dash2can(int argc, char **argv) {
|
||||||
goto error_can_if_open;
|
goto error_can_if_open;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<count; i++) {
|
for (i=0; i<SCHEDULE_SLOT_COUNT; i++) {
|
||||||
memset(table[i].frame.data, '\0', sizeof(table[i].frame.data));
|
memset(table[i].frame.data, '\0', sizeof(table[i].frame.data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +119,9 @@ int hexagram_main_dash2can(int argc, char **argv) {
|
||||||
/* Fuel status */
|
/* Fuel status */
|
||||||
table[2].frame.data[2] = 0x0e;
|
table[2].frame.data[2] = 0x0e;
|
||||||
|
|
||||||
if ((schedule = hexagram_schedule_create(table, count, can_if)) == NULL) {
|
if ((schedule = hexagram_schedule_create(table,
|
||||||
|
SCHEDULE_SLOT_COUNT,
|
||||||
|
can_if)) == NULL) {
|
||||||
goto error_schedule_create;
|
goto error_schedule_create;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +133,7 @@ int hexagram_main_dash2can(int argc, char **argv) {
|
||||||
|
|
||||||
if ((len = recv(sock, &packet, sizeof(packet), 0)) < 0) {
|
if ((len = recv(sock, &packet, sizeof(packet), 0)) < 0) {
|
||||||
goto error_io;
|
goto error_io;
|
||||||
} else if (len != (ssize_t)sizeof(packet)) {
|
} else if (len > (ssize_t)sizeof(packet)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ from hexagram.can cimport *
|
||||||
from hexagram.window cimport *
|
from hexagram.window cimport *
|
||||||
|
|
||||||
from hexagram.cluster import Cluster
|
from hexagram.cluster import Cluster
|
||||||
|
from hexagram.trans import Gear
|
||||||
|
|
||||||
CLUSTER_RPM_MIN = 1200
|
CLUSTER_RPM_MIN = 1200
|
||||||
CLUSTER_RPM_REDLINE = 6500
|
CLUSTER_RPM_REDLINE = 6500
|
||||||
|
@ -36,6 +37,14 @@ cdef handle_xevents(hexagram_window *window,
|
||||||
cluster.draw_fg(fg)
|
cluster.draw_fg(fg)
|
||||||
hexagram_window_swap_buffer(window)
|
hexagram_window_swap_buffer(window)
|
||||||
|
|
||||||
|
GEAR_VALUES = {
|
||||||
|
0: Gear.P,
|
||||||
|
1: Gear.R,
|
||||||
|
2: Gear.N,
|
||||||
|
3: Gear.D,
|
||||||
|
4: Gear.S
|
||||||
|
}
|
||||||
|
|
||||||
cdef cluster_update(cluster: Cluster,
|
cdef cluster_update(cluster: Cluster,
|
||||||
fg: cairo.Context,
|
fg: cairo.Context,
|
||||||
hexagram_window *window,
|
hexagram_window *window,
|
||||||
|
@ -49,6 +58,13 @@ cdef cluster_update(cluster: Cluster,
|
||||||
cluster.thermo.value = 0.75 * float(frame.data[1] - 48)
|
cluster.thermo.value = 0.75 * float(frame.data[1] - 48)
|
||||||
elif frame.can_id == 0x320:
|
elif frame.can_id == 0x320:
|
||||||
cluster.fuel.value = frame.data[2] & 0xf
|
cluster.fuel.value = frame.data[2] & 0xf
|
||||||
|
elif frame.can_id == 0x540:
|
||||||
|
value = ((frame.data[7] & 0xf0) >> 4) - 2
|
||||||
|
|
||||||
|
if (frame.data[7] & 0xc) == 0xc:
|
||||||
|
cluster.tacho.gear = Gear(value)
|
||||||
|
else:
|
||||||
|
cluster.tacho.gear = GEAR_VALUES[value]
|
||||||
elif frame.can_id == 0x5a0:
|
elif frame.can_id == 0x5a0:
|
||||||
rps = 0.001 * float(frame.data[1] | (frame.data[2] << 8))
|
rps = 0.001 * float(frame.data[1] | (frame.data[2] << 8))
|
||||||
kph = (2.00152 * rps * 3600) / 1000.0
|
kph = (2.00152 * rps * 3600) / 1000.0
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
import enum
|
import enum
|
||||||
|
|
||||||
class Gear(enum.Enum):
|
class Gear(enum.Enum):
|
||||||
|
S = -4
|
||||||
|
D = -3
|
||||||
|
P = -2
|
||||||
R = -1
|
R = -1
|
||||||
N = 0
|
N = 0
|
||||||
GEAR_1 = 1
|
GEAR_1 = 1
|
||||||
|
@ -15,8 +18,9 @@ class Gear(enum.Enum):
|
||||||
GEAR_10 = 10
|
GEAR_10 = 10
|
||||||
|
|
||||||
__strings__ = {
|
__strings__ = {
|
||||||
-1: 'R', 0: 'N', 1: '1', 2: '2', 3: '3', 4: '4',
|
-2: 'P', -1: 'R', 0: 'N',
|
||||||
5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: '10'
|
1: '1', 2: '2', 3: '3', 4: '4', 5: '5',
|
||||||
|
6: '6', 7: '7', 8: '8', 9: '9', 10: '10'
|
||||||
}
|
}
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue