diff --git a/.gitignore b/.gitignore index 9883651..73868f1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ */.idea *.pyc /logs -.env +.vs/* +.env \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 3691827..4380941 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "python.linting.pylintEnabled": false, "python.linting.pep8Enabled": true, - "python.linting.enabled": true, - "python.linting.pep8Path": "pycodestyle" + "python.linting.enabled": false, + "python.linting.pep8Path": "pycodestyle", } \ No newline at end of file diff --git a/Pipfile.lock b/Pipfile.lock index d11e574..615f985 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -53,11 +53,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8", - "sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3" + "sha256:9ff1b1c5a354142de080b8a4e9803e5d0d59283c93aed808617c787d16768375", + "sha256:b7143592e374e50584564794fcb8aaf00a23025f9db866627f89a21491847a8d" ], "markers": "python_version < '3.8'", - "version": "==0.19" + "version": "==0.20" }, "more-itertools": { "hashes": [ @@ -75,24 +75,24 @@ }, "numpy": { "hashes": [ - "sha256:03f2ebcbffcce2dec8860633b89a93e80c6a239d21a77ae8b241450dc21e8c35", - "sha256:078c8025da5ab9e8657edc9c2a1e9642e06e953bc7baa2e65c1aa9d9dfb7e98b", - "sha256:0fbfa98c5d5c3c6489cc1e852ec94395d51f35d9ebe70c6850e47f465038cdf4", - "sha256:1c841033f4fe6801648180c3033c45b3235a8bbd09bc7249010f99ea27bb6790", - "sha256:2c0984a01ddd0aeec89f0ce46ef21d64761048cd76c0074d0658c91f9131f154", - "sha256:4c166dcb0fff7cb3c0bbc682dfb5061852a2547efb6222e043a7932828c08fb5", - "sha256:8c2d98d0623bd63fb883b65256c00454d5f53127a5a7bcdaa8bdc582814e8cb4", - "sha256:8cb4b6ae45aad6d26712a1ce0a3f2556c5e1484867f9649e03496e45d6a5eba4", - "sha256:93050e73c446c82065b7410221b07682e475ac51887cd9368227a5d944afae80", - "sha256:a3f6b3024f8826d8b1490e6e2a9b99e841cd2c375791b1df62991bd8f4c00b89", - "sha256:bede70fd8699695363f39e86c1e869b2c8b74fb5ef135a67b9e1eeebff50322a", - "sha256:c304b2221f33489cd15a915237a84cdfe9420d7e4d4828c78a0820f9d990395c", - "sha256:f11331530f0eff69a758d62c2461cd98cdc2eae0147279d8fc86e0464eb7e8ca", - "sha256:fa5f2a8ef1e07ba258dc07d4dd246de23ef4ab920ae0f3fa2a1cc5e90f0f1888", - "sha256:fb6178b0488b0ce6a54bc4accbdf5225e937383586555604155d64773f6beb2b", - "sha256:fd5e830d4dc31658d61a6452cd3e842213594d8c15578cdae6829e36ad9c0930" - ], - "version": "==1.17.1" + "sha256:05dbfe72684cc14b92568de1bc1f41e5f62b00f714afc9adee42f6311738091f", + "sha256:0d82cb7271a577529d07bbb05cb58675f2deb09772175fab96dc8de025d8ac05", + "sha256:10132aa1fef99adc85a905d82e8497a580f83739837d7cbd234649f2e9b9dc58", + "sha256:12322df2e21f033a60c80319c25011194cd2a21294cc66fee0908aeae2c27832", + "sha256:16f19b3aa775dddc9814e02a46b8e6ae6a54ed8cf143962b4e53f0471dbd7b16", + "sha256:3d0b0989dd2d066db006158de7220802899a1e5c8cf622abe2d0bd158fd01c2c", + "sha256:438a3f0e7b681642898fd7993d38e2bf140a2d1eafaf3e89bb626db7f50db355", + "sha256:5fd214f482ab53f2cea57414c5fb3e58895b17df6e6f5bca5be6a0bb6aea23bb", + "sha256:73615d3edc84dd7c4aeb212fa3748fb83217e00d201875a47327f55363cef2df", + "sha256:7bd355ad7496f4ce1d235e9814ec81ee3d28308d591c067ce92e49f745ba2c2f", + "sha256:7d077f2976b8f3de08a0dcf5d72083f4af5411e8fddacd662aae27baa2601196", + "sha256:a4092682778dc48093e8bda8d26ee8360153e2047826f95a3f5eae09f0ae3abf", + "sha256:b458de8624c9f6034af492372eb2fee41a8e605f03f4732f43fc099e227858b2", + "sha256:e70fc8ff03a961f13363c2c95ef8285e0cf6a720f8271836f852cc0fa64e97c8", + "sha256:ee8e9d7cad5fe6dde50ede0d2e978d81eafeaa6233fb0b8719f60214cf226578", + "sha256:f4a4f6aba148858a5a5d546a99280f71f5ee6ec8182a7d195af1a914195b21a2" + ], + "version": "==1.17.2" }, "packaging": { "hashes": [ @@ -145,11 +145,11 @@ }, "pytest": { "hashes": [ - "sha256:95b1f6db806e5b1b5b443efeb58984c24945508f93a866c1719e1a507a957d7c", - "sha256:c3d5020755f70c82eceda3feaf556af9a341334414a8eca521a18f463bcead88" + "sha256:95d13143cc14174ca1a01ec68e84d76ba5d9d493ac02716fd9706c949a505210", + "sha256:b78fe2881323bd44fd9bd76e5317173d4316577e7b1cddebae9136a4495ec865" ], "index": "pypi", - "version": "==5.1.1" + "version": "==5.1.2" }, "python-dateutil": { "hashes": [ diff --git a/can_mgmt/CANID.h b/can_mgmt/CANID.h index 44f455d..eabb40a 100644 --- a/can_mgmt/CANID.h +++ b/can_mgmt/CANID.h @@ -1,4 +1,4 @@ -/* Generated on 2019-03-02 12:35:46.467557 +/* Generated on 2019-09-07 14:44:25.169641 * This file contains all of the constants that are * being used on the CAN bus. * @@ -9,17 +9,27 @@ #ifndef CANID_H #define CANID_H +#define RAW_THROTTLE_CAN_ID 0x500 +#define RAW_THROTTLE_ONE_START_BIT 0 +#define RAW_THROTTLE_ONE_END_BIT 7 +#define RAW_THROTTLE_TWO_START_BIT 8 +#define RAW_THROTTLE_TWO_END_BIT 15 +#define BRAKE_VALUE_ONE_START_BIT 16 +#define BRAKE_VALUE_ONE_END_BIT 23 +#define BRAKE_VALUE_TWO_START_BIT 24 +#define BRAKE_VALUE_TWO_END_BIT 31 + #define WHEEL_SPEED_FRONT_CAN_ID 0x700 #define WHEEL_SPEED_FRONT_L_START_BIT 0 -#define WHEEL_SPEED_FRONT_L_END_BIT 15 -#define WHEEL_SPEED_FRONT_R_START_BIT 16 -#define WHEEL_SPEED_FRONT_R_END_BIT 31 +#define WHEEL_SPEED_FRONT_L_END_BIT 31 +#define WHEEL_SPEED_FRONT_R_START_BIT 32 +#define WHEEL_SPEED_FRONT_R_END_BIT 63 #define WHEEL_SPEED_REAR_CAN_ID 0x701 #define WHEEL_SPEED_REAR_L_START_BIT 0 -#define WHEEL_SPEED_REAR_L_END_BIT 15 -#define WHEEL_SPEED_REAR_R_START_BIT 16 -#define WHEEL_SPEED_REAR_R_END_BIT 31 +#define WHEEL_SPEED_REAR_L_END_BIT 31 +#define WHEEL_SPEED_REAR_R_START_BIT 32 +#define WHEEL_SPEED_REAR_R_END_BIT 63 #define TIRE_TEMP_FRONT_CAN_ID 0x710 #define TIRE_TEMP_FRONT_R_START_BIT 0 @@ -36,12 +46,14 @@ #define COOLANT_CAN_ID 0x720 #define COOLANT_MOTOR_START_BIT 0 #define COOLANT_MOTOR_END_BIT 15 -#define COOLANT_FLOW_START_BIT 16 +#define COOLANT_RAD_START_BIT 16 +#define COOLANT_RAD_END_BIT 31 +#define COOLANT_MC_START_BIT 32 +#define COOLANT_MC_END_BIT 47 + +#define COOLANT_CAN_ID 0x721 +#define COOLANT_FLOW_START_BIT 0 #define COOLANT_FLOW_END_BIT 31 -#define COOLANT_RAD_START_BIT 32 -#define COOLANT_RAD_END_BIT 47 -#define COOLANT_MC_START_BIT 48 -#define COOLANT_MC_END_BIT 63 #define SHOCK_POT_FRONT_CAN_ID 0x730 #define SHOCK_POT_FRONT_L_START_BIT 0 @@ -61,65 +73,65 @@ #define DROP_LINK_RIGHT_START_BIT 16 #define DROP_LINK_RIGHT_END_BIT 31 -#define STEER_ROD_FRONT_CAN_ID 0x750 -#define STEER_ROD_FRONT_L_START_BIT 0 -#define STEER_ROD_FRONT_L_END_BIT 15 -#define PUSHROD_FRONT_R_START_BIT 16 -#define PUSHROD_FRONT_R_END_BIT 31 +#define PUSHROD_FRONT_CAN_ID 0x750 +#define PUSHROD_FRONT_R_START_BIT 0 +#define PUSHROD_FRONT_R_END_BIT 15 +#define STEER_ROD_FRONT_R_START_BIT 16 +#define STEER_ROD_FRONT_R_END_BIT 31 #define PUSHROD_FRONT_L_START_BIT 32 #define PUSHROD_FRONT_L_END_BIT 47 -#define STEER_ROD_FRONT_R_START_BIT 48 -#define STEER_ROD_FRONT_R_END_BIT 63 +#define STEER_ROD_FRONT_L_START_BIT 48 +#define STEER_ROD_FRONT_L_END_BIT 63 #define PUSHROD_REAR_CAN_ID 0x760 #define PUSHROD_REAR_R_START_BIT 0 #define PUSHROD_REAR_R_END_BIT 15 -#define TIEROD_REAR_L_START_BIT 16 -#define TIEROD_REAR_L_END_BIT 31 -#define TIEROD_REAR_R_START_BIT 32 -#define TIEROD_REAR_R_END_BIT 47 -#define PUSHROD_REAR_L_START_BIT 48 -#define PUSHROD_REAR_L_END_BIT 63 +#define TIEROD_REAR_R_START_BIT 16 +#define TIEROD_REAR_R_END_BIT 31 +#define PUSHROD_REAR_L_START_BIT 32 +#define PUSHROD_REAR_L_END_BIT 47 +#define TIEROD_REAR_L_START_BIT 48 +#define TIEROD_REAR_L_END_BIT 63 #define LCA_FRONT_CAN_ID 0x770 -#define LCA_FRONT_LB_START_BIT 0 -#define LCA_FRONT_LB_END_BIT 15 -#define LCA_FRONT_RF_START_BIT 16 -#define LCA_FRONT_RF_END_BIT 31 -#define LCA_FRONT_LF_START_BIT 32 -#define LCA_FRONT_LF_END_BIT 47 +#define LCA_FRONT_LF_START_BIT 0 +#define LCA_FRONT_LF_END_BIT 15 +#define LCA_FRONT_LB_START_BIT 16 +#define LCA_FRONT_LB_END_BIT 31 +#define LCA_FRONT_RF_START_BIT 32 +#define LCA_FRONT_RF_END_BIT 47 #define LCA_FRONT_RB_START_BIT 48 #define LCA_FRONT_RB_END_BIT 63 #define LCA_REAR_CAN_ID 0x780 #define LCA_REAR_LF_START_BIT 0 #define LCA_REAR_LF_END_BIT 15 -#define LCA_REAR_RF_START_BIT 16 -#define LCA_REAR_RF_END_BIT 31 -#define LCA_REAR_LB_START_BIT 32 -#define LCA_REAR_LB_END_BIT 47 +#define LCA_REAR_LB_START_BIT 16 +#define LCA_REAR_LB_END_BIT 31 +#define LCA_REAR_RF_START_BIT 32 +#define LCA_REAR_RF_END_BIT 47 #define LCA_REAR_RB_START_BIT 48 #define LCA_REAR_RB_END_BIT 63 #define UCA_FRONT_CAN_ID 0x790 -#define UCA_FRONT_RB_START_BIT 0 -#define UCA_FRONT_RB_END_BIT 15 +#define UCA_FRONT_LF_START_BIT 0 +#define UCA_FRONT_LF_END_BIT 15 #define UCA_FRONT_LB_START_BIT 16 #define UCA_FRONT_LB_END_BIT 31 #define UCA_FRONT_RF_START_BIT 32 #define UCA_FRONT_RF_END_BIT 47 -#define UCA_FRONT_LF_START_BIT 48 -#define UCA_FRONT_LF_END_BIT 63 +#define UCA_FRONT_RB_START_BIT 48 +#define UCA_FRONT_RB_END_BIT 63 #define UCA_REAR_CAN_ID 0x7a0 #define UCA_REAR_LF_START_BIT 0 #define UCA_REAR_LF_END_BIT 15 -#define UCA_REAR_RB_START_BIT 16 -#define UCA_REAR_RB_END_BIT 31 -#define UCA_REAR_LB_START_BIT 32 -#define UCA_REAR_LB_END_BIT 47 -#define UCA_REAR_RF_START_BIT 48 -#define UCA_REAR_RF_END_BIT 63 +#define UCA_REAR_LB_START_BIT 16 +#define UCA_REAR_LB_END_BIT 31 +#define UCA_REAR_RF_START_BIT 32 +#define UCA_REAR_RF_END_BIT 47 +#define UCA_REAR_RB_START_BIT 48 +#define UCA_REAR_RB_END_BIT 63 #define FRONT_TORSIONAL_CAN_ID 0x7b0 #define FRONT_TORSIONAL_ARB_START_BIT 0 @@ -135,27 +147,46 @@ #define STEERING_ANGLE_START_BIT 16 #define STEERING_ANGLE_END_BIT 31 -#define IMU_CAN_ID 0x7d0 -#define IMU_TYPE_START_BIT 0 -#define IMU_TYPE_END_BIT 7 -#define IMU_DATA_START_BIT 8 -#define IMU_DATA_END_BIT 23 -#define IMU_TIME_START_BIT 24 -#define IMU_TIME_END_BIT 47 - -#define FLAG_WHEEL_SPEED_BIT 7 -#define FLAG_TIRE_TEMP_BIT 6 -#define FLAG_COOLANT_TEMP_BIT 5 -#define FLAG_COOLANT_FLOW_BIT 4 -#define FLAG_SHOCK_POTS_BIT 3 -#define FLAG_ARB_DROPLINKS_BIT 2 -#define FLAG_PUSH_RODS_BIT 1 -#define FLAG_TIRE_RODS_BIT 0 -#define FLAG_LCA_BIT 15 -#define FLAG_UCA_BIT 14 -#define FLAG_ARB_TORSIONAL_BIT 13 -#define FLAG_STEERING_ANGLE_BIT 12 -#define FLAG_STEERING_TORSIONAL_BIT 11 -#define FLAG_ACCELEROMETER_BIT 10 -#define FLAG_GYROSCOPE_BIT 9 +#define IMU_TYPE_CAN_ID 0x7d0 +#define IMU_TYPE_AXIS_START_BIT 0 +#define IMU_TYPE_AXIS_END_BIT 7 +#define IMU_X_AXIS_START_BIT 8 +#define IMU_X_AXIS_END_BIT 23 +#define IMU_Y_AXIS_START_BIT 24 +#define IMU_Y_AXIS_END_BIT 39 +#define IMU_Z_AXIS_START_BIT 40 +#define IMU_Z_AXIS_END_BIT 55 +#define IMU_RESOLUTION_START_BIT 56 +#define IMU_RESOLUTION_END_BIT 63 + +#define L_WHEEL_SPD_CAN_ID 0x7f0 +#define L_WHEEL_SPD_ERROR_START_BIT 0 +#define L_WHEEL_SPD_ERROR_END_BIT 7 +#define R_WHEEL_SPEED_ERROR_START_BIT 8 +#define R_WHEEL_SPEED_ERROR_END_BIT 15 +#define MAX11614_ERROR_START_BIT 16 +#define MAX11614_ERROR_END_BIT 23 +#define MAX11616_ERROR_START_BIT 24 +#define MAX11616_ERROR_END_BIT 31 + +#define L_WHEEL_SPD_CAN_ID 0x7f1 +#define L_WHEEL_SPD_ERROR_START_BIT 0 +#define L_WHEEL_SPD_ERROR_END_BIT 7 +#define R_WHEEL_SPEED_ERROR_START_BIT 8 +#define R_WHEEL_SPEED_ERROR_END_BIT 15 +#define MAX11614_ERROR_START_BIT 16 +#define MAX11614_ERROR_END_BIT 23 +#define MAX11616_ERROR_START_BIT 24 +#define MAX11616_ERROR_END_BIT 31 +#define COOL_SPD_ERROR_START_BIT 32 +#define COOL_SPD_ERROR_END_BIT 39 + +#define FLAG_SPEED_CAN_MASK_BIT 7 +#define FLAG_UCA_CAN_MASK _BIT 6 +#define FLAG_LCA_CAN_MASK _BIT 5 +#define FLAG_SHOCK_CAN_MASK _BIT 4 +#define FLAG_ARB_TORS_CAN_MASK _BIT 3 +#define FLAG_PUSH_ROD_CAN_MASK _BIT 2 +#define FLAG_COOLANT_CAN_MASK _BIT 1 +#define FLAG_DROP_LINK_CAN_MASK_BIT 0 #endif /* CANID_H */ \ No newline at end of file diff --git a/can_mgmt/SensorData.csv b/can_mgmt/SensorData.csv deleted file mode 100644 index ae663f0..0000000 --- a/can_mgmt/SensorData.csv +++ /dev/null @@ -1 +0,0 @@ -timestamp,id,data diff --git a/can_mgmt/SensorDict.csv b/can_mgmt/SensorDict.csv index 8df926f..71ddd67 100644 --- a/can_mgmt/SensorDict.csv +++ b/can_mgmt/SensorDict.csv @@ -1,65 +1,73 @@ id,MSB,LSB,name -0x700,15,0,WHEEL_SPEED_FRONT_L -0x700,31,16,WHEEL_SPEED_FRONT_R -0x701,15,0,WHEEL_SPEED_REAR_L -0x701,31,16,WHEEL_SPEED_REAR_R +0x500,7,0,RAW_THROTTLE_ONE +0x500,15,8,RAW_THROTTLE_TWO +0x500,23,16,BRAKE_VALUE_ONE +0x500,31,24,BRAKE_VALUE_TWO +0x700,31,0,WHEEL_SPEED_FRONT_L +0x700,63,32,WHEEL_SPEED_FRONT_R +0x701,31,0,WHEEL_SPEED_REAR_L +0x701,63,32,WHEEL_SPEED_REAR_R 0x710,15,0,TIRE_TEMP_FRONT_R 0x710,31,16,TIRE_TEMP_FRONT_L 0x711,15,0,TIRE_TEMP_REAR_R 0x711,31,16,TIRE_TEMP_REAR_L 0x720,15,0,COOLANT_MOTOR -0x720,31,16,COOLANT_FLOW -0x720,47,32,COOLANT_RAD -0x720,63,48,COOLANT_MC +0x720,31,16,COOLANT_RAD +0x720,47,32,COOLANT_MC +0x721,31,0,COOLANT_FLOW 0x730,15,0,SHOCK_POT_FRONT_L 0x730,31,16,SHOCK_POT_FRONT_R 0x731,15,0,SHOCK_POT_REAR_R 0x731,31,16,SHOCK_POT_REAR_L 0x740,15,0,DROP_LINK_LEFT 0x740,31,16,DROP_LINK_RIGHT -0x750,15,0,STEER_ROD_FRONT_L -0x750,31,16,PUSHROD_FRONT_R +0x750,15,0,PUSHROD_FRONT_R +0x750,31,16,STEER_ROD_FRONT_R 0x750,47,32,PUSHROD_FRONT_L -0x750,63,48,STEER_ROD_FRONT_R +0x750,63,48,STEER_ROD_FRONT_L 0x760,15,0,PUSHROD_REAR_R -0x760,31,16,TIEROD_REAR_L -0x760,47,32,TIEROD_REAR_R -0x760,63,48,PUSHROD_REAR_L -0x770,15,0,LCA_FRONT_LB -0x770,31,16,LCA_FRONT_RF -0x770,47,32,LCA_FRONT_LF +0x760,31,16,TIEROD_REAR_R +0x760,47,32,PUSHROD_REAR_L +0x760,63,48,TIEROD_REAR_L +0x770,15,0,LCA_FRONT_LF +0x770,31,16,LCA_FRONT_LB +0x770,47,32,LCA_FRONT_RF 0x770,63,48,LCA_FRONT_RB 0x780,15,0,LCA_REAR_LF -0x780,31,16,LCA_REAR_RF -0x780,47,32,LCA_REAR_LB +0x780,31,16,LCA_REAR_LB +0x780,47,32,LCA_REAR_RF 0x780,63,48,LCA_REAR_RB -0x790,15,0,UCA_FRONT_RB +0x790,15,0,UCA_FRONT_LF 0x790,31,16,UCA_FRONT_LB 0x790,47,32,UCA_FRONT_RF -0x790,63,48,UCA_FRONT_LF +0x790,63,48,UCA_FRONT_RB 0x7a0,15,0,UCA_REAR_LF -0x7a0,31,16,UCA_REAR_RB -0x7a0,47,32,UCA_REAR_LB -0x7a0,63,48,UCA_REAR_RF +0x7a0,31,16,UCA_REAR_LB +0x7a0,47,32,UCA_REAR_RF +0x7a0,63,48,UCA_REAR_RB 0x7b0,15,0,FRONT_TORSIONAL_ARB 0x7b1,15,0,REAR_TORSIONAL_ARB 0x7c0,15,0,STEERING_TORSION 0x7c0,31,16,STEERING_ANGLE -0x7d0,7,0,IMU_TYPE -0x7d0,23,8,IMU_DATA -0x7d0,47,24,IMU_TIME -0x7E0,7,7,FLAG_WHEEL_SPEED -0x7E0,6,6,FLAG_TIRE_TEMP -0x7E0,5,5,FLAG_COOLANT_TEMP -0x7E0,4,4,FLAG_COOLANT_FLOW -0x7E0,3,3,FLAG_SHOCK_POTS -0x7E0,2,2,FLAG_ARB_DROPLINKS -0x7E0,1,1,FLAG_PUSH_RODS -0x7E0,0,0,FLAG_TIRE_RODS -0x7E0,15,15,FLAG_LCA -0x7E0,14,14,FLAG_UCA -0x7E0,13,13,FLAG_ARB_TORSIONAL -0x7E0,12,12,FLAG_STEERING_ANGLE -0x7E0,11,11,FLAG_STEERING_TORSIONAL -0x7E0,10,10,FLAG_ACCELEROMETER -0x7E0,9,9,FLAG_GYROSCOPE +0x7d0,7,0,IMU_TYPE_AXIS +0x7d0,23,8,IMU_X_AXIS +0x7d0,39,24,IMU_Y_AXIS +0x7d0,55,40,IMU_Z_AXIS +0x7d0,63,56,IMU_RESOLUTION +0x7f0,7,0,L_WHEEL_SPD_ERROR +0x7f0,15,8,R_WHEEL_SPEED_ERROR +0x7f0,23,16,MAX11614_ERROR +0x7f0,31,24,MAX11616_ERROR +0x7f1,7,0,L_WHEEL_SPD_ERROR +0x7f1,15,8,R_WHEEL_SPEED_ERROR +0x7f1,23,16,MAX11614_ERROR +0x7f1,31,24,MAX11616_ERROR +0x7f1,39,32,COOL_SPD_ERROR +0x7e0,7,7,FLAG_SPEED_CAN_MASK +0x7e0,6,6,FLAG_UCA_CAN_MASK +0x7e0,5,5,FLAG_LCA_CAN_MASK +0x7e0,4,4,FLAG_SHOCK_CAN_MASK +0x7e0,3,3,FLAG_ARB_TORS_CAN_MASK +0x7e0,2,2,FLAG_PUSH_ROD_CAN_MASK +0x7e0,1,1,FLAG_COOLANT_CAN_MASK +0x7e0,0,0,FLAG_DROP_LINK_CAN_MASK diff --git a/can_mgmt/SensorDict.py b/can_mgmt/SensorDict.py index ff980fd..1417fa3 100644 --- a/can_mgmt/SensorDict.py +++ b/can_mgmt/SensorDict.py @@ -1,39 +1,12 @@ -import csv - +import time # Import sensor data from CSF file. This file contains information # about each individual sensor on the car as well as its can ID # and data offset used to parse the specific sensor's data class CANParser(): def __init__(self): - self.sensorLib = self.create_lib() - - self.saveFile = csv.DictWriter(open('SensorData.csv', "a"), - fieldnames=["timestamp", "id", "data"], - extrasaction="ignore") - - # Parses CSV file of individual sensors to a dict that is easily - # navigitable for parsing incoming data. - # list format: - # id : {'name1' : [msb, lsb], 'name2' : [msb, lsb], ...} - def create_lib(self): - sensorLibraryFile = csv.reader(open('SensorDict.csv')) - sensorIdList = {} - - for row in sensorLibraryFile: - if not row or row[0] == 'id': - continue - - canID = int(row[0], 16) - msb = int(row[1]) - lsb = int(row[2]) - friendlyName = row[3].strip() - - if canID not in sensorIdList: - sensorIdList[canID] = {} - sensorIdList[canID][friendlyName] = [msb, lsb] + database = Database() - return sensorIdList # Takes in a single data point with the format: # {"timestamp" : "XXX", "id" : "XXX", "data" : "XXXX"} diff --git a/can_mgmt/update-SensorDict.py b/can_mgmt/update-SensorDict.py index df3c807..9e3e20e 100644 --- a/can_mgmt/update-SensorDict.py +++ b/can_mgmt/update-SensorDict.py @@ -3,8 +3,8 @@ import datetime as dt SPREADSHEET_FILE_ID = "195Y2cf9C2mrA6QCLuLJv3NHsCqTLi-3Wd07q4T5rXuM" -OUTPUT_CSV_FILE = "SensorDict.csv" -OUTPUT_HEADER_FILE = "CANID.h" +OUTPUT_CSV_FILE = "can_mgmt/SensorDict.csv" +OUTPUT_HEADER_FILE = "can_mgmt/CANID.h" # Rows before the header are skipped. # The row after the header will also be skipped because it is an example row. HEADER_ROW = 5 @@ -53,9 +53,9 @@ for flag_i, flag in enumerate(flags_list): flag_paren_start = flag.find("(") flag_bit = str(int(flag[flag_paren_start + 1]) + - 8 * int(column[4])) + 8 * int(column[4])) flag = flag[0:flag_paren_start - 1] - flags_df = flags_df.append({"id": index, "MSB": flag_bit, + flags_df = flags_df.append({"id": index.upper(), "MSB": flag_bit, "LSB": flag_bit, "name": flag}, ignore_index=True) continue diff --git a/database/database.py b/database/database.py deleted file mode 100644 index 169e124..0000000 --- a/database/database.py +++ /dev/null @@ -1,31 +0,0 @@ -import os -import mysql.connector -from dotenv import load_dotenv -load_dotenv() - - -class Database: - def __init__(self): - self.host = os.getenv('DATABASE_HOST') - self.user = os.getenv('DATABASE_USER') - self.password = os.getenv('DATABASE_PASSWORD') - self._connection = None - - def connect(self): - db = mysql.connector.connect( - host=self.host, - user=self.user, - password=self.password - ) - - # Set a connection so that a new connection doesn't - # have to be created for every new test - self._connection = db - - return db - - def get_cursor(self): - if self._connection is None: - self.connect() - - return self._connection.cursor() diff --git a/database_mgmt/create_database.py b/database_mgmt/create_database.py new file mode 100644 index 0000000..02e6b6d --- /dev/null +++ b/database_mgmt/create_database.py @@ -0,0 +1,21 @@ +import os +import pandas as pd +from database import Database + +sensor_dict = pd.read_csv('can_mgmt/SensorDict.csv', header=0, dtype='str') + +db = Database() +cursor = db.get_cursor() +cursor.execute('CREATE DATABASE sensors') +cursor.execute('USE sensors') + +current_id = '#####' +for index, row in sensor_dict.iterrows(): + if row['id'][3] == current_id[3]: + db.add_column(current_id[1:4], row['name'], 'INT(16) NULL') + else: + current_id = row['id'] + # Tables can't start with a 0x (no starting integer), so start with x + table_name = current_id[1:4] + db.create_table(table_name) + db.add_column(table_name, row['name'], 'INT(16) NULL') diff --git a/database_mgmt/database.py b/database_mgmt/database.py new file mode 100644 index 0000000..1b8f063 --- /dev/null +++ b/database_mgmt/database.py @@ -0,0 +1,49 @@ +import os +import mysql.connector +from dotenv import load_dotenv +load_dotenv() + + +class Database: + _host = os.getenv('DATABASE_HOST') + _user = os.getenv('DATABASE_USER') + _password = os.getenv('DATABASE_PASSWORD') + _connection = None + + def connect(self): + db = mysql.connector.connect( + host=self._host, + user=self._user, + password=self._password + ) + + # Set a connection so that a new connection doesn't + # have to be created for every new test + self._connection = db + + return db + + def require_connection(func): + def wrapper(*args): + self = args[0] + if self._connection is None: + self.connect() + return func(*args) + return wrapper + + @require_connection + def get_cursor(self): + return self._connection.cursor() + + @require_connection + def create_table(self, table): + cursor = self.get_cursor() + create_query = f'CREATE TABLE {table} (timestamp DATETIME(3) NOT NULL)' + cursor.execute(create_query) + + + @require_connection + def add_column(self, table, column, data_type): + cursor = self.get_cursor() + alter_query = f'ALTER TABLE {table} ADD COLUMN {column} {data_type}' + cursor.execute(alter_query) diff --git a/database_mgmt/database_debug_functions.py b/database_mgmt/database_debug_functions.py new file mode 100644 index 0000000..174ed4c --- /dev/null +++ b/database_mgmt/database_debug_functions.py @@ -0,0 +1,10 @@ +import os +import sys +from database import Database + +setting = sys.argv[1] + +if setting == 'wipe': + db = Database() + cursor = db.get_cursor() + cursor.execute("DROP DATABASE sensors") diff --git a/tests/pathmagic.py b/tests/pathmagic.py index f109807..4f5683b 100644 --- a/tests/pathmagic.py +++ b/tests/pathmagic.py @@ -4,4 +4,4 @@ import sys path = os.path.dirname(os.path.abspath(__file__)) -sys.path.append(path + '/../database/') +sys.path.append(path + '/../database_mgmt/') diff --git a/tests/test_database.py b/tests/test_database.py index f504ed8..99cca59 100644 --- a/tests/test_database.py +++ b/tests/test_database.py @@ -17,3 +17,10 @@ def test_connection(self): def test_cursor(self): db.get_cursor() + + def test_creation(self): + import create_database + cursor = db.get_cursor() + cursor.execute('use sensors') + test = cursor.execute('describe x70') + print(test)