Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactoring de PLA #27

Closed
Ca-moes opened this issue Oct 23, 2020 · 0 comments · Fixed by #29
Closed

Refactoring de PLA #27

Ca-moes opened this issue Oct 23, 2020 · 0 comments · Fixed by #29
Labels
refactoring Código precisa de levar refactor

Comments

@Ca-moes
Copy link
Owner

Ca-moes commented Oct 23, 2020

Esboços de Ideia

De acordo com #17 e #18 estes ciclos são muito usados ao longo do pla e podem ser extraidos Para deixar o código mais limpo.

Também estive a pensar em usar algo como o que fizemos para LPOO relativo aos estados do PLA:

  • Ter só uma máquina de estados que será usada por todas as funções do pla (llopen() llwrite() llread() llclose()) -> Que é como temos agora, já que estamos a usar o mesmo enum para ambas as máquina de estados.
  • Ao processar um byte mandar uma struct como argumento com o byte e mais variaveis de info (Byte de Controlo esperado, Byte de Adress esperado),

Código repetido de state machine

Objetivo : Ter só uma máquina de estados personalizável que processe todo o tipo de tramas

Para ficar bem organizado seria criado um ficheiro só para conteúdo relativo á maquina de estados : state_machine.c
No inicio de cada função da pla dar setup á máquina de estados modificando a struct.
Ter uma struct global do estado da máquina de estados com

  • Control Byte Esperado
  • Address Byte Esperado
  • Enum com type de máquina de estados (Supervision, Read, Write)

No inicio de cada função do pla ficaria algo do gênero:

state_machine.mode = Supervision;
state_machine.control = C_UA;
state_machine.adress = A_ER;

e chama-se dentro dos ciclos de leitura a máquina com:

stateMachine(byte, null, null);  // para outros casos
// OU
stateMachine(byte, &buf, &size);  // para o caso de Read

Na função de state machine teremos as variaveis estáticas (que poderão ser globais) e um switch:

stateMachine(unsigned char byte, unsigned char **buf, int* bufsize){
   static unsigned char checkBuffer[2];
   static int frameIndex, wrongC;
   switch(state){  // Start, FLAG_RCV ...
      case Start:
         ProcessStart(Byte);
      break;
}

Cada Case apontará para um função que terá dentro um switch ou if..else para cada state_machine.mode:

ProcessStart(unsigned char byte){
  switch(state_machine.mode)
    case supervision:
    break;
    case read:
    break;
}

Possível que dê merdinha ao passar o pointer pointer da buffer da máquina de estados do read. Mas deve se arranjar solução

Código repetido dos ciclos de leitura

Objetivo : Ter duas funções, cada uma representa um dos issues (#17 e #18) para serem usadas nas funções do pla.

Daqui é possível criar duas funções, uma para cada issue e passar todos os argumentos necessários, se possivel dentro de uma struct se os argumentos forem comuns para simplificar.

@Ca-moes Ca-moes added the refactoring Código precisa de levar refactor label Oct 24, 2020
@Ca-moes Ca-moes added this to the 1º Trabalho Laboratorial milestone Oct 24, 2020
@Ca-moes Ca-moes linked a pull request Oct 24, 2020 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactoring Código precisa de levar refactor
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant