Refactor dash2can using hexagram_schedule
This commit is contained in:
		
							parent
							
								
									e7f2de41ca
								
							
						
					
					
						commit
						41abc005cd
					
				
					 1 changed files with 36 additions and 39 deletions
				
			
		|  | @ -13,6 +13,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <hexagram/can.h> | #include <hexagram/can.h> | ||||||
| #include <hexagram/capture.h> | #include <hexagram/capture.h> | ||||||
|  | #include <hexagram/schedule.h> | ||||||
| #include <hexagram/telemetry/dash.h> | #include <hexagram/telemetry/dash.h> | ||||||
| 
 | 
 | ||||||
| #include "dash2can.h" | #include "dash2can.h" | ||||||
|  | @ -35,11 +36,22 @@ static void usage(int argc, char **argv, const char *message, ...) { | ||||||
|     exit(1); |     exit(1); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static hexagram_schedule_slot table[] = { | ||||||
|  |     { 16670, NULL, { .can_id = 0x280, .can_dlc = 8 }}, | ||||||
|  |     { 16670, NULL, { .can_id = 0x288, .can_dlc = 8 }}, | ||||||
|  |     { 16670, NULL, { .can_id = 0x320, .can_dlc = 8 }}, | ||||||
|  |     { 16670, NULL, { .can_id = 0x5a0, .can_dlc = 8 }}, | ||||||
|  |     { 0, NULL, {} } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| int hexagram_main_dash2can(int argc, char **argv) { | int hexagram_main_dash2can(int argc, char **argv) { | ||||||
|     int sock; |     int sock; | ||||||
| 
 | 
 | ||||||
|     struct sockaddr_in sockaddr; |     struct sockaddr_in sockaddr; | ||||||
|     hexagram_can_if *can_if; |     hexagram_can_if *can_if; | ||||||
|  |     hexagram_schedule *schedule; | ||||||
|  | 
 | ||||||
|  |     size_t i, count = 4; | ||||||
| 
 | 
 | ||||||
|     if (argc < 2) { |     if (argc < 2) { | ||||||
|         usage(argc, argv, "No listening UDP port provided"); |         usage(argc, argv, "No listening UDP port provided"); | ||||||
|  | @ -68,9 +80,24 @@ int hexagram_main_dash2can(int argc, char **argv) { | ||||||
|         goto error_can_if_open; |         goto error_can_if_open; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     for (i=0; i<count; i++) { | ||||||
|  |         table[i].iface = can_if; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /* Engine temperature  */ | ||||||
|  |     table[1].frame.data[1] = (uint8_t)((87.0 / 0.75) + 48); | ||||||
|  | 
 | ||||||
|  |     /* Fuel status */ | ||||||
|  |     table[2].frame.data[2] = 0x0e; | ||||||
|  | 
 | ||||||
|  |     if ((schedule = hexagram_schedule_create(table, count)) == NULL) { | ||||||
|  |         goto error_schedule_create; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     hexagram_schedule_run(schedule); | ||||||
|  | 
 | ||||||
|     while (1) { |     while (1) { | ||||||
|         hexagram_telemetry_dash_packet packet; |         hexagram_telemetry_dash_packet packet; | ||||||
|         struct can_frame frame; |  | ||||||
|         ssize_t len; |         ssize_t len; | ||||||
| 
 | 
 | ||||||
|         float speed_ms = sqrt(powf(packet.velocity.x, 2) |         float speed_ms = sqrt(powf(packet.velocity.x, 2) | ||||||
|  | @ -86,48 +113,15 @@ int hexagram_main_dash2can(int argc, char **argv) { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /* Engine speed */ |         /* Engine speed */ | ||||||
|         memset(&frame, '\0', sizeof(frame)); |         table[0].frame.data[3] = (engine_rpm & 0xff00) >> 8; | ||||||
|         frame.can_id  = 0x280; |         table[0].frame.data[2] =  engine_rpm & 0x00ff; | ||||||
|         frame.can_dlc = 8; |  | ||||||
|         frame.data[3] = (engine_rpm & 0xff00) >> 8; |  | ||||||
|         frame.data[2] =  engine_rpm & 0x00ff; |  | ||||||
| 
 |  | ||||||
|         if (hexagram_can_if_write(can_if, &frame) < 0) { |  | ||||||
|             goto error_io; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /* Engine temperature  */ |  | ||||||
|         memset(frame.data, '\0', sizeof(frame.data)); |  | ||||||
|         frame.can_id  = 0x288; |  | ||||||
|         frame.can_dlc = 8; |  | ||||||
|         frame.data[1] = (uint8_t)((87.0 / 0.75) + 48); |  | ||||||
| 
 |  | ||||||
|         if (hexagram_can_if_write(can_if, &frame) < 0) { |  | ||||||
|             goto error_io; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         /* Fuel status */ |  | ||||||
|         memset(frame.data, '\0', sizeof(frame.data)); |  | ||||||
|         frame.can_id  = 0x320; |  | ||||||
|         frame.can_dlc = 8; |  | ||||||
|         frame.data[2] = 0x0e; |  | ||||||
| 
 |  | ||||||
|         if (hexagram_can_if_write(can_if, &frame) < 0) { |  | ||||||
|             goto error_io; |  | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         /* Vehicle speed */ |         /* Vehicle speed */ | ||||||
|         memset(frame.data, '\0', sizeof(frame.data)); |         table[3].frame.data[1] = (speed_rps & 0xff00) >> 8; | ||||||
|         frame.can_id  = 0x5a0; |         table[3].frame.data[2] =  speed_rps & 0x00ff; | ||||||
|         frame.can_dlc = 8; |  | ||||||
|         frame.data[1] = (speed_rps & 0xff00) >> 8; |  | ||||||
|         frame.data[2] =  speed_rps & 0x00ff; |  | ||||||
| 
 |  | ||||||
|         if (hexagram_can_if_write(can_if, &frame) < 0) { |  | ||||||
|             goto error_io; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     hexagram_schedule_destroy(schedule); | ||||||
|     hexagram_can_if_close(can_if); |     hexagram_can_if_close(can_if); | ||||||
| 
 | 
 | ||||||
|     close(sock); |     close(sock); | ||||||
|  | @ -135,6 +129,9 @@ int hexagram_main_dash2can(int argc, char **argv) { | ||||||
|     return 0; |     return 0; | ||||||
| 
 | 
 | ||||||
| error_io: | error_io: | ||||||
|  |     hexagram_schedule_destroy(schedule); | ||||||
|  | 
 | ||||||
|  | error_schedule_create: | ||||||
|     hexagram_can_if_close(can_if); |     hexagram_can_if_close(can_if); | ||||||
| 
 | 
 | ||||||
| error_can_if_open: | error_can_if_open: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue