aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticsJogging.c
blob: 29d5e0b31829bacbbcf1ec064103b9182e811541 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
 * DiagnosticsJogging.c
 *
 *  Created on: 16 aug 2018
 *      Author: shlomo
 */
#include <DataDef.h>
#include "include.h"

#include <inc/hw_ints.h>
#include <Container.h>

#include "diagnostics.h"
#include "drivers/Motors/Motor.h"
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
#include "drivers/FPGA/FPGA.h"

#include  <PMR/Diagnostics/DispenserJoggingRequest.pb-c.h>
#include  <PMR/Diagnostics/DispenserJoggingResponse.pb-c.h>
#include  <PMR/Diagnostics/DispenserAbortJoggingRequest.pb-c.h>
#include  <PMR/Diagnostics/DispenserAbortJoggingResponse.pb-c.h>

#include  <PMR/Diagnostics/MotorJoggingRequest.pb-c.h>
#include  <PMR/Diagnostics/MotorJoggingResponse.pb-c.h>
#include  <PMR/Diagnostics/MotorAbortJoggingRequest.pb-c.h>
#include  <PMR/Diagnostics/MotorAbortJoggingResponse.pb-c.h>

#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
#include "drivers/Motors/Motor.h"
#include "drivers/Valves/Valve.h"

#include "StateMachines/Printing/PrintingSTM.h"

/*******************************************************
(MessageContainer* requestContainer) { uint32_t status = OK; MessageContainer responseContainer; MotorJoggingRequest* request = motor_jogging_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); MotorJoggingResponse response = MOTOR_JOGGING_RESPONSE__INIT; TimerMotors_t MotorId = (TimerMotors_t)request->motortype; bool direction; int speed = request->speed; if (speed == 0) speed = 150; if (MotorId <= NUM_OF_MOTORS) { if ((JobIsActive() == false)&&(isMotorConfigured(MotorId) == true)) { { switch (request->direction) { case MOTOR_DIRECTION__Forward: direction = MotorsCfg[MotorId].directionthreadwize; break; case MOTOR_DIRECTION__Backward: direction = 1-MotorsCfg[MotorId].directionthreadwize; break; } if(MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LID) { int Pos_Value = (direction == 1)?0:2; MotorGoTo(MotorId, Pos_Value ); } else { MotorSetDirection(MotorId,direction); MotorSetSpeed(MotorId, speed); } } } else { status = ERROR; } } else { status = ERROR; } responseContainer = createContainer(MESSAGE_TYPE__MotorJoggingResponse, requestContainer->token, false, &response, &motor_jogging_response__pack, &motor_jogging_response__get_packed_size); if (status!= OK) { responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID; responseContainer.errormessage = "JOb Active or incorrect parameters"; } responseContainer.continuous = false; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); return OK; } uint32_t MotorAbortJoggingRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; MotorAbortJoggingRequest* request = motor_abort_jogging_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); MotorAbortJoggingResponse response = MOTOR_ABORT_JOGGING_RESPONSE__INIT; TimerMotors_t MotorId = (TimerMotors_t)request->motortype; MotorStop(MotorId,Hard_Hiz); if (MotorId == HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM) MotorStop(MotorId,Hard_Stop ); responseContainer = createContainer(MESSAGE_TYPE__MotorAbortJoggingResponse, requestContainer->token, false, &response, &motor_abort_jogging_response__pack, &motor_abort_jogging_response__get_packed_size); responseContainer.continuous = false; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); return OK; } /******************************************************************************** * Dispenser Jogging ********************************************************************************/ uint32_t DispenserJoggingRequestFunc(MessageContainer* requestContainer) { uint32_t status = OK; MessageContainer responseContainer; DispenserJoggingRequest* request = dispenser_jogging_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); DispenserJoggingResponse response = DISPENSER_JOGGING_RESPONSE__INIT; TimerMotors_t MotorId = (request->index)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; int speed = request->speed; if (speed == 0) speed = 150; bool direction; if (MotorId <= NUM_OF_MOTORS) { // if ((JobIsActive() == false)&&(isMotorConfigured(MotorId) == true)) if (isMotorConfigured(MotorId) == true) { switch (request->direction) { case MOTOR_DIRECTION__Forward: Control3WayValvesWithCallback ((Valves_t) request->index, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer SysCtlDelay(180000); direction = MotorsCfg[MotorId].directionthreadwize; break; case MOTOR_DIRECTION__Backward: Control3WayValvesWithCallback ((Valves_t) request->index, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer SysCtlDelay(180000); direction = 1-MotorsCfg[MotorId].directionthreadwize; break; } MotorSetDirection(MotorId,direction); MotorSetSpeed(MotorId, speed); } else { status = ERROR; } } else { status = ERROR; } responseContainer = createContainer(MESSAGE_TYPE__DispenserJoggingResponse, requestContainer->token, false, &response, &dispenser_jogging_response__pack, &dispenser_jogging_response__get_packed_size); if (status!= OK) { responseContainer.error = ERROR_CODE__INVALID_PROCESS_ID; responseContainer.errormessage = "JOb Active or incorrect parameters"; } responseContainer.continuous = false; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); return OK; } uint32_t DispenserAbortJoggingRequestFunc(MessageContainer* requestContainer) { MessageContainer responseContainer; DispenserAbortJoggingRequest* request = dispenser_abort_jogging_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); DispenserAbortJoggingResponse response = DISPENSER_ABORT_JOGGING_RESPONSE__INIT; TimerMotors_t MotorId = (request->index)+HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1; MotorStop(MotorId,Hard_Hiz); Control3WayValvesWithCallback ((Valves_t) request->index, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer responseContainer = createContainer(MESSAGE_TYPE__DispenserAbortJoggingResponse, requestContainer->token, false, &response, &dispenser_abort_jogging_response__pack, &dispenser_abort_jogging_response__get_packed_size); responseContainer.continuous = false; uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); my_free(responseContainer.data.data); SendChars(container_buffer, container_size); return OK; }